using System; 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; using CoreCms.Net.Utility.Helper; using Essensoft.Paylink.WeChatPay.V2; using Essensoft.Paylink.WeChatPay.V2.Notify; using InitQ.Abstractions; using InitQ.Attributes; using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace CoreCms.Net.RedisMQ { /// /// 订单完成时,结算该订单 /// public class OrderFinishCommandSubscribe : IRedisSubscribe { private readonly ICoreCmsBillPaymentsServices _billPaymentsServices; private readonly ICoreCmsDistributionOrderServices _distributionOrderServices; private readonly ICoreCmsDistributionServices _distributionServices; 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, IDistributorDeliveryServices distributorDeliveryServices) { _billPaymentsServices = billPaymentsServices; _distributionOrderServices = distributionOrderServices; _distributionServices = distributionServices; _settingServices = settingServices; _userServices = userServices; _agentOrderServices = agentOrderServices; _distributorDeliveryServices= distributorDeliveryServices; } /// /// 订单完成时,结算该订单 /// /// /// [Subscribe(RedisMessageQueueKey.OrderFinishCommand)] private async Task OrderFinishCommand(string msg) { try { if (string.IsNullOrEmpty(msg)) { NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结结佣", "订单编号获取失败"); return; } else { //对已经计入分销佣金订单表里面的数据进行储值到经销商余额内。 await _distributionOrderServices.FinishOrder(msg); //对已经计入代理商佣金订单表里面的数据进行储值到代理商余额内。 await _agentOrderServices.FinishOrder(msg); //邀请要求模式下进行分佣,会检测是否开启了三级分销和代理模式。 await _userServices.InviteCommission(msg); //处理经销商发货收益分配记录到余额内 await _distributorDeliveryServices.FinishOrder(msg); NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完结结佣", "订单编号获取正常:" + msg); } } catch (Exception ex) { NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "订单完结结佣", msg, ex); throw; } await Task.CompletedTask; } } }