|
@@ -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)
|