| | |
| | | using CoreCms.Net.IServices.baifenbingfa; |
| | | 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; |
| | |
| | | private readonly ICoreCmsSettingServices _settingServices; |
| | | private readonly IUnitOfWork _unitOfWork; |
| | | private readonly ICoreCmsUserBalanceServices _userBalanceServices; |
| | | private readonly ICoreCmsUserServices _coreCmsUserServices; |
| | | private readonly IBfbfComAPIService _bfbfComAPIService; |
| | | |
| | | |
| | | |
| | | public CoreCmsDistributionServices(IBfbfComAPIService bfbfComAPIService, 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(IBfbfComAPIService bfbfComAPIService, 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; |
| | |
| | | base.BaseDal = dal; |
| | | _unitOfWork = unitOfWork; |
| | | _userBalanceServices = userBalanceServices; |
| | | _coreCmsUserServices = coreCmsUserServices; |
| | | |
| | | |
| | | _bfbfComAPIService = bfbfComAPIService; |
| | | |
| | | |
| | |
| | | info.TotalSettlementAmount = await _distributionOrderRepository.GetSumAsync( |
| | | p => p.isSettlement != (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementCancel && p.userId == userId, |
| | | p => p.amount); |
| | | var lisdata = await _unitOfWork.GetDbClient().Queryable<CoreCmsDistributionOrder>().Where(x=>x.userId == userId&&x.isSettlement== (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementNo) |
| | | .Select(x=>new CoreCmsDistributionOrder |
| | | { |
| | | amount = x.amount, |
| | | OderState= SqlFunc.Subqueryable<CoreCmsOrder>().Where(c=>c.orderId==x.orderId).Select(c=>c.confirmStatus), |
| | | |
| | | }).WithCache(10).ToListAsync(); |
| | | //可领金额 |
| | | info.DistributionKeLingTotals = lisdata.Where(x=>x.OderState== (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt |
| | | || x.OderState == (int)GlobalEnumVars.OrderShipStatus.Yes).Sum(x=>x.amount); |
| | | |
| | | //应领金额 |
| | | info.DistributionYingLingTotals = lisdata.Where(x => x.OderState == (int)GlobalEnumVars.OrderConfirmStatus.ReceiptNotConfirmed |
| | | || x.OderState == (int)GlobalEnumVars.OrderShipStatus.Yes).Sum(x => x.amount); ; |
| | | //已结算金额 |
| | | info.SettlementAmount = await _distributionOrderRepository.GetSumAsync( |
| | | p => p.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementYes && p.userId == userId, |
| | |
| | | { |
| | | var jm = new WebApiCallBack(); |
| | | //百分兵法判断是否是经销商 |
| | | if(await _bfbfComAPIService.IsDictionary(userId)) |
| | | if(!await _bfbfComAPIService.IsDictionary(userId)) |
| | | { |
| | | jm.msg = "不是经销商的,不返利"; |
| | | return jm; |
| | |
| | | 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) |
| | | { |
| | | //非供应商,停止 |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |