【优化】完善不开启分销,代理模式下,走邀请好友计算三级佣金;不开启分销或者代理的情况下,默认不去计算分销和代理佣金。

【调整】目前的分销三级业务逻辑是用户下单,往上找三级必须都是分销商,才能每级都分佣,中间可能不是分销商而中断向上递归,调整为用户下单,往上找三级只要三级有是分销商的,就根据佣金结果给与佣金。不中断。
【优化】区分老版本企业付款到零钱与新版本商家付款到零钱enum命名。
This commit is contained in:
大灰灰
2022-11-17 23:33:01 +08:00
parent 1b2357844b
commit fb2a8333eb
9 changed files with 255 additions and 159 deletions

View File

@@ -22,6 +22,8 @@ using CoreCms.Net.Model.Entities;
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 SqlSugar;
@@ -42,10 +44,11 @@ namespace CoreCms.Net.Services
private readonly ICoreCmsUserBalanceServices _balanceServices;
private readonly ICoreCmsGoodsServices _goodsServices;
private readonly ICoreCmsDistributionOrderDetailsServices _distributionOrderDetailsServices;
private readonly ICoreCmsSettingServices _settingServices;
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)
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)
{
this._dal = dal;
_distributionServices = distributionServices;
@@ -57,6 +60,7 @@ namespace CoreCms.Net.Services
_productsServices = productsServices;
_goodsServices = goodsServices;
_distributionOrderDetailsServices = distributionOrderDetailsServices;
_settingServices = settingServices;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
@@ -107,7 +111,10 @@ namespace CoreCms.Net.Services
//获取货品关联的分销数据
var productsDistributions = await _productsDistributionServices.QueryListByClauseAsync(p => productIds.Contains(p.productsId));
await AddOther(order, orderItems, goods, products, productsDistributions, 1, user.parentId); //本级是否返利
var allConfigs = await _settingServices.GetConfigDictionaries();
var distributionLevel = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionLevel).ObjectToInt(0);
await AddOther(order, orderItems, goods, products, productsDistributions, 1, user.parentId, distributionLevel); //本级是否返利
}
jm.status = true;
@@ -128,8 +135,9 @@ namespace CoreCms.Net.Services
/// <param name="productsDistributions">货品分销数据</param>
/// <param name="level">第几级</param>
/// <param name="userId">用户id</param>
/// <param name="distributionLevel">三级分销开启的层级</param>
/// <returns></returns>
private async Task AddOther(CoreCmsOrder order, List<CoreCmsOrderItem> orderItems, List<CoreCmsGoods> goods, List<CoreCmsProducts> products, List<CoreCmsProductsDistribution> productsDistributions, int level = 0, int userId = 0)
private async Task AddOther(CoreCmsOrder order, List<CoreCmsOrderItem> orderItems, List<CoreCmsGoods> goods, List<CoreCmsProducts> products, List<CoreCmsProductsDistribution> productsDistributions, int level = 0, int userId = 0, int distributionLevel = 3)
{
var user = await _userServices.QueryByClauseAsync(p => p.id == userId);
if (user != null)
@@ -281,13 +289,12 @@ namespace CoreCms.Net.Services
}
}
}
if (user.parentId > 0 && ommissionDto != null && level < ommissionDto.DistributionLevel)
{
//返第二级
level++;
await AddOther(order, orderItems, goods, products, productsDistributions, level, user.parentId);
}
}
if (user.parentId > 0 && level < distributionLevel)
{
//返第二级
level++;
await AddOther(order, orderItems, goods, products, productsDistributions, level, user.parentId, distributionLevel);
}
}
}

View File

@@ -408,90 +408,51 @@ namespace CoreCms.Net.Services
if (info == null)
{
jm.msg = "不是分销商的,不返利";
return jm; //不是分销商的,不返利。
return jm;
}
var allConfigs = await _settingServices.GetConfigDictionaries();
var commissionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionType).ObjectToInt(0);
var dto = new DistributionDto();
if (info.gradeId > 0)
{
var res = await _distributionResultRepository.QueryListByClauseAsync(p => p.gradeId == info.gradeId);
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);
if (p.code == "COMMISSION_1")
switch (p.code)
{
dto.commission_1 = new Commission()
{
type = obj["commissionType"].ObjectToInt(0),
discount = obj["discount"].ObjectToDecimal(0)
};
}
else if (p.code == "COMMISSION_2")
{
dto.commission_2 = new Commission()
{
type = obj["commissionType"].ObjectToInt(0),
discount = obj["discount"].ObjectToDecimal(0)
};
}
else if (p.code == "COMMISSION_3")
{
dto.commission_3 = new Commission()
{
type = obj["commissionType"].ObjectToInt(0),
discount = obj["discount"].ObjectToDecimal(0)
};
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
{
dto.grade_id = 0;
dto.commission_1 = new Commission()
{
type = commissionType,
discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0)
};
dto.commission_2 = new Commission()
{
type = commissionType,
discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionSecond).ObjectToDecimal(0)
};
dto.commission_3 = new Commission()
{
type = commissionType,
discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionThird).ObjectToDecimal(0)
};
jm.msg = "未获取到佣金设置,不返利";
return jm;
}
}
else
{
dto.grade_id = 0;
dto.commission_1 = new Commission()
{
type = commissionType,
discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0)
};
dto.commission_2 = new Commission()
{
type = commissionType,
discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionSecond).ObjectToDecimal(0)
};
dto.commission_3 = new Commission()
{
type = commissionType,
discount = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionThird).ObjectToDecimal(0)
};
}
dto.DistributionLevel = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.DistributionLevel).ObjectToInt(0);
jm.status = true;
jm.data = dto;
jm.msg = "获取成功";

View File

@@ -55,13 +55,15 @@ namespace CoreCms.Net.Services
private readonly IUnitOfWork _unitOfWork;
private readonly PermissionRequirement _permissionRequirement;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ICoreCmsOrderServices _orderServices;
private readonly ICoreCmsBillPaymentsServices _billPaymentsServices;
public CoreCmsUserServices(IUnitOfWork unitOfWork
, ICoreCmsUserRepository dal
, ICoreCmsUserBalanceServices userBalanceServices
, ICoreCmsSettingServices settingServices
, ICoreCmsUserPointLogServices userPointLogServices, ICoreCmsSmsServices smsServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices, PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor, ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider)
, ICoreCmsUserPointLogServices userPointLogServices, ICoreCmsSmsServices smsServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices, PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor, ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider, ICoreCmsOrderServices orderServices, ICoreCmsBillPaymentsServices billPaymentsServices)
{
this._dal = dal;
base.BaseDal = dal;
@@ -76,6 +78,8 @@ namespace CoreCms.Net.Services
_httpContextAccessor = httpContextAccessor;
_userLogServices = userLogServices;
_serviceProvider = serviceProvider;
_orderServices = orderServices;
_billPaymentsServices = billPaymentsServices;
}
@@ -727,6 +731,7 @@ namespace CoreCms.Net.Services
#endregion
#region
/// <summary>
/// 根据条件查询分页数据
/// </summary>
@@ -743,8 +748,9 @@ namespace CoreCms.Net.Services
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize);
}
#endregion
#region
/// <summary>
/// 按天统计新会员
/// </summary>
@@ -753,7 +759,9 @@ namespace CoreCms.Net.Services
{
return await _dal.Statistics(day);
}
#endregion
#region
/// <summary>
/// 按天统计当天下单活跃会员
/// </summary>
@@ -763,7 +771,86 @@ namespace CoreCms.Net.Services
return await _dal.StatisticsOrder(day);
}
#endregion
#region
/// <summary>
/// 当关闭分销和代理的时候走个人邀请好友分佣
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
public async Task<WebApiCallBack> InviteCommission(string orderId)
{
var jm = new WebApiCallBack();
var allConfigs = await _settingServices.GetConfigDictionaries();
//分佣类型1百分比/2固定金额
var commissionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionType).ObjectToInt(0);
//一级佣金
var commissionFirst = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0);
//二级佣金
var commissionSecond = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionSecond).ObjectToDecimal(0);
//三级佣金
var commissionThird = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0);
//是否开启三级分销(1开启2未开启)
var openDistribution = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OpenDistribution).ObjectToInt(0);
//是否开启代理模块(1开启2未开启)
var isOpenAgent = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.IsOpenAgent).ObjectToInt(0);
//当分销模块和代理模块都关闭的情况下,才去计算邀请好友的操作。
if (openDistribution != 2 || isOpenAgent != 2) return jm;
var order = await _orderServices.QueryByClauseAsync(p => p.orderId == orderId && p.status == (int)GlobalEnumVars.OrderStatus.Complete);
if (order == null)
{
jm.msg = "订单查询失败";
return jm;
}
var user = await _dal.QueryByClauseAsync(p => p.id == order.userId, true);
// 获取付款单,我们只拿付款单的实际金额去计算,不用订单的金额。这样直接不用去计算优惠了,只看用户付了多少。从上面提佣金出来。
var billPayments = await _billPaymentsServices.QueryByClauseAsync(p => p.sourceId == orderId && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed);
if (billPayments.money <= 0) return jm;
{
//1级佣金
var commissionLevel1 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed
? commissionFirst
: Math.Round(commissionFirst * billPayments.money / 100, 2);
//2级佣金
var commissionLevel2 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed
? commissionSecond
: Math.Round(commissionSecond * billPayments.money / 100, 2);
//3级佣金
var commissionLevel3 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed
? commissionThird
: Math.Round(commissionThird * billPayments.money / 100, 2);
//下面存储就不做递归了,三层直接判断了
if (user.parentId <= 0) return jm;
var parentLevel1 = await _dal.QueryByClauseAsync(p => p.id == user.parentId, true);
if (parentLevel1 == null) return jm;
{
//钱挪到会员余额里面
await _userBalanceServices.Change(user.parentId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel1, orderId);
if (parentLevel1.parentId <= 0) return jm;
var parentLevel2 = await _dal.QueryByClauseAsync(p => p.id == parentLevel1.parentId, true);
//钱挪到会员余额里面
await _userBalanceServices.Change(parentLevel1.parentId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel2, orderId);
if (parentLevel2.parentId <= 0) return jm;
{
var parentLevel3 = await _dal.QueryByClauseAsync(p => p.id == parentLevel2.parentId, true);
if (parentLevel3 != null)
{
//钱挪到会员余额里面
await _userBalanceServices.Change(parentLevel2.parentId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel3, orderId);
}
}
}
}
return jm;
}
#endregion
}
}

View File

@@ -270,7 +270,7 @@ namespace CoreCms.Net.Services
jm.msg = GlobalErrorCodeVars.Code10000;
jm.status = false;
break;
case (int)GlobalEnumVars.UserTocashType.:
case (int)GlobalEnumVars.UserTocashType.:
{
var user = await _userServices.QueryByIdAsync(info.userId);
if (user == null)
@@ -317,7 +317,7 @@ namespace CoreCms.Net.Services
break;
}
case (int)GlobalEnumVars.UserTocashType.:
case (int)GlobalEnumVars.UserTocashType.:
{
var user = await _userServices.QueryByIdAsync(info.userId);
if (user == null)