From b38c91e5cce54e1114ec5968c722c1a1c57bd21a Mon Sep 17 00:00:00 2001 From: 移动系统liao <liaoxujun@qq.com> Date: 星期五, 21 六月 2024 13:27:00 +0800 Subject: [PATCH] 完成派送订单佣金写入余额逻辑 --- CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs | 8 + CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs | 2 CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs | 1 .gitignore | 1 CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs | 2 CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs | 16 ++ CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOderPartial.cs | 13 ++ CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs | 186 ++++++++++++++++++++++++++++--- CoreCms.Net.Utility/Helper/UserHelper.cs | 3 CoreCms.Net.Configuration/SystemSettingConstVars.cs | 11 + CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs | 3 CoreCms.Net.Configuration/SystemSettingDictionary.cs | 2 CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs | 18 +++ CoreCms.Net.Configuration/GlobalEnumVars.cs | 9 + CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs | 6 + CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs | 8 + CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html | 2 CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs | 51 +++++++- CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs | 9 + CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html | 7 + 20 files changed, 323 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index 8ff8e38..06522ef 100644 --- a/.gitignore +++ b/.gitignore @@ -63,3 +63,4 @@ CoreCms.Net.Web.WebApi/appsettings.json CoreCms.Net.Web.WebApi/CoreCms.Net.Web.WebApi.xml CoreCms.Net.Uni-App/bin/ +鏁版嵁搴�/ diff --git a/CoreCms.Net.Configuration/GlobalEnumVars.cs b/CoreCms.Net.Configuration/GlobalEnumVars.cs index 0276fcf..acba533 100644 --- a/CoreCms.Net.Configuration/GlobalEnumVars.cs +++ b/CoreCms.Net.Configuration/GlobalEnumVars.cs @@ -246,7 +246,14 @@ /// 璁㈠崟 /// </summary> [Description("璁㈠崟")] - GoodsOder = 11, + GoodsOder = 12, + + + /// <summary> + /// 缁忛攢閰嶉�佷剑閲� + /// </summary> + [Description("缁忛攢閰嶉�佷剑閲�")] + DistributionDelivery = 13, } /// <summary> /// 鐢ㄦ埛绉垎鍙樺姩鏉ユ簮绫诲瀷 diff --git a/CoreCms.Net.Configuration/SystemSettingConstVars.cs b/CoreCms.Net.Configuration/SystemSettingConstVars.cs index 2190b8d..ee93d70 100644 --- a/CoreCms.Net.Configuration/SystemSettingConstVars.cs +++ b/CoreCms.Net.Configuration/SystemSettingConstVars.cs @@ -939,9 +939,14 @@ /// </summary> public static readonly string DictionaryUserGroupKey = "dictionaryUserGroupKey"; - /// <summary> - /// 涓氱哗濂栧姳 寮�鍏� - /// </summary> + /// <summary> + /// 缁忛攢鍟嗗彂璐у鍔辫缃� + /// </summary> + public static readonly string DictionaryDeliverFees = "dictionaryDeliverFees"; + + /// <summary> + /// 涓氱哗濂栧姳 寮�鍏� + /// </summary> public static readonly string DictionaryAchievementOnOff = "dictionaryAchievementOnOff"; /// <summary> diff --git a/CoreCms.Net.Configuration/SystemSettingDictionary.cs b/CoreCms.Net.Configuration/SystemSettingDictionary.cs index 578fa8e..f738936 100644 --- a/CoreCms.Net.Configuration/SystemSettingDictionary.cs +++ b/CoreCms.Net.Configuration/SystemSettingDictionary.cs @@ -274,6 +274,8 @@ //銆�++++++++++++++++++++++++++++++++++++鐧惧垎鍏垫硶澧炲姞++++++++++++++++ //缁忛攢鍟嗙敤鎴风粍缁戝畾key 鏈夊氨缁戝畾锛屾棤鍒欎笉缁戝畾 di.Add(SystemSettingConstVars.DictionaryUserGroupKey, new DictionaryKeyValues() { sKey = "缁忛攢鍟嗗叧鑱旂敤鎴风粍KEY", sValue = "DictionaryUserGroupKey" }); + //缁忛攢鍟嗛厤閫佸鍔� + di.Add(SystemSettingConstVars.DictionaryDeliverFees, new DictionaryKeyValues() { sKey = "缁忛攢鍟嗛厤閫佸鍔�", sValue = "5" }); //涓氱哗寮�鍏� di.Add(SystemSettingConstVars.DictionaryAchievementOnOff, new DictionaryKeyValues() { sKey = "鏄惁寮�鍚笟缁╁鍔�", sValue = "1" }); //涓氱哗濂栧姳鎶�鏈洜瀛� diff --git a/CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs b/CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs index 9f96c8a..7a17b17 100644 --- a/CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs +++ b/CoreCms.Net.IServices/baifenbingfa/IDistributorDeliveryServices.cs @@ -42,6 +42,15 @@ /// <param name="CancelledDec">鍙栨秷鍘熷洜</param> /// <returns></returns> Task<WebApiCallBack> SetDeliveryAccepted(sendDistributionAcceptType acceptType,string DeliveryID,string CancelledDec= null); + + /// <summary> + /// 瀹屾垚璁㈠崟锛岄厤閫佽鍗曞皢鍒嗛厤鍒扮敤鎴蜂綑棰� + /// </summary> + /// <param name="orderId"></param> + /// <returns></returns> + Task<WebApiCallBack> FinishOrder(string orderId); + + } diff --git a/CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs b/CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs index a53398e..613f40e 100644 --- a/CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs +++ b/CoreCms.Net.Model/Entities/Bill/CoreCmsBillAftersales.cs @@ -13,7 +13,7 @@ namespace CoreCms.Net.Model.Entities { /// <summary> - /// 閫�璐у崟琛� + /// 鍞悗鍗曡〃 /// </summary> [SugarTable("CoreCmsBillAftersales",TableDescription = "閫�璐у崟琛�")] public partial class CoreCmsBillAftersales diff --git a/CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs b/CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs index 19e0f63..ee418d3 100644 --- a/CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs +++ b/CoreCms.Net.Model/Entities/Bill/CoreCmsBillDelivery.cs @@ -283,6 +283,12 @@ [Description("绛夊緟纭鎺ュ彈")] NoAccted, + /// <summary> + /// 濂栧姳纭 + /// </summary> + [Description("濂栧姳纭")] + OderFreeComplete, + } diff --git a/CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs b/CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs index 1d141c0..dba6ee2 100644 --- a/CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs +++ b/CoreCms.Net.Model/Entities/Distribution/CoreCmsDistributionOrder.cs @@ -8,6 +8,7 @@ * Description: 鏆傛棤 ***********************************************************************/ using SqlSugar; +using System; using System.ComponentModel.DataAnnotations; namespace CoreCms.Net.Model.Entities @@ -25,6 +26,8 @@ { } + + /// <summary> /// 搴忓垪 /// </summary> diff --git a/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs b/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs index d9e1bd7..5ffc8d4 100644 --- a/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs +++ b/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs @@ -221,7 +221,7 @@ /// <summary> - /// 鍞悗鐘舵�� + /// 鏀惰揣鐘舵�� /// </summary> [Display(Name = "鍞悗鐘舵��")] diff --git a/CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs b/CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs index 58219d8..782736a 100644 --- a/CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs +++ b/CoreCms.Net.Model/Entities/Order/CoreCmsOrderPartial.cs @@ -64,9 +64,17 @@ /// 鍞悗鍗� /// </summary> [SugarColumn(IsIgnore = true)] + public List<CoreCmsBillAftersales> aftersalesItem { get; set; } /// <summary> + /// 瀵艰埅杩斿洖 + /// </summary> + [Navigate(NavigateType.OneToMany, nameof(CoreCmsBillAftersales.orderId), nameof(orderId))] + public List<CoreCmsBillAftersales> aftersalesItem1 { get; set; } + + + /// <summary> /// 鍙戣揣鍗� /// </summary> [SugarColumn(IsIgnore = true)] diff --git a/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs b/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs index 13e4497..ff12ccb 100644 --- a/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs +++ b/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOder.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressDeliveryOpenMessageGetDeliveryListResponse.Types; namespace CoreCms.Net.Model.Entities.baifenbingfa.DistributionSendOder { @@ -14,8 +15,10 @@ /// </summary> [SugarTable(TableDescription = "渚涘簲鍟嗗彂璐ч厤鍙戣褰�")] [SqlCodeFirst] - public class DistributionSendOder: BFBaseModel + public partial class DistributionSendOder: BFBaseModel { + + /// <summary> /// ID /// </summary> @@ -61,11 +64,22 @@ /// </summary> [SugarColumn(ColumnDescription = "閰嶉�佸崟Id")] public string deliveryID { get; set; } + /// <summary> + /// 閰嶉�佽垂鐢� + /// </summary> + [SugarColumn(ColumnDescription = "閰嶉�佽垂鐢�",DefaultValue ="0")] + public decimal amount { get; set; }= 0; /// <summary> /// 閰嶉�佺姸鎬� /// </summary> [SugarColumn(ColumnDescription = "閰嶉�佺姸鎬�",IsNullable =true)] public sendDistributionAcceptType? sendDistributionAccept { get; set; } + + /// <summary> + /// 搴旇仒鑱屽姟 + /// </summary> + [Navigate(NavigateType.OneToOne, nameof(deliveryID))] + public CoreCmsBillDelivery delivery { get; set; } } } diff --git a/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOderPartial.cs b/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOderPartial.cs new file mode 100644 index 0000000..c6d709d --- /dev/null +++ b/CoreCms.Net.Model/Entities/baifenbingfa/DistributionSend/DistributionSendOderPartial.cs @@ -0,0 +1,13 @@ +锘縰sing CoreCms.Net.Model.Entities.baifenbingfa.jon; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressDeliveryOpenMessageGetDeliveryListResponse.Types; + +namespace CoreCms.Net.Model.Entities.baifenbingfa.DistributionSend +{ + +} diff --git a/CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs b/CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs index 18c7b9b..bc0b898 100644 --- a/CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs +++ b/CoreCms.Net.RedisMQ/DistributionSendOderMQ.cs @@ -4,9 +4,12 @@ using CoreCms.Net.IServices; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities.baifenbingfa.DistributionSendOder; +using CoreCms.Net.Utility.Extensions; +using CoreCms.Net.Utility.Helper; using InitQ.Abstractions; using InitQ.Attributes; using Newtonsoft.Json; +using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; @@ -21,10 +24,13 @@ public class DistributionSendOderMQ: IRedisSubscribe { private readonly IUnitOfWork _unitOfWork; - public DistributionSendOderMQ(IUnitOfWork unitOfWork) + private readonly ICoreCmsUserBalanceServices _userBalanceServices; + private readonly ICoreCmsSettingServices _coreCmsSettingServices; //娉ㄥ叆鏈嶅姟 + public DistributionSendOderMQ(IUnitOfWork unitOfWork, ICoreCmsUserBalanceServices userBalanceServices, ICoreCmsSettingServices coreCmsSettingServices) { - _unitOfWork= unitOfWork; - + _unitOfWork = unitOfWork; + _userBalanceServices = userBalanceServices; + _coreCmsSettingServices = coreCmsSettingServices; } /// <summary> @@ -42,7 +48,10 @@ } Param.createTime = DateTime.Now; Param.createBy = "绯荤粺闃熷垪"; - + var allConfigs = await _coreCmsSettingServices.GetConfigDictionaries();//鑾峰彇鎵�鏈夐厤缃� + //绛涢�夐厤缃� + var DictionaryDeliverFees = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryDeliverFees).ObjectToDecimal(0); + Param.amount = DictionaryDeliverFees; await _unitOfWork.GetDbClient().Insertable(Param).ExecuteCommandAsync(); } @@ -61,14 +70,42 @@ NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "ActiveDistributionSendOder 淇敼鐘舵�� 澶勭悊澶辫触", $"杞崲妯″瀷澶辫触===銆� {message}"); return; } + DistributionSendOder oder = null; + if (Param.SendOderActive == Model.Entities.sendDistributionAcceptType.OderFreeComplete) + oder=await _unitOfWork.GetDbClient().Queryable<DistributionSendOder>().Includes(x=>x.delivery).Where(x => x.deliveryID == Param.deliveryID ).FirstAsync(); + else - var oder=await _unitOfWork.GetDbClient().Queryable<DistributionSendOder>().Where(x => x.deliveryID == Param.deliveryID && x.userID == Param.userID).FirstAsync(); + oder = await _unitOfWork.GetDbClient().Queryable<DistributionSendOder>().Includes(x => x.delivery).Where(x => x.deliveryID == Param.deliveryID && x.userID == Param.userID).FirstAsync(); oder.upDataTime = DateTime.Now; oder.upDataBy = "ActiveDistributionSendOder 闃熷垪"; oder.description = Param.Dec; oder.sendDistributionAccept= Param.SendOderActive; - - await _unitOfWork.GetDbClient().Updateable(oder).ExecuteCommandAsync(); + _unitOfWork.BeginTran(); + try + { + if (Param.SendOderActive == Model.Entities.sendDistributionAcceptType.OderFreeComplete) { + if (oder.userID != null && oder.delivery?.orderId != null) + { + //閽辨尓鍒颁細鍛樹綑棰濋噷闈� + var result = await _userBalanceServices.Change(oder.userID ?? 0, (int)GlobalEnumVars.UserBalanceSourceTypes.DistributionDelivery, + oder.amount, oder.delivery.orderId); + } + else + NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.Order, "缁忛攢鍟嗗彂璐х粨绠楀け璐�", $"DistributionSendOder ID={oder.id} 璇ヨ鍗曠殑鐢ㄦ埛ID鎴栬�呮槸deliveryID鎴栬�呮槸CoreCmsBillDelivery 涓殑 oderId"); + + + } + await _unitOfWork.GetDbClient().Updateable(oder).ExecuteCommandAsync(); + + _unitOfWork.CommitTran(); + } + catch (Exception ) + { + _unitOfWork.RollbackTran(); + throw; + } + + } diff --git a/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs b/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs index 3d0309c..74357e5 100644 --- a/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs +++ b/CoreCms.Net.RedisMQ/OrderAgentOrDistributionSubscribe.cs @@ -150,7 +150,6 @@ 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); } } diff --git a/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs b/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs index 6961144..d73b545 100644 --- a/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs +++ b/CoreCms.Net.RedisMQ/OrderFinishCommandSubscribe.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.IServices; +using CoreCms.Net.IServices.baifenbingfa; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; using CoreCms.Net.Utility.Extensions; @@ -27,9 +28,11 @@ private readonly ICoreCmsSettingServices _settingServices; private readonly ICoreCmsUserServices _userServices; private readonly ICoreCmsAgentOrderServices _agentOrderServices; + private readonly IDistributorDeliveryServices _distributorDeliveryServices; - public OrderFinishCommandSubscribe(ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsDistributionOrderServices distributionOrderServices, ICoreCmsDistributionServices distributionServices, ICoreCmsSettingServices settingServices, ICoreCmsUserServices userServices, ICoreCmsAgentOrderServices agentOrderServices) + public OrderFinishCommandSubscribe(ICoreCmsBillPaymentsServices billPaymentsServices, ICoreCmsDistributionOrderServices distributionOrderServices, ICoreCmsDistributionServices distributionServices, ICoreCmsSettingServices settingServices, ICoreCmsUserServices userServices, ICoreCmsAgentOrderServices agentOrderServices, + IDistributorDeliveryServices distributorDeliveryServices) { _billPaymentsServices = billPaymentsServices; _distributionOrderServices = distributionOrderServices; @@ -37,6 +40,7 @@ _settingServices = settingServices; _userServices = userServices; _agentOrderServices = agentOrderServices; + _distributorDeliveryServices= distributorDeliveryServices; } /// <summary> @@ -63,6 +67,8 @@ await _agentOrderServices.FinishOrder(msg); //閭�璇疯姹傛ā寮忎笅杩涜鍒嗕剑锛屼細妫�娴嬫槸鍚﹀紑鍚簡涓夌骇鍒嗛攢鍜屼唬鐞嗘ā寮忋�� await _userServices.InviteCommission(msg); + //澶勭悊缁忛攢鍟嗗彂璐ф敹鐩婂垎閰嶈褰曞埌浣欓鍐� + await _distributorDeliveryServices.FinishOrder(msg); NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "璁㈠崟瀹岀粨缁撲剑", "璁㈠崟缂栧彿鑾峰彇姝e父锛�" + msg); } diff --git a/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs b/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs index 6a44513..62d428f 100644 --- a/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs +++ b/CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs @@ -392,6 +392,24 @@ } + + /// <summary> + /// 缁忛攢涓婇厤閫佽垂缁撶畻涓撶敤 + /// </summary> + /// <param name="list"></param> + /// <returns></returns> + private async IAsyncEnumerable<WebApiCallBack> ChangeForEachForDistributionDelivery(List<CoreCmsDistributionOrder> list) + { + foreach (var item in list) + { + //閽辨尓鍒颁細鍛樹綑棰濋噷闈� + var result = await _balanceServices.Change(item.userId, (int)GlobalEnumVars.UserBalanceSourceTypes.DistributionDelivery, + item.amount, item.orderId); + + yield return result; + } + } + #endregion #region 浣滃簾璁㈠崟 diff --git a/CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs b/CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs index 3406cd0..c88065d 100644 --- a/CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs +++ b/CoreCms.Net.Services/baifenbingfa/DistributorDeliveryServices.cs @@ -21,6 +21,11 @@ using CoreCms.Net.DTO; using static SKIT.FlurlHttpClient.Wechat.Api.Models.CgibinExpressDeliveryOpenMessageGetDeliveryListResponse.Types; +using CoreCms.Net.Loging; +using CoreCms.Net.Model.Entities.baifenbingfa.DistributionSendOder; +using StackExchange.Redis; +using Microsoft.Extensions.Logging; + namespace CoreCms.Net.Services.baifenbingfa { /// <summary> @@ -39,7 +44,9 @@ private readonly IRedisOperationRepository _redisOperationRepository; private readonly IHttpContextUser _user; + public readonly ICoreCmsDistributionServices _coreCmsDistributionServices; + private readonly ICoreCmsOrderServices _orderServices; public DistributorDeliveryServices( IUnitOfWork unitOfWork, @@ -51,7 +58,8 @@ , ICoreCmsSettingServices settingServices , IRedisOperationRepository redisOperationRepository , IHttpContextUser user - ,ICoreCmsDistributionServices coreCmsDistributionServices ) + ,ICoreCmsDistributionServices coreCmsDistributionServices + ,ICoreCmsOrderServices orderServices) { this._dal = dal; base.BaseDal = dal; @@ -64,6 +72,7 @@ _redisOperationRepository = redisOperationRepository; _user = user; _coreCmsDistributionServices = coreCmsDistributionServices; + _orderServices = orderServices; } public async Task<(List< CoreCmsBillDelivery>,int )> GetDeliveryList(GetDeliveryListPost Param) @@ -77,7 +86,42 @@ } if (Param.distributionAcceptStatus != null) { - where= where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus); + switch (Param.distributionAcceptStatus) + { + case sendDistributionAcceptType.Accepted: + ///杩涜涓紝鍞悗绌� + where = where.And(x => x.sendDistributionAccept == sendDistributionAcceptType.Accepted + && x.order.status == (int)GlobalEnumVars.OrderStatus.Normal && !x.order.aftersalesItem1.Any()&& x.order.confirmStatus != (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt); + //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus); + break; + case sendDistributionAcceptType.NoAccted: + ///鏈‘璁ゆ帴鍙楃殑锛屼笉鑳藉敭鍚庣┖ + where = where.And(x => x.sendDistributionAccept == sendDistributionAcceptType.NoAccted + && x.order.status == (int)GlobalEnumVars.OrderStatus.Normal && !x.order.aftersalesItem1.Any()); + //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus); + break; + + case sendDistributionAcceptType.OderFreeComplete: + + where = where.And(x => x.sendDistributionAccept == sendDistributionAcceptType.Accepted + && x.order.status == (int)GlobalEnumVars.OrderStatus.Complete && !x.order.aftersalesItem1.Any()); + //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus); + break; + case sendDistributionAcceptType.Cancelled: + + where = where.And(x =>( x.sendDistributionAccept == sendDistributionAcceptType.Cancelled + || x.order.status == (int)GlobalEnumVars.OrderStatus.Cancel || x.order.aftersalesItem1.Any())); + //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus); + break; + case sendDistributionAcceptType.Delivered: + where = where.And(x => x.sendDistributionAccept == sendDistributionAcceptType.Delivered + || x.order.confirmStatus == (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt ); + //where = where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus); + break; + default: + break; + } + //where= where.And(x => x.sendDistributionAccept == Param.distributionAcceptStatus); } where= where.And(x => x.sendDistributionUserID == _user.ID); //蹇呴』鏄嚭浜庡彂璐х姸鎬� @@ -85,20 +129,63 @@ //蹇呴』鏄湁鏁堢姸鎬� //where= where.And(x => x.order.status == (int)GlobalEnumVars.OrderStatus.Normal); RefAsync<int> totl = 0; - var list = await _unitOfWork.GetDbClient().Queryable<CoreCmsBillDelivery>().Includes(x => x.order, order => order.Orderitems, ite => ite.productInfo).Select(x => new CoreCmsBillDelivery - { - sendDistributionAccept = x.sendDistributionAccept == sendDistributionAcceptType.NoAccted ? - //鐢ㄦ埛娌℃湁鍚屾剰浣嗘槸璁㈠崟宸茬粡鍙栨秷浜� 闇�瑕佽祴鍊� 鍙栨秷鐘舵�� - (x.order.status== (int)GlobalEnumVars.OrderStatus.Normal ? sendDistributionAcceptType.NoAccted: sendDistributionAcceptType.Cancelled ): - ( - x.sendDistributionAccept== sendDistributionAcceptType.Accepted? - //鐢ㄦ埛宸茬粡鍚屾剰浜� - (x.order.confirmStatus == (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt? sendDistributionAcceptType.Delivered: sendDistributionAcceptType.Accepted) - : x.order.status==(int )GlobalEnumVars.OrderStatus.Cancel? sendDistributionAcceptType.Cancelled: x.sendDistributionAccept - ), - order=x.order, - },true).MergeTable() - .Where(where).OrderByDescending(x => x.createTime) + var list = await _unitOfWork.GetDbClient().Queryable<CoreCmsBillDelivery>() + .Includes(x => x.order, order => order.Orderitems, ite => ite.productInfo) + .Includes(x => x.order, Order => Order.aftersalesItem1) + .Where(where) + .Select(x => new CoreCmsBillDelivery + { + + order = x.order, + }, true) + .MergeTable() + //.Mapper(x => x.order.billAftersalesId = SqlFunc.Subqueryable<CoreCmsBillAftersales>().Where(core => core.orderId == x.orderId).Select(core => core.aftersalesId)) + .Mapper( + x => + { + switch (x.sendDistributionAccept) + { + case sendDistributionAcceptType.Accepted: + + if (x.order.status == (int)GlobalEnumVars.OrderStatus.Cancel) + x.sendDistributionAccept = sendDistributionAcceptType.Cancelled; + else + if (x.order.status == (int)GlobalEnumVars.OrderStatus.Complete && !x.order.aftersalesItem1.Any()) + x.sendDistributionAccept = sendDistributionAcceptType.OderFreeComplete; + if (x.order.status == (int)GlobalEnumVars.OrderStatus.Complete && x.order.aftersalesItem1.Any()) + x.sendDistributionAccept = sendDistributionAcceptType.Cancelled; + + else if (x.order.status == (int)GlobalEnumVars.OrderStatus.Normal && x.order.aftersalesItem1.Any()) + x.sendDistributionAccept = sendDistributionAcceptType.Cancelled; + else + if (x.order.confirmStatus == (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt) + x.sendDistributionAccept = sendDistributionAcceptType.Delivered; + else + x.sendDistributionAccept = x.sendDistributionAccept; + break; + case sendDistributionAcceptType.NoAccted: + ///鏈‘璁ゆ帴鍙楃殑锛屼笉鑳藉敭鍚庣┖ + if(x.order.status== (int)GlobalEnumVars.OrderStatus.Complete||x.order.status== (int)GlobalEnumVars.OrderStatus.Cancel|| x.order.aftersalesItem1.Any()) + x.sendDistributionAccept= sendDistributionAcceptType.Cancelled; + else + x.sendDistributionAccept = x.sendDistributionAccept; + break; + + case sendDistributionAcceptType.OderFreeComplete: + + //姘歌繙涓嶄細鍒拌繖 + break; + case sendDistributionAcceptType.Cancelled: + //涓嶉渶瑕佸鐞� + + break; + default: + break; + } + } + ) + + .OrderByDescending(x => x.createTime) .ToPageListAsync(Param.page, Param.limit, totl); var listdata= new PageList<CoreCmsBillDelivery>(list, Param.page, Param.limit, totl); @@ -108,16 +195,31 @@ public async Task<int> GetNoAcceptedDeliveryCount() { - return await _dal.GetCountAsync(x => x.sendDistributionUserID == _user.ID && x.sendDistributionAccept == sendDistributionAcceptType.NoAccted); + var lista= await _unitOfWork.GetDbClient().Queryable<CoreCmsBillDelivery>().Includes(x => x.order,ord=>ord.aftersalesItem1) + .Where(x => x.sendDistributionUserID == _user.ID && x.sendDistributionAccept == sendDistributionAcceptType.NoAccted + && x.order.status != (int)GlobalEnumVars.OrderStatus.Complete ).ToListAsync(); + + return lista.Where(x=>(x.order.aftersalesItem1==null|| x.order.aftersalesItem1.Count()==0)).Count();//鍒犻�夊嚭娌℃湁鍞悗鐢宠鐨勮鍗� + + } public async Task<bool> GetShowDelivery() { return (await _coreCmsDistributionServices.GetCountAsync(x => x.userId == _user.ID && x.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes&&x.profession=="鏍″洯浠g悊", isDataCache: true, cacheTimes: 60)>0); } - public async Task<WebApiCallBack> SetDeliveryAccepted(sendDistributionAcceptType acceptType, string DeliveryID, string CancelledDec = null) + public async Task<WebApiCallBack> SetDeliveryAccepted(sendDistributionAcceptType acceptType, string DeliveryID, string CancelledDec = null) { + WebApiCallBack ret = new WebApiCallBack(); + + if (acceptType == sendDistributionAcceptType.OderFreeComplete) + { + //鍙湁鍦ㄥ畬鎴愯鍗曚腑璁剧疆璇ョ姸鎬侊紝璇ョ姸鎬佷細瀵归厤鍞敹鐩婅繘琛屾彁鍙栨暣鍚� + ret.status = false; + ret.msg = "鐘舵�佽缃敊璇�"; + return ret; + } var data = await _dal.QueryByIdAsync(DeliveryID); if (data == null) { @@ -213,5 +315,53 @@ throw; } } + + public async Task<WebApiCallBack> FinishOrder(string orderId) + { + + + var jm = new WebApiCallBack(); + + var order = await _orderServices.QueryByClauseAsync(p => + p.orderId == orderId && p.status == (int)GlobalEnumVars.OrderStatus.Complete); + if (order == null) + { + jm.msg = "璁㈠崟鏌ヨ澶辫触"; + return jm; + } + var distributionSendOder = await _unitOfWork.GetDbClient().Queryable<DistributionSendOder>().Includes(x=>x.delivery) + .Where(x=>x.delivery.orderId==order.orderId&&(x.sendDistributionAccept== sendDistributionAcceptType.Accepted|| x.sendDistributionAccept== sendDistributionAcceptType.Shipped||x.sendDistributionAccept== sendDistributionAcceptType.Delivered)) + .ToListAsync(); + if( distributionSendOder.Count==1) + { + //婊¤冻鎵�鏈夋潯浠跺紑濮嬪垎閰嶉�昏緫 + var mQ = new ActiveDistributionSendOderMQ + { + + SendOderActive = sendDistributionAcceptType.OderFreeComplete, + deliveryID = distributionSendOder[0].deliveryID, + userID = order.userId + }; + + await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.ActiveDistributionSendOderMQ, JsonConvert.SerializeObject(mQ)); + jm.status = true; + + } + else if( distributionSendOder.Count>1) + { + jm.status= false; + jm.msg = "鍙戠幇澶氫釜閰嶉�佽鍗曪紝闇�瑕佹墜鍔ㄦ帓鏌�"; + NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.Order, "澶勭悊缁忛攢鍟嗛厤閫佹敹鐩婃椂閿欒", $"璁㈠崟ID{orderId} 鍙戠幇澶氫釜婊¤冻缁忛攢鍟嗘淳閫佸崟锛屾斁寮冨鐞�,闇�鎺掓煡"); + + } + jm.status = true; + return jm; + + //if (order.shipStatus is (int)GlobalEnumVars.OrderShipStatus.No or (int)GlobalEnumVars.OrderShipStatus.PartialYes) + // { + // return jm; + // } + + } } } diff --git a/CoreCms.Net.Utility/Helper/UserHelper.cs b/CoreCms.Net.Utility/Helper/UserHelper.cs index 0838e45..cf96e49 100644 --- a/CoreCms.Net.Utility/Helper/UserHelper.cs +++ b/CoreCms.Net.Utility/Helper/UserHelper.cs @@ -64,6 +64,9 @@ break; case (int)GlobalEnumVars.UserBalanceSourceTypes.CheckIn: str += "鏃ュ巻绛惧埌濂栧姳" + money + "鍏�"; + break; + case (int)GlobalEnumVars.UserBalanceSourceTypes.DistributionDelivery: + str += "閰嶉�佷剑閲�" + money + "鍏�"; break; } //::todo 杩欓噷杩樺彲浠ュ仛涓�浜涘叾浠栫殑鏍¢獙 diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html b/CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html index fbb21a5..c966b68 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/distribution/distributor/achievement.html @@ -44,7 +44,7 @@ <script> var debug = layui.setter.debug; layui.data.done = function (d) { - //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷禄锟饺★拷涌诟锟街碉拷锟斤拷锟� + // if (debug) { console.log(d.params.data); } layui.use(['admin', 'form', 'coreHelper'], function () { diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html index b3ad65f..211aeb2 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/distribution/setting/index.html @@ -70,6 +70,13 @@ <div class="layui-form-mid layui-word-aux">*闈炲繀瑕佷笉淇敼*</div> </div> <div class="layui-form-item"> + <label class="layui-form-label">{{d.data.configs['dictionaryDeliverFees']['sKey']}}锛�</label> + <div class="layui-input-inline "> + <input type="text" name="dictionaryDeliverFees" lay-verify="title|number" value="{{d.data.configs['dictionaryDeliverFees']['sValue']}}" autocomplete="off" placeholder="" class="layui-input"> + </div> + <div class="layui-form-mid layui-word-aux">鍏�</div> + </div> + <div class="layui-form-item"> <label class="layui-form-label">{{d.data.configs['dictionaryAchievementOnOff']['sKey']}}锛�</label> <div class="layui-input-inline layui-inline-7"> <input type="radio" lay-filter="dictionaryAchievementOnOff" name="dictionaryAchievementOnOff" value="1" title="寮�鍚�" {{d.data.configs['dictionaryAchievementOnOff']['sValue']==="1" ? 'checked':''}}> -- Gitblit v1.9.1