| | |
| | | /*********************************************************************** |
| | | * Project: CoreCms |
| | | * Project: baifenBinfa |
| | | * ProjectName: 百分兵法管理系统 |
| | | * Web: hhtp://chuanyin.com |
| | | * Web: http://chuanyin.com |
| | | * Author: |
| | | * Email: |
| | | * CreateTime: 202403/02 |
| | |
| | | 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.ViewModels.Basics; |
| | |
| | | namespace CoreCms.Net.Services |
| | | { |
| | | /// <summary> |
| | | /// 分销商订单记录表 接口实现 |
| | | /// 经销商订单记录表 接口实现 |
| | | /// </summary> |
| | | public class CoreCmsDistributionOrderServices : BaseServices<CoreCmsDistributionOrder>, ICoreCmsDistributionOrderServices |
| | | { |
| | |
| | | private readonly ICoreCmsGoodsServices _goodsServices; |
| | | private readonly ICoreCmsDistributionOrderDetailsServices _distributionOrderDetailsServices; |
| | | private readonly ICoreCmsSettingServices _settingServices; |
| | | private readonly IBfbfComAPIService _bfbfComAPIService; |
| | | |
| | | |
| | | private readonly IUnitOfWork _unitOfWork; |
| | | public CoreCmsDistributionOrderServices(IUnitOfWork unitOfWork, ICoreCmsDistributionOrderRepository dal, ICoreCmsDistributionServices distributionServices, ICoreCmsUserBalanceServices balanceServices, ICoreCmsOrderServices orderServices, ICoreCmsUserServices userServices, ICoreCmsOrderItemServices orderItemServices, ICoreCmsProductsDistributionServices productsDistributionServices, ICoreCmsProductsServices productsServices, ICoreCmsGoodsServices goodsServices, ICoreCmsDistributionOrderDetailsServices distributionOrderDetailsServices, ICoreCmsSettingServices settingServices) |
| | | public CoreCmsDistributionOrderServices(IBfbfComAPIService bfbfComAPIService, IUnitOfWork unitOfWork, ICoreCmsDistributionOrderRepository dal, ICoreCmsDistributionServices distributionServices, ICoreCmsUserBalanceServices balanceServices, ICoreCmsOrderServices orderServices, ICoreCmsUserServices userServices, ICoreCmsOrderItemServices orderItemServices, ICoreCmsProductsDistributionServices productsDistributionServices, ICoreCmsProductsServices productsServices, ICoreCmsGoodsServices goodsServices, ICoreCmsDistributionOrderDetailsServices distributionOrderDetailsServices, ICoreCmsSettingServices settingServices) |
| | | { |
| | | this._dal = dal; |
| | | _distributionServices = distributionServices; |
| | |
| | | _settingServices = settingServices; |
| | | base.BaseDal = dal; |
| | | _unitOfWork = unitOfWork; |
| | | _bfbfComAPIService = bfbfComAPIService; |
| | | } |
| | | |
| | | |
| | |
| | | if (user is { parentId: > 0 }) |
| | | { |
| | | //获取购物明细 |
| | | var orderItems = await _orderItemServices.QueryListByClauseAsync(p => p.orderId == order.orderId); |
| | | var orderItems = await _unitOfWork.GetDbClient().Queryable<CoreCmsOrderItem>().Where(p => p.orderId == order.orderId).Includes(x => x.productInfo).ToListAsync(); |
| | | //await _orderItemServices.QueryListByClauseAsync(p => p.orderId == order.orderId); |
| | | var goodIds = orderItems.Select(p => p.goodsId).ToList(); |
| | | var productIds = orderItems.Select(p => p.productId).ToList(); |
| | | //获取货品数据 |
| | |
| | | var user = await _userServices.QueryByClauseAsync(p => p.id == userId); |
| | | if (user != null) |
| | | { |
| | | |
| | | var commission = await _distributionServices.GetGradeAndCommission(user.id); |
| | | if (commission.status && commission.data != null) //不是分销商的,不返利。 |
| | | if (commission.status && commission.data != null) //不是经销商的,不返利。 |
| | | { |
| | | var ommissionDto = commission.data as DistributionDto; |
| | | //直返本级 |
| | | decimal amount = 0; |
| | | var distributionOrderDetails = new List<CoreCmsDistributionOrderDetails>(); |
| | | |
| | | //百分兵法判断订单用户是否是经销商 |
| | | bool OderUserIsDic = await _bfbfComAPIService.IsDictionary(order.userId); |
| | | foreach (var item in orderItems) |
| | | { |
| | | var orderDetails = new CoreCmsDistributionOrderDetails(); |
| | |
| | | //如果去掉优惠需要负了,就为0 |
| | | if (itemAmount < 0) itemAmount = 0; |
| | | |
| | | |
| | | |
| | | mathMoney = level switch |
| | | { |
| | | //一级分销 |
| | |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | mathMoney = level switch |
| | | //百分兵法基数按 |
| | | switch (level) |
| | | { |
| | | 1 when productsDistribution.levelOne > 0 => Math.Round( |
| | | productsDistribution.levelOne * item.nums, 2), |
| | | 2 when productsDistribution.levelTwo > 0 => Math.Round( |
| | | productsDistribution.levelTwo * item.nums, 2), |
| | | 3 when productsDistribution.levelThree > 0 => Math.Round( |
| | | productsDistribution.levelThree * item.nums, 2), |
| | | _ => mathMoney |
| | | }; |
| | | case 1 : |
| | | |
| | | if(OderUserIsDic) |
| | | //是经销商购买 |
| | | mathMoney = item.productInfo.distributionCutMoney; |
| | | else |
| | | //非经销商购买 |
| | | mathMoney= item.productInfo.cutMoney ; |
| | | |
| | | break; |
| | | case 2 when productsDistribution.levelTwo > 0: |
| | | break; |
| | | case 3 when productsDistribution.levelThree>0: |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | //原佣金计算方法 |
| | | //mathMoney = level switch |
| | | //{ |
| | | // 1 when productsDistribution.levelOne > 0 => Math.Round( |
| | | // productsDistribution.levelOne * item.nums, 2), |
| | | // 2 when productsDistribution.levelTwo > 0 => Math.Round( |
| | | // productsDistribution.levelTwo * item.nums, 2), |
| | | // 3 when productsDistribution.levelThree > 0 => Math.Round( |
| | | // productsDistribution.levelThree * item.nums, 2), |
| | | // _ => mathMoney |
| | | //}; |
| | | } |
| | | |
| | | amount += mathMoney; |
| | | orderDetails.amount = mathMoney; |
| | | amount += mathMoney*item.nums; |
| | | orderDetails.amount = mathMoney * item.nums; |
| | | distributionOrderDetails.Add(orderDetails); |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 经销上配送费结算专用 |
| | | /// </summary> |
| | | /// <param name="list"></param> |
| | | /// <returns></returns> |
| | | private async IAsyncEnumerable<WebApiCallBack> ChangeForEachForDistributionDelivery(List<CoreCmsDistributionOrder> list) |
| | | { |
| | | foreach (var item in list) |
| | | { |
| | | //钱挪到会员余额里面 |
| | | var result = await _balanceServices.Change(item.userId, (int)GlobalEnumVars.UserBalanceSourceTypes.DistributionDelivery, |
| | | item.amount, item.orderId); |
| | | |
| | | yield return result; |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 作废订单 |