Browse Source

查询增加自定义sql

lcl 3 months ago
parent
commit
f0b888b282
3 changed files with 301 additions and 213 deletions
  1. 7 0
      Model/Database/PriQueryTable.cs
  2. 6 0
      Model/Vo/Admin/GetPriQueryTableQueryVo.cs
  3. 288 213
      Util/PrizeDo.cs

+ 7 - 0
Model/Database/PriQueryTable.cs

@@ -94,6 +94,13 @@ namespace Model
         public int stepCount { get; set; }
 
 
+        /// <summary>
+        /// 自定义sql查询
+        /// </summary>
+        [SugarColumn(ColumnDescription = "自定义sql查询", ColumnName = "custom_sql")]
+        public string? customSql { get; set; }
+
+
 
     }
 }

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

@@ -49,6 +49,12 @@ namespace Vo.Admin
         public int stepCount { get; set; }
 
 
+        /// <summary>
+        /// 自定义sql查询
+        /// </summary>
+        public string? customSql { get; set; }
+
+
 
     }
 }

+ 288 - 213
Util/PrizeDo.cs

@@ -9,6 +9,7 @@ using NuGet.Packaging;
 using Services;
 using System.Linq;
 using System.Net.Mime;
+using System.Text.RegularExpressions;
 
 namespace Util
 {
@@ -52,6 +53,17 @@ namespace Util
             }
             return dic;
         }
+        public static string getRequestParams(int projectId, string content, string key)
+        {
+            JsonData jsonData = JsonMapper.ToObject(content);
+            var paramService = App.GetService<IPriProjectParamService>();
+            var param = paramService.GetFirst(m => m.projectId == projectId && m.fieldEnName == key);
+            if(param != null)
+            {
+                return jsonData[param.fieldEnName].ToString();
+            }
+            return "0";
+        }
 
         //数据库链接
         public static SqlSugarClient initDb(int id)
