/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://chuanyin.com * Author: * Email: * CreateTime: 202403/02 * Description: 暂无 ***********************************************************************/ using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.IServices; 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; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Helper; 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 { /// /// 经销商表 接口实现 /// public class CoreCmsDistributionServices : BaseServices, ICoreCmsDistributionServices { private readonly ICoreCmsDistributionRepository _dal; private readonly ICoreCmsDistributionOrderRepository _distributionOrderRepository; private readonly ICoreCmsDistributionGradeRepository _distributionGradeRepository; private readonly ICoreCmsDistributionResultRepository _distributionResultRepository; private readonly ICoreCmsDistributionConditionServices _coreCmsDistributionConditionServices; private readonly ICoreCmsUserRepository _userRepository; private readonly ICoreCmsGoodsRepository _goodsRepository; private readonly ICoreCmsUserGradeRepository _userGradeRepository; private readonly ICoreCmsOrderRepository _orderRepository; 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 , ICoreCmsUserServices coreCmsUserServices) { this._dal = dal; _distributionOrderRepository = distributionOrderRepository; _userRepository = userRepository; _goodsRepository = goodsRepository; _userGradeRepository = userGradeRepository; _settingServices = settingServices; _orderRepository = orderRepository; _distributionGradeRepository = distributionGradeRepository; _distributionResultRepository = distributionResultRepository; _coreCmsDistributionConditionServices = coreCmsDistributionConditionServices; base.BaseDal = dal; _unitOfWork = unitOfWork; _userBalanceServices = userBalanceServices; _coreCmsUserServices = coreCmsUserServices; _bfbfComAPIService = bfbfComAPIService; } #region 获取经销商信息 /// /// 获取经销商信息 /// /// 用户id /// 是否检查满足条件 /// public async Task GetInfo(int userId, bool checkStatus = false) { var jm = new WebApiCallBack(); var allConfigs = await _settingServices.GetConfigDictionaries(); var info = await _dal.QueryByClauseAsync(p => p.userId == userId); if (info != null && info.verifyStatus == (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes) { //总金额 info.TotalSettlementAmount = await _distributionOrderRepository.GetSumAsync( p => p.isSettlement != (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementCancel && p.userId == userId, p => p.amount); //已结算金额 info.SettlementAmount = await _distributionOrderRepository.GetSumAsync( p => p.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementYes && p.userId == userId, p => p.amount); //冻结金额 info.FreezeAmount = await _distributionOrderRepository.GetSumAsync( p => p.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementNo && p.userId == userId, p => p.amount); var dt = DateTime.Now; //本月第一天时间 DateTime dtFirst = dt.AddDays(1 - (dt.Day)); dtFirst = new DateTime(dtFirst.Year, dtFirst.Month, dtFirst.Day, 0, 0, 0); //获得某年某月的天数 int year = dt.Year; int month = dt.Month; int dayCount = DateTime.DaysInMonth(year, month); DateTime dtLast = dtFirst.AddDays(dayCount - 1); //本月订单数 info.CurrentMonthOrder = await _distributionOrderRepository.GetCountAsync(p => p.createTime >= dtFirst && p.createTime < dtLast && p.userId == userId); info.Store = UserHelper.GetShareCodeByUserId(userId).ToString(); //本日开始结束时间 var day = dt.Day; var dayStart = new DateTime(year, month, day, 0, 0, 0); var datEnd = new DateTime(year, month, day, 23, 59, 59); //今日收益 info.TodayFreezeAmount = await _distributionOrderRepository.GetSumAsync( p => p.createTime > dayStart && p.createTime <= datEnd && p.userId == userId, p => p.amount); //今日订单 info.TodayOrder = await _distributionOrderRepository.GetCountAsync( p => p.createTime > dayStart && p.createTime <= datEnd && p.userId == userId); //今日会员 info.TodayUser = await _userRepository.GetCountAsync(p => p.parentId == userId && p.createTime > dayStart && p.createTime <= datEnd); } else if (info == null) { info = new CoreCmsDistribution(); } info.TotalGoods = await _goodsRepository.GetCountAsync(p => p.isMarketable == true); if (info.gradeId > 0) { var userGrade = await _userGradeRepository.QueryByIdAsync(info.gradeId); if (userGrade != null) { info.GradeName = userGrade.title; } } //检查是否满足条件 if ((checkStatus == true && info.id == 0) || info.verifyStatus != (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes) { info.NeedApply = true; //是否需要申请 info.ConditionMsg = "您的条件已满足。(点击申请)"; //无需审核,但是需要满足条件 var distributionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionType).ObjectToInt(0); if (distributionType > 0 && distributionType == 3) { info.NeedApply = false; info.ConditionStatus = false;//条件状态 info.ConditionProgress = 0; //满足条件,直接成为会员 await CheckCondition(allConfigs, info, userId); if (info.ConditionStatus == true && info.ConditionProgress == 100) { //添加用户 var userModel = await _userRepository.QueryByIdAsync(userId); if (userModel != null) { var iData = new CoreCmsDistribution(); iData.name = !string.IsNullOrEmpty(userModel.nickName) ? userModel.nickName : userModel.mobile; iData.verifyStatus = (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes; iData.verifyTime = DateTime.Now; await AddData(iData, userId); info.ConditionProgress = 100; info.ConditionStatus = true;//条件状态 } } } else { //无条件,但是需要审核 if (distributionType > 0 && distributionType == 1) { info.NeedApply = true; info.ConditionProgress = 100; info.ConditionStatus = true;//条件状态 info.ConditionMsg = "您的条件已满足。(前往申请)"; } else if (distributionType > 0 && distributionType == 2) { await CheckCondition(allConfigs, info, userId); } } } jm.msg = "获取成功"; jm.status = true; jm.data = info; return jm; } #endregion #region 添加用户信息 /// /// 添加用户信息 /// /// /// /// public async Task AddData(CoreCmsDistribution iData, int userId) { var jm = new WebApiCallBack(); if (string.IsNullOrEmpty(iData.mobile)) { jm.msg = "请填写手机号"; return jm; } if (CommonHelper.IsMobile(iData.mobile) == false) { jm.msg = "请填写正确的手机号"; return jm; } if (string.IsNullOrEmpty(iData.name)) { jm.msg = "请填写您的姓名"; return jm; } iData.userId = userId; var info = await _dal.QueryByClauseAsync(p => p.userId == userId); if (info != null) { jm.status = false; jm.msg = "您已申请,请勿重复提交"; return jm; } //默认等级处理 if (iData.gradeId == 0) { var disGradeModel = await _distributionGradeRepository.QueryByClauseAsync(p => p.isDefault == true); if (disGradeModel != null) { iData.gradeId = disGradeModel.id; } } var allConfigs = await _settingServices.GetConfigDictionaries(); var distributionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionType).ObjectToInt(0); if (distributionType == (int)GlobalEnumVars.DistributionConditionType.NoReview) { iData.verifyStatus = (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes; } else { iData.verifyStatus = (int)GlobalEnumVars.DistributionVerifyStatus.VerifyWait; } iData.isDelete = false; iData.createTime = DateTime.Now; //判断是否存在 var bl = await _dal.InsertAsync(iData) > 0; jm.status = bl; jm.msg = bl ? "申请成功" : "申请失败"; return jm; } #endregion #region 检查是否可以成为经销商 //检查是否可以成为经销商 public async Task CheckCondition(Dictionary allConfigs, CoreCmsDistribution info, int userId = 0) { //判断消费 info.ConditionStatus = false;//条件状态 info.ConditionProgress = 0; //获取成为经销商条件 //var DistributionType = CommonHelper.GetConfigDictionary(allConfigs, GlobalSettingConstVars.DistributionType).ObjectToInt(0); var distributionMoney = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionMoney).ObjectToInt(0); //支付金额 var payed = await _orderRepository.GetSumAsync( p => p.payStatus == (int)GlobalEnumVars.OrderPayStatus.Yes && p.userId == userId, p => p.payedAmount); if (payed < distributionMoney && distributionMoney > 0) { info.ConditionMsg = "您的消费额度未满足" + distributionMoney + "元无法申请,快去下单吧~"; } else { info.ConditionProgress = 50; //判断是否需要购买商品 var distributionGoods = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionGoods).ObjectToInt(0); if (distributionGoods is > 0 and 1) { info.ConditionProgress += 50; info.ConditionStatus = true;//条件状态 info.ConditionMsg = "您的条件已满足,马上申请。"; } else { //任意商品 if (distributionGoods is > 0 and 2) { var orderCount = await _orderRepository.GetCountAsync(p => p.userId == userId && p.payStatus == (int)GlobalEnumVars.OrderPayStatus.Yes); if (orderCount >= 1) { info.ConditionProgress += 50; info.ConditionStatus = true;//条件状态 info.ConditionMsg = "您的条件已满足,马上申请。"; } else { info.ConditionMsg = "您的条件未满足,请任意购买一件商品即可成为经销商。"; } } else if (distributionGoods is > 0 and 3) //购买指定商品 { //判断是否购买指定商品 var distributionGoodsId = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionGoodsId).ObjectToInt(0); var orderNum = _orderRepository.GetOrderNum(userId, distributionGoodsId); if (orderNum >= 1) { info.ConditionProgress += 50; info.ConditionStatus = true;//条件状态 info.ConditionMsg = "您的条件已满足,马上申请。"; } else { var goodsInfo = await _goodsRepository.QueryByIdAsync(distributionGoodsId); if (goodsInfo != null) { info.ConditionMsg = "您的条件未满足,请购买指定的【" + goodsInfo.name + "】商品即可成为经销商。"; } else { info.ConditionMsg = "您的条件未满足,请购买指定的商品即可成为经销商。"; } } } } } } #endregion #region 获取我的推广订单 /// /// 获取我的推广订单 /// /// /// /// /// 类型 /// public async Task GetMyOrderList(int userId, int page, int limit = 10, int typeId = 0) { var jm = new WebApiCallBack(); jm.status = true; jm.msg = "获取成功"; var pageList = await _dal.QueryOrderPageAsync(userId, page, limit, typeId); jm.data = pageList; jm.code = pageList.TotalCount; return jm; } #endregion #region 获取店铺信息 /// /// 获取店铺信息 /// /// /// public async Task GetStore(int userId) { var jm = new WebApiCallBack(); jm.status = true; var info = await _dal.QueryByClauseAsync(p => p.userId == userId); if (info != null) { info.TotalGoods = await _goodsRepository.GetCountAsync(p => p.isMarketable == true && p.isDel == false); jm.data = new { info.createTime, info.name, info.storeBanner, info.storeDesc, info.storeLogo, info.storeName, info.TotalGoods }; } return jm; } #endregion #region 获取当前用户返佣设置 /// /// 获取当前用户返佣设置 /// /// /// public async Task GetGradeAndCommission(int userId) { var jm = new WebApiCallBack(); //百分兵法判断是否是经销商 if(!await _bfbfComAPIService.IsDictionary(userId)) { jm.msg = "不是经销商的,不返利"; return jm; } var info = await _dal.QueryByClauseAsync(p => p.userId == userId); if (info == null) { jm.msg = "不是经销商的,不返利"; return jm; } var allConfigs = await _settingServices.GetConfigDictionaries(); var dto = new DistributionDto(); if (info.gradeId > 0) { var res = await _distributionResultRepository.QueryListByClauseAsync(p => p.gradeId == info.gradeId, p => p.id, OrderByType.Asc, true, true); if (res != null && res.Any()) { dto.grade_id = info.gradeId; res.ForEach(p => { var obj = JObject.Parse(p.parameters); switch (p.code) { case "COMMISSION_1": dto.commission_1 = new Commission() { type = obj["commissionType"].ObjectToInt(0), discount = obj["discount"].ObjectToDecimal(0) }; break; case "COMMISSION_2": dto.commission_2 = new Commission() { type = obj["commissionType"].ObjectToInt(0), discount = obj["discount"].ObjectToDecimal(0) }; break; case "COMMISSION_3": dto.commission_3 = new Commission() { type = obj["commissionType"].ObjectToInt(0), discount = obj["discount"].ObjectToDecimal(0) }; break; } }); } else { jm.msg = "未获取到佣金设置,不返利"; return jm; } } jm.status = true; jm.data = dto; jm.msg = "获取成功"; return jm; } #endregion #region 检查当前用户是否可以升级 /// /// 检查当前用户是否可以升级 /// /// /// public async Task CheckUpdate(int userId) { var jm = new AdminUiCallBack(); var info = await _dal.QueryByClauseAsync(p => p.userId == userId); if (info is { gradeId: > 0 }) { //找下有没有可以升级的经销商等级(一次只升一级) var grade = await _distributionGradeRepository.QueryByClauseAsync(p => p.sortId > info.gradeId && p.isAutoUpGrade == true, p => p.sortId, OrderByType.Asc, true); if (grade == null) return jm; { var condition = true;//默认满足升级 var conditionList = await _coreCmsDistributionConditionServices.QueryListByClauseAsync(p => p.gradeId == grade.id); if (!conditionList.Any()) { jm.msg = "未设置条件,无法升级"; return jm; } //循环所有条件,判断是否可以升级 foreach (var item in conditionList) { var parameters = (JObject)JsonConvert.DeserializeObject(item.parameters); if (parameters == null) { condition = false; break; } //只要购买了商品并且订单完结。 if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.GOODS_ALL.ToString(), StringComparison.CurrentCultureIgnoreCase)) { if (!parameters.ContainsKey("num")) { condition = false; break; } var num = parameters["num"].ObjectToInt(0); var getCount = await _orderRepository.GetCountAsync(p => p.userId == userId && p.status == (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED); condition = getCount > num; if (condition == false) { break; } } //购买了指定的商品 if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.GOODS_IDS.ToString(), StringComparison.CurrentCultureIgnoreCase)) { //goodsId if (!parameters.ContainsKey("goodsId")) { condition = false; break; } var goodsId = parameters["goodsId"].ObjectToInt(0); var getCount = _orderRepository.GetOrderNum(userId, goodsId, (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED); condition = getCount > 0; if (condition == false) { break; } } //个人消费总额(已完成的订单) if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.USER_ORDERS.ToString(), StringComparison.CurrentCultureIgnoreCase)) { if (!parameters.ContainsKey("money") || !parameters.ContainsKey("limit_day")) { condition = false; break; } var money = parameters["money"].ObjectToInt(0); var limitDay = parameters["limit_day"].ObjectToInt(0); var startTime = DateTime.Now.AddDays(-limitDay); var endTime = DateTime.Now; var getAmount = await _orderRepository.GetSumAsync(p => p.userId == userId && p.status == (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED && p.paymentTime > startTime && p.paymentTime < endTime, p => p.orderAmount); condition = getAmount > money; if (condition == false) { break; } } //个人订单数量(已完成的订单) if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.USER_ORDERSNUM.ToString(), StringComparison.CurrentCultureIgnoreCase)) { if (!parameters.ContainsKey("num") || !parameters.ContainsKey("limit_day")) { condition = false; break; } var num = parameters["num"].ObjectToInt(0); var limitDay = parameters["limit_day"].ObjectToInt(0); var startTime = DateTime.Now.AddDays(-limitDay); var endTime = DateTime.Now; var getCount = await _orderRepository.GetCountAsync(p => p.userId == userId && p.status == (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED && p.paymentTime > startTime && p.paymentTime < endTime); condition = getCount > num; if (condition == false) { break; } } } if (condition) { await _dal.UpdateAsync(p => new CoreCmsDistribution() { gradeId = grade.id }, p => p.userId == userId); jm.msg = "升级成功"; } else { jm.msg = "条件暂不满足,无法升级"; } } } return jm; } #endregion /// /// 获取代理商排行 /// /// 当前页面索引 /// 分布大小 /// public async Task> QueryRankingPageAsync(int pageIndex = 1, int pageSize = 20) { return await _dal.QueryRankingPageAsync(pageIndex, pageSize); } #region 重写根据条件查询分页数据 /// /// 重写根据条件查询分页数据 /// /// 判断集合 /// 排序方式 /// 当前页面索引 /// 分布大小 /// /// 是否使用WITH(NOLOCK) /// public async Task> QueryPageAsync(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false) { 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() .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().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().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 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 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 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().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().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 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 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; DistributionAchievementOrder 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; } /// /// 获取经销商推广费 /// /// public List QueryAchievement(int UserId) { var totals = _unitOfWork.GetDbClient().Queryable().Where(x => x.isdelete == false && x.userID == UserId ).OrderByDescending(x=>x.startTime).ToList(); var distributionRankingDTOs = new List(); 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; } } }