From fb2a8333ebf3bb3eb8b15bf1661335ba387a1824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=81=B0=E7=81=B0?= Date: Thu, 17 Nov 2022 23:33:01 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E4=B8=8D=E5=BC=80=E5=90=AF=E5=88=86=E9=94=80=EF=BC=8C?= =?UTF-8?q?=E4=BB=A3=E7=90=86=E6=A8=A1=E5=BC=8F=E4=B8=8B=EF=BC=8C=E8=B5=B0?= =?UTF-8?q?=E9=82=80=E8=AF=B7=E5=A5=BD=E5=8F=8B=E8=AE=A1=E7=AE=97=E4=B8=89?= =?UTF-8?q?=E7=BA=A7=E4=BD=A3=E9=87=91=EF=BC=9B=E4=B8=8D=E5=BC=80=E5=90=AF?= =?UTF-8?q?=E5=88=86=E9=94=80=E6=88=96=E8=80=85=E4=BB=A3=E7=90=86=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5=E4=B8=8B=EF=BC=8C=E9=BB=98=E8=AE=A4=E4=B8=8D?= =?UTF-8?q?=E5=8E=BB=E8=AE=A1=E7=AE=97=E5=88=86=E9=94=80=E5=92=8C=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E4=BD=A3=E9=87=91=E3=80=82=20=E3=80=90=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E3=80=91=E7=9B=AE=E5=89=8D=E7=9A=84=E5=88=86=E9=94=80?= =?UTF-8?q?=E4=B8=89=E7=BA=A7=E4=B8=9A=E5=8A=A1=E9=80=BB=E8=BE=91=E6=98=AF?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=B8=8B=E5=8D=95=EF=BC=8C=E5=BE=80=E4=B8=8A?= =?UTF-8?q?=E6=89=BE=E4=B8=89=E7=BA=A7=E5=BF=85=E9=A1=BB=E9=83=BD=E6=98=AF?= =?UTF-8?q?=E5=88=86=E9=94=80=E5=95=86=EF=BC=8C=E6=89=8D=E8=83=BD=E6=AF=8F?= =?UTF-8?q?=E7=BA=A7=E9=83=BD=E5=88=86=E4=BD=A3=EF=BC=8C=E4=B8=AD=E9=97=B4?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E4=B8=8D=E6=98=AF=E5=88=86=E9=94=80=E5=95=86?= =?UTF-8?q?=E8=80=8C=E4=B8=AD=E6=96=AD=E5=90=91=E4=B8=8A=E9=80=92=E5=BD=92?= =?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E4=B8=BA=E7=94=A8=E6=88=B7=E4=B8=8B?= =?UTF-8?q?=E5=8D=95=EF=BC=8C=E5=BE=80=E4=B8=8A=E6=89=BE=E4=B8=89=E7=BA=A7?= =?UTF-8?q?=E5=8F=AA=E8=A6=81=E4=B8=89=E7=BA=A7=E6=9C=89=E6=98=AF=E5=88=86?= =?UTF-8?q?=E9=94=80=E5=95=86=E7=9A=84=EF=BC=8C=E5=B0=B1=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E4=BD=A3=E9=87=91=E7=BB=93=E6=9E=9C=E7=BB=99=E4=B8=8E=E4=BD=A3?= =?UTF-8?q?=E9=87=91=E3=80=82=E4=B8=8D=E4=B8=AD=E6=96=AD=E3=80=82=20?= =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91=E5=8C=BA=E5=88=86=E8=80=81?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E4=BC=81=E4=B8=9A=E4=BB=98=E6=AC=BE=E5=88=B0?= =?UTF-8?q?=E9=9B=B6=E9=92=B1=E4=B8=8E=E6=96=B0=E7=89=88=E6=9C=AC=E5=95=86?= =?UTF-8?q?=E5=AE=B6=E4=BB=98=E6=AC=BE=E5=88=B0=E9=9B=B6=E9=92=B1enum?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CoreCms.Net.Configuration/GlobalEnumVars.cs | 32 +++- .../User/ICoreCmsUserServices.cs | 9 ++ .../OrderAgentOrDistributionSubscribe.cs | 146 +++++++++--------- .../OrderFinishCommandSubscribe.cs | 4 + .../CoreCmsDistributionOrderServices.cs | 27 ++-- .../CoreCmsDistributionServices.cs | 91 ++++------- .../User/CoreCmsUserServices.cs | 91 ++++++++++- .../User/CoreCmsUserTocashServices.cs | 4 +- .../wwwroot/views/shop/setting/index.html | 10 +- 9 files changed, 255 insertions(+), 159 deletions(-) diff --git a/CoreCms.Net.Configuration/GlobalEnumVars.cs b/CoreCms.Net.Configuration/GlobalEnumVars.cs index b27df945..5984c32b 100644 --- a/CoreCms.Net.Configuration/GlobalEnumVars.cs +++ b/CoreCms.Net.Configuration/GlobalEnumVars.cs @@ -339,10 +339,12 @@ namespace CoreCms.Net.Configuration { [Description("银行线下转账")] 银行线下转账 = 0, - [Description("微信付款到零钱")] - 微信付款到零钱 = 1, - [Description("微信付款到银行卡")] - 微信付款到银行卡 = 2 + [Description("企业付款到零钱")] + 企业付款到零钱 = 1, + [Description("企业付款到银行卡")] + 企业付款到银行卡 = 2, + [Description("商家转账到零钱")] + 商家转账到零钱 = 3 } #endregion @@ -3064,5 +3066,27 @@ namespace CoreCms.Net.Configuration #endregion + #region 邀请好友 + + /// + /// 邀请好友佣金分配方式 + /// + public enum InviteCommissionType + { + + /// + /// 百分比 + /// + [Description("百分比")] + CommissionTypePre = 1, + /// + /// 固定 + /// + [Description("固定")] + CommissionTypeFixed = 2, + } + + #endregion + } } diff --git a/CoreCms.Net.IServices/User/ICoreCmsUserServices.cs b/CoreCms.Net.IServices/User/ICoreCmsUserServices.cs index ad7aede4..4c97c8a7 100644 --- a/CoreCms.Net.IServices/User/ICoreCmsUserServices.cs +++ b/CoreCms.Net.IServices/User/ICoreCmsUserServices.cs @@ -134,5 +134,14 @@ namespace CoreCms.Net.IServices /// /// Task> StatisticsOrder(int day); + + + /// + /// 当关闭分销和代理的时候走个人邀请好友分佣 + /// + /// + /// + Task InviteCommission(string orderId); + } } \ No newline at end of file diff --git a/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs b/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs index 393e9d64..b5112dcc 100644 --- a/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs +++ b/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs @@ -55,70 +55,28 @@ namespace CoreCms.Net.RedisMQ if (order != null) { var allConfigs = await _settingServices.GetConfigDictionaries(); - + //是否开启三级分销(1开启,2未开启) + var openDistribution = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OpenDistribution).ObjectToInt(0); + //是否开启代理模块(1开启,2未开启) + var isOpenAgent = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.IsOpenAgent).ObjectToInt(0); + //佣金分配模式 var commissionChannel = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionChannel).ObjectToInt(1); - if (commissionChannel == (int)GlobalEnumVars.CommissionChannel.仅代理) + switch (commissionChannel) { - var jm = await _agentOrderServices.AddData(order); - jm.status = true; - jm.msg = "分销成功"; - NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走代理结佣-仅代理", JsonConvert.SerializeObject(jm)); - return; - } - else if (commissionChannel == (int)GlobalEnumVars.CommissionChannel.仅分销) - { - var jm = await _distributionOrderServices.AddData(order); //添加分享关联订单日志 - //判断是否可以成为分销商 - //先判断是否已经是经销商了。 - bool check = await _distributionServices.ExistsAsync(p => p.userId == order.userId); - var distributionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionType).ObjectToInt(0); - if (distributionType == 3) //无需审核,但是要满足提交 + case (int)GlobalEnumVars.CommissionChannel.仅代理 when isOpenAgent == 1: { - var info = new CoreCmsDistribution(); - //判断是否分销商 - if (check == false) - { - await _distributionServices.CheckCondition(allConfigs, info, order.userId); - if (info.ConditionStatus == true && info.ConditionProgress == 100) - { - //添加用户 - var user = await _userServices.QueryByClauseAsync(p => p.id == order.userId); - var iData = new CoreCmsDistribution(); - iData.userId = order.userId; - iData.mobile = user.mobile; - iData.name = !string.IsNullOrEmpty(user.nickName) ? user.nickName : user.mobile; - iData.verifyStatus = (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes; - iData.verifyTime = DateTime.Now; - - await _distributionServices.AddData(iData, order.userId); - } - } - } - //已经是经销商的判断是否可以升级 - if (check) - { - await _distributionServices.CheckUpdate(order.userId); - } - NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走分销结佣-仅分销", JsonConvert.SerializeObject(jm)); - return; - } - else if (commissionChannel == (int)GlobalEnumVars.CommissionChannel.先代理后分销) - { - - var jm = await _agentOrderServices.AddData(order); - - //判断是走代理还是走分销 - if (jm.status == true) - { - NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走代理结佣-先代理后分销", JsonConvert.SerializeObject(jm)); + var jm = await _agentOrderServices.AddData(order); + jm.status = true; + jm.msg = "分销成功"; + NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走代理结佣-仅代理", JsonConvert.SerializeObject(jm)); return; } - else + case (int)GlobalEnumVars.CommissionChannel.仅分销 when openDistribution == 1: { - await _distributionOrderServices.AddData(order); //添加分享关联订单日志 - //判断是否可以成为分销商 - //先判断是否已经是经销商了。 + var jm = await _distributionOrderServices.AddData(order); //添加分享关联订单日志 + //判断是否可以成为分销商 + //先判断是否已经是经销商了。 bool check = await _distributionServices.ExistsAsync(p => p.userId == order.userId); var distributionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionType).ObjectToInt(0); if (distributionType == 3) //无需审核,但是要满足提交 @@ -128,7 +86,7 @@ namespace CoreCms.Net.RedisMQ if (check == false) { await _distributionServices.CheckCondition(allConfigs, info, order.userId); - if (info.ConditionStatus == true && info.ConditionProgress == 100) + if (info.ConditionStatus && info.ConditionProgress == 100) { //添加用户 var user = await _userServices.QueryByClauseAsync(p => p.id == order.userId); @@ -148,17 +106,23 @@ namespace CoreCms.Net.RedisMQ { await _distributionServices.CheckUpdate(order.userId); } - jm.status = true; - jm.msg = "分销成功"; - NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走分销结佣-先代理后分销", JsonConvert.SerializeObject(jm)); + NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走分销结佣-仅分销", JsonConvert.SerializeObject(jm)); return; } - } - else if (commissionChannel == (int)GlobalEnumVars.CommissionChannel.先分销后代理) - { - var jm = await _distributionOrderServices.AddData(order); - if (jm.status) + case (int)GlobalEnumVars.CommissionChannel.先代理后分销 when openDistribution == 1 && isOpenAgent == 1: { + var jm = await _agentOrderServices.AddData(order); + + //判断是走代理还是走分销 + if (jm.status) + { + NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走代理结佣-先代理后分销", JsonConvert.SerializeObject(jm)); + return; + } + + await _distributionOrderServices.AddData(order); //添加分享关联订单日志 + //判断是否可以成为分销商 + //先判断是否已经是经销商了。 bool check = await _distributionServices.ExistsAsync(p => p.userId == order.userId); var distributionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionType).ObjectToInt(0); if (distributionType == 3) //无需审核,但是要满足提交 @@ -190,14 +154,54 @@ namespace CoreCms.Net.RedisMQ } jm.status = true; jm.msg = "分销成功"; - NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走分销结佣-先分销后代理", JsonConvert.SerializeObject(jm)); + NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走分销结佣-先代理后分销", JsonConvert.SerializeObject(jm)); return; } - else + case (int)GlobalEnumVars.CommissionChannel.先分销后代理 when openDistribution == 1 && isOpenAgent == 1: { - jm = await _agentOrderServices.AddData(order); - NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走代理结佣-先分销后代理", JsonConvert.SerializeObject(jm)); - return; + var jm = await _distributionOrderServices.AddData(order); + if (jm.status) + { + bool check = await _distributionServices.ExistsAsync(p => p.userId == order.userId); + var distributionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionType).ObjectToInt(0); + if (distributionType == 3) //无需审核,但是要满足提交 + { + var info = new CoreCmsDistribution(); + //判断是否分销商 + if (check == false) + { + await _distributionServices.CheckCondition(allConfigs, info, order.userId); + if (info.ConditionStatus && info.ConditionProgress == 100) + { + //添加用户 + var user = await _userServices.QueryByClauseAsync(p => p.id == order.userId); + var iData = new CoreCmsDistribution(); + iData.userId = order.userId; + iData.mobile = user.mobile; + iData.name = !string.IsNullOrEmpty(user.nickName) ? user.nickName : user.mobile; + iData.verifyStatus = (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes; + iData.verifyTime = DateTime.Now; + + await _distributionServices.AddData(iData, order.userId); + } + } + } + //已经是经销商的判断是否可以升级 + if (check) + { + await _distributionServices.CheckUpdate(order.userId); + } + jm.status = true; + jm.msg = "分销成功"; + NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走分销结佣-先分销后代理", JsonConvert.SerializeObject(jm)); + return; + } + else + { + jm = await _agentOrderServices.AddData(order); + NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结后走代理结佣-先分销后代理", JsonConvert.SerializeObject(jm)); + return; + } } } diff --git a/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs b/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs index 39652881..22deb48d 100644 --- a/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs +++ b/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs @@ -57,8 +57,12 @@ namespace CoreCms.Net.RedisMQ } else { + //对已经计入分销佣金订单表里面的数据进行储值到分销商余额内。 await _distributionOrderServices.FinishOrder(msg); + //对已经计入代理商佣金订单表里面的数据进行储值到代理商余额内。 await _agentOrderServices.FinishOrder(msg); + //邀请要求模式下进行分佣,会检测是否开启了三级分销和代理模式。 + await _userServices.InviteCommission(msg); NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结结佣", "订单编号获取正常:" + msg); } diff --git a/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs b/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs index 81959016..fedf49cc 100644 --- a/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs +++ b/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs @@ -22,6 +22,8 @@ using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.DTO.Distribution; using CoreCms.Net.Model.ViewModels.UI; +using CoreCms.Net.Utility.Extensions; +using CoreCms.Net.Utility.Helper; using SqlSugar; @@ -42,10 +44,11 @@ namespace CoreCms.Net.Services private readonly ICoreCmsUserBalanceServices _balanceServices; private readonly ICoreCmsGoodsServices _goodsServices; private readonly ICoreCmsDistributionOrderDetailsServices _distributionOrderDetailsServices; + private readonly ICoreCmsSettingServices _settingServices; private readonly IUnitOfWork _unitOfWork; - public CoreCmsDistributionOrderServices(IUnitOfWork unitOfWork, ICoreCmsDistributionOrderRepository dal, ICoreCmsDistributionServices distributionServices, ICoreCmsUserBalanceServices balanceServices, ICoreCmsOrderServices orderServices, ICoreCmsUserServices userServices, ICoreCmsOrderItemServices orderItemServices, ICoreCmsProductsDistributionServices productsDistributionServices, ICoreCmsProductsServices productsServices, ICoreCmsGoodsServices goodsServices, ICoreCmsDistributionOrderDetailsServices distributionOrderDetailsServices) + public CoreCmsDistributionOrderServices(IUnitOfWork unitOfWork, ICoreCmsDistributionOrderRepository dal, ICoreCmsDistributionServices distributionServices, ICoreCmsUserBalanceServices balanceServices, ICoreCmsOrderServices orderServices, ICoreCmsUserServices userServices, ICoreCmsOrderItemServices orderItemServices, ICoreCmsProductsDistributionServices productsDistributionServices, ICoreCmsProductsServices productsServices, ICoreCmsGoodsServices goodsServices, ICoreCmsDistributionOrderDetailsServices distributionOrderDetailsServices, ICoreCmsSettingServices settingServices) { this._dal = dal; _distributionServices = distributionServices; @@ -57,6 +60,7 @@ namespace CoreCms.Net.Services _productsServices = productsServices; _goodsServices = goodsServices; _distributionOrderDetailsServices = distributionOrderDetailsServices; + _settingServices = settingServices; base.BaseDal = dal; _unitOfWork = unitOfWork; } @@ -107,7 +111,10 @@ namespace CoreCms.Net.Services //获取货品关联的分销数据 var productsDistributions = await _productsDistributionServices.QueryListByClauseAsync(p => productIds.Contains(p.productsId)); - await AddOther(order, orderItems, goods, products, productsDistributions, 1, user.parentId); //本级是否返利 + var allConfigs = await _settingServices.GetConfigDictionaries(); + var distributionLevel = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionLevel).ObjectToInt(0); + + await AddOther(order, orderItems, goods, products, productsDistributions, 1, user.parentId, distributionLevel); //本级是否返利 } jm.status = true; @@ -128,8 +135,9 @@ namespace CoreCms.Net.Services /// 货品分销数据 /// 第几级 /// 用户id + /// 三级分销开启的层级 /// - private async Task AddOther(CoreCmsOrder order, List orderItems, List goods, List products, List productsDistributions, int level = 0, int userId = 0) + private async Task AddOther(CoreCmsOrder order, List orderItems, List goods, List products, List productsDistributions, int level = 0, int userId = 0, int distributionLevel = 3) { var user = await _userServices.QueryByClauseAsync(p => p.id == userId); if (user != null) @@ -281,13 +289,12 @@ namespace CoreCms.Net.Services } } } - - if (user.parentId > 0 && ommissionDto != null && level < ommissionDto.DistributionLevel) - { - //返第二级 - level++; - await AddOther(order, orderItems, goods, products, productsDistributions, level, user.parentId); - } + } + if (user.parentId > 0 && level < distributionLevel) + { + //返第二级 + level++; + await AddOther(order, orderItems, goods, products, productsDistributions, level, user.parentId, distributionLevel); } } } diff --git a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs index 56e3582a..ba12c0a3 100644 --- a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs +++ b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs @@ -408,90 +408,51 @@ namespace CoreCms.Net.Services if (info == null) { jm.msg = "不是分销商的,不返利"; - return jm; //不是分销商的,不返利。 + return jm; } var allConfigs = await _settingServices.GetConfigDictionaries(); - var commissionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionType).ObjectToInt(0); var dto = new DistributionDto(); if (info.gradeId > 0) { - var res = await _distributionResultRepository.QueryListByClauseAsync(p => p.gradeId == info.gradeId); + var res = await _distributionResultRepository.QueryListByClauseAsync(p => p.gradeId == info.gradeId, p => p.id, OrderByType.Asc, true, true); if (res != null && res.Any()) { dto.grade_id = info.gradeId; res.ForEach(p => { var obj = JObject.Parse(p.parameters); - if (p.code == "COMMISSION_1") + switch (p.code) { - dto.commission_1 = new Commission() - { - type = obj["commissionType"].ObjectToInt(0), - discount = obj["discount"].ObjectToDecimal(0) - }; - } - else if (p.code == "COMMISSION_2") - { - dto.commission_2 = new Commission() - { - type = obj["commissionType"].ObjectToInt(0), - discount = obj["discount"].ObjectToDecimal(0) - }; - - } - else if (p.code == "COMMISSION_3") - { - dto.commission_3 = new Commission() - { - type = obj["commissionType"].ObjectToInt(0), - discount = obj["discount"].ObjectToDecimal(0) - }; - + case "COMMISSION_1": + dto.commission_1 = new Commission() + { + type = obj["commissionType"].ObjectToInt(0), + discount = obj["discount"].ObjectToDecimal(0) + }; + break; + case "COMMISSION_2": + dto.commission_2 = new Commission() + { + type = obj["commissionType"].ObjectToInt(0), + discount = obj["discount"].ObjectToDecimal(0) + }; + break; + case "COMMISSION_3": + dto.commission_3 = new Commission() + { + type = obj["commissionType"].ObjectToInt(0), + discount = obj["discount"].ObjectToDecimal(0) + }; + break; } }); } else { - dto.grade_id = 0; - dto.commission_1 = new Commission() - { - type = commissionType, - discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0) - }; - dto.commission_2 = new Commission() - { - type = commissionType, - discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionSecond).ObjectToDecimal(0) - }; - dto.commission_3 = new Commission() - { - type = commissionType, - discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionThird).ObjectToDecimal(0) - }; + jm.msg = "未获取到佣金设置,不返利"; + return jm; } - } - else - { - dto.grade_id = 0; - dto.commission_1 = new Commission() - { - type = commissionType, - discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0) - }; - dto.commission_2 = new Commission() - { - type = commissionType, - discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionSecond).ObjectToDecimal(0) - }; - dto.commission_3 = new Commission() - { - type = commissionType, - discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionThird).ObjectToDecimal(0) - }; - } - - dto.DistributionLevel = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionLevel).ObjectToInt(0); jm.status = true; jm.data = dto; jm.msg = "获取成功"; diff --git a/CoreCms.Net.Services/User/CoreCmsUserServices.cs b/CoreCms.Net.Services/User/CoreCmsUserServices.cs index 79cbbc73..387f2180 100644 --- a/CoreCms.Net.Services/User/CoreCmsUserServices.cs +++ b/CoreCms.Net.Services/User/CoreCmsUserServices.cs @@ -55,13 +55,15 @@ namespace CoreCms.Net.Services private readonly IUnitOfWork _unitOfWork; private readonly PermissionRequirement _permissionRequirement; private readonly IHttpContextAccessor _httpContextAccessor; + private readonly ICoreCmsOrderServices _orderServices; + private readonly ICoreCmsBillPaymentsServices _billPaymentsServices; public CoreCmsUserServices(IUnitOfWork unitOfWork , ICoreCmsUserRepository dal , ICoreCmsUserBalanceServices userBalanceServices , ICoreCmsSettingServices settingServices - , ICoreCmsUserPointLogServices userPointLogServices, ICoreCmsSmsServices smsServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices, PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor, ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider) + , ICoreCmsUserPointLogServices userPointLogServices, ICoreCmsSmsServices smsServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices, PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor, ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider, ICoreCmsOrderServices orderServices, ICoreCmsBillPaymentsServices billPaymentsServices) { this._dal = dal; base.BaseDal = dal; @@ -76,6 +78,8 @@ namespace CoreCms.Net.Services _httpContextAccessor = httpContextAccessor; _userLogServices = userLogServices; _serviceProvider = serviceProvider; + _orderServices = orderServices; + _billPaymentsServices = billPaymentsServices; } @@ -727,6 +731,7 @@ namespace CoreCms.Net.Services #endregion + #region 根据条件查询分页数据 /// /// 根据条件查询分页数据 /// @@ -743,8 +748,9 @@ namespace CoreCms.Net.Services return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize); } + #endregion - + #region 按天统计新会员 /// /// 按天统计新会员 /// @@ -753,7 +759,9 @@ namespace CoreCms.Net.Services { return await _dal.Statistics(day); } + #endregion + #region 按天统计当天下单活跃会员 /// /// 按天统计当天下单活跃会员 /// @@ -763,7 +771,86 @@ namespace CoreCms.Net.Services return await _dal.StatisticsOrder(day); } + #endregion + #region 当关闭分销和代理的时候走个人邀请好友分佣 + /// + /// 当关闭分销和代理的时候走个人邀请好友分佣 + /// + /// + /// + public async Task InviteCommission(string orderId) + { + var jm = new WebApiCallBack(); + var allConfigs = await _settingServices.GetConfigDictionaries(); + //分佣类型(1百分比/2固定金额) + var commissionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionType).ObjectToInt(0); + //一级佣金 + var commissionFirst = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0); + //二级佣金 + var commissionSecond = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionSecond).ObjectToDecimal(0); + //三级佣金 + var commissionThird = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0); + //是否开启三级分销(1开启,2未开启) + var openDistribution = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OpenDistribution).ObjectToInt(0); + //是否开启代理模块(1开启,2未开启) + var isOpenAgent = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.IsOpenAgent).ObjectToInt(0); + + //当分销模块和代理模块都关闭的情况下,才去计算邀请好友的操作。 + if (openDistribution != 2 || isOpenAgent != 2) return jm; + var order = await _orderServices.QueryByClauseAsync(p => p.orderId == orderId && p.status == (int)GlobalEnumVars.OrderStatus.Complete); + if (order == null) + { + jm.msg = "订单查询失败"; + return jm; + } + + var user = await _dal.QueryByClauseAsync(p => p.id == order.userId, true); + + // 获取付款单,我们只拿付款单的实际金额去计算,不用订单的金额。这样直接不用去计算优惠了,只看用户付了多少。从上面提佣金出来。 + var billPayments = await _billPaymentsServices.QueryByClauseAsync(p => p.sourceId == orderId && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed); + if (billPayments.money <= 0) return jm; + { + //1级佣金 + var commissionLevel1 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed + ? commissionFirst + : Math.Round(commissionFirst * billPayments.money / 100, 2); + //2级佣金 + var commissionLevel2 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed + ? commissionSecond + : Math.Round(commissionSecond * billPayments.money / 100, 2); + //3级佣金 + var commissionLevel3 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed + ? commissionThird + : Math.Round(commissionThird * billPayments.money / 100, 2); + + + //下面存储就不做递归了,三层直接判断了 + if (user.parentId <= 0) return jm; + var parentLevel1 = await _dal.QueryByClauseAsync(p => p.id == user.parentId, true); + if (parentLevel1 == null) return jm; + { + //钱挪到会员余额里面 + await _userBalanceServices.Change(user.parentId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel1, orderId); + if (parentLevel1.parentId <= 0) return jm; + var parentLevel2 = await _dal.QueryByClauseAsync(p => p.id == parentLevel1.parentId, true); + //钱挪到会员余额里面 + await _userBalanceServices.Change(parentLevel1.parentId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel2, orderId); + if (parentLevel2.parentId <= 0) return jm; + { + var parentLevel3 = await _dal.QueryByClauseAsync(p => p.id == parentLevel2.parentId, true); + if (parentLevel3 != null) + { + //钱挪到会员余额里面 + await _userBalanceServices.Change(parentLevel2.parentId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel3, orderId); + } + } + } + } + return jm; + } + #endregion + } } diff --git a/CoreCms.Net.Services/User/CoreCmsUserTocashServices.cs b/CoreCms.Net.Services/User/CoreCmsUserTocashServices.cs index 1d8275cb..d1d83a2d 100644 --- a/CoreCms.Net.Services/User/CoreCmsUserTocashServices.cs +++ b/CoreCms.Net.Services/User/CoreCmsUserTocashServices.cs @@ -270,7 +270,7 @@ namespace CoreCms.Net.Services jm.msg = GlobalErrorCodeVars.Code10000; jm.status = false; break; - case (int)GlobalEnumVars.UserTocashType.微信付款到零钱: + case (int)GlobalEnumVars.UserTocashType.企业付款到零钱: { var user = await _userServices.QueryByIdAsync(info.userId); if (user == null) @@ -317,7 +317,7 @@ namespace CoreCms.Net.Services break; } - case (int)GlobalEnumVars.UserTocashType.微信付款到银行卡: + case (int)GlobalEnumVars.UserTocashType.企业付款到银行卡: { var user = await _userServices.QueryByIdAsync(info.userId); if (user == null) diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/shop/setting/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/shop/setting/index.html index 4a855664..1c3e5927 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/shop/setting/index.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/shop/setting/index.html @@ -448,10 +448,10 @@
- 仅代理指只计算代理分佣逻辑,如果代理分佣逻辑不满足而不继续执行。
- 仅分销指只计算三级分销佣金,如果三级分佣模式不满足则不继续执行。
- 先代理后分销:指先计算代理分佣逻辑是否满足,如果是则只走代理分佣逻辑,如果不是,验证之后则继续执行三级分销分佣逻辑。
- 先分销后代理:指先计算是否三级分销满足,满足则只计算三级分级分销,如果不满足再继续执行代理分佣逻辑。
+ 【仅代理】指只计算代理分佣逻辑,如果代理分佣逻辑不满足而不继续执行。(必须要开启代理模块)
+ 【仅分销】指只计算三级分销佣金,如果三级分佣模式不满足则不继续执行。(必须要开启分销模块,此分销模块不是邀请好友的三级佣金模式)
+ 【先代理后分销】:指先计算代理分佣逻辑是否满足,如果是则只走代理分佣逻辑,如果不是,验证之后则继续执行三级分销分佣逻辑。(必须要开启代理模块,分销模块)
+ 【先分销后代理】:指先计算是否三级分销满足,满足则只计算三级分级分销,如果不满足再继续执行代理分佣逻辑。(必须要开启代理模块,分销模块)
@@ -673,7 +673,7 @@
- 佣金设置(当不开启三级分销时候,推广好友三级统一返现比例) + 佣金设置(当不开启【分销】【代理】两个独立佣金模块的时候,推广好友三级统一返现比例)