@@ -83,309 +95,343 @@ namespace Util
             var queryTables = queryTableService.GetList(m => ids.Contains(m.id) && m.startDataFlag == false);
             foreach(var queryTable in queryTables)
             {
-                //查询返回字段
-                string fields = "";
+                string sql = "";
                 Dictionary<string, string> fieldDic = new();
-                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(returnField.fieldReturnKind == "2")
-                    {
-                        fields += "count(" + returnField.fieldEnName + ") " + aliasName + ",";
-                    }
-                    else if(returnField.fieldReturnKind == "3")
-                    {
-                        fields += "sum(" + returnField.fieldEnName + ") " + aliasName + ",";
-                    }
-                    else if(returnField.fieldReturnKind == "4")
-                    {
-                        fields += "avg(" + returnField.fieldEnName + ") " + aliasName + ",";
-                    }
-                    else
-                    {
-                        fields += returnField.fieldEnName + " " + aliasName + ",";
-                    }
-                    fieldDic.Add(aliasName, returnField.fieldName);
-                }
-                fields = fields.TrimEnd(',');
-
-                //查询匹配条件
-                string condi = "";
-                var queryFields = queryFieldService.GetList(m => m.queryTableId == queryTable.id);
-                foreach(var queryField in queryFields)
+                if(string.IsNullOrEmpty(queryTable.customSql))
                 {
-                    string fieldEnName = queryField.fieldEnName;
-                    string fieldQueryKind = queryField.fieldQueryKind;
-                    string fieldQueryModel = queryField.fieldQueryModel;
-                    string fieldQueryValue = queryField.fieldQueryValue;
-                    string fieldQueryValueType = queryField.fieldQueryValueType;
-                    if(fieldQueryKind == "1") //模糊匹配
+                    //查询返回字段
+                    string fields = "";
+                    var returnFields = returnFieldService.GetList(m => m.queryTableId == queryTable.id);
+                    foreach(var returnField in returnFields)
                     {
-                        condi += " and " + fieldEnName + " like ";
-                        if(fieldQueryModel == "request_param")
+                        string aliasName = returnField.fieldAliasName;
+                        if(string.IsNullOrEmpty(aliasName)) aliasName = queryTable.tableEnName + "_" + returnField.fieldEnName;
+                        if(returnField.fieldReturnKind == "2")
                         {
-                            Dictionary<string, string> req = getRequestParams(projectId, content);
-                            string val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0";
-                            condi += "'%" + val + "%'";
+                            fields += "count(" + returnField.fieldEnName + ") " + aliasName + ",";
                         }
-                        else if(fieldQueryModel == "fixed_value")
+                        else if(returnField.fieldReturnKind == "3")
                         {
-                            condi += "'%" + GetExpressionVal(fieldQueryValue) + "%'";
+                            fields += "sum(" + returnField.fieldEnName + ") " + aliasName + ",";
                         }
-                        else if(fieldQueryModel == "db_field")
+                        else if(returnField.fieldReturnKind == "4")
                         {
-                            condi += "'%" + GetDbExpressionVal(fieldQueryValue) + "%'";
+                            fields += "avg(" + returnField.fieldEnName + ") " + aliasName + ",";
                         }
-                        else if(fieldQueryModel == "query_field")
+                        else if(returnField.fieldReturnKind == "5")
                         {
-                            string val = GetQueryTableData(dic, fieldQueryValue);
-                            condi += "'%" + val + "%'";                            
+                            fields += "max(" + returnField.fieldEnName + ") " + aliasName + ",";
                         }
-                        else if(fieldQueryModel == "querystart_list_field")
+                        else if(returnField.fieldReturnKind == "6")
                         {
-                            string val = GetStartData(startData, fieldQueryValue);
-                            condi += "'%" + val + "%'";                            
+                            fields += "min(" + returnField.fieldEnName + ") " + aliasName + ",";
+                        }
+                        else if(returnField.fieldReturnKind == "7")
+                        {
+                            fields += GetDbExpressionVal(returnField.fieldEnName, projectId, content, dic, startData) + ",";
                         }
-                    }
-                    else if(fieldQueryKind == "2") //精确匹配
-                    {
-                        if(fieldQueryValue == "null" && fieldQueryValueType == "text") condi += " and " + fieldEnName + " is null";
                         else
                         {
-                            condi += " and " + fieldEnName + "=";
-                            string val = "";
+                            fields += returnField.fieldEnName + " " + aliasName + ",";
+                        }
+                        fieldDic.Add(aliasName, returnField.fieldName);
+                    }
+                    fields = fields.TrimEnd(',');
+
+                    //查询匹配条件
+                    string condi = "";
+                    var queryFields = queryFieldService.GetList(m => m.queryTableId == queryTable.id);
+                    foreach(var queryField in queryFields)
+                    {
+                        string fieldEnName = queryField.fieldEnName;
+                        string fieldQueryKind = queryField.fieldQueryKind;
+                        string fieldQueryModel = queryField.fieldQueryModel;
+                        string fieldQueryValue = queryField.fieldQueryValue;
+                        string fieldQueryValueType = queryField.fieldQueryValueType;
+                        if(fieldQueryKind == "1") //模糊匹配
+                        {
+                            condi += " and " + fieldEnName + " like ";
                             if(fieldQueryModel == "request_param")
                             {
-                                Dictionary<string, string> req = getRequestParams(projectId, content);
-                                val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0";
+                                condi += "'%" + getRequestParams(projectId, content, fieldQueryValue) + "%'";
                             }
                             else if(fieldQueryModel == "fixed_value")
                             {
-                                val = GetExpressionVal(fieldQueryValue);
+                                condi += "'%" + GetExpressionVal(fieldQueryValue) + "%'";
                             }
                             else if(fieldQueryModel == "db_field")
                             {
-                                val = GetDbExpressionVal(fieldQueryValue);
+                                condi += "'%" + GetDbExpressionVal(fieldQueryValue) + "%'";
                             }
                             else if(fieldQueryModel == "query_field")
                             {
-                                val = GetQueryTableData(dic, fieldQueryValue);
+                                string val = GetQueryTableData(dic, fieldQueryValue);
+                                condi += "'%" + val + "%'";                            
                             }
                             else if(fieldQueryModel == "querystart_list_field")
                             {
-                                val = GetStartData(startData, fieldQueryValue);
-                            }
-                            if(fieldQueryValueType == "text")
-                            {
-                                val = "'" + val + "'";
+                                string val = GetStartData(startData, fieldQueryValue);
+                                condi += "'%" + val + "%'";                            
                             }
-                            condi += val;
                         }
-                    }
-                    else if(fieldQueryKind == "5" || fieldQueryKind == "6") //数组匹配/排除
-                    {
-                        if(fieldQueryKind == "5") condi += " and " + fieldEnName + " in (";
-                        else if(fieldQueryKind == "6") condi += " and " + fieldEnName + " not in (";
-                        string val = "";
-                        string[] valList = fieldQueryValue.Split(',');
-                        if(fieldQueryModel == "request_param")
+                        else if(fieldQueryKind == "2") //精确匹配
                         {
-                            Dictionary<string, string> req = getRequestParams(projectId, content);
-                            foreach(string sub in valList)
+                            if(fieldQueryValue == "null" && fieldQueryValueType == "text") condi += " and " + fieldEnName + " is null";
+                            else
                             {
-                                if(fieldQueryValueType == "text")
+                                condi += " and " + fieldEnName + "=";
+                                string val = "";
+                                if(fieldQueryModel == "request_param")
                                 {
-                                    val += "'" + req[sub] + "',";
+                                    Dictionary<string, string> req = getRequestParams(projectId, content);
+                                    val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0";
                                 }
-                                else
+                                else if(fieldQueryModel == "fixed_value")
                                 {
-                                    val += req[sub] + ",";
+                                    val = GetExpressionVal(fieldQueryValue);
                                 }
-                            }
-                        }
-                        else if(fieldQueryModel == "fixed_value")
-                        {
-                            foreach(string sub in valList)
-                            {
-                                if(fieldQueryValueType == "text")
+                                else if(fieldQueryModel == "db_field")
                                 {
-                                    val += "'" + GetExpressionVal(sub) + "',";
+                                    val = GetDbExpressionVal(fieldQueryValue);
                                 }
-                                else
+                                else if(fieldQueryModel == "query_field")
                                 {
-                                    val += GetExpressionVal(sub) + ",";
+                                    val = GetQueryTableData(dic, fieldQueryValue);
                                 }
-                            }
-                        }
-                        else if(fieldQueryModel == "db_field")
-                        {
-                            foreach(string sub in valList)
-                            {
-                                if(fieldQueryValueType == "text")
+                                else if(fieldQueryModel == "querystart_list_field")
                                 {
-                                    val += "'" + GetDbExpressionVal(sub) + "',";
+                                    val = GetStartData(startData, fieldQueryValue);
                                 }
-                                else
+                                if(fieldQueryValueType == "text")
                                 {
-                                    val += GetDbExpressionVal(sub) + ",";
+                                    val = "'" + val + "'";
                                 }
+                                condi += val;
                             }
                         }
-                        else if(fieldQueryModel == "query_field")
+                        else if(fieldQueryKind == "5" || fieldQueryKind == "6") //数组匹配/排除
                         {
-                            foreach(string sub in valList)
+                            if(fieldQueryKind == "5") condi += " and " + fieldEnName + " in (";
+                            else if(fieldQueryKind == "6") condi += " and " + fieldEnName + " not in (";
+                            string val = "";
+                            string[] valList = fieldQueryValue.Split(',');
+                            if(fieldQueryModel == "request_param")
                             {
-                                string dicVal = GetQueryTableData(dic, sub);
-                                if(fieldQueryValueType == "text")
-                                {
-                                    val += "'" + dicVal + "',";
-                                }
-                                else
+                                Dictionary<string, string> req = getRequestParams(projectId, content);
+                                foreach(string sub in valList)
                                 {
-                                    val += dicVal + ",";
+                                    if(fieldQueryValueType == "text")
+                                    {
+                                        val += "'" + req[sub] + "',";
+                                    }
+                                    else
+                                    {
+                                        val += req[sub] + ",";
+                                    }
                                 }
-                            }                       
-                        }
-                        else if(fieldQueryModel == "querystart_list_field")
-                        {
-                            foreach(string sub in valList)
+                            }
+                            else if(fieldQueryModel == "fixed_value")
                             {
-                                string dicVal = GetStartData(startData, sub);
-                                if(fieldQueryValueType == "text")
-                                {
-                                    val += "'" + dicVal + "',";
-                                }
-                                else
+                                foreach(string sub in valList)
                                 {
-                                    val += dicVal + ",";
+                                    if(fieldQueryValueType == "text")
+                                    {
+                                        val += "'" + GetExpressionVal(sub) + "',";
+                                    }
+                                    else
+                                    {
+                                        val += GetExpressionVal(sub) + ",";
+                                    }
                                 }
-                            }                       
-                        }
-                        val = val.TrimEnd(',');
-                        condi += val + ")";
-                    }
-                    else if(fieldQueryKind == "3") //范围匹配
-                    {
-                        string[] val = fieldQueryValue.Split(':');
-                        if(fieldQueryModel == "request_param")
-                        {
-                            Dictionary<string, string> req = getRequestParams(projectId, 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(fieldQueryModel == "db_field")
-                        {
-                            if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">=" + GetDbExpressionVal(val[0]);
-                            if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<=" + GetDbExpressionVal(val[1]);
-                        }
-                        else if(fieldQueryModel == "query_field")
-                        {
-                            string valLeft = val[0];
-                            string valRight = val[1];
-                            string dicValLeft = GetQueryTableData(dic, valLeft);
-                            string dicValRight = GetQueryTableData(dic, valRight);
-                            if(fieldQueryValueType == "number")
-                            {
-                                if(!string.IsNullOrEmpty(dicValLeft)) condi += " and " + fieldEnName + ">=" + dicValLeft;
-                                if(!string.IsNullOrEmpty(dicValRight)) condi += " and " + fieldEnName + "<=" + dicValRight;
                             }
-                            else
+                            else if(fieldQueryModel == "db_field")
                             {
-                                if(!string.IsNullOrEmpty(dicValLeft)) condi += " and " + fieldEnName + ">='" + GetExpressionVal(dicValLeft) + "'";
-                                if(!string.IsNullOrEmpty(dicValRight)) condi += " and " + fieldEnName + "<='" + GetExpressionVal(dicValRight) + "'";
+                                foreach(string sub in valList)
+                                {
+                                    if(fieldQueryValueType == "text")
+                                    {
+                                        val += "'" + GetDbExpressionVal(sub) + "',";
+                                    }
+                                    else
+                                    {
+                                        val += GetDbExpressionVal(sub) + ",";
+                                    }
+                                }
                             }
-                        }
-                        else if(fieldQueryModel == "querystart_list_field")
-                        {
-                            string valLeft = val[0];
-                            string valRight = val[1];
-                            string dicValLeft = GetStartData(startData, valLeft);
-                            string dicValRight = GetStartData(startData, valRight);
-                            if(fieldQueryValueType == "number")
+                            else if(fieldQueryModel == "query_field")
                             {
-                                if(!string.IsNullOrEmpty(dicValLeft)) condi += " and " + fieldEnName + ">=" + dicValLeft;
-                                if(!string.IsNullOrEmpty(dicValRight)) condi += " and " + fieldEnName + "<=" + dicValRight;
+                                foreach(string sub in valList)
+                                {
+                                    string dicVal = GetQueryTableData(dic, sub);
+                                    if(fieldQueryValueType == "text")
+                                    {
+                                        val += "'" + dicVal + "',";
+                                    }
+                                    else
+                                    {
+                                        val += dicVal + ",";
+                                    }
+                                }                       
                             }
-                            else
+                            else if(fieldQueryModel == "querystart_list_field")
                             {
-                                if(!string.IsNullOrEmpty(dicValLeft)) condi += " and " + fieldEnName + ">='" + GetExpressionVal(dicValLeft) + "'";
-                                if(!string.IsNullOrEmpty(dicValRight)) condi += " and " + fieldEnName + "<='" + GetExpressionVal(dicValRight) + "'";
+                                foreach(string sub in valList)
+                                {
+                                    string dicVal = GetStartData(startData, sub);
+                                    if(fieldQueryValueType == "text")
+                                    {
+                                        val += "'" + dicVal + "',";
+                                    }
+                                    else
+                                    {
+                                        val += dicVal + ",";
+                                    }
+                                }                       
                             }
+                            val = val.TrimEnd(',');
+                            condi += val + ")";
                         }
-                    }
-                    else if(fieldQueryKind == "4") //取反匹配
-                    {
-                        if(fieldQueryValue == "null" && fieldQueryValueType == "text") condi += " and " + fieldEnName + " is not null";
-                        else
+                        else if(fieldQueryKind == "3") //范围匹配
                         {
-                            condi += " and " + fieldEnName + "!=";
-                            string val = "";
+                            string[] val = fieldQueryValue.Split(':');
                             if(fieldQueryModel == "request_param")
                             {
                                 Dictionary<string, string> req = getRequestParams(projectId, content);
-                                val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0";
+                                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")
                             {
-                                val = GetExpressionVal(fieldQueryValue);
+                                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(fieldQueryModel == "db_field")
                             {
-                                val = GetDbExpressionVal(fieldQueryValue);
+                                if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">=" + GetDbExpressionVal(val[0]);
+                                if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<=" + GetDbExpressionVal(val[1]);
                             }
                             else if(fieldQueryModel == "query_field")
                             {
-                                val = GetQueryTableData(dic, fieldQueryValue);
+                                string valLeft = val[0];
+                                string valRight = val[1];
+                                string dicValLeft = GetQueryTableData(dic, valLeft);
+                                string dicValRight = GetQueryTableData(dic, valRight);
+                                if(fieldQueryValueType == "number")
+                                {
+                                    if(!string.IsNullOrEmpty(dicValLeft)) condi += " and " + fieldEnName + ">=" + dicValLeft;
+                                    if(!string.IsNullOrEmpty(dicValRight)) condi += " and " + fieldEnName + "<=" + dicValRight;
+                                }
+                                else
+                                {
+                                    if(!string.IsNullOrEmpty(dicValLeft)) condi += " and " + fieldEnName + ">='" + GetExpressionVal(dicValLeft) + "'";
+                                    if(!string.IsNullOrEmpty(dicValRight)) condi += " and " + fieldEnName + "<='" + GetExpressionVal(dicValRight) + "'";
+                                }
                             }
                             else if(fieldQueryModel == "querystart_list_field")
                             {
-                                val = GetStartData(startData, fieldQueryValue);
+                                string valLeft = val[0];
+                                string valRight = val[1];
+                                string dicValLeft = GetStartData(startData, valLeft);
+                                string dicValRight = GetStartData(startData, valRight);
+                                if(fieldQueryValueType == "number")
+                                {
+                                    if(!string.IsNullOrEmpty(dicValLeft)) condi += " and " + fieldEnName + ">=" + dicValLeft;
+                                    if(!string.IsNullOrEmpty(dicValRight)) condi += " and " + fieldEnName + "<=" + dicValRight;
+                                }
+                                else
+                                {
+                                    if(!string.IsNullOrEmpty(dicValLeft)) condi += " and " + fieldEnName + ">='" + GetExpressionVal(dicValLeft) + "'";
+                                    if(!string.IsNullOrEmpty(dicValRight)) condi += " and " + fieldEnName + "<='" + GetExpressionVal(dicValRight) + "'";
+                                }
                             }
-                            if(fieldQueryValueType == "text")
+                        }
+                        else if(fieldQueryKind == "4") //取反匹配
+                        {
+                            if(fieldQueryValue == "null" && fieldQueryValueType == "text") condi += " and " + fieldEnName + " is not null";
+                            else
                             {
-                                val = "'" + val + "'";
+                                condi += " and " + fieldEnName + "!=";
+                                string val = "";
+                                if(fieldQueryModel == "request_param")
+                                {
+                                    Dictionary<string, string> req = getRequestParams(projectId, content);
+                                    val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0";
+                                }
+                                else if(fieldQueryModel == "fixed_value")
+                                {
+                                    val = GetExpressionVal(fieldQueryValue);
+                                }
+                                else if(fieldQueryModel == "db_field")
+                                {
+                                    val = GetDbExpressionVal(fieldQueryValue);
+                                }
+                                else if(fieldQueryModel == "query_field")
+                                {
+                                    val = GetQueryTableData(dic, fieldQueryValue);
+                                }
+                                else if(fieldQueryModel == "querystart_list_field")
+                                {
+                                    val = GetStartData(startData, fieldQueryValue);
+                                }
+                                if(fieldQueryValueType == "text")
+                                {
+                                    val = "'" + val + "'";
+                                }
+                                condi += val;
                             }
-                            condi += val;
                         }
                     }
+                    sql = "select " + fields + " from " + queryTable.tableEnName + " where 1=1" + condi;
+                }
+                else
+                {
+                    sql = queryTable.customSql;
+                    sql = GetDbExpressionVal(sql, projectId, content, dic, startData);
                 }
-
                 var db = initDb(queryTable.databaseId);
-                string sql = "select " + fields + " from " + queryTable.tableEnName + " where 1=1" + condi;
                 var items = db.Ado.GetDataTable(sql);
                 if(items.Rows.Count > 0)
                 {
-                    foreach(string field in fieldDic.Keys)
+                    if(string.IsNullOrEmpty(queryTable.customSql))
                     {
-                        if(!dic.Any(m => m.FieldEnName == field)) dic.Add(new QueryCondition()
+                        foreach(string field in fieldDic.Keys)
                         {
-                            FieldName = fieldDic[field],
-                            FieldEnName = field,
-                            Value = items.Rows[0][field].ToString()
-                        });
+                            if(!dic.Any(m => m.FieldEnName == field)) dic.Add(new QueryCondition()
+                            {
+                                FieldName = fieldDic[field],
+                                FieldEnName = field,
+                                Value = items.Rows[0][field].ToString()
+                            });
+                        }
+                    }
+                    else
+                    {
+                        foreach(DataColumn column in items.Columns)
+                        {
+                            string field = column.ColumnName;
+                            if(!dic.Any(m => m.FieldEnName == field)) dic.Add(new QueryCondition()
+                            {
+                                FieldName = fieldDic[field],
+                                FieldEnName = field,
+                                Value = items.Rows[0][field].ToString()
+                            });
+                        }
                     }
                 }
             }
@@ -422,6 +468,14 @@ namespace Util
                     {
                         fields += "avg(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
                     }
+                    else if(returnField.fieldReturnKind == "5")
+                    {
+                        fields += "max(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
+                    }
+                    else if(returnField.fieldReturnKind == "6")
+                    {
+                        fields += "min(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName.Split('+')[0] + ",";
+                    }
                     else
                     {
                         fields += returnField.fieldEnName + " " + queryTable.tableEnName + "_" + returnField.fieldEnName + ",";
@@ -1896,6 +1950,14 @@ namespace Util
                         {
                             fields += "avg(" + returnField.fieldEnName + ") " + aliasName + ",";
                         }
+                        else if(returnField.fieldReturnKind == "5")
+                        {
+                            fields += "max(" + returnField.fieldEnName + ") " + aliasName + ",";
+                        }
+                        else if(returnField.fieldReturnKind == "6")
+                        {
+                            fields += "min(" + returnField.fieldEnName + ") " + aliasName + ",";
+                        }
                         else
                         {
                             fields += returnField.fieldEnName + " " + aliasName + ",";
@@ -2469,6 +2531,19 @@ namespace Util
             if(str.StartsWith("#{") && str.EndsWith("MONTH}#")) str = "DATE_ADD(" + data[0] + ",INTERVAL " + data[1] + " MONTH)";
             return str;
         }
+        public static string GetDbExpressionVal(string str, int projectId, string content, List<QueryCondition> dic, Dictionary<string, string> startData)
+        {
+            MatchCollection mc = Regex.Matches(str, "\\$\\{.*?\\}");
+            foreach(Match m in mc)
+            {
+                string matchValue = m.Value.Replace("${", "").Replace("}", "");
+                matchValue = getRequestParams(projectId, content, matchValue);
+                matchValue = GetQueryTableData(dic, matchValue);
+                matchValue = GetStartData(startData, matchValue);
+                str = str.Replace(m.Value, matchValue);
+            }
+            return str;
+        }
     
         //四则混合运算
         public static string GetComputeVal(List<QueryCondition> condiDic, string expresssion)