Browse Source

同步递归增加的级差字段

lcl 6 months ago
parent
commit
30e037cea5

+ 1 - 0
Controllers/Admin/Pri/PriLoopSetController.cs

@@ -13,6 +13,7 @@ namespace Controllers.Admin
     /// <summary>
     /// PriLoopSet)Controller
     /// </summary>
+    // [Route("${Router}$")]
     // [ApiExplorerSettings(GroupName = "PriLoopSet")]
     public class PriLoopSetController : BaseController
     {

+ 7 - 0
Model/Database/PriLoopSet.cs

@@ -94,6 +94,13 @@ namespace Model
         public string? tableEnName { get; set; }
 
 
+        /// <summary>
+        /// 级差
+        /// </summary>
+        [SugarColumn(ColumnDescription = "级差", ColumnName = "level_diff_flag")]
+        public bool levelDiffFlag { get; set; }
+
+
 
     }
 }

+ 0 - 6
Model/Vo/Admin/GetPriLoopSetListVo.cs

@@ -37,12 +37,6 @@ namespace Vo.Admin
         public string sonField { get; set; }
 
 
-        /// <summary>
-        /// 查询表
-        /// </summary>
-        public string tableEnName { get; set; }
-
-
 
     }
 }

+ 6 - 0
Model/Vo/Admin/GetPriLoopSetQueryVo.cs

@@ -43,6 +43,12 @@ namespace Vo.Admin
         public string tableEnName { get; set; }
 
 
+        /// <summary>
+        /// 级差
+        /// </summary>
+        public bool levelDiffFlag { get; set; }
+
+
 
     }
 }

+ 120 - 1
Util/PrizeDo.cs

@@ -314,6 +314,7 @@ namespace Util
                 if(recursionFlag)
                 {
                     var loopSetService = App.GetService<IPriLoopSetService>();
+                    var recursionStartTableService = App.GetService<IPriRecursionStartTableService>();
                     var loopSet = loopSetService.GetFirst(m => m.listId == sub.id) ?? new PriLoopSet();
                     var tableEnName = loopSet.tableEnName; //递归查询表
                     var parentField = loopSet.parentField; //父字段
@@ -322,7 +323,10 @@ namespace Util
                     string objId = prizeObjectId;
                     while(!string.IsNullOrEmpty(objId) && objId != "0")
                     {
-                        prizeSendDo(projectId, sub, objId, content);
+                        if(loopCondition(projectId, objId, content))
+                        {
+                            prizeSendDo(projectId, sub, objId, content);
+                        }
                         var parent = db.SqlQueryable<Dictionary<string, object>>("select " + parentField + " from " + tableEnName + " where " + sonField + "=" + objId).First();
                         if(parent != null)
                         {
@@ -492,6 +496,121 @@ namespace Util
             }
         }
 
+        //递归条件判断
+        public static bool loopCondition(int projectId, string objId, string content)
+        {
+            Dictionary<string, object> dic = new Dictionary<string, object>();
+            var queryTableService = App.GetService<IPriRecursionStartTableService>();
+            var queryFieldService = App.GetService<IPriRecursionStartFieldService>();
+            //查询表
+            var queryTables = queryTableService.GetList(m => m.projectId == projectId);
+            foreach(var queryTable in queryTables)
+            {
+                //查询返回字段
+                string fields = "1";
+
+                //查询匹配条件
+                string condi = "";
+                var queryFields = queryFieldService.GetList(m => m.objectTableId == queryTable.id);
+                foreach(var queryField in queryFields)
+                {
+                    string fieldEnName = queryField.fieldEnName;
+                    string fieldQueryKind = queryField.fieldQueryKind;
+                    string fieldQueryModel = queryField.fieldQueryModel;
+                    string fieldQueryValue = queryField.fieldQueryValue;
+                    fieldQueryValue = fieldQueryValue.Replace("#{loop_obj}#", objId);
+                    string fieldQueryValueType = queryField.fieldQueryValueType;
+                    if(fieldQueryKind == "1") //模糊匹配
+                    {
+                        condi += " and " + fieldEnName + " like ";
+                        if(fieldQueryModel == "request_param")
+                        {
+                            Dictionary<string, string> req = getRequestParams(content);
+                            condi += "'%" + req[fieldQueryValue] + "%'";
+                        }
+                        else if(fieldQueryModel == "fixed_value")
+                        {
+                            condi += "'%" + GetExpressionVal(fieldQueryValue) + "%'";
+                        }
+                    }
+                    else if(fieldQueryKind == "2") //精确匹配
+                    {
+                        condi += " and " + fieldEnName + "=";
+                        string val = "";
+                        if(fieldQueryModel == "request_param")
+                        {
+                            Dictionary<string, string> req = getRequestParams(content);
+                            val = req[fieldQueryValue];
+                        }
+                        else if(fieldQueryModel == "fixed_value")
+                        {
+                            val = GetExpressionVal(fieldQueryValue);
+                        }
+                        if(fieldQueryValueType == "text")
+                        {
+                            val = "'" + val + "'";
+                        }
+                        condi += val;
+                    }
+                    else if(fieldQueryKind == "3") //范围匹配
+                    {
+                        string[] val = fieldQueryValue.Split(':');
+                        if(fieldQueryModel == "request_param")
+                        {
+                            Dictionary<string, string> req = getRequestParams(content);
+                            if(fieldQueryValueType == "number")
+                            {
+                                if(!string.IsNullOrEmpty(req[val[0]])) condi += " and " + fieldEnName + ">=" + req[val[0]];
+                                if(!string.IsNullOrEmpty(req[val[1]])) condi += " and " + fieldEnName + "<=" + req[val[1]];
+                            }
+                            else
+                            {
+                                if(!string.IsNullOrEmpty(req[val[0]])) condi += " and " + fieldEnName + ">='" + req[val[0]] + "'";
+                                if(!string.IsNullOrEmpty(req[val[1]])) condi += " and " + fieldEnName + "<='" + req[val[1]] + "'";
+                            }
+                        }
+                        else if(fieldQueryModel == "fixed_value")
+                        {
+                            if(fieldQueryValueType == "number")
+                            {
+                                if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">=" + val[0];
+                                if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<=" + val[1];
+                            }
+                            else
+                            {
+                                if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">='" + GetExpressionVal(val[0]) + "'";
+                                if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<='" + GetExpressionVal(val[1]) + "'";
+                            }
+                        }
+                    }
+                    else if(fieldQueryKind == "4") //取反匹配
+                    {
+                        condi += " and " + fieldEnName + "!=";
+                        string val = "";
+                        if(fieldQueryModel == "request_param")
+                        {
+                            Dictionary<string, string> req = getRequestParams(content);
+                            val = req[fieldQueryValue];
+                        }
+                        else if(fieldQueryModel == "fixed_value")
+                        {
+                            val = GetExpressionVal(fieldQueryValue);
+                        }
+                        if(fieldQueryValueType == "text")
+                        {
+                            val = "'" + val + "'";
+                        }
+                        condi += val;
+                    }
+                }
+
+                var db = initDb(projectId);
+                var item = db.SqlQueryable<Dictionary<string, object>>("select " + fields + " " + queryTable.tableEnName + "-" + fields + " from " + queryTable.tableEnName + " where 1=1" + condi).First();
+                if(item == null) return false;
+            }
+            return true;
+        }
+
         //奖励入库
         public static void prizeToDatabase(int projectId, string content)
         {