From f87ea6675b5899d045a243fdd6510f47201e7e11 Mon Sep 17 00:00:00 2001 From: liaoxujun@qq.com <liaoxujun@qq.com> Date: 星期二, 26 三月 2024 09:25:41 +0800 Subject: [PATCH] no message --- CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 113 insertions(+), 3 deletions(-) diff --git a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs index 4b557ab..4d4ecc8 100644 --- a/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs +++ b/CoreCms.Net.Services/Distribution/CoreCmsDistributionServices.cs @@ -1,7 +1,7 @@ /*********************************************************************** - * Project: CoreCms + * Project: baifenBinfa * ProjectName: 鐧惧垎鍏垫硶绠$悊绯荤粺 - * Web: hhtp://chuanyin.com + * Web: http://chuanyin.com * Author: * Email: * CreateTime: 202403/02 @@ -19,6 +19,7 @@ using CoreCms.Net.IServices; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; +using CoreCms.Net.Model.Entities.Distribution; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.DTO.Distribution; using CoreCms.Net.Model.ViewModels.UI; @@ -27,7 +28,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NPOI.SS.Formula.Functions; +using Org.BouncyCastle.Asn1.Cmp; using SqlSugar; +using static CoreCms.Net.Configuration.GlobalEnumVars; namespace CoreCms.Net.Services @@ -48,7 +51,9 @@ private readonly ICoreCmsOrderRepository _orderRepository; private readonly ICoreCmsSettingServices _settingServices; private readonly IUnitOfWork _unitOfWork; - public CoreCmsDistributionServices(IUnitOfWork unitOfWork, ICoreCmsDistributionRepository dal, ICoreCmsDistributionOrderRepository distributionOrderRepository, ICoreCmsUserRepository userRepository, ICoreCmsGoodsRepository goodsRepository, ICoreCmsUserGradeRepository userGradeRepository, ICoreCmsSettingServices settingServices, ICoreCmsOrderRepository orderRepository, ICoreCmsDistributionGradeRepository distributionGradeRepository, ICoreCmsDistributionResultRepository distributionResultRepository, ICoreCmsDistributionConditionServices coreCmsDistributionConditionServices) + private readonly 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) { this._dal = dal; _distributionOrderRepository = distributionOrderRepository; @@ -62,6 +67,9 @@ _coreCmsDistributionConditionServices = coreCmsDistributionConditionServices; base.BaseDal = dal; _unitOfWork = unitOfWork; + _userBalanceServices = userBalanceServices; + + } #region 鑾峰彇缁忛攢鍟嗕俊鎭� @@ -624,8 +632,110 @@ { return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock); } + + #endregion + public async Task<(decimal,DateTime?, DateTime?)> AchievementTotal(int UserId) + { + var StartTime= await _unitOfWork.GetDbClient() + .Queryable<DistributionAchievement>() + .Where(x=>x.userID == UserId&&x.isdelete==false) + .Select(x=>x.endTime) + .OrderByDescending(x=>x) + .FirstAsync(); + if (StartTime == null) + ///鏈�澶氱粺璁′袱骞村唴鐨勪笟缁� + StartTime = DateTime.Now.AddYears(-2); + else + StartTime= StartTime.Value.AddSeconds(1); + var endTime = DateTime.Now; + //payStatus = (int)GlobalEnumVars.OrderPayStatus.Refunded, + // status = (int)GlobalEnumVars.OrderStatus.Complete + //var result = await _balanceServices.Change(item.userId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, + // item.amount, item.orderId); + 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.updateTime > StartTime + && x.updateTime < endTime + ).SumAsync(x => x.orderAmount); + var orderToler= await _unitOfWork.GetDbClient().Queryable<DistributionAchievementOrder>().Where(x => x.userID == UserId + && x.createTime > StartTime + && x.createTime < endTime).SumAsync(x => x.achievementTotal); + total = total + orderToler; + if (total==0) + return (total,null, null); + else + return (total, StartTime, endTime); + } + + public async Task<decimal> AchievementBonus(decimal AttributeTotal) + { + + var allConfigs = await _settingServices.GetConfigDictionaries(); + var key = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DictionaryAchievementSet).ObjectToInt(0); + return AttributeTotal *(decimal)key / 100; + } + + public async Task<bool> SettledAchievement(int UserId) + { + //闈炰緵搴斿晢锛屽仠姝� + var da = await _dal.GetCountAsync(x => x.userId == UserId && x.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes, isDataCache: true, cacheTimes: 1); + if (da == 0) + return true; + var att = await AchievementTotal(UserId); + if(att.Item1>0) + { + DistributionAchievement oder = new DistributionAchievement + { + achievementTotals = att.Item1, + achievementBonus = await AchievementBonus(att.Item1), + createBy="绯荤粺缁撶畻", + createTime=DateTime.Now, + startTime=att.Item2, + endTime = att.Item3, + userID = UserId + + }; + //寤虹珛缁撶畻鍗� + var id= await _unitOfWork.GetDbClient().Insertable(oder).ExecuteCommandIdentityIntoEntityAsync(); + var a= await _userBalanceServices.Change(UserId, (int )UserBalanceSourceTypes.DistributionAchievement, + oder.achievementBonus,id.ToString()); + if(a.code!=0) + { + NLogUtil.WriteAll(NLog.LogLevel.Fatal, LogType.DataBase, "缁忛攢鍟嗕笟缁╂彁鎴愬啓鍏ヤ綑棰濆け璐�", a.msg); + return false; + } + return true; + } + return true; + } + + + public async Task<bool> CreateDistributionAchievementOrder(CreateDAOrderInParam Parma) + { + //闈炰緵搴斿晢锛屽仠姝� + var da= await _dal.GetCountAsync(x=>x.userId== Parma.UserID && x.verifyStatus== (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes,isDataCache:true,cacheTimes:1); + if (da == 0) + return true; + var oder = new DistributionAchievementOrder + { + achievementTotal = Parma.Money, + createBy = "缁忛攢鍟嗕笟缁╁啓鍏�", + createTime = DateTime.Now, + orderId = Parma.OderId, + userID = Parma.UserID, + orderType=(int ) Parma.SourceTypes + + + + + }; + + return await _unitOfWork.GetDbClient().Updateable(oder).ExecuteCommandAsync()>0; + + } } } -- Gitblit v1.9.1