mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 18:53:25 +08:00
【优化】完善不开启分销,代理模式下,走邀请好友计算三级佣金;不开启分销或者代理的情况下,默认不去计算分销和代理佣金。
【调整】目前的分销三级业务逻辑是用户下单,往上找三级必须都是分销商,才能每级都分佣,中间可能不是分销商而中断向上递归,调整为用户下单,往上找三级只要三级有是分销商的,就根据佣金结果给与佣金。不中断。 【优化】区分老版本企业付款到零钱与新版本商家付款到零钱enum命名。
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 = "获取成功";
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user