From d871b3c107c72c015b9bd6aaffd81878747f478b Mon Sep 17 00:00:00 2001 From: username@email.com <yzy2002yzy@163.com> Date: 星期五, 12 四月 2024 08:39:03 +0800 Subject: [PATCH] 经销商推广费用, 用户积分 --- CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs | 135 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 132 insertions(+), 3 deletions(-) diff --git a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs index 4d4ecc8..091d16d 100644 --- a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs +++ b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs @@ -19,6 +19,7 @@ using CoreCms.Net.IServices; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; +using CoreCms.Net.Model.Entities.baifenbingfa.apply; using CoreCms.Net.Model.Entities.Distribution; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.DTO.Distribution; @@ -52,8 +53,10 @@ private readonly ICoreCmsSettingServices _settingServices; private readonly IUnitOfWork _unitOfWork; private readonly ICoreCmsUserBalanceServices _userBalanceServices; + private readonly ICoreCmsUserServices _coreCmsUserServices; - public CoreCmsDistributionServices(IUnitOfWork unitOfWork, ICoreCmsDistributionRepository dal, ICoreCmsDistributionOrderRepository distributionOrderRepository, ICoreCmsUserRepository userRepository, ICoreCmsGoodsRepository goodsRepository, ICoreCmsUserGradeRepository userGradeRepository, ICoreCmsSettingServices settingServices, ICoreCmsOrderRepository orderRepository, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionResultRepository distributionResultRepository, ICoreCmsDistributionConditionServices coreCmsDistributionConditionServices, ICoreCmsUserBalanceServices userBalanceServices) + public CoreCmsDistributionServices(IUnitOfWork unitOfWork, ICoreCmsDistributionRepository dal, ICoreCmsDistributionOrderRepository distributionOrderRepository, ICoreCmsUserRepository userRepository, ICoreCmsGoodsRepository goodsRepository, ICoreCmsUserGradeRepository userGradeRepository, ICoreCmsSettingServices settingServices, ICoreCmsOrderRepository orderRepository, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionResultRepository distributionResultRepository, ICoreCmsDistributionConditionServices coreCmsDistributionConditionServices, ICoreCmsUserBalanceServices userBalanceServices + , ICoreCmsUserServices coreCmsUserServices) { this._dal = dal; _distributionOrderRepository = distributionOrderRepository; @@ -68,7 +71,9 @@ base.BaseDal = dal; _unitOfWork = unitOfWork; _userBalanceServices = userBalanceServices; - + _coreCmsUserServices = coreCmsUserServices; + + } @@ -713,7 +718,106 @@ return true; } - + + + public async Task<bool> SettledAllAchievement() + { + + + //鏌ヨ鐢ㄦ埛 + var coreCmsUsers = await _userRepository.QueryListByClauseAsync(x => x.isDelete == false && x.status == 1); + + foreach(var coreCmsUser in coreCmsUsers) + { //闈炰緵搴斿晢锛屽仠姝� + var da = await _dal.GetCountAsync(x => x.userId == coreCmsUser.id && x.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes, isDataCache: true, cacheTimes: 1); + if (da == 0) + continue; + + //鏌ヨ鏄惁宸茬粡璁$畻杩囦簡 + DateTime StartTime = new DateTime(DateTime.Now.AddYears(-1).Year, 1, 1); + DateTime endTime = new DateTime(DateTime.Now.Year, 1, 1).AddDays(-1); + var total = _unitOfWork.GetDbClient().Queryable<DistributionAchievement>().Where(x => + x.isdelete == false + && x.userID == coreCmsUser.id + && x.startTime == StartTime + && x.endTime == endTime + ).ToList(); + if (total != null && total.Count > 0) + continue; + + var att = await AchievementTotalAll(coreCmsUser.id); + if (att.Item1 > 0) + { + DistributionAchievement oder = new DistributionAchievement + { + achievementTotals = att.Item1, + achievementBonus = await AchievementBonuscount(att.Item1), + createBy = "绯荤粺缁撶畻", + createTime = DateTime.Now, + startTime = att.Item2, + endTime = att.Item3, + userID = coreCmsUser.id + + }; + //寤虹珛缁撶畻鍗� + var id = await _unitOfWork.GetDbClient().Insertable(oder).ExecuteCommandIdentityIntoEntityAsync(); + if (oder.achievementBonus > 0) + { + var jm = await _coreCmsUserServices.UpdateBalance(coreCmsUser.id, oder.achievementBonus, "缁忛攢鍟嗘帹骞胯垂鐢ㄥ啓鍏ヤ綑棰�"); + if (jm.code != 0) + { + NLogUtil.WriteAll(NLog.LogLevel.Fatal, LogType.DataBase, "缁忛攢鍟嗘帹骞胯垂鐢ㄥ啓鍏ヤ綑棰濆け璐�", jm.msg); + return false; + } + } + + return true; + } + + } + + + + return true; + } + + + + + public async Task<(decimal, DateTime?, DateTime?)> AchievementTotalAll(int UserId) + { + + + DateTime StartTime = new DateTime(DateTime.Now.AddYears(-1).Year, 1, 1); + DateTime endTime = new DateTime(DateTime.Now.Year, 1, 1); + + + var total = await _unitOfWork.GetDbClient().Queryable<CoreCmsOrder>().Where(x => x.status == (int)GlobalEnumVars.OrderStatus.Complete + && (x.payStatus != (int)GlobalEnumVars.OrderPayStatus.No || x.payStatus != (int)GlobalEnumVars.OrderPayStatus.Refunded) + && x.isdel == false + && x.userId == UserId + && x.updateTime > StartTime + && x.updateTime < endTime + ).SumAsync(x => x.orderAmount); + + return (total, StartTime, endTime.AddDays(-1)); + } + + + public async Task<decimal> AchievementBonuscount(decimal AttributeTotal) + { + + var allConfigs = await _settingServices.GetConfigDictionaries(); + var tuiGuangFeiYong = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryTuiGuangFeiYong).ObjectToInt(0); + var yeJiMenKan = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryYeJiMenKan).ObjectToInt(0); + if(AttributeTotal <= yeJiMenKan) + { + return 0; + } + return (AttributeTotal - (decimal)yeJiMenKan) * (decimal)tuiGuangFeiYong / 100; + } + + public async Task<bool> CreateDistributionAchievementOrder(CreateDAOrderInParam Parma) { //闈炰緵搴斿晢锛屽仠姝� @@ -737,5 +841,30 @@ return await _unitOfWork.GetDbClient().Updateable(oder).ExecuteCommandAsync()>0; } + + /// <summary> + /// 鑾峰彇缁忛攢鍟嗘帹骞胯垂 + /// </summary> + /// <returns></returns> + public List<DistributionRankingDTO> QueryAchievement(int UserId) + { + var totals = _unitOfWork.GetDbClient().Queryable<DistributionAchievement>().Where(x => + x.isdelete == false + && x.userID == UserId + ).OrderByDescending(x=>x.startTime).ToList(); + + var distributionRankingDTOs = new List<DistributionRankingDTO>(); + foreach(var distributionAchievement in totals) + { + var distributionRankingDTO = new DistributionRankingDTO(); + distributionRankingDTO.startTime = distributionAchievement.startTime.HasValue ? distributionAchievement.startTime.Value.ToString("yyyy-MM-dd") : ""; + distributionRankingDTO.endTime = distributionAchievement.endTime.HasValue ? distributionAchievement.endTime.Value.ToString("yyyy-MM-dd") : ""; + distributionRankingDTO.achievementTotals = distributionAchievement.achievementTotals.ToString("F2"); + distributionRankingDTO.achievementBonus = distributionAchievement.achievementBonus.ToString("F2"); + distributionRankingDTOs.Add(distributionRankingDTO); + } + + return distributionRankingDTOs; + } } } -- Gitblit v1.9.1