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

【调整】目前的分销三级业务逻辑是用户下单,往上找三级必须都是分销商,才能每级都分佣,中间可能不是分销商而中断向上递归,调整为用户下单,往上找三级只要三级有是分销商的,就根据佣金结果给与佣金。不中断。
【优化】区分老版本企业付款到零钱与新版本商家付款到零钱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

@@ -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)