using System.Data; using Common; using Infrastructure; using LitJson; using Microsoft.Extensions.Localization; using Model; using NuGet.Packaging; using Services; namespace Util { public class PrizeDo { public static string batchNo = ""; //发奖入口 public static void sendPrize(string content) { try { batchNo = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(3); JsonData jsonObj = JsonMapper.ToObject(content); string priObjString = prizeInSet(int.Parse(Function.CheckInt(jsonObj["prize_tag"].ToString()))); content = jsonObj["content"].ToString(); if(!string.IsNullOrEmpty(priObjString)) { string[] priObjData = priObjString.Split('|'); string priListIds = priObjData[0]; int projectId = int.Parse(priObjData[1]); prizeSend(projectId, priListIds, content); } } catch(Exception ex) { Function.WriteLog(DateTime.Now + "\n" + ex.ToString(), "发奖异常"); } } //接收入参 public static Dictionary getRequestParams(int projectId, string content) { Dictionary dic = new Dictionary(); JsonData jsonData = JsonMapper.ToObject(content); var paramService = App.GetService(); var paramList = paramService.GetList(m => m.projectId == projectId); foreach(var param in paramList) { if(content.Contains("\"" + param.fieldEnName + "\"")) dic.Add(param.fieldEnName, jsonData[param.fieldEnName].ToString()); } return dic; } //数据库链接 public static SqlSugarClient initDb(int id) { var databaseSetService = App.GetService(); var connectionString = databaseSetService.GetFirst(m => m.id == id); string server = connectionString.ipAddress; int port = connectionString.port; string user = connectionString.userId; string password = connectionString.password; string database = connectionString.databaseName; var db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "server=" + server + ";port=" + port + ";user=" + user + ";password=" + password + ";database=" + database + ";charset=utf8;", DbType = SqlSugar.DbType.MySql, IsAutoCloseConnection = true, }); return db; } //查询条件匹配数据 public static Dictionary condition(int projectId, string content) { Dictionary dic = new Dictionary(); var queryTableService = App.GetService(); var queryFieldService = App.GetService(); var returnFieldService = App.GetService(); //查询表 var queryTables = queryTableService.GetList(m => m.projectId == projectId); foreach(var queryTable in queryTables) { //查询返回字段 string fields = ""; var returnFields = returnFieldService.GetList(m => m.queryTableId == queryTable.id); foreach(var returnField in returnFields) { if(returnField.fieldReturnKind == "2") { fields += "count(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName + ","; } else if(returnField.fieldReturnKind == "3") { fields += "sum(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName + ","; } else if(returnField.fieldReturnKind == "4") { fields += "avg(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName + ","; } else { fields += returnField.fieldEnName + " " + queryTable.tableEnName + "_" + returnField.fieldEnName + ","; } } 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 req = getRequestParams(projectId, content); string val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0"; condi += "'%" + val + "%'"; } else if(fieldQueryModel == "fixed_value") { condi += "'%" + GetExpressionVal(fieldQueryValue) + "%'"; } else if(fieldQueryModel == "db_field") { condi += "'%" + GetDbExpressionVal(fieldQueryValue) + "%'"; } else if(fieldQueryModel == "query_field") { string val = dic.ContainsKey(fieldQueryValue) ? dic[fieldQueryValue].ToString() : "0"; condi += "'%" + val + "%'"; } } else if(fieldQueryKind == "2") //精确匹配 { if(fieldQueryValue == "null" && fieldQueryValueType == "text") condi += " and " + fieldEnName + " is null"; else { condi += " and " + fieldEnName + "="; string val = ""; if(fieldQueryModel == "request_param") { Dictionary 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 = dic.ContainsKey(fieldQueryValue) ? dic[fieldQueryValue].ToString() : "0"; } if(fieldQueryValueType == "text") { val = "'" + 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") { Dictionary req = getRequestParams(projectId, content); foreach(string sub in valList) { if(fieldQueryValueType == "text") { val += "'" + req[sub] + "',"; } else { val += req[sub] + ","; } } } else if(fieldQueryModel == "fixed_value") { foreach(string sub in valList) { if(fieldQueryValueType == "text") { val += "'" + GetExpressionVal(sub) + "',"; } else { val += GetExpressionVal(sub) + ","; } } } else if(fieldQueryModel == "db_field") { foreach(string sub in valList) { if(fieldQueryValueType == "text") { val += "'" + GetDbExpressionVal(sub) + "',"; } else { val += GetDbExpressionVal(sub) + ","; } } } else if(fieldQueryModel == "query_field") { foreach(string sub in valList) { string dicVal = dic.ContainsKey(sub) ? dic[sub].ToString() : "0"; if(fieldQueryValueType == "text") { val += "'" + dicVal + "',"; } else { val += dicVal + ","; } } } val = val.TrimEnd(','); condi += val + ")"; } else if(fieldQueryKind == "3") //范围匹配 { string[] val = fieldQueryValue.Split(':'); if(fieldQueryModel == "request_param") { Dictionary 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 dicValLeft = dic.ContainsKey(val[0]) ? dic[val[0]].ToString() : "0"; string dicValRight = dic.ContainsKey(val[1]) ? dic[val[1]].ToString() : "0"; 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(fieldQueryKind == "4") //取反匹配 { if(fieldQueryValue == "null" && fieldQueryValueType == "text") condi += " and " + fieldEnName + " is not null"; else { condi += " and " + fieldEnName + "!="; string val = ""; if(fieldQueryModel == "request_param") { Dictionary 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 = dic.ContainsKey(fieldQueryValue) ? dic[fieldQueryValue].ToString() : "0"; } if(fieldQueryValueType == "text") { val = "'" + val + "'"; } condi += val; } } } 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(System.Data.DataColumn item in items.Columns) { if(!dic.ContainsKey(item.ColumnName)) dic.Add(item.ColumnName, items.Rows[0][item.ColumnName].ToString()); } } } return dic; } //奖励发放对象 public static string prizeObject(int prizeObjectTag, string content) { Dictionary dic = new Dictionary(); var prizeObjectTableService = App.GetService(); var prizeObjectFieldService = App.GetService(); //查询表 var prizeObjectTable = prizeObjectTableService.GetFirst(m => m.id == prizeObjectTag) ?? new PriPrizeObjectTable(); //查询返回字段 string field = prizeObjectTable.selectField; int projectId = prizeObjectTable.projectId; //查询匹配条件 string condi = ""; var queryFields = prizeObjectFieldService.GetList(m => m.objectTableId == prizeObjectTable.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 req = getRequestParams(projectId, content); string val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0"; condi += "'%" + val + "%'"; } else if(fieldQueryModel == "fixed_value") { condi += "'%" + GetExpressionVal(fieldQueryValue) + "%'"; } else if(fieldQueryModel == "db_field") { condi += "'%" + GetDbExpressionVal(fieldQueryValue) + "%'"; } } else if(fieldQueryKind == "2") //精确匹配 { condi += " and " + fieldEnName + "="; string val = ""; if(fieldQueryModel == "request_param") { Dictionary 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); } if(fieldQueryValueType == "text") { val = "'" + 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") { Dictionary req = getRequestParams(projectId, content); foreach(string sub in valList) { if(fieldQueryValueType == "text") { val += "'" + req[sub] + "',"; } else { val += req[sub] + ","; } } } else if(fieldQueryModel == "fixed_value") { foreach(string sub in valList) { if(fieldQueryValueType == "text") { val += "'" + GetExpressionVal(sub) + "',"; } else { val += GetExpressionVal(sub) + ","; } } } else if(fieldQueryModel == "db_field") { foreach(string sub in valList) { if(fieldQueryValueType == "text") { val += "'" + GetDbExpressionVal(sub) + "',"; } else { val += GetDbExpressionVal(sub) + ","; } } } val = val.TrimEnd(','); condi += val + ")"; } else if(fieldQueryKind == "3") //范围匹配 { string[] val = fieldQueryValue.Split(':'); if(fieldQueryModel == "request_param") { Dictionary 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(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 + ">='" + GetDbExpressionVal(val[0]) + "'"; if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<='" + GetDbExpressionVal(val[1]) + "'"; } } } else if(fieldQueryKind == "4") //取反匹配 { condi += " and " + fieldEnName + "!="; string val = ""; if(fieldQueryModel == "request_param") { Dictionary 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); } if(fieldQueryValueType == "text") { val = "'" + val + "'"; } condi += val; } } var db = initDb(prizeObjectTable.databaseId); var item = db.Ado.GetScalar("select " + field + " from " + prizeObjectTable.tableEnName + " where 1=1" + condi); if(item != null) { return item.ToString(); } return "0"; } //奖励发放入口 public static string prizeInSet(int prizeObjectTag) { Dictionary dic = new Dictionary(); var prizeInSetService = App.GetService(); //查询表 var prizeInSet = prizeInSetService.GetFirst(m => m.id == prizeObjectTag) ?? new PriPrizeInSet(); if(prizeInSet.id > 0) { int projectId = prizeInSet.projectId; return prizeInSet.prizeListIds + "|" + projectId; } return ""; } //奖励列表 public static List prizeList(int projectId, string prizeIds) { List ids = Tools.SpitIntArrary(prizeIds, ',').ToList(); var priListService = App.GetService(); var priList = priListService.GetList(m => m.projectId == projectId && ids.Contains(m.id)).ToList(); return priList; } //奖励发放 public static void prizeSend(int projectId, string prizeIds, string content) { var loopSetService = App.GetService(); var recursionStartTableService = App.GetService(); var recursionStartConditionService = App.GetService(); var priList = prizeList(projectId, prizeIds); foreach(var sub in priList) { string prizeObjectId = prizeObject(sub.prizeObj, content); var recursionFlag = sub.recursionFlag; //是否递归 if(recursionFlag) { var loopSet = loopSetService.GetFirst(m => m.listId == sub.id) ?? new PriLoopSet(); var recursionStartTable = recursionStartTableService.GetFirst(m => m.listId == sub.id) ?? new PriRecursionStartTable(); var tableEnName = loopSet.tableEnName; //递归查询表 var parentField = loopSet.parentField; //父字段 var sonField = loopSet.sonField; //子字段 var afterPrizeFlag = loopSet.afterPrizeFlag; //发奖后是否继续 var db = initDb(recursionStartTable.databaseId); string objId = prizeObjectId; bool op = true; int index = 0; loopAmount = 0; while(!string.IsNullOrEmpty(objId) && objId != "0" && op) { Dictionary condiDic = loopCondition(projectId, sub, objId, content); if(condiDic.Count > 0) { bool prizeFlag = true; var conditions = recursionStartConditionService.GetList(m => m.loopSetId == loopSet.id); if(conditions.Count > 0) { int allCount = conditions.Count; //所有奖励条件数 int passCount = 0; //通过条件数 foreach(var condition in conditions) { if(condition.startIndex <= index) { var returnFieldId = condition.returnFieldId; //条件返回字段 var fieldQueryKind = condition.fieldQueryKind; //匹配条件 var fieldQueryModel = condition.fieldQueryModel; //匹配方式 var fieldQueryValue = condition.fieldQueryValue; //匹配值 var fieldQueryValueType = condition.fieldQueryValueType; //匹配值类型 string checkObj = ""; if(returnFieldId.Contains(",")) { string[] returnFieldIdList = returnFieldId.Split(','); foreach(string subField in returnFieldIdList) { string val = condiDic.ContainsKey(subField) ? condiDic[subField].ToString() : "0"; checkObj += val + ","; } checkObj = checkObj.TrimEnd(','); } else if (returnFieldId.Contains("+") || returnFieldId.Contains("-") || returnFieldId.Contains("*") || returnFieldId.Contains("/") || returnFieldId.Contains("(") || returnFieldId.Contains(")")) { string expresssion = returnFieldId; string[] returnFields = returnFieldId.Split(new char[] { '+', '-', '*', '/', '(', ')' }); foreach(string returnField in returnFields) { string val = condiDic.ContainsKey(returnField) ? condiDic[returnField].ToString() : "0"; expresssion = expresssion.Replace(returnField, val); } DataTable dt = new DataTable(); checkObj = dt.Compute(expresssion, "false").ToString(); } else { checkObj = condiDic.ContainsKey(returnFieldId) ? condiDic[returnFieldId].ToString() : "0"; } var checkVal = fieldQueryValue; if(fieldQueryKind == "1") //模糊匹配 { if(fieldQueryValueType == "text") { if(checkObj.ToString().Contains(GetExpressionVal(checkVal))) passCount += 1; } } else if(fieldQueryKind == "2") //精确匹配 { if(fieldQueryValueType == "int") { if(int.Parse(Function.CheckInt(checkObj.ToString())) == int.Parse(Function.CheckNum(checkVal))) passCount += 1; } else if(fieldQueryValueType == "number") { if(decimal.Parse(Function.CheckNum(checkObj.ToString())) == decimal.Parse(Function.CheckNum(checkVal))) passCount += 1; } else { if(checkObj.ToString() == GetExpressionVal(checkVal)) passCount += 1; } } else if(fieldQueryKind == "3") //范围匹配 { string[] val = checkVal.Split(':'); if(fieldQueryModel == "request_param") { Dictionary req = getRequestParams(projectId, content); if(fieldQueryValueType == "number") { if(!string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && decimal.Parse(checkObj) >= decimal.Parse(Function.CheckNum(req[val[0]])) && decimal.Parse(checkObj) <= decimal.Parse(Function.CheckNum(req[val[1]]))) passCount += 1; else if(!string.IsNullOrEmpty(req[val[0]]) && string.IsNullOrEmpty(req[val[1]]) && decimal.Parse(checkObj) >= decimal.Parse(Function.CheckNum(req[val[0]]))) passCount += 1; else if(string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && decimal.Parse(checkObj) <= decimal.Parse(Function.CheckNum(req[val[1]]))) passCount += 1; } else if(fieldQueryValueType == "int") { if(!string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && int.Parse(checkObj) >= int.Parse(Function.CheckInt(req[val[0]])) && int.Parse(checkObj) <= int.Parse(Function.CheckInt(req[val[1]]))) passCount += 1; else if(!string.IsNullOrEmpty(req[val[0]]) && string.IsNullOrEmpty(req[val[1]]) && int.Parse(checkObj) >= int.Parse(Function.CheckInt(req[val[0]]))) passCount += 1; else if(string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && int.Parse(checkObj) <= int.Parse(Function.CheckInt(req[val[1]]))) passCount += 1; } else if(fieldQueryValueType.StartsWith("date")) { if(!string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && DateTime.Parse(checkObj) >= DateTime.Parse(req[val[0]]) && DateTime.Parse(checkObj) <= DateTime.Parse(req[val[1]])) passCount += 1; else if(!string.IsNullOrEmpty(req[val[0]]) && string.IsNullOrEmpty(req[val[1]]) && DateTime.Parse(checkObj) >= DateTime.Parse(req[val[0]])) passCount += 1; else if(string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && DateTime.Parse(checkObj) <= DateTime.Parse(req[val[1]])) passCount += 1; } } else if(fieldQueryModel == "fixed_value") { if(fieldQueryValueType == "number") { if(!string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && decimal.Parse(checkObj) >= decimal.Parse(Function.CheckNum(val[0])) && decimal.Parse(Function.CheckNum(checkObj.ToString())) <= decimal.Parse(Function.CheckNum(val[1]))) passCount += 1; else if(!string.IsNullOrEmpty(val[0]) && string.IsNullOrEmpty(val[1]) && decimal.Parse(Function.CheckNum(checkObj.ToString())) >= decimal.Parse(Function.CheckNum(val[0]))) passCount += 1; else if(string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && decimal.Parse(Function.CheckNum(checkObj.ToString())) <= decimal.Parse(Function.CheckNum(val[1]))) passCount += 1; } else if(fieldQueryValueType == "int") { if(!string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && int.Parse(checkObj) >= int.Parse(Function.CheckInt(val[0])) && int.Parse(Function.CheckInt(checkObj.ToString())) <= int.Parse(Function.CheckInt(val[1]))) passCount += 1; else if(!string.IsNullOrEmpty(val[0]) && string.IsNullOrEmpty(val[1]) && int.Parse(Function.CheckInt(checkObj.ToString())) >= int.Parse(Function.CheckInt(val[0]))) passCount += 1; else if(string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && int.Parse(Function.CheckInt(checkObj.ToString())) <= int.Parse(Function.CheckInt(val[1]))) passCount += 1; } else if(fieldQueryValueType.StartsWith("date")) { if(!string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && DateTime.Parse(checkObj) >= DateTime.Parse(GetExpressionVal(val[0])) && DateTime.Parse(checkObj) <= DateTime.Parse(GetExpressionVal(val[1]))) passCount += 1; else if(!string.IsNullOrEmpty(val[0]) && string.IsNullOrEmpty(val[1]) && DateTime.Parse(checkObj) >= DateTime.Parse(GetExpressionVal(val[0]))) passCount += 1; else if(string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && DateTime.Parse(checkObj) <= DateTime.Parse(GetExpressionVal(val[1]))) passCount += 1; } } } else if(fieldQueryKind == "4") //取反匹配 { if(fieldQueryValueType == "int") { if(int.Parse(checkObj) != int.Parse(Function.CheckInt(checkVal))) passCount += 1; } else if(fieldQueryValueType == "number") { if(decimal.Parse(checkObj) != decimal.Parse(Function.CheckNum(checkVal))) passCount += 1; } else if(fieldQueryValueType == "text") { if(checkObj.ToString() != GetExpressionVal(checkVal)) passCount += 1; } } else if(fieldQueryKind == "5" || fieldQueryKind == "6") //数组匹配/排除 { string val = ","; string[] valList = checkVal.Split(','); if(fieldQueryModel == "request_param") { Dictionary req = getRequestParams(projectId, content); foreach(string subVal in valList) { val += req[subVal] + ","; } } else if(fieldQueryModel == "fixed_value") { foreach(string subVal in valList) { val += GetExpressionVal(subVal) + ","; } } else if(fieldQueryModel == "db_field") { foreach(string subVal in valList) { val += GetDbExpressionVal(subVal) + ","; } } if(fieldQueryKind == "5" && val.Contains("," + checkObj.ToString() + ",")) passCount += 1; if(fieldQueryKind == "6" && val.Contains("," + checkObj.ToString() + ",")) passCount += 1; } } } if(loopSet.conditionMode == "all" && passCount == allCount) prizeFlag = true; else if(loopSet.conditionMode == "one" && passCount >= 1) prizeFlag = true; else prizeFlag = false; } else { prizeFlag = false; } if(prizeFlag) { prizeSendDo(projectId, sub, objId, content, loopSet); op = afterPrizeFlag; } } var parent = db.Ado.GetScalar("select " + parentField + " from " + tableEnName + " where " + sonField + "=" + objId); if(parent != null) { objId = parent.ToString(); } index += 1; } } else { prizeSendDo(projectId, sub, prizeObjectId, content, new PriLoopSet()); } } } static decimal loopAmount = 0; public static void prizeSendDo(int projectId, PriList sub, string prizeObjectId, string content, PriLoopSet set) { var recordService = App.GetService(); var conditionService = App.GetService(); var returnFieldService = App.GetService(); var queryTableService = App.GetService(); var amountSetService = App.GetService(); //查询匹配条件 Dictionary condiDic = new Dictionary(); if(sub.prizeSourceFieldType == "condi") condiDic = condition(projectId, content); if(sub.prizeSourceFieldType == "loop") condiDic = loopCondition(projectId, sub, prizeObjectId, content); var prizeSourceField = sub.prizeSourceField; //奖励金额来源字段(对应条件匹配返回字段) var prizePercent = sub.prizePercent; //奖励比例 var prizeAmount = sub.prizeAmount; //奖励固定值 var prizeContent = sub.prizeContent; //奖励内容 var conditionMode = sub.conditionMode; //条件模式 var recursionFlag = sub.recursionFlag; //是否递归 var conditions = conditionService.GetList(m => m.listId == sub.id); int allCount = conditions.Count; //所有奖励条件数 int passCount = 0; //通过条件数 foreach(var condition in conditions) { var returnFieldId = condition.returnFieldId; //条件返回字段 var fieldQueryKind = condition.fieldQueryKind; //匹配条件 var fieldQueryModel = condition.fieldQueryModel; //匹配方式 var fieldQueryValue = condition.fieldQueryValue; //匹配值 var fieldQueryValueType = condition.fieldQueryValueType; //匹配值类型 string checkObj = ""; if(returnFieldId.Contains(",")) { string[] returnFieldIdList = returnFieldId.Split(','); foreach(string subField in returnFieldIdList) { string val = condiDic.ContainsKey(subField) ? condiDic[subField].ToString() : "0"; checkObj += val + ","; } checkObj = checkObj.TrimEnd(','); } else if (returnFieldId.Contains("+") || returnFieldId.Contains("-") || returnFieldId.Contains("*") || returnFieldId.Contains("/") || returnFieldId.Contains("(") || returnFieldId.Contains(")")) { string expresssion = returnFieldId; string[] returnFields = returnFieldId.Split(new char[] { '+', '-', '*', '/', '(', ')' }); foreach(string returnField in returnFields) { string val = condiDic.ContainsKey(returnField) ? condiDic[returnField].ToString() : "0"; expresssion = expresssion.Replace(returnField, val); } DataTable dt = new DataTable(); checkObj = dt.Compute(expresssion, "false").ToString(); } else { checkObj = condiDic.ContainsKey(returnFieldId) ? condiDic[returnFieldId].ToString() : "0"; } string checkVal = fieldQueryValue; if(fieldQueryKind == "1") //模糊匹配 { if(fieldQueryValueType == "text") { if(checkObj.ToString().Contains(GetExpressionVal(checkVal))) passCount += 1; } } else if(fieldQueryKind == "2") //精确匹配 { if(fieldQueryValueType == "int") { if(int.Parse(Function.CheckInt(checkObj.ToString())) == int.Parse(Function.CheckNum(checkVal))) passCount += 1; } else if(fieldQueryValueType == "number") { if(decimal.Parse(Function.CheckNum(checkObj.ToString())) == decimal.Parse(Function.CheckNum(checkVal))) passCount += 1; } else { if(checkObj.ToString() == GetExpressionVal(checkVal)) passCount += 1; } } else if(fieldQueryKind == "3") //范围匹配 { string[] val = checkVal.Split(':'); if(fieldQueryModel == "request_param") { Dictionary req = getRequestParams(projectId, content); if(fieldQueryValueType == "number") { if(!string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && decimal.Parse(checkObj) >= decimal.Parse(Function.CheckNum(req[val[0]])) && decimal.Parse(checkObj) <= decimal.Parse(Function.CheckNum(req[val[1]]))) passCount += 1; else if(!string.IsNullOrEmpty(req[val[0]]) && string.IsNullOrEmpty(req[val[1]]) && decimal.Parse(checkObj) >= decimal.Parse(Function.CheckNum(req[val[0]]))) passCount += 1; else if(string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && decimal.Parse(checkObj) <= decimal.Parse(Function.CheckNum(req[val[1]]))) passCount += 1; } else if(fieldQueryValueType == "int") { if(!string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && int.Parse(checkObj) >= int.Parse(Function.CheckInt(req[val[0]])) && int.Parse(checkObj) <= int.Parse(Function.CheckInt(req[val[1]]))) passCount += 1; else if(!string.IsNullOrEmpty(req[val[0]]) && string.IsNullOrEmpty(req[val[1]]) && int.Parse(checkObj) >= int.Parse(Function.CheckInt(req[val[0]]))) passCount += 1; else if(string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && int.Parse(checkObj) <= int.Parse(Function.CheckInt(req[val[1]]))) passCount += 1; } else if(fieldQueryValueType.StartsWith("date")) { if(!string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && DateTime.Parse(checkObj) >= DateTime.Parse(req[val[0]]) && DateTime.Parse(checkObj) <= DateTime.Parse(req[val[1]])) passCount += 1; else if(!string.IsNullOrEmpty(req[val[0]]) && string.IsNullOrEmpty(req[val[1]]) && DateTime.Parse(checkObj) >= DateTime.Parse(req[val[0]])) passCount += 1; else if(string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && DateTime.Parse(checkObj) <= DateTime.Parse(req[val[1]])) passCount += 1; } } else if(fieldQueryModel == "fixed_value") { if(fieldQueryValueType == "number") { if(!string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && decimal.Parse(Function.CheckNum(checkObj.ToString())) >= decimal.Parse(Function.CheckNum(val[0])) && decimal.Parse(Function.CheckNum(checkObj.ToString())) <= decimal.Parse(Function.CheckNum(val[1]))) passCount += 1; else if(!string.IsNullOrEmpty(val[0]) && string.IsNullOrEmpty(val[1]) && decimal.Parse(Function.CheckNum(checkObj.ToString())) >= decimal.Parse(Function.CheckNum(val[0]))) passCount += 1; else if(string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && decimal.Parse(Function.CheckNum(checkObj.ToString())) <= decimal.Parse(Function.CheckNum(val[1]))) passCount += 1; } else if(fieldQueryValueType == "int") { if(!string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && int.Parse(Function.CheckNum(checkObj.ToString())) >= int.Parse(Function.CheckInt(val[0])) && int.Parse(Function.CheckInt(checkObj.ToString())) <= int.Parse(Function.CheckInt(val[1]))) passCount += 1; else if(!string.IsNullOrEmpty(val[0]) && string.IsNullOrEmpty(val[1]) && int.Parse(Function.CheckInt(checkObj.ToString())) >= int.Parse(Function.CheckInt(val[0]))) passCount += 1; else if(string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && int.Parse(Function.CheckInt(checkObj.ToString())) <= int.Parse(Function.CheckInt(val[1]))) passCount += 1; } else if(fieldQueryValueType.StartsWith("date")) { if(!string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && DateTime.Parse(checkObj.ToString()) >= DateTime.Parse(GetExpressionVal(val[0])) && DateTime.Parse(checkObj.ToString()) <= DateTime.Parse(GetExpressionVal(val[1]))) passCount += 1; else if(!string.IsNullOrEmpty(val[0]) && string.IsNullOrEmpty(val[1]) && DateTime.Parse(checkObj.ToString()) >= DateTime.Parse(GetExpressionVal(val[0]))) passCount += 1; else if(string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && DateTime.Parse(checkObj.ToString()) <= DateTime.Parse(GetExpressionVal(val[1]))) passCount += 1; } } } else if(fieldQueryKind == "4") //取反匹配 { if(fieldQueryValueType == "int") { if(int.Parse(Function.CheckNum(checkObj.ToString())) != int.Parse(Function.CheckInt(checkVal))) passCount += 1; } else if(fieldQueryValueType == "number") { if(decimal.Parse(Function.CheckNum(checkObj.ToString())) != decimal.Parse(Function.CheckNum(checkVal))) passCount += 1; } else if(fieldQueryValueType == "text") { if(checkObj.ToString() != GetExpressionVal(checkVal)) passCount += 1; } } else if(fieldQueryKind == "5" || fieldQueryKind == "6") //数组匹配/排除 { string val = ","; string[] valList = checkVal.Split(','); if(fieldQueryModel == "request_param") { Dictionary req = getRequestParams(projectId, content); foreach(string subVal in valList) { val += req[subVal] + ","; } } else if(fieldQueryModel == "fixed_value") { foreach(string subVal in valList) { val += GetExpressionVal(subVal) + ","; } } else if(fieldQueryModel == "db_field") { foreach(string subVal in valList) { val += GetDbExpressionVal(subVal) + ","; } } if(fieldQueryKind == "5" && val.Contains("," + checkObj.ToString() + ",")) passCount += 1; if(fieldQueryKind == "6" && val.Contains("," + checkObj.ToString() + ",")) passCount += 1; } } bool op = false; if(conditionMode == "all" && passCount == allCount && passCount > 0) op = true; else if(conditionMode == "one" && passCount >= 1) op = true; if(op) //满足条件 { decimal number = 0; if(prizeSourceField.Contains("/")) { number = decimal.Parse(prizeSourceField.Split('/')[1]); prizeSourceField = prizeSourceField.Split('/')[0]; } string prizeSourceData = ""; if(prizeSourceField.Contains(",")) { string[] prizeSourceFieldList = prizeSourceField.Split(','); foreach(string subField in prizeSourceFieldList) { string val = condiDic.ContainsKey(subField) ? condiDic[subField].ToString() : "0"; prizeSourceData += val + ","; } prizeSourceData = prizeSourceData.TrimEnd(','); } else { prizeSourceData = condiDic.ContainsKey(prizeSourceField) ? condiDic[prizeSourceField].ToString() : "0"; } if(string.IsNullOrEmpty(prizeSourceData)) prizeSourceData = "0"; if(prizeSourceField.Contains("/") && number > 0) { decimal prizeSourceDataNum = decimal.Parse(prizeSourceData) / number; prizeSourceData = prizeSourceDataNum.ToString("f2"); } decimal prizeAmt = 0; var amountSet = amountSetService.GetFirst(m => m.listId == sub.id && m.prizeSourceField == prizeSourceData); if(amountSet != null) { prizePercent = amountSet.prizePercent; prizeAmount = amountSet.prizeAmount; } if(prizeSourceData.Contains(",")) { string checkField = prizeSourceData.Split(',')[0] + ","; amountSet = amountSetService.GetFirst(m => m.listId == sub.id && m.prizeSourceField.StartsWith(checkField) && m.prizeSourceField.EndsWith(",%")); if(amountSet != null) { prizePercent = amountSet.prizePercent; prizeAmount = amountSet.prizeAmount; prizeSourceData = prizeSourceData.Split(',')[1]; } } if(prizePercent > 0) prizeAmt += decimal.Parse(Function.CheckNum(prizeSourceData)) * prizePercent; if(prizeAmount > 0) prizeAmt += prizeAmount; decimal getPrizeAmount = prizeAmt; if(set.levelDiffFlag) prizeAmt -= loopAmount; if(prizeAmt > 0) { var req = getRequestParams(projectId, content); var requestParamField = req[sub.requestParamField]; var sendFlag = recordService.Any(m => m.prizeObjId == prizeObjectId && m.listId == sub.id && m.requestParamField == requestParamField); if(!sendFlag) { recordService.Add(new PriRecord() { createDate = DateTime.Now, projectId = projectId, listId = sub.id, prizeAmount = prizeAmt, prizeObjId = prizeObjectId, requestParamField = requestParamField, batchNo = batchNo, }); loopAmount = getPrizeAmount; prizeToDatabase(projectId, sub.id, content); //入库 } } } } //递归条件判断 public static Dictionary loopCondition(int projectId, PriList sub, string objId, string content) { Dictionary dic = new Dictionary(); var queryTableService = App.GetService(); var queryFieldService = App.GetService(); var queryReturnFieldService = App.GetService(); int passCount = 0; //查询表 var queryTables = queryTableService.GetList(m => m.listId == sub.id); int allCount = queryTables.Count; foreach(var queryTable in queryTables) { //查询返回字段 string fields = "1"; var returnFields = queryReturnFieldService.GetList(m => m.objectTableId == queryTable.id); if(returnFields.Count > 0) { fields = ""; foreach(var returnField in returnFields) { if(returnField.fieldReturnKind == "2") { fields += "count(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName + ","; } else if(returnField.fieldReturnKind == "3") { fields += "sum(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName + ","; } else if(returnField.fieldReturnKind == "4") { fields += "avg(" + returnField.fieldEnName + ") " + queryTable.tableEnName + "_" + returnField.fieldEnName + ","; } else { fields += returnField.fieldEnName + " " + queryTable.tableEnName + "_" + returnField.fieldEnName + ","; } } fields = fields.TrimEnd(','); } //查询匹配条件 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; if(fieldQueryModel == "loop_field") fieldQueryValue = objId; string fieldQueryValueType = queryField.fieldQueryValueType; if(fieldQueryKind == "1") //模糊匹配 { condi += " and " + fieldEnName + " like "; if(fieldQueryModel == "request_param") { Dictionary req = getRequestParams(projectId, content); string val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0"; condi += "'%" + val + "%'"; } else if(fieldQueryModel == "fixed_value") { condi += "'%" + GetExpressionVal(fieldQueryValue) + "%'"; } else if(fieldQueryModel == "db_field") { condi += "'%" + GetDbExpressionVal(fieldQueryValue) + "%'"; } } else if(fieldQueryKind == "2") //精确匹配 { condi += " and " + fieldEnName + "="; string val = fieldQueryValue; if(fieldQueryModel == "request_param") { Dictionary 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); } if(fieldQueryValueType == "text") { val = "'" + 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") { Dictionary req = getRequestParams(projectId, content); foreach(string subval in valList) { if(fieldQueryValueType == "text") { val += "'" + req[subval] + "',"; } else { val += req[subval] + ","; } } } else if(fieldQueryModel == "fixed_value") { foreach(string subval in valList) { if(fieldQueryValueType == "text") { val += "'" + GetExpressionVal(subval) + "',"; } else { val += GetExpressionVal(subval) + ","; } } } else if(fieldQueryModel == "db_field") { foreach(string subval in valList) { if(fieldQueryValueType == "text") { val += "'" + GetDbExpressionVal(subval) + "',"; } else { val += GetDbExpressionVal(subval) + ","; } } } val = val.TrimEnd(','); condi += val + ")"; } else if(fieldQueryKind == "3") //范围匹配 { string[] val = fieldQueryValue.Split(':'); if(fieldQueryModel == "request_param") { Dictionary 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(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 + ">='" + GetDbExpressionVal(val[0]) + "'"; if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<='" + GetDbExpressionVal(val[1]) + "'"; } } } else if(fieldQueryKind == "4") //取反匹配 { condi += " and " + fieldEnName + "!="; string val = ""; if(fieldQueryModel == "request_param") { Dictionary 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); } if(fieldQueryValueType == "text") { val = "'" + val + "'"; } condi += val; } } 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(System.Data.DataColumn item in items.Columns) { if(!dic.ContainsKey(item.ColumnName)) dic.Add(item.ColumnName, items.Rows[0][item.ColumnName].ToString()); } } } return dic; } //奖励入库 public static void prizeToDatabase(int projectId, int listId, string content) { var prizeInTableService = App.GetService(); var prizeInFieldService = App.GetService(); var prizeInQueryFieldService = App.GetService(); //入库表 var prizeInTables = prizeInTableService.GetList(m => m.listId == listId); foreach(var prizeInTable in prizeInTables) { var db = initDb(prizeInTable.databaseId); Dictionary doFields = new Dictionary(); //入库字段 var prizeInFields = prizeInFieldService.GetList(m => m.inTableId == prizeInTable.id); foreach(var prizeInField in prizeInFields) { string fieldEnName = prizeInField.fieldEnName; string fieldQueryModel = prizeInField.fieldQueryModel; string fieldQueryValue = prizeInField.fieldQueryValue; string fieldQueryValueType = prizeInField.fieldQueryValueType; if(fieldQueryModel == "request_param") { Dictionary req = getRequestParams(projectId, content); fieldQueryValue = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0"; } else if(fieldQueryModel == "query_field") { } else if(fieldQueryModel == "fixed_value") { fieldQueryValue = GetExpressionVal(fieldQueryValue); } else if(fieldQueryModel == "db_field") { fieldQueryValue = GetDbExpressionVal(fieldQueryValue); } if(fieldQueryValueType == "text") doFields.Add(fieldEnName, fieldQueryValue); if(fieldQueryValueType == "int") doFields.Add(fieldEnName, int.Parse(fieldQueryValue)); if(fieldQueryValueType == "number") doFields.Add(fieldEnName, decimal.Parse(fieldQueryValue)); if(fieldQueryValueType == "datetime") doFields.Add(fieldEnName, DateTime.Parse(fieldQueryValue)); if(fieldQueryValueType == "bool") doFields.Add(fieldEnName, bool.Parse(fieldQueryValue)); } //查询匹配条件 string condi = ""; var queryFields = prizeInQueryFieldService.GetList(m => m.inTableId == prizeInTable.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 req = getRequestParams(projectId, content); string val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0"; condi += "'%" + val + "%'"; } else if(fieldQueryModel == "fixed_value") { condi += "'%" + fieldQueryValue + "%'"; } } else if(fieldQueryKind == "2") //精确匹配 { condi += " and " + fieldEnName + "="; string val = ""; if(fieldQueryModel == "request_param") { Dictionary req = getRequestParams(projectId, content); val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0"; } else if(fieldQueryModel == "fixed_value") { val = fieldQueryValue; } if(fieldQueryValueType == "text") { val = "'" + 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") { Dictionary req = getRequestParams(projectId, content); foreach(string sub in valList) { if(fieldQueryValueType == "text") { val += "'" + req[sub] + "',"; } else { val += req[sub] + ","; } } } else if(fieldQueryModel == "fixed_value") { foreach(string sub in valList) { if(fieldQueryValueType == "text") { val += "'" + GetExpressionVal(sub) + "',"; } else { val += GetExpressionVal(sub) + ","; } } } else if(fieldQueryModel == "db_field") { foreach(string sub in valList) { if(fieldQueryValueType == "text") { val += "'" + GetDbExpressionVal(sub) + "',"; } else { val += GetDbExpressionVal(sub) + ","; } } } val = val.TrimEnd(','); condi += val + ")"; } else if(fieldQueryKind == "3") //范围匹配 { string[] val = fieldQueryValue.Split(':'); if(fieldQueryModel == "request_param") { Dictionary 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 + ">='" + val[0] + "'"; if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<='" + val[1] + "'"; } } } else if(fieldQueryKind == "4") //取反匹配 { condi += " and " + fieldEnName + "!="; string val = ""; if(fieldQueryModel == "request_param") { Dictionary req = getRequestParams(projectId, content); val = req.ContainsKey(fieldQueryValue) ? req[fieldQueryValue] : "0"; } else if(fieldQueryModel == "fixed_value") { val = fieldQueryValue; } if(fieldQueryValueType == "text") { val = "'" + val + "'"; } condi += val; } } if(prizeInTable.excuteKind == "add") db.Insertable(doFields).AS(prizeInTable.tableEnName).ExecuteCommand(); if(prizeInTable.excuteKind == "update") db.Updateable(doFields).AS(prizeInTable.tableEnName).Where("1=1" + condi).ExecuteCommand(); Function.WriteLog(DateTime.Now.ToString() + "\n" + prizeInTable.excuteKind + "\n" + prizeInTable.tableEnName + "\n" + Newtonsoft.Json.JsonConvert.SerializeObject(doFields) + "\n\n", "奖励入库数据"); } } //固定值表达式 public static string GetExpressionVal(string str) { if(str == "#{now}#") str = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); if(str == "#{today}#") str = DateTime.Now.ToString("yyyy-MM-dd"); if(str == "#{this_month}#") str = DateTime.Now.ToString("yyyy-MM"); if(str.StartsWith("#{now") && str.EndsWith("DAY}#")) str = DateTime.Now.AddDays(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd HH:mm:ss"); if(str.StartsWith("#{now") && str.EndsWith("MONTH}#")) str = DateTime.Now.AddMonths(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd HH:mm:ss"); if(str.StartsWith("#{today") && str.EndsWith("DAY}#")) str = DateTime.Now.AddDays(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd"); if(str.StartsWith("#{today") && str.EndsWith("MONTH}#")) str = DateTime.Now.AddMonths(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd"); if(str.StartsWith("#{this_month") && str.EndsWith("DAY}#")) str = DateTime.Now.AddDays(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM"); if(str.StartsWith("#{this_month") && str.EndsWith("MONTH}#")) str = DateTime.Now.AddMonths(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM"); return str; } //库内字段值表达式 public static string GetDbExpressionVal(string str) { string[] data = str.Replace("#", "").Replace("{", "").Replace("}", "").Split(','); if(str.StartsWith("#{") && str.EndsWith("DAY}#")) str = "DATE_ADD(" + data[0] + ",INTERVAL " + data[1] + " DAY)"; if(str.StartsWith("#{") && str.EndsWith("MONTH}#")) str = "DATE_ADD(" + data[0] + ",INTERVAL " + data[1] + " MONTH)"; return str; } } }