|
@@ -0,0 +1,318 @@
|
|
|
+using Common;
|
|
|
+using Infrastructure;
|
|
|
+using LitJson;
|
|
|
+using Microsoft.Extensions.Localization;
|
|
|
+using Model;
|
|
|
+using NuGet.Packaging;
|
|
|
+using Services;
|
|
|
+
|
|
|
+namespace Util
|
|
|
+{
|
|
|
+ public class PrizeDo
|
|
|
+ {
|
|
|
+ //接收入参
|
|
|
+ public static Dictionary<string, string> getRequestParams(string content)
|
|
|
+ {
|
|
|
+ Dictionary<string, string> dic = new Dictionary<string, string>();
|
|
|
+ JsonData jsonData = JsonMapper.ToObject(content);
|
|
|
+ var paramService = App.GetService<IPriProjectParamService>();
|
|
|
+ var paramList = paramService.GetList(m => m.projectId == 1);
|
|
|
+ foreach(var param in paramList)
|
|
|
+ {
|
|
|
+ dic.Add(param.fieldEnName, jsonData[param.fieldEnName].ToString());
|
|
|
+ }
|
|
|
+ return dic;
|
|
|
+ }
|
|
|
+
|
|
|
+ //数据库链接
|
|
|
+ public static SqlSugarClient initDb(int projectId)
|
|
|
+ {
|
|
|
+ var databaseSetService = App.GetService<IPriDatabaseSetService>();
|
|
|
+ var connectionString = databaseSetService.GetFirst(m => m.projectId == 1);
|
|
|
+ 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 = DbType.MySql,
|
|
|
+ IsAutoCloseConnection = true,
|
|
|
+ });
|
|
|
+ return db;
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询条件匹配数据
|
|
|
+ public static Dictionary<string, object> condition(int projectId, string content)
|
|
|
+ {
|
|
|
+ Dictionary<string, object> dic = new Dictionary<string, object>();
|
|
|
+ var queryTableService = App.GetService<IPriQueryTableService>();
|
|
|
+ var queryFieldService = App.GetService<IPriQueryFieldService>();
|
|
|
+ var returnFieldService = App.GetService<IPriReturnFieldService>();
|
|
|
+ //查询表
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ fields += 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<string, string> req = getRequestParams(content);
|
|
|
+ condi += "'%" + req[fieldQueryValue] + "%'";
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ condi += "'%" + fieldQueryValue + "%'";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(fieldQueryKind == "2") //精确匹配
|
|
|
+ {
|
|
|
+ condi += " and " + fieldEnName + "=";
|
|
|
+ string val = "";
|
|
|
+ if(fieldQueryModel == "request_param")
|
|
|
+ {
|
|
|
+ Dictionary<string, string> req = getRequestParams(content);
|
|
|
+ val = req[fieldQueryValue];
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ val = fieldQueryValue;
|
|
|
+ }
|
|
|
+ if(fieldQueryValueType == "text")
|
|
|
+ {
|
|
|
+ val = "'" + val + "'";
|
|
|
+ }
|
|
|
+ condi += val;
|
|
|
+ }
|
|
|
+ else if(fieldQueryKind == "3") //范围匹配
|
|
|
+ {
|
|
|
+ string[] val = fieldQueryValue.Split(':');
|
|
|
+ if(fieldQueryModel == "request_param")
|
|
|
+ {
|
|
|
+ Dictionary<string, string> req = getRequestParams(content);
|
|
|
+ if(fieldQueryValueType == "number")
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(req[val[0]])) condi += " and " + fieldEnName + ">=" + req[val[0]];
|
|
|
+ if(!string.IsNullOrEmpty(req[val[1]])) condi += " and " + fieldEnName + "<=" + req[val[1]];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(req[val[0]])) condi += " and " + fieldEnName + ">='" + req[val[0]] + "'";
|
|
|
+ if(!string.IsNullOrEmpty(req[val[1]])) condi += " and " + fieldEnName + "<='" + req[val[1]] + "'";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ if(fieldQueryValueType == "number")
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">=" + val[0];
|
|
|
+ if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<=" + val[1];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">='" + 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<string, string> req = getRequestParams(content);
|
|
|
+ val = req[fieldQueryValue];
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ val = fieldQueryValue;
|
|
|
+ }
|
|
|
+ if(fieldQueryValueType == "text")
|
|
|
+ {
|
|
|
+ val = "'" + val + "'";
|
|
|
+ }
|
|
|
+ condi += val;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var db = initDb(projectId);
|
|
|
+ var item = db.SqlQueryable<Dictionary<string, object>>("select " + fields + " " + queryTable.tableEnName + "-" + fields + " from " + queryTable.tableEnName + " where 1=1" + condi).First();
|
|
|
+ dic.AddRange(item);
|
|
|
+ }
|
|
|
+ return dic;
|
|
|
+ }
|
|
|
+
|
|
|
+ //奖励发放对象
|
|
|
+ public static Dictionary<string, object> prizeObject(int projectId, string content)
|
|
|
+ {
|
|
|
+ Dictionary<string, object> dic = new Dictionary<string, object>();
|
|
|
+ var prizeObjectTableService = App.GetService<IPriPrizeObjectTableService>();
|
|
|
+ var prizeObjectFieldService = App.GetService<IPriPrizeObjectFieldService>();
|
|
|
+ //查询表
|
|
|
+ var prizeObjectTable = prizeObjectTableService.GetFirst(m => m.projectId == projectId) ?? new PriPrizeObjectTable();
|
|
|
+ //查询返回字段
|
|
|
+ string field = prizeObjectTable.selectField;
|
|
|
+
|
|
|
+ //查询匹配条件
|
|
|
+ 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<string, string> req = getRequestParams(content);
|
|
|
+ condi += "'%" + req[fieldQueryValue] + "%'";
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ condi += "'%" + fieldQueryValue + "%'";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(fieldQueryKind == "2") //精确匹配
|
|
|
+ {
|
|
|
+ condi += " and " + fieldEnName + "=";
|
|
|
+ string val = "";
|
|
|
+ if(fieldQueryModel == "request_param")
|
|
|
+ {
|
|
|
+ Dictionary<string, string> req = getRequestParams(content);
|
|
|
+ val = req[fieldQueryValue];
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ val = fieldQueryValue;
|
|
|
+ }
|
|
|
+ if(fieldQueryValueType == "text")
|
|
|
+ {
|
|
|
+ val = "'" + val + "'";
|
|
|
+ }
|
|
|
+ condi += val;
|
|
|
+ }
|
|
|
+ else if(fieldQueryKind == "3") //范围匹配
|
|
|
+ {
|
|
|
+ string[] val = fieldQueryValue.Split(':');
|
|
|
+ if(fieldQueryModel == "request_param")
|
|
|
+ {
|
|
|
+ Dictionary<string, string> req = getRequestParams(content);
|
|
|
+ if(fieldQueryValueType == "number")
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(req[val[0]])) condi += " and " + fieldEnName + ">=" + req[val[0]];
|
|
|
+ if(!string.IsNullOrEmpty(req[val[1]])) condi += " and " + fieldEnName + "<=" + req[val[1]];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(req[val[0]])) condi += " and " + fieldEnName + ">='" + req[val[0]] + "'";
|
|
|
+ if(!string.IsNullOrEmpty(req[val[1]])) condi += " and " + fieldEnName + "<='" + req[val[1]] + "'";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ if(fieldQueryValueType == "number")
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">=" + val[0];
|
|
|
+ if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<=" + val[1];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">='" + 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<string, string> req = getRequestParams(content);
|
|
|
+ val = req[fieldQueryValue];
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ val = fieldQueryValue;
|
|
|
+ }
|
|
|
+ if(fieldQueryValueType == "text")
|
|
|
+ {
|
|
|
+ val = "'" + val + "'";
|
|
|
+ }
|
|
|
+ condi += val;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var db = initDb(projectId);
|
|
|
+ var item = db.SqlQueryable<Dictionary<string, object>>("select " + field + " from " + prizeObjectTable.tableEnName + " where 1=1" + condi).First();
|
|
|
+ dic.AddRange(item);
|
|
|
+
|
|
|
+ var priList = prizeList(projectId, prizeObjectTable.prizeListIds);
|
|
|
+ foreach(var sub in priList)
|
|
|
+ {
|
|
|
+ var prizePercent = sub.prizePercent; //奖励比例
|
|
|
+ var prizeAmount = sub.prizeAmount; //奖励固定值
|
|
|
+ var prizeContent = sub.prizeContent; //奖励内容
|
|
|
+ var conditionMode = sub.conditionMode; //条件模式
|
|
|
+ var recursionFlag = sub.recursionFlag; //是否递归
|
|
|
+ if(prizePercent > 0)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ else if(prizeAmount > 0)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var conditionService = App.GetService<IPriConditionService>();
|
|
|
+ var conditions = conditionService.GetList(m => m.listId == sub.id);
|
|
|
+ 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; //匹配值类型
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return dic;
|
|
|
+ }
|
|
|
+
|
|
|
+ //奖励列表
|
|
|
+ public static List<PriList> prizeList(int projectId, string prizeIds)
|
|
|
+ {
|
|
|
+ List<int> ids = Tools.SpitIntArrary(prizeIds, ',').ToList();
|
|
|
+ var priListService = App.GetService<IPriListService>();
|
|
|
+ var priList = priListService.GetList(m => m.projectId == projectId && ids.Contains(m.id)).ToList();
|
|
|
+ return priList;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|