lcl 3 ヶ月 前
コミット
cdf9151f5c
3 ファイル変更61 行追加14 行削除
  1. 1 1
      Model/Database/PriQueryField.cs
  2. 1 1
      Program.cs
  3. 59 12
      Util/PrizeDo.cs

+ 1 - 1
Model/Database/PriQueryField.cs

@@ -83,7 +83,7 @@ namespace Model
         /// <summary>
         /// 匹配值
         /// </summary>
-        [SugarColumn(ColumnDescription = "匹配值", Length = 50, ColumnName = "field_query_value")]
+        [SugarColumn(ColumnDescription = "匹配值", Length = 500, ColumnName = "field_query_value")]
         public string? fieldQueryValue { get; set; }
 
 

+ 1 - 1
Program.cs

@@ -122,7 +122,7 @@ app.MapControllers();
 
 app.Urls.Add("http://*:5802");
 
-// PrizeDo.sendPrize("QUEUE_KXS_MACHINE_PRIZE_CONFIG_DIVISION", "{\"pos_sn\":\"00003102722406215501857\"}");
+// PrizeDo.sendPrize("QUEUE_KXS_MACHINE_PRIZE_CONFIG_DIVISION", "{\"brand_id\":12,\"pos_sn\":\"00005702880118407887\",\"user_id\":192332}");
 // PrizeDo.sendPrize(1, "{\"PosSn\":\"00003102722406215502730\"}");
 // PrizeDo.sendPrize(4, "{\"PosSn\":\"CS00000000015859\"}");
 // PrizeDo.sendPrize(5, "{\"PosSn\":\"00000302T1NL90664172\"}");

+ 59 - 12
Util/PrizeDo.cs

@@ -99,13 +99,15 @@ namespace Util
                 Dictionary<string, string> fieldDic = new();
                 if(string.IsNullOrEmpty(queryTable.customSql))
                 {
+                    string tableEnName = queryTable.tableEnName;
+                    if(tableEnName.Contains("#{")) tableEnName = MatchExpressionVal(tableEnName);
                     //查询返回字段
                     string fields = "";
                     var returnFields = returnFieldService.GetList(m => m.queryTableId == queryTable.id);
                     foreach(var returnField in returnFields)
                     {
                         string aliasName = returnField.fieldAliasName;
-                        if(string.IsNullOrEmpty(aliasName)) aliasName = queryTable.tableEnName + "_" + returnField.fieldEnName;
+                        if(string.IsNullOrEmpty(aliasName)) aliasName = tableEnName + "_" + returnField.fieldEnName;
                         if(returnField.fieldReturnKind == "2")
                         {
                             fields += "count(" + returnField.fieldEnName + ") " + aliasName + ",";
@@ -397,7 +399,7 @@ namespace Util
                             }
                         }
                     }
-                    sql = "select " + fields + " from " + queryTable.tableEnName + " where 1=1" + condi;
+                    sql = "select " + fields + " from " + tableEnName + " where 1=1" + condi;
                 }
                 else
                 {
@@ -449,6 +451,8 @@ namespace Util
             if (queryTable != null)
             {
                 string groupBy = "";
+                string tableEnName = queryTable.tableEnName;
+                if(tableEnName.Contains("#{")) tableEnName = MatchExpressionVal(tableEnName);
 
                 //查询返回字段
                 string fields = "";
@@ -458,29 +462,29 @@ namespace Util
                 {
                     if(returnField.fieldReturnKind == "2")
                     {
-                        fields += "count(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
+                        fields += "count(" + returnField.fieldEnName + ") " + tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
                     }
                     else if(returnField.fieldReturnKind == "3")
                     {
-                        fields += "sum(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
+                        fields += "sum(" + returnField.fieldEnName + ") " + tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
                     }
                     else if(returnField.fieldReturnKind == "4")
                     {
-                        fields += "avg(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
+                        fields += "avg(" + returnField.fieldEnName + ") " + tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
                     }
                     else if(returnField.fieldReturnKind == "5")
                     {
-                        fields += "max(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
+                        fields += "max(" + returnField.fieldEnName + ") " + tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
                     }
                     else if(returnField.fieldReturnKind == "6")
                     {
-                        fields += "min(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
+                        fields += "min(" + returnField.fieldEnName + ") " + tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
                     }
                     else
                     {
-                        fields += returnField.fieldEnName + " " + queryTable.tableEnName + "_" + returnField.fieldEnName + ",";
+                        fields += returnField.fieldEnName + " " + tableEnName + "_" + returnField.fieldEnName + ",";
                     }
-                    fieldDic.Add(queryTable.tableEnName + "_" + returnField.fieldEnName, returnField.fieldName);
+                    fieldDic.Add(tableEnName + "_" + returnField.fieldEnName, returnField.fieldName);
                 }
                 fields = fields.TrimEnd(',');
 
@@ -713,7 +717,7 @@ namespace Util
                 if(!string.IsNullOrEmpty(groupBy)) groupBy = " group by " + groupBy.TrimEnd(',') + " order by " + groupBy.TrimEnd(',');
 
                 var db = initDb(queryTable.databaseId);
-                string sql = "select " + fields + " from " + queryTable.tableEnName + " where 1=1" + condi + groupBy + " limit " + skip + "," + size;
+                string sql = "select " + fields + " from " + tableEnName + " where 1=1" + condi + groupBy + " limit " + skip + "," + size;
                 var items = db.Ado.GetDataTable(sql);
                 return items;
             }
@@ -1065,6 +1069,7 @@ namespace Util
                                         Dictionary<string, object> logStepDic = new();
                                         
                                         var returnFieldId = condition.returnFieldId; //条件返回字段
+                                        returnFieldId = MatchExpressionVal(returnFieldId);
                                         var fieldQueryKind = condition.fieldQueryKind; //匹配条件
                                         var fieldQueryModel = condition.fieldQueryModel; //匹配方式
                                         var fieldQueryValue = condition.fieldQueryValue; //匹配值
@@ -1458,6 +1463,7 @@ namespace Util
                 {
                     Dictionary<string, object> logStepDic = new();
                     var returnFieldId = condition.returnFieldId; //条件返回字段
+                    returnFieldId = MatchExpressionVal(returnFieldId);
                     var fieldQueryKind = condition.fieldQueryKind; //匹配条件
                     var fieldQueryModel = condition.fieldQueryModel; //匹配方式
                     var fieldQueryValue = condition.fieldQueryValue; //匹配值
@@ -1933,6 +1939,8 @@ namespace Util
             {
                 //查询返回字段
                 string fields = "1";
+                string tableEnName = queryTable.tableEnName;
+                if(tableEnName.Contains("#{")) tableEnName = MatchExpressionVal(tableEnName);
                 Dictionary<string, string> fieldDic = new();
                 var returnFields = queryReturnFieldService.GetList(m => m.objectTableId == queryTable.id);
                 if(returnFields.Count > 0)
@@ -1941,7 +1949,7 @@ namespace Util
                     foreach(var returnField in returnFields)
                     {
                         string aliasName = returnField.fieldAliasName;
-                        if(string.IsNullOrEmpty(aliasName)) aliasName = queryTable.tableEnName + "_" + returnField.fieldEnName;
+                        if(string.IsNullOrEmpty(aliasName)) aliasName = tableEnName + "_" + returnField.fieldEnName;
                         if(returnField.fieldReturnKind == "2")
                         {
                             fields += "count(" + returnField.fieldEnName + ") " + aliasName + ",";
@@ -2145,7 +2153,7 @@ namespace Util
                 }
 
                 var db = initDb(queryTable.databaseId);
-                string sql = "select " + fields + " from " + queryTable.tableEnName + " where 1=1" + condi;
+                string sql = "select " + fields + " from " + tableEnName + " where 1=1" + condi;
                 var items = db.Ado.GetDataTable(sql);
                 if(items.Rows.Count > 0)
                 {
@@ -2524,6 +2532,33 @@ namespace Util
             if(str.StartsWith("#{this_month") && str.EndsWith("MONTH}#")) return DateTime.Now.AddMonths(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM");
             if(str.StartsWith("#{") && str.EndsWith("DAY}#")) return DateTime.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[0]).AddDays(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd HH:mm:ss");
             if(str.StartsWith("#{") && str.EndsWith("MONTH}#")) return DateTime.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[0]).AddMonths(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd HH:mm:ss");
+            if(str.StartsWith("#{") && str.EndsWith("}#"))
+            {
+                string[] data = str.Replace("#{", "").Replace("}#", "").Split(',');
+                string tag = data[0];
+                string format = data[data.Length - 1];
+                if(tag == "now" && format.StartsWith("yyyy"))
+                {
+                    if(data.Length == 2)
+                    {
+                        return DateTime.Now.ToString(format);
+                    }
+                    else if(data.Length == 4)
+                    {
+                        if(data[2] == "DAY") return DateTime.Now.AddDays(int.Parse(data[1])).ToString(format);
+                        if(data[2] == "MONTH") return DateTime.Now.AddMonths(int.Parse(data[1])).ToString(format);
+                    }
+                }
+            }
+            return str;
+        }
+        public static string MatchExpressionVal(string str)
+        {
+            MatchCollection mc = Regex.Matches(str, "#\\{.*?\\}#");
+            foreach(Match m in mc)
+            {
+                str = str.Replace(m.Value, GetExpressionVal(m.Value));
+            }
             return str;
         }
 
@@ -2573,6 +2608,18 @@ namespace Util
         //获取查询条件数据
         public static string GetQueryTableData(List<QueryCondition> condiDic, string key)
         {
+            if(key.Contains("#{"))
+            {
+                Match m = Regex.Match(key, "\\$\\{.*?\\}\\$");
+                if(m.Success)
+                {
+                    string keyString = m.Value.Replace("${", "").Replace("}$", "");
+                    string val = condiDic.Any(m => m.FieldEnName == keyString) ? condiDic.FirstOrDefault(m => m.FieldEnName == keyString).Value.ToString() : "0";
+                    key = key.Replace(m.Value, val);
+                    key = GetExpressionVal(key);
+                    return key;
+                }
+            }
             return condiDic.Any(m => m.FieldEnName == key) ? condiDic.FirstOrDefault(m => m.FieldEnName == key).Value.ToString() : "0";
         }
         public static string GetQueryTableTitle(List<QueryCondition> condiDic, string key)