From 9151fbf43f695ffd2b674587021c54a7450e4944 Mon Sep 17 00:00:00 2001 From: jianweie code Date: Sat, 17 Jun 2023 03:16:51 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=88=86=E9=94=80=E5=95=86=E5=8D=87=E7=BA=A7=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CoreCms.Net.Configuration/GlobalEnumVars.cs | 45 +++---- .../Order/ICoreCmsOrderRepository.cs | 9 ++ .../ICoreCmsDistributionServices.cs | 2 +- .../Order/CoreCmsOrderRepository.cs | 21 ++++ .../CoreCmsDistributionServices.cs | 114 ++++++++++++++++-- .../CoreCmsDistributionGradeController.cs | 2 +- 6 files changed, 158 insertions(+), 35 deletions(-) diff --git a/CoreCms.Net.Configuration/GlobalEnumVars.cs b/CoreCms.Net.Configuration/GlobalEnumVars.cs index 26d3a510..99e656ea 100644 --- a/CoreCms.Net.Configuration/GlobalEnumVars.cs +++ b/CoreCms.Net.Configuration/GlobalEnumVars.cs @@ -1751,15 +1751,15 @@ namespace CoreCms.Net.Configuration /// public enum WeiChatPayTradeType { - [Description("JSAPI(小程序支付)")] + [Description("小程序支付")] JSAPI = 1, - [Description("JSAPI_OFFICIAL(公众号支付)")] + [Description("公众号支付")] JSAPI_OFFICIAL = 2, - [Description("NATIVE(扫码支付)")] + [Description("扫码支付")] NATIVE = 3, - [Description("APP(APP支付)")] + [Description("APP支付")] APP = 4, - [Description("MWEB(H5支付)")] + [Description("H5支付")] MWEB = 5 } @@ -2386,30 +2386,33 @@ namespace CoreCms.Net.Configuration /// public enum DistributionConditionsCode { - - /// - /// 个人消费总额 - /// - [Description("个人消费总额(已完成的订单)")] - USER_ORDERS = 3, - /// - /// 个人订单数量 - /// - [Description("个人订单数量(已完成的订单)")] - USER_ORDERSNUM = 4, /// /// 所有商品满足条件 /// [Description("所有商品满足条件")] GOODS_ALL = 1, + /// /// 购买指定商品 /// [Description("购买指定商品")] GOODS_IDS = 2, + /// + /// 个人消费总额 + /// + [Description("个人消费总额(已完成的订单)")] + USER_ORDERS = 3, + + /// + /// 个人订单数量 + /// + [Description("个人订单数量(已完成的订单)")] + USER_ORDERSNUM = 4, + //[Description("团队消费总额")] //GROUP_ORDERS = 5, + //[Description("直推几个指定用户等级")] //USER_GRADE = 6, } @@ -3375,31 +3378,31 @@ namespace CoreCms.Net.Configuration /// /// JSAPI(支付宝小程序支付) /// - [Description("JSAPI(支付宝小程序支付)")] + [Description("支付宝小程序支付")] JSAPI = 1, /// /// JSAPI_PC(电脑网站支付) /// - [Description("JSAPI_PC(电脑网站支付)")] + [Description("电脑网站支付")] JSAPI_PC = 2, /// /// NATIVE(扫码支付) /// - [Description("NATIVE(扫码支付)")] + [Description("扫码支付")] ScanQRCodes = 3, /// /// APP(APP支付) /// - [Description("APP(APP支付)")] + [Description("APP支付")] APP = 4, /// /// MWEB(H5支付) /// - [Description("MWEB(H5支付)")] + [Description("H5支付")] MWEB = 5 } diff --git a/CoreCms.Net.IRepository/Order/ICoreCmsOrderRepository.cs b/CoreCms.Net.IRepository/Order/ICoreCmsOrderRepository.cs index 09068521..2be2d8f1 100644 --- a/CoreCms.Net.IRepository/Order/ICoreCmsOrderRepository.cs +++ b/CoreCms.Net.IRepository/Order/ICoreCmsOrderRepository.cs @@ -58,6 +58,15 @@ namespace CoreCms.Net.IRepository int GetOrderNum(int userId, int goodId); + /// + /// 根据用户id和商品id获取下了多少订单 + /// + /// + /// + /// 状态 + /// + int GetOrderNum(int userId, int goodId, int orderStatus); + /// /// 重写根据条件列表数据 /// diff --git a/CoreCms.Net.IServices/Distribution/ICoreCmsDistributionServices.cs b/CoreCms.Net.IServices/Distribution/ICoreCmsDistributionServices.cs index 081ed6c3..b29a532c 100644 --- a/CoreCms.Net.IServices/Distribution/ICoreCmsDistributionServices.cs +++ b/CoreCms.Net.IServices/Distribution/ICoreCmsDistributionServices.cs @@ -75,7 +75,7 @@ namespace CoreCms.Net.IServices /// - /// 检查当前用户是否可以升级(暂存,有问题) + /// 检查当前用户是否可以升级 /// /// /// diff --git a/CoreCms.Net.Repository/Order/CoreCmsOrderRepository.cs b/CoreCms.Net.Repository/Order/CoreCmsOrderRepository.cs index 6937776a..904dfaf8 100644 --- a/CoreCms.Net.Repository/Order/CoreCmsOrderRepository.cs +++ b/CoreCms.Net.Repository/Order/CoreCmsOrderRepository.cs @@ -167,6 +167,27 @@ namespace CoreCms.Net.Repository } #endregion + + #region 根据用户id和商品id获取下了多少订单 + + /// + /// 根据用户id和商品id获取下了多少订单 + /// + /// + /// + /// 状态 + /// + public int GetOrderNum(int userId, int goodId,int orderStatus) + { + var num = DbClient.Queryable((op, ot) => new object[] + { + JoinType.Inner, op.orderId == ot.orderId + }).Where((op, ot) => op.userId == userId && ot.goodsId == goodId && op.status == orderStatus).Count(); + return num; + } + #endregion + + #region 重写根据条件列表数据 /// /// 重写根据条件列表数据 diff --git a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs index ba12c0a3..c7fea1c1 100644 --- a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs +++ b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs @@ -24,7 +24,9 @@ using CoreCms.Net.Model.ViewModels.DTO.Distribution; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Helper; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using NPOI.SS.Formula.Functions; using SqlSugar; @@ -461,10 +463,10 @@ namespace CoreCms.Net.Services } #endregion - #region 检查当前用户是否可以升级(暂存,有问题) + #region 检查当前用户是否可以升级 /// - /// 检查当前用户是否可以升级(暂存,有问题) + /// 检查当前用户是否可以升级 /// /// /// @@ -475,23 +477,111 @@ namespace CoreCms.Net.Services var info = await _dal.QueryByClauseAsync(p => p.userId == userId); if (info is { gradeId: > 0 }) { - //找下有没有可以升级的分销商等级 - var grade = await _distributionGradeRepository.QueryByClauseAsync(p => p.id > info.gradeId && p.isAutoUpGrade == true); - if (grade != null) + //找下有没有可以升级的分销商等级(一次只升一级) + var grade = await _distributionGradeRepository.QueryByClauseAsync(p => p.sortId > info.gradeId && p.isAutoUpGrade == true, p => p.sortId, OrderByType.Asc, true); + if (grade == null) return jm; { - var conditionList = await _coreCmsDistributionConditionServices.QueryListByClauseAsync(p => p.gradeId == grade.id); - //循环所有条件,判断是否可以升级 var condition = true;//默认满足升级 + var conditionList = await _coreCmsDistributionConditionServices.QueryListByClauseAsync(p => p.gradeId == grade.id); + if (!conditionList.Any()) + { + jm.msg = "未设置条件,无法升级"; + return jm; + } + //循环所有条件,判断是否可以升级 foreach (var item in conditionList) { - var method = "condition_" + item.code; - //暂存,有问题 - } + var parameters = (JObject)JsonConvert.DeserializeObject(item.parameters); + if (parameters == null) + { + condition = false; + break; + } + //只要购买了商品并且订单完结。 + if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.GOODS_ALL.ToString(), StringComparison.CurrentCultureIgnoreCase)) + { + if (!parameters.ContainsKey("num")) + { + condition = false; + break; + } + var num = parameters["num"].ObjectToInt(0); + var getCount = await _orderRepository.GetCountAsync(p => + p.userId == userId && p.status == (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED); + condition = getCount > num; + if (condition == false) + { + break; + } + } + //购买了指定的商品 + if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.GOODS_IDS.ToString(), StringComparison.CurrentCultureIgnoreCase)) + { + //goodsId + if (!parameters.ContainsKey("goodsId")) + { + condition = false; + break; + } + var goodsId = parameters["goodsId"].ObjectToInt(0); + var getCount = _orderRepository.GetOrderNum(userId, goodsId, (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED); + condition = getCount > 0; + if (condition == false) + { + break; + } + } + //个人消费总额(已完成的订单) + if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.USER_ORDERS.ToString(), StringComparison.CurrentCultureIgnoreCase)) + { + if (!parameters.ContainsKey("money") || !parameters.ContainsKey("limit_day")) + { + condition = false; + break; + } + var money = parameters["money"].ObjectToInt(0); + var limitDay = parameters["limit_day"].ObjectToInt(0); + + var startTime = DateTime.Now.AddDays(-limitDay); + var endTime = DateTime.Now; + + var getAmount = await _orderRepository.GetSumAsync(p => p.userId == userId && p.status == (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED && p.paymentTime > startTime && p.paymentTime < endTime, p => p.orderAmount); + + condition = getAmount > money; + + if (condition == false) + { + break; + } + } + //个人订单数量(已完成的订单) + if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.USER_ORDERSNUM.ToString(), StringComparison.CurrentCultureIgnoreCase)) + { + + if (!parameters.ContainsKey("num") || !parameters.ContainsKey("limit_day")) + { + condition = false; + break; + } + var num = parameters["num"].ObjectToInt(0); + var limitDay = parameters["limit_day"].ObjectToInt(0); + + var startTime = DateTime.Now.AddDays(-limitDay); + var endTime = DateTime.Now; + + var getCount = await _orderRepository.GetCountAsync(p => p.userId == userId && p.status == (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED && p.paymentTime > startTime && p.paymentTime < endTime); + + condition = getCount > num; + if (condition == false) + { + break; + } + } + } if (condition) { - await _dal.UpdateAsync(p => new CoreCmsDistribution() { gradeId = grade.id }, - p => p.userId == userId); + await _dal.UpdateAsync(p => new CoreCmsDistribution() { gradeId = grade.id }, p => p.userId == userId); jm.msg = "升级成功"; } else diff --git a/CoreCms.Net.Web.Admin/Controllers/Distribution/CoreCmsDistributionGradeController.cs b/CoreCms.Net.Web.Admin/Controllers/Distribution/CoreCmsDistributionGradeController.cs index 625ffe57..f234a5ba 100644 --- a/CoreCms.Net.Web.Admin/Controllers/Distribution/CoreCmsDistributionGradeController.cs +++ b/CoreCms.Net.Web.Admin/Controllers/Distribution/CoreCmsDistributionGradeController.cs @@ -376,7 +376,7 @@ namespace CoreCms.Net.Web.Admin.Controllers var list = await _coreCmsDistributionConditionServices.QueryPageAsync(where, p => p.id, OrderByType.Asc, pageCurrent, pageSize); if (list.Any()) { - var distributionConditions = EnumHelper.EnumToList(); + var distributionConditions = EnumHelper.EnumToList(); foreach (var condition in list) { var cd = distributionConditions.Find(p => p.title == condition.code);