/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://chuanyin.com * Author: * Email: * CreateTime: 2021/7/10 22:41:46 * Description: 暂无 ***********************************************************************/ using System; using System.Linq; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.IServices; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; using InitQ.Abstractions; using InitQ.Attributes; using Newtonsoft.Json; using SqlSugar; namespace CoreCms.Net.RedisMQ { /// /// 用户相关队列操作 /// public class UserSubscribe : IRedisSubscribe { private readonly ICoreCmsUserServices _userServices; private readonly ICoreCmsOrderServices _orderServices; private readonly ICoreCmsBillRefundServices _billRefundServices; private readonly ICoreCmsUserGradeServices _userGradeServices; private readonly ICoreCmsBillPaymentsServices _billPaymentsServices; public UserSubscribe(ICoreCmsUserServices userServices, ICoreCmsOrderServices orderServices, ICoreCmsBillRefundServices billRefundServices, ICoreCmsUserGradeServices userGradeServices, ICoreCmsBillPaymentsServices billPaymentsServices) { _userServices = userServices; _orderServices = orderServices; _billRefundServices = billRefundServices; _userGradeServices = userGradeServices; _billPaymentsServices = billPaymentsServices; } /// /// 订单完成-用户升级处理 /// /// /// [Subscribe(RedisMessageQueueKey.UserUpGrade)] private async Task UserUpGradeHandler(string msg) { try { var orderModel = JsonConvert.DeserializeObject(msg); if (orderModel == null) { NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完成-用户升级处理", "订单数据获取失败"); return; } var userInfo = await _userServices.QueryByClauseAsync(p => p.id == orderModel.userId); if (userInfo == null) { NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完成-用户升级处理", "用户数据获取失败"); return; } //订单支付的金额 var payedMoney = await _orderServices.GetSumAsync( p => p.payStatus != (int)GlobalEnumVars.OrderAllStatusType.ALL_PENDING_PAYMENT && p.userId == orderModel.userId, p => p.orderAmount); //订单退款金额 var refundMoney = await _billRefundServices.GetSumAsync( p => p.type == (int)GlobalEnumVars.BillRefundType.Order && p.userId == orderModel.userId && p.status != (int)GlobalEnumVars.BillRefundStatus.STATUS_REFUND, p => p.money); //实际消费金额 var expenditureMoney = payedMoney - refundMoney; //充值金额 var rechargeAmount = await _billPaymentsServices.GetSumAsync( p => p.type == (int)GlobalEnumVars.BillPaymentsType.Recharge && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed, p => p.money); //发展用户 var developNum = await _userServices.GetCountAsync(p => p.parentId == userInfo.id); developNum += await _userServices.QueryChildCountAsync(userInfo.id, 2); //取所有用户等级信息 var userGradeModel = await _userGradeServices.QueryListByClauseAsync(p => p.isOpenUpgrade == true, p => p.prioritySortId, OrderByType.Asc); //获取用户默认等级 var defaultModel = userGradeModel.Find(p => p.id == userInfo.grade); //判断是否符合升级条件 var userGradeId = 0; //权限从小向大找,直到升级到不满足的情况下。 foreach (var item in userGradeModel .Where(item => defaultModel != null && defaultModel.prioritySortId < item.prioritySortId && developNum >= item.developNum && expenditureMoney >= item.expenditureMoney && rechargeAmount >= item.rechargeAmount )) { userGradeId = item.id; } if (userGradeId > 0) { await _userServices.UpdateAsync(p => new CoreCmsUser() { grade = userGradeId }, p => p.id == userInfo.id); } NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单完成-用户升级处理", msg); } catch (Exception ex) { NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "订单完成-用户升级处理", msg, ex); throw; } await Task.CompletedTask; } } }