lcl 7 miesięcy temu
rodzic
commit
6e9565b81d
1 zmienionych plików z 318 dodań i 0 usunięć
  1. 318 0
      Util/PrizeDo.cs

+ 318 - 0
Util/PrizeDo.cs

@@ -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;
+        }
+    }
+}