username@email.com
2024-09-09 cc170291673472d3cda8d7ea77f6bd3a3b5dbb83
CoreCms.Net.Services/Distribution/CoreCmsDistributionOrderServices.cs
@@ -1,10 +1,10 @@
/***********************************************************************
 *            Project: CoreCms
 *        ProjectName: 核心内容管理系统
 *                Web: https://www.corecms.net
 *             Author: 大灰灰
 *              Email: jianweie@163.com
 *         CreateTime: 2021/1/31 21:45:10
 *            Project: baifenBinfa
 *        ProjectName: 百分兵法管理系统
 *                Web: http://chuanyin.com
 *             Author:
 *              Email:
 *         CreateTime: 202403/02
 *        Description: 暂无
 ***********************************************************************/
@@ -17,6 +17,7 @@
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;
@@ -30,7 +31,7 @@
namespace CoreCms.Net.Services
{
    /// <summary>
    /// 分销商订单记录表 接口实现
    /// 经销商订单记录表 接口实现
    /// </summary>
    public class CoreCmsDistributionOrderServices : BaseServices<CoreCmsDistributionOrder>, ICoreCmsDistributionOrderServices
    {
@@ -45,10 +46,11 @@
        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;
@@ -63,6 +65,7 @@
            _settingServices = settingServices;
            base.BaseDal = dal;
            _unitOfWork = unitOfWork;
            _bfbfComAPIService = bfbfComAPIService;
        }
@@ -101,7 +104,8 @@
            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();
                //获取货品数据
@@ -142,14 +146,16 @@
            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();
@@ -197,6 +203,8 @@
                            //如果去掉优惠需要负了,就为0
                            if (itemAmount < 0) itemAmount = 0;
                            mathMoney = level switch
                            {
                                //一级分销
@@ -230,21 +238,41 @@
                            {
                                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);
                    }
@@ -364,6 +392,24 @@
        }
        /// <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 作废订单