Quellcode durchsuchen

奖励金额设置

lcl vor 7 Monaten
Ursprung
Commit
4803de4613

+ 109 - 0
Controllers/Admin/Pri/PriListAmountSetController.cs

@@ -0,0 +1,109 @@
+using Vo;
+using Microsoft.AspNetCore.Mvc;
+using Model;
+using Services;
+using Model.Base;
+using Vo.Admin;
+using Mapster;
+using Infrastructure;
+
+
+namespace Controllers.Admin
+{
+    /// <summary>
+    /// PriListAmountSet)Controller
+    /// </summary>
+    // [Route("${Router}$")]
+    // [ApiExplorerSettings(GroupName = "PriListAmountSet")]
+    public class PriListAmountSetController : BaseController
+    {
+        /// <summary>
+        /// api分组接口
+        /// </summary>
+        private readonly IPriListAmountSetService _PriListAmountSetService;
+
+
+        public PriListAmountSetController(IPriListAmountSetService PriListAmountSetService)
+        {
+            _PriListAmountSetService = PriListAmountSetService;
+
+        }
+
+          /// <param name="page">分页参数</param>
+        /// <summary>
+        /// 列表
+        /// </summary>
+        /// <param name="page">分页对象</param>
+        /// <param name="param">参数请求体</param>
+        /// <returns>列表</returns>
+        [HttpGet]
+        [Route("/v1/pri/PriListAmountSet/getPriListAmountSetList")]
+        public IActionResult getPriListAmountSetList([FromQuery] PagerInfo page, [FromQuery] PriListAmountSet param)
+        {
+            var response = _PriListAmountSetService.getPriListAmountSetList(page, param);
+            return SUCCESS(response);
+        }
+
+
+        /// <summary>
+        /// 详情
+        /// </summary>
+        /// <param name="param">参数请求体</param>
+        /// <returns>详情</returns>
+        [HttpGet]
+        [Route("/v1/pri/PriListAmountSet/getPriListAmountSetQuery")]
+        public IActionResult getPriListAmountSetQuery([FromQuery] PriListAmountSet param)
+        {
+            var response = _PriListAmountSetService.GetFirst(m => m.id == param.id).Adapt<GetPriListAmountSetQueryVo>();
+            return SUCCESS(response);
+        }
+
+
+        /// <summary>
+        /// 添加
+        /// </summary>
+        /// <param name="param">参数请求体</param>
+        /// <returns>添加</returns>
+        [HttpPost]
+        [Route("/v1/pri/PriListAmountSet/addPriListAmountSet")]
+        public IActionResult addPriListAmountSet([FromBody] PriListAmountSet param)
+        {
+            var modal = param.Adapt<PriListAmountSet>().ToCreate(HttpContext);
+            var response = _PriListAmountSetService.Add(modal);
+            return SUCCESS(response);
+        }
+
+
+        /// <summary>
+        /// 修改
+        /// </summary>
+        /// <param name="param">参数请求体</param>
+        /// <returns>修改</returns>
+        [HttpPut]
+        [Route("/v1/pri/PriListAmountSet/updatePriListAmountSet")]
+        public IActionResult updatePriListAmountSet([FromBody] PriListAmountSet param)
+        {
+            var modal = param.Adapt<PriListAmountSet>().ToCreate(HttpContext);
+            var response = _PriListAmountSetService.Update(modal);
+            return SUCCESS(response);
+        }
+
+
+        /// <summary>
+        /// 删除
+        /// </summary>
+        /// <param name="id">ID</param>
+        /// <returns>删除</returns>
+        [HttpDelete]
+        [Route("/v1/pri/PriListAmountSet/deletePriListAmountSet/{id}")]
+        public IActionResult deletePriListAmountSet(int id)
+        {
+            var response = _PriListAmountSetService.Delete(id);
+            return SUCCESS(response);
+        }
+
+
+
+
+    }
+}

+ 0 - 1
Controllers/Admin/Pri/PriListController.cs

@@ -103,7 +103,6 @@ namespace Controllers.Admin
         }
 
 
-          /// <param name="page">分页参数</param>
         /// <summary>
         /// 下拉框数据
         /// </summary>

+ 92 - 0
Model/Database/PriListAmountSet.cs

@@ -0,0 +1,92 @@
+using Mapster;
+
+
+namespace Model
+{
+    /// <summary>
+    /// 奖励金额设置 pri_list_amount_set
+    /// </summary>
+    [SugarTable("pri_list_amount_set", "奖励金额设置")]
+    [Tenant("0")]
+    public class PriListAmountSet
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "ID", IsPrimaryKey = true, IsIdentity = true, ColumnName = "id")]
+        public int id { get; set; }
+
+
+        /// <summary>
+        /// 状态
+        /// </summary>
+        [SugarColumn(ColumnDescription = "状态", ColumnName = "status")]
+        public int status { get; set; }
+
+
+        /// <summary>
+        /// 排序
+        /// </summary>
+        [SugarColumn(ColumnDescription = "排序", ColumnName = "sort")]
+        public int sort { get; set; }
+
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "版本号", ColumnName = "version")]
+        public int version { get; set; }
+
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "创建时间", ColumnName = "create_date")]
+        public DateTime? createDate { get; set; }
+
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        [SugarColumn(ColumnDescription = "更新时间", ColumnName = "update_date")]
+        public DateTime? updateDate { get; set; }
+
+
+        /// <summary>
+        /// 项目
+        /// </summary>
+        [SugarColumn(ColumnDescription = "项目", ColumnName = "project_id")]
+        public int projectId { get; set; }
+
+
+        /// <summary>
+        /// 配置ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "配置ID", ColumnName = "list_id")]
+        public int listId { get; set; }
+
+
+        /// <summary>
+        /// 奖励比例
+        /// </summary>
+        [SugarColumn(ColumnDescription = "奖励比例", ColumnName = "prize_percent")]
+        public decimal prizePercent { get; set; }
+
+
+        /// <summary>
+        /// 奖励固定金额
+        /// </summary>
+        [SugarColumn(ColumnDescription = "奖励固定金额", ColumnName = "prize_amount")]
+        public decimal prizeAmount { get; set; }
+
+
+        /// <summary>
+        /// 奖励金额来源数据
+        /// </summary>
+        [SugarColumn(ColumnDescription = "奖励金额来源数据", Length = 50, ColumnName = "prize_source_field")]
+        public string? prizeSourceField { get; set; }
+
+
+
+    }
+}

+ 36 - 0
Model/Vo/Admin/GetPriListAmountSetListVo.cs

@@ -0,0 +1,36 @@
+using Newtonsoft.Json;
+
+namespace Vo.Admin
+{
+    /// <summary>
+    /// 列表
+    /// </summary>
+    public class GetPriListAmountSetListVo
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        public int id { get; set; }
+
+
+        /// <summary>
+        /// 奖励比例
+        /// </summary>
+        public decimal prizePercent { get; set; }
+
+
+        /// <summary>
+        /// 奖励固定金额
+        /// </summary>
+        public decimal prizeAmount { get; set; }
+
+
+        /// <summary>
+        /// 奖励金额来源数据
+        /// </summary>
+        public string prizeSourceField { get; set; }
+
+
+
+    }
+}

+ 42 - 0
Model/Vo/Admin/GetPriListAmountSetQueryVo.cs

@@ -0,0 +1,42 @@
+using Newtonsoft.Json;
+
+namespace Vo.Admin
+{
+    /// <summary>
+    /// 详情
+    /// </summary>
+    public class GetPriListAmountSetQueryVo
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        public int id { get; set; }
+
+
+        /// <summary>
+        /// 配置ID
+        /// </summary>
+        public int listId { get; set; }
+
+
+        /// <summary>
+        /// 奖励比例
+        /// </summary>
+        public decimal prizePercent { get; set; }
+
+
+        /// <summary>
+        /// 奖励固定金额
+        /// </summary>
+        public decimal prizeAmount { get; set; }
+
+
+        /// <summary>
+        /// 奖励金额来源数据
+        /// </summary>
+        public string prizeSourceField { get; set; }
+
+
+
+    }
+}

+ 22 - 0
Services/IService/IPriListAmountSetService.cs

@@ -0,0 +1,22 @@
+using Model;
+using Model.Base;
+using Microsoft.AspNetCore.Mvc;
+using Vo.Admin;
+
+
+namespace Services
+{
+    public interface IPriListAmountSetService : IBaseService<PriListAmountSet>
+    {
+        /// <summary>
+        /// 奖励金额设置-列表
+        /// </summary>
+        /// <param name="param">参数请求体</param>
+        /// <param name="page">分页参数</param>
+        /// <returns>列表</returns>
+        PagedInfo<GetPriListAmountSetListVo> getPriListAmountSetList([FromQuery] PagerInfo page, [FromQuery] PriListAmountSet param);
+
+
+
+    }
+}

+ 40 - 0
Services/PriListAmountSetService.cs

@@ -0,0 +1,40 @@
+using Attribute;
+using Model;
+using Model.Base;
+using Repository;
+using Service;
+using Microsoft.AspNetCore.Mvc;
+using Vo.Admin;
+
+
+namespace Services
+{
+    /// <summary>
+    /// 奖励金额设置Service业务层处理
+    /// </summary>
+    [AppService(ServiceType = typeof(IPriListAmountSetService), ServiceLifetime = LifeTime.Transient)]
+    public class PriListAmountSetService : BaseService<PriListAmountSet>, IPriListAmountSetService
+    {
+        /// <summary>
+        /// 奖励金额设置-列表
+        /// </summary>
+        /// <param name="param">参数请求体</param>
+        /// <param name="page">分页参数</param>
+        /// <returns>列表</returns>
+        public PagedInfo<GetPriListAmountSetListVo> getPriListAmountSetList([FromQuery] PagerInfo page, [FromQuery] PriListAmountSet param)
+        {
+            //拼装查询条件
+            var predicate = Expressionable.Create<PriListAmountSet>();
+            predicate = predicate.AndIF(param.listId > 0, m => m.listId == param.listId);
+            predicate = predicate.AndIF(!string.IsNullOrEmpty(param.prizeSourceField), m => m.prizeSourceField.Contains(param.prizeSourceField));
+            var response = Queryable()
+                .Where(predicate.ToExpression())
+                .OrderByDescending(m => m.id)
+                .ToPage<PriListAmountSet, GetPriListAmountSetListVo>(page);
+            return response;
+        }
+
+
+
+    }
+}

+ 152 - 32
Util/PrizeDo.cs

@@ -11,6 +11,22 @@ namespace Util
     public class PrizeDo
     {
         public static string batchNo = "";
+        //发奖入口
+        public static void sendPrize(string content)
+        {
+            batchNo = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(3);
+            int projectId = 1;
+            string priObjString = prizeObject(projectId, content);
+            if(!string.IsNullOrEmpty(priObjString))
+            {
+                string[] priObjData = priObjString.Split('|');
+                string priObj = priObjData[0];
+                string priListIds = priObjData[1];
+                prizeSend(projectId, priListIds, priObj, content);
+            }
+        }
+
+
         //接收入参
         public static Dictionary<string, string> getRequestParams(string content)
         {
@@ -166,7 +182,7 @@ namespace Util
         }
 
         //奖励发放对象
-        public static object prizeObject(int projectId, string content)
+        public static string prizeObject(int projectId, string content)
         {
             Dictionary<string, object> dic = new Dictionary<string, object>();
             var prizeObjectTableService = App.GetService<IPriPrizeObjectTableService>();
@@ -272,8 +288,11 @@ namespace Util
 
             var db = initDb(projectId);
             var item = db.SqlQueryable<Dictionary<string, object>>("select " + field + " from " + prizeObjectTable.tableEnName + " where 1=1" + condi).First();
-
-            return item[field];
+            if(item != null)
+            {
+                return item[field].ToString() + "|" + prizeObjectTable.prizeListIds;
+            }
+            return "";
         }
 
         //奖励列表
@@ -288,6 +307,13 @@ namespace Util
         //奖励发放
         public static void prizeSend(int projectId, string prizeIds, string prizeObjectId, string content)
         {
+            var recordService = App.GetService<IPriRecordService>();
+            var conditionService = App.GetService<IPriConditionService>();
+            var returnFieldService = App.GetService<IPriReturnFieldService>();
+            var queryTableService = App.GetService<IPriQueryTableService>();
+            //查询匹配条件
+            var condiDic = condition(projectId, content);
+
             var priList = prizeList(projectId, prizeIds);
             foreach(var sub in priList)
             {
@@ -296,42 +322,136 @@ namespace Util
                 var prizeContent = sub.prizeContent; //奖励内容
                 var conditionMode = sub.conditionMode; //条件模式
                 var recursionFlag = sub.recursionFlag; //是否递归
-                if(prizePercent > 0)
+                
+                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; //匹配值类型
 
-                }
-                if(prizeAmount > 0)
-                {
-                    var recordService = App.GetService<IPriRecordService>();
-                    var req = getRequestParams(content);
-                    var requestParamField = req[sub.requestParamField];
-                    var sendFlag = recordService.Any(m => m.prizeObjId == prizeObjectId && m.listId == sub.id && m.requestParamField == requestParamField);
-                    if(!sendFlag)
+                    var returnField = returnFieldService.GetFirst(m => m.id == returnFieldId);
+                    var queryTable = queryTableService.GetFirst(m => m.id == returnField.queryTableId);
+                    var checkObj = condiDic[queryTable.tableEnName + "-" + returnField.fieldEnName];
+                    var checkVal = fieldQueryValue;
+
+                    if(fieldQueryKind == "1") //模糊匹配
                     {
-                        recordService.Add(new PriRecord()
-                        {
-                            createDate = DateTime.Now,
-                            projectId = projectId,
-                            listId = sub.id,
-                            prizeAmount = sub.prizeAmount,
-                            prizeObjId = prizeObjectId,
-                            requestParamField = requestParamField,
-                            batchNo = batchNo,
-                        });
-                        // prizeToDatabase(projectId, content); //入库
+                        if(fieldQueryValueType == "text")
+                        {
+                            if(checkObj.ToString().Contains(GetExpressionVal(checkVal))) passCount += 1;
+                        }
+                    }
+                    else if(fieldQueryKind == "2") //精确匹配
+                    {
+                        if(fieldQueryValueType == "int")
+                        {
+                            if((int)checkObj == int.Parse(Function.CheckInt(checkVal))) passCount += 1;
+                        }
+                        else if(fieldQueryValueType == "number")
+                        {
+                            if((decimal)checkObj == 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<string, string> req = getRequestParams(content);
+                            if(fieldQueryValueType == "number")
+                            {
+                                if(!string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && (decimal)checkObj >= decimal.Parse(Function.CheckNum(req[val[0]])) && (decimal)checkObj <= decimal.Parse(Function.CheckNum(req[val[1]]))) passCount += 1;
+                                else if(!string.IsNullOrEmpty(req[val[0]]) && string.IsNullOrEmpty(req[val[1]]) && (decimal)checkObj >= decimal.Parse(Function.CheckNum(req[val[0]]))) passCount += 1;
+                                else if(string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && (decimal)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)checkObj >= int.Parse(Function.CheckInt(req[val[0]])) && (int)checkObj <= int.Parse(Function.CheckInt(req[val[1]]))) passCount += 1;
+                                else if(!string.IsNullOrEmpty(req[val[0]]) && string.IsNullOrEmpty(req[val[1]]) && (int)checkObj >= int.Parse(Function.CheckInt(req[val[0]]))) passCount += 1;
+                                else if(string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && (int)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)checkObj >= DateTime.Parse(req[val[0]]) && (DateTime)checkObj <= DateTime.Parse(req[val[1]])) passCount += 1;
+                                else if(!string.IsNullOrEmpty(req[val[0]]) && string.IsNullOrEmpty(req[val[1]]) && (DateTime)checkObj >= DateTime.Parse(req[val[0]])) passCount += 1;
+                                else if(string.IsNullOrEmpty(req[val[0]]) && !string.IsNullOrEmpty(req[val[1]]) && (DateTime)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)checkObj >= decimal.Parse(Function.CheckNum(val[0])) && (decimal)checkObj <= decimal.Parse(Function.CheckNum(val[1]))) passCount += 1;
+                                else if(!string.IsNullOrEmpty(val[0]) && string.IsNullOrEmpty(val[1]) && (decimal)checkObj >= decimal.Parse(Function.CheckNum(val[0]))) passCount += 1;
+                                else if(string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && (decimal)checkObj <= decimal.Parse(Function.CheckNum(val[1]))) passCount += 1;
+                            }
+                            else if(fieldQueryValueType == "int")
+                            {
+                                if(!string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && (int)checkObj >= int.Parse(Function.CheckInt(val[0])) && (int)checkObj <= int.Parse(Function.CheckInt(val[1]))) passCount += 1;
+                                else if(!string.IsNullOrEmpty(val[0]) && string.IsNullOrEmpty(val[1]) && (int)checkObj >= int.Parse(Function.CheckInt(val[0]))) passCount += 1;
+                                else if(string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && (int)checkObj <= int.Parse(Function.CheckInt(val[1]))) passCount += 1;
+                            }
+                            else if(fieldQueryValueType.StartsWith("date"))
+                            {
+                                if(!string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && (DateTime)checkObj >= DateTime.Parse(GetExpressionVal(val[0])) && (DateTime)checkObj <= DateTime.Parse(GetExpressionVal(val[1]))) passCount += 1;
+                                else if(!string.IsNullOrEmpty(val[0]) && string.IsNullOrEmpty(val[1]) && (DateTime)checkObj >= DateTime.Parse(GetExpressionVal(val[0]))) passCount += 1;
+                                else if(string.IsNullOrEmpty(val[0]) && !string.IsNullOrEmpty(val[1]) && (DateTime)checkObj <= DateTime.Parse(GetExpressionVal(val[1]))) passCount += 1;
+                            }
+                        }
+                    }
+                    else if(fieldQueryKind == "4") //取反匹配
+                    {
+                        if(fieldQueryValueType == "int")
+                        {
+                            if((int)checkObj != int.Parse(Function.CheckInt(checkVal))) passCount += 1;
+                        }
+                        else if(fieldQueryValueType == "number")
+                        {
+                            if((decimal)checkObj != decimal.Parse(Function.CheckNum(checkVal))) passCount += 1;
+                        }
+                        else if(fieldQueryValueType == "text")
+                        {
+                            if(checkObj.ToString() != GetExpressionVal(checkVal)) passCount += 1;
+                        }
                     }
                 }
-                else
+                bool op = false;
+                if(conditionMode == "all" && passCount == allCount) op = true;
+                else if(conditionMode == "one" && passCount == 1) op = true;
+                if(op) //满足条件
                 {
-                    var conditionService = App.GetService<IPriConditionService>();
-                    var conditions = conditionService.GetList(m => m.listId == sub.id);
-                    foreach(var condition in conditions)
+                    if(prizePercent > 0)
+                    {
+
+                    }
+                    if(prizeAmount > 0)
                     {
-                        var returnFieldId = condition.returnFieldId; //条件返回字段
-                        var fieldQueryKind = condition.fieldQueryKind; //匹配条件
-                        var fieldQueryModel = condition.fieldQueryModel; //匹配方式
-                        var fieldQueryValue = condition.fieldQueryValue; //匹配值
-                        var fieldQueryValueType = condition.fieldQueryValueType; //匹配值类型
+                        var req = getRequestParams(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 = sub.prizeAmount,
+                                prizeObjId = prizeObjectId,
+                                requestParamField = requestParamField,
+                                batchNo = batchNo,
+                            });
+                            // prizeToDatabase(projectId, content); //入库
+                        }
                     }
                 }
             }