Commit 48ab28ce authored by liudong1993's avatar liudong1993

粉象返佣

parent b14bd414
......@@ -150,5 +150,9 @@ namespace Mall.Model.Entity.User
get;
set;
}
/// <summary>
/// 小数类型 1取整(向上进一) 2保留两位小数
/// </summary>
public int? DecimalType { get; set; }
}
}
......@@ -71,6 +71,10 @@ namespace Mall.Model.Entity.User
/// </summary>
public int? HPGradeId { get; set; }
/// <summary>
/// 粉象返佣等级
/// </summary>
public int? FXGradeId { get; set; }
/// <summary>
/// 审核状态 1审核中 2通过 3拒绝
/// </summary>
public DistributorAuditStatusEnum? AuditStatus
......
......@@ -202,6 +202,10 @@ namespace Mall.Module.Product
/// 财务单据规则
/// </summary>
private static RB_Finance_ConfigurineRepository financeConfigurineRepository = new RB_Finance_ConfigurineRepository();
/// <summary>
/// 粉象返佣
/// </summary>
private readonly RB_Distributor_FXGradeRepository distributor_FXGradeRepository = new RB_Distributor_FXGradeRepository();
#region 购物车
......@@ -3042,8 +3046,39 @@ namespace Mall.Module.Product
try
{
var basicModel = distributor_BasicsRepository.GetList(new RB_Distributor_Basics_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId }).FirstOrDefault();
//判断是否开启和平返佣
List<WhereHelper> wheres = new List<WhereHelper>() {
if (basicModel.IsEnableFXGrade == 1)
{
//粉象返佣
var FXList = distributor_FXGradeRepository.GetList(new RB_Distributor_FXGrade_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
if (FXList.Any() && FXList.Where(x => x.IsGuest == 1).Any()) {
var FXPModel = FXList.Where(x => x.IsGuest == 1).FirstOrDefault();
//验证用户必须是分销商 最低普通会员 不是以普通会员处理
var disModel = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = umodel.Id, AuditStatus = Common.Enum.User.DistributorAuditStatusEnum.Audited }).FirstOrDefault();
var FXModel = FXPModel;
if (disModel != null)
{
if (disModel.FXGradeId > 0)
{
FXModel = FXList.Where(x => x.Id == disModel.FXGradeId).FirstOrDefault();
}
}
else
{
LogHelper.Write("粉象返佣 用户分销商信息不存在:UserId:" + umodel.Id);
}
if (FXModel != null)
{
//查询出当前用户的所有上级
//查询出用户的所有分销信息
//开始慢慢找 注 同级返佣数量 返佣建子表可以无限级返佣了
}
}
}
else
{
//判断是否开启和平返佣
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Distributor_HPCommission_Extend.Status),
FiledValue=0,
......@@ -3065,334 +3100,266 @@ namespace Mall.Module.Product
OperatorEnum=OperatorEnum.Equal
}
};
if (distributor_HPCommissionRepository.Exists(wheres))
{
int OneUserId = umodel.SuperiorId ?? 0;
//获取分销商信息
var disModel = new RB_Distributor_Info_Extend();
if ((basicModel?.InPurchasing ?? 2) == 1)
{
disModel = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = umodel.Id, AuditStatus = Common.Enum.User.DistributorAuditStatusEnum.Audited }).FirstOrDefault();
if (disModel != null && (disModel.HPGradeId ?? 0) > 0)
{
OneUserId = umodel.Id;//设置了分销内购 并且自己是分销商 并且设置了和平等级 , 那么就是自购返佣
}
}
if (OneUserId != umodel.Id)
if (distributor_HPCommissionRepository.Exists(wheres))
{
//求其上级
disModel = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = OneUserId, AuditStatus = Common.Enum.User.DistributorAuditStatusEnum.Audited }).FirstOrDefault();
if (disModel != null && (disModel.HPGradeId ?? 0) > 0)
int OneUserId = umodel.SuperiorId ?? 0;
//获取分销商信息
var disModel = new RB_Distributor_Info_Extend();
if ((basicModel?.InPurchasing ?? 2) == 1)
{
OneUserId = umodel.SuperiorId ?? 0;//其上级可返佣
disModel = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = umodel.Id, AuditStatus = Common.Enum.User.DistributorAuditStatusEnum.Audited }).FirstOrDefault();
if (disModel != null && (disModel.HPGradeId ?? 0) > 0)
{
OneUserId = umodel.Id;//设置了分销内购 并且自己是分销商 并且设置了和平等级 , 那么就是自购返佣
}
}
else
if (OneUserId != umodel.Id)
{
OneUserId = 0;
//求其上级
disModel = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = OneUserId, AuditStatus = Common.Enum.User.DistributorAuditStatusEnum.Audited }).FirstOrDefault();
if (disModel != null && (disModel.HPGradeId ?? 0) > 0)
{
OneUserId = umodel.SuperiorId ?? 0;//其上级可返佣
}
else
{
OneUserId = 0;
}
}
}
if (OneUserId > 0)
{
foreach (var item in demodel.DetailList)
if (OneUserId > 0)
{
if (item.CostMoney > 0)
foreach (var item in demodel.DetailList)
{
//成本价格大于0的才进行返佣
string categoryids = string.Join(",", item.CategoryIdList);
var hpcList = distributor_HPCommissionRepository.GetList(new RB_Distributor_HPCommission_Extend() { Enabled = 1, CategoryIdsT = categoryids, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
if (hpcList.Any())
if (item.CostMoney > 0)
{
RB_Distributor_HPCommission_Extend hpcModel;
if (hpcList.Where(x => x.IsCommon != 1).Any())
//成本价格大于0的才进行返佣
string categoryids = string.Join(",", item.CategoryIdList);
var hpcList = distributor_HPCommissionRepository.GetList(new RB_Distributor_HPCommission_Extend() { Enabled = 1, CategoryIdsT = categoryids, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
if (hpcList.Any())
{
//有使用非通用返佣
hpcModel = hpcList.Where(x => x.IsCommon != 1).FirstOrDefault();
}
else
{
//查询通用返佣
hpcModel = hpcList.Where(x => x.IsCommon == 1).FirstOrDefault();
}
//查询所有返佣比例
var gList = distributor_HPGradeRatioRepository.GetList(new RB_Distributor_HPGradeRatio_Extend() { CommissionId = hpcModel.Id, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
var ratioModel = gList.Where(x => x.GradeId == disModel.HPGradeId).FirstOrDefault();
decimal OneCommission = 0;
if (ratioModel != null)
{
decimal MPrice = (item.CostMoney ?? 0) / (1 - ((ratioModel.CommissionRatio ?? 0) / 100));
OneCommission = (item.Final_Price ?? 0) - MPrice > 0 ? (item.Final_Price ?? 0) - MPrice : 0;
}
if (hpcModel.DecimalType == 1)
{
OneCommission = Math.Ceiling(OneCommission);
}
else if (hpcModel.DecimalType == 2)
{
OneCommission = Math.Ceiling(OneCommission * 100) / 100;
}
//插入返佣
goods_OrderCommissionRepository.Insert(new RB_Goods_OrderCommission()
{
Id = 0,
Commission = OneCommission,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = disModel.HPGradeId,
IsGoodsDistribution = 2,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = OrderId,
Remark = "和平返佣",
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = OneUserId,
Type = 2,
IsRemit = 0
}, trans);
//向上找出所有可以分销的
int ParentId = 0;
if (OneUserId == umodel.Id)
{
ParentId = umodel.SuperiorId ?? 0;
}
else
{
ParentId = member_UserRepository.GetEntity(umodel.SuperiorId ?? 0)?.SuperiorId ?? 0;
}
decimal ParentCommission = OneCommission;
while (ParentId > 0)
{
var disModel1 = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = ParentId, AuditStatus = Common.Enum.User.DistributorAuditStatusEnum.Audited }).FirstOrDefault();
if (disModel1 != null && (disModel1.HPGradeId ?? 0) > 0)
RB_Distributor_HPCommission_Extend hpcModel;
if (hpcList.Where(x => x.IsCommon != 1).Any())
{
//其上级可进行返佣
var ratioModel1 = gList.Where(x => x.GradeId == disModel1.HPGradeId).FirstOrDefault();
decimal OneCommission1 = 0;
if (ratioModel1 != null)
{
decimal MPrice1 = (item.CostMoney ?? 0) / (1 - ((ratioModel1.CommissionRatio ?? 0) / 100));
OneCommission1 = (item.Final_Price ?? 0) - MPrice1 > 0 ? (item.Final_Price ?? 0) - MPrice1 : 0;
}
if (hpcModel.DecimalType == 1)
{
OneCommission1 = Math.Ceiling(OneCommission1);
}
else if (hpcModel.DecimalType == 2)
{
OneCommission1 = Math.Ceiling(OneCommission1 * 100) / 100;
}
//减去下级已提佣金
OneCommission1 -= ParentCommission;
ParentCommission += OneCommission1;//累计下级已提佣金
//插入返佣
goods_OrderCommissionRepository.Insert(new RB_Goods_OrderCommission()
{
Id = 0,
Commission = OneCommission1,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = disModel1.HPGradeId,
IsGoodsDistribution = 2,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = OrderId,
Remark = "和平返佣",
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = ParentId,
Type = 2,
IsRemit = 0
}, trans);
//有使用非通用返佣
hpcModel = hpcList.Where(x => x.IsCommon != 1).FirstOrDefault();
}
ParentId = member_UserRepository.GetEntity(ParentId)?.SuperiorId ?? 0;
}
else
{
//查询通用返佣
hpcModel = hpcList.Where(x => x.IsCommon == 1).FirstOrDefault();
}
//查询所有返佣比例
var gList = distributor_HPGradeRatioRepository.GetList(new RB_Distributor_HPGradeRatio_Extend() { CommissionId = hpcModel.Id, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
}
}
}
}
}
else
{
var dcList = goods_DistributionCommissionRepository.GetList(new RB_Goods_DistributionCommission_Extend() { GoodsIds = GoodsIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
if (basicModel != null && basicModel.DistributorTier > 0)
{
#region 分销商id+分销商等级
int OneUserId = 0, TwoUserId = 0, ThreeUserId = 0;
int OneDistributorGrade = 0, TwoDistributorGrade = 0, ThreeDistributorGrade = 0;
//获取多级 分销商id
if (basicModel != null && basicModel.DistributorTier > 0)
{
for (int i = 1; i < basicModel.DistributorTier + 1; i++)
{
switch (i)
{
case 1:
if (umodel.IsDistributor != 1 || basicModel.InPurchasing != 1)
var ratioModel = gList.Where(x => x.GradeId == disModel.HPGradeId).FirstOrDefault();
decimal OneCommission = 0;
if (ratioModel != null)
{
OneUserId = umodel.SuperiorId ?? 0;
decimal MPrice = (item.CostMoney ?? 0) / (1 - ((ratioModel.CommissionRatio ?? 0) / 100));
OneCommission = (item.Final_Price ?? 0) - MPrice > 0 ? (item.Final_Price ?? 0) - MPrice : 0;
}
if (hpcModel.DecimalType == 1)
{
OneCommission = Math.Ceiling(OneCommission);
}
else if (hpcModel.DecimalType == 2)
{
OneCommission = Math.Ceiling(OneCommission * 100) / 100;
}
//插入返佣
goods_OrderCommissionRepository.Insert(new RB_Goods_OrderCommission()
{
Id = 0,
Commission = OneCommission,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = disModel.HPGradeId,
IsGoodsDistribution = 2,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = OrderId,
Remark = "和平返佣",
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = OneUserId,
Type = 2,
IsRemit = 0
}, trans);
//向上找出所有可以分销的
int ParentId = 0;
if (OneUserId == umodel.Id)
{
ParentId = umodel.SuperiorId ?? 0;
}
else
{
OneUserId = umodel.Id;
ParentId = member_UserRepository.GetEntity(umodel.SuperiorId ?? 0)?.SuperiorId ?? 0;
}
break;
case 2:
if (OneUserId > 0)
decimal ParentCommission = OneCommission;
while (ParentId > 0)
{
if (umodel.IsDistributor != 1 || basicModel.InPurchasing != 1)
var disModel1 = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = ParentId, AuditStatus = Common.Enum.User.DistributorAuditStatusEnum.Audited }).FirstOrDefault();
if (disModel1 != null && (disModel1.HPGradeId ?? 0) > 0)
{
TwoUserId = member_UserRepository.GetEntity(OneUserId).SuperiorId ?? 0;
}
else
{
TwoUserId = umodel.SuperiorId ?? 0;
//其上级可进行返佣
var ratioModel1 = gList.Where(x => x.GradeId == disModel1.HPGradeId).FirstOrDefault();
decimal OneCommission1 = 0;
if (ratioModel1 != null)
{
decimal MPrice1 = (item.CostMoney ?? 0) / (1 - ((ratioModel1.CommissionRatio ?? 0) / 100));
OneCommission1 = (item.Final_Price ?? 0) - MPrice1 > 0 ? (item.Final_Price ?? 0) - MPrice1 : 0;
}
if (hpcModel.DecimalType == 1)
{
OneCommission1 = Math.Ceiling(OneCommission1);
}
else if (hpcModel.DecimalType == 2)
{
OneCommission1 = Math.Ceiling(OneCommission1 * 100) / 100;
}
//减去下级已提佣金
OneCommission1 -= ParentCommission;
ParentCommission += OneCommission1;//累计下级已提佣金
//插入返佣
goods_OrderCommissionRepository.Insert(new RB_Goods_OrderCommission()
{
Id = 0,
Commission = OneCommission1,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = disModel1.HPGradeId,
IsGoodsDistribution = 2,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = OrderId,
Remark = "和平返佣",
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = ParentId,
Type = 2,
IsRemit = 0
}, trans);
}
ParentId = member_UserRepository.GetEntity(ParentId)?.SuperiorId ?? 0;
}
break;
case 3:
if (TwoUserId > 0)
{
ThreeUserId = member_UserRepository.GetEntity(TwoUserId).SuperiorId ?? 0;
}
break;
}
}
}
}
if (OneUserId > 0)
}
else
{
var dcList = goods_DistributionCommissionRepository.GetList(new RB_Goods_DistributionCommission_Extend() { GoodsIds = GoodsIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
if (basicModel != null && basicModel.DistributorTier > 0)
{
#region 临时处理
if (TwoUserId > 0 && TwoUserId < 20)
{
TwoUserId = 0;
}
if (ThreeUserId > 0 && ThreeUserId < 20)
{
ThreeUserId = 0;
}
#endregion
if (OneUserId > 0)
{
OneDistributorGrade = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = OneUserId })?.FirstOrDefault()?.GradeId ?? 0;
}
if (TwoUserId > 0)
{
TwoDistributorGrade = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = TwoUserId })?.FirstOrDefault()?.GradeId ?? 0;
}
if (ThreeUserId > 0)
{
ThreeDistributorGrade = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = ThreeUserId })?.FirstOrDefault()?.GradeId ?? 0;
}
#endregion
#region 分销商等级列表
List<int> gradeIdlist = new List<int>();
if (OneDistributorGrade > 0)
{
gradeIdlist.Add(OneDistributorGrade);
}
if (TwoDistributorGrade > 0)
{
gradeIdlist.Add(TwoDistributorGrade);
}
if (ThreeDistributorGrade > 0)
#region 分销商id+分销商等级
int OneUserId = 0, TwoUserId = 0, ThreeUserId = 0;
int OneDistributorGrade = 0, TwoDistributorGrade = 0, ThreeDistributorGrade = 0;
//获取多级 分销商id
if (basicModel != null && basicModel.DistributorTier > 0)
{
gradeIdlist.Add(ThreeDistributorGrade);
}
List<RB_Distributor_Grade_Extend> dgradeList = new List<RB_Distributor_Grade_Extend>();
if (gradeIdlist.Any())
{
dgradeList = distributor_GradeRepository.GetList(new RB_Distributor_Grade_Extend() { GradeIds = string.Join(",", gradeIdlist), TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
}
#endregion
foreach (var item in demodel.DetailList)
{
//返佣
List<RB_Goods_OrderCommission> gocList = new List<RB_Goods_OrderCommission>();
for (int i = 1; i < basicModel.DistributorTier + 1; i++)
{
switch (i)
{
case 1:
decimal DcommionMoney = 0;
if (item.SeparateDistribution == 1)
if (umodel.IsDistributor != 1 || basicModel.InPurchasing != 1)
{
if (item.SeparateDistributionType == 1)
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.DistributorGrade == OneDistributorGrade).FirstOrDefault()?.OneCommission ?? 0;
}
else
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.SpecificationSort == item.SpecificationSort && x.DistributorGrade == OneDistributorGrade).FirstOrDefault()?.OneCommission ?? 0;
}
if (item.SeparateDistributionMoneyType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
OneUserId = umodel.SuperiorId ?? 0;
}
else
{
//获取分销商等级
if (OneDistributorGrade > 0)
OneUserId = umodel.Id;
}
break;
case 2:
if (OneUserId > 0)
{
if (umodel.IsDistributor != 1 || basicModel.InPurchasing != 1)
{
var dgradeModel = dgradeList.Where(x => x.Id == OneDistributorGrade).FirstOrDefault();
DcommionMoney = dgradeModel?.OneCommission ?? 0;
if (dgradeModel.DistributionCommissionType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
TwoUserId = member_UserRepository.GetEntity(OneUserId).SuperiorId ?? 0;
}
else
{
//默认分销商等级 读取基本配置的返佣
DcommionMoney = basicModel.OneCommission ?? 0;
if (basicModel.DistributorCommissionType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
TwoUserId = umodel.SuperiorId ?? 0;
}
}
if (TwoUserId == 0 && basicModel.IsCommissionResidue == 1)
{
//表示其为一级分销商 把后面的佣金都提完
TwoUserId = OneUserId;
TwoDistributorGrade = OneDistributorGrade;
}
RB_Goods_OrderCommission gocModel = new RB_Goods_OrderCommission()
{
Id = 0,
Commission = DcommionMoney,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = umodel.IsDistributor == 1 ? 0 : 1,
IsGoodsDistribution = item.SeparateDistribution,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = OrderId,
Remark = "",
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = OneUserId,
Type = 1,
IsRemit = 0
};
gocList.Add(gocModel);
break;
case 2:
case 3:
if (TwoUserId > 0)
{
DcommionMoney = 0;
ThreeUserId = member_UserRepository.GetEntity(TwoUserId).SuperiorId ?? 0;
}
break;
}
}
}
if (OneUserId > 0)
{
#region 临时处理
if (TwoUserId > 0 && TwoUserId < 20)
{
TwoUserId = 0;
}
if (ThreeUserId > 0 && ThreeUserId < 20)
{
ThreeUserId = 0;
}
#endregion
if (OneUserId > 0)
{
OneDistributorGrade = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = OneUserId })?.FirstOrDefault()?.GradeId ?? 0;
}
if (TwoUserId > 0)
{
TwoDistributorGrade = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = TwoUserId })?.FirstOrDefault()?.GradeId ?? 0;
}
if (ThreeUserId > 0)
{
ThreeDistributorGrade = distributor_InfoRepository.GetList(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, UserId = ThreeUserId })?.FirstOrDefault()?.GradeId ?? 0;
}
#endregion
#region 分销商等级列表
List<int> gradeIdlist = new List<int>();
if (OneDistributorGrade > 0)
{
gradeIdlist.Add(OneDistributorGrade);
}
if (TwoDistributorGrade > 0)
{
gradeIdlist.Add(TwoDistributorGrade);
}
if (ThreeDistributorGrade > 0)
{
gradeIdlist.Add(ThreeDistributorGrade);
}
List<RB_Distributor_Grade_Extend> dgradeList = new List<RB_Distributor_Grade_Extend>();
if (gradeIdlist.Any())
{
dgradeList = distributor_GradeRepository.GetList(new RB_Distributor_Grade_Extend() { GradeIds = string.Join(",", gradeIdlist), TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
}
#endregion
foreach (var item in demodel.DetailList)
{
//返佣
List<RB_Goods_OrderCommission> gocList = new List<RB_Goods_OrderCommission>();
for (int i = 1; i < basicModel.DistributorTier + 1; i++)
{
switch (i)
{
case 1:
decimal DcommionMoney = 0;
if (item.SeparateDistribution == 1)
{
if (item.SeparateDistributionType == 1)
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.DistributorGrade == TwoDistributorGrade).FirstOrDefault()?.TwoCommission ?? 0;
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.DistributorGrade == OneDistributorGrade).FirstOrDefault()?.OneCommission ?? 0;
}
else
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.SpecificationSort == item.SpecificationSort && x.DistributorGrade == TwoDistributorGrade).FirstOrDefault()?.TwoCommission ?? 0;
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.SpecificationSort == item.SpecificationSort && x.DistributorGrade == OneDistributorGrade).FirstOrDefault()?.OneCommission ?? 0;
}
if (item.SeparateDistributionMoneyType == 1)
{
......@@ -3402,10 +3369,10 @@ namespace Mall.Module.Product
else
{
//获取分销商等级
if (TwoDistributorGrade > 0)
if (OneDistributorGrade > 0)
{
var dgradeModel = dgradeList.Where(x => x.Id == TwoDistributorGrade).FirstOrDefault();
DcommionMoney = dgradeModel?.TwoCommission ?? 0;
var dgradeModel = dgradeList.Where(x => x.Id == OneDistributorGrade).FirstOrDefault();
DcommionMoney = dgradeModel?.OneCommission ?? 0;
if (dgradeModel.DistributionCommissionType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
......@@ -3414,7 +3381,7 @@ namespace Mall.Module.Product
else
{
//默认分销商等级 读取基本配置的返佣
DcommionMoney = basicModel.TwoCommission ?? 0;
DcommionMoney = basicModel.OneCommission ?? 0;
if (basicModel.DistributorCommissionType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
......@@ -3422,19 +3389,19 @@ namespace Mall.Module.Product
}
}
if (ThreeUserId == 0 && basicModel.IsCommissionResidue == 1)
if (TwoUserId == 0 && basicModel.IsCommissionResidue == 1)
{
//表示其为级分销商 把后面的佣金都提完
ThreeUserId = TwoUserId;
ThreeDistributorGrade = TwoDistributorGrade;
//表示其为级分销商 把后面的佣金都提完
TwoUserId = OneUserId;
TwoDistributorGrade = OneDistributorGrade;
}
gocModel = new RB_Goods_OrderCommission()
RB_Goods_OrderCommission gocModel = new RB_Goods_OrderCommission()
{
Id = 0,
Commission = DcommionMoney,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = umodel.IsDistributor == 1 ? TwoUserId == OneUserId ? 0 : 1 : 2,
Grade = umodel.IsDistributor == 1 ? 0 : 1,
IsGoodsDistribution = item.SeparateDistribution,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
......@@ -3442,126 +3409,195 @@ namespace Mall.Module.Product
Remark = "",
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = TwoUserId,
UserId = OneUserId,
Type = 1,
IsRemit = 0
};
gocList.Add(gocModel);
}
break;
case 3:
if (ThreeUserId > 0)
{
DcommionMoney = 0;
if (item.SeparateDistribution == 1)
break;
case 2:
if (TwoUserId > 0)
{
if (item.SeparateDistributionType == 1)
DcommionMoney = 0;
if (item.SeparateDistribution == 1)
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.DistributorGrade == ThreeDistributorGrade).FirstOrDefault()?.ThreeCommission ?? 0;
if (item.SeparateDistributionType == 1)
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.DistributorGrade == TwoDistributorGrade).FirstOrDefault()?.TwoCommission ?? 0;
}
else
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.SpecificationSort == item.SpecificationSort && x.DistributorGrade == TwoDistributorGrade).FirstOrDefault()?.TwoCommission ?? 0;
}
if (item.SeparateDistributionMoneyType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
}
else
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.SpecificationSort == item.SpecificationSort && x.DistributorGrade == ThreeDistributorGrade).FirstOrDefault()?.ThreeCommission ?? 0;
//获取分销商等级
if (TwoDistributorGrade > 0)
{
var dgradeModel = dgradeList.Where(x => x.Id == TwoDistributorGrade).FirstOrDefault();
DcommionMoney = dgradeModel?.TwoCommission ?? 0;
if (dgradeModel.DistributionCommissionType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
}
else
{
//默认分销商等级 读取基本配置的返佣
DcommionMoney = basicModel.TwoCommission ?? 0;
if (basicModel.DistributorCommissionType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
}
}
if (item.SeparateDistributionMoneyType == 1)
if (ThreeUserId == 0 && basicModel.IsCommissionResidue == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
//表示其为二级分销商 把后面的佣金都提完
ThreeUserId = TwoUserId;
ThreeDistributorGrade = TwoDistributorGrade;
}
gocModel = new RB_Goods_OrderCommission()
{
Id = 0,
Commission = DcommionMoney,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = umodel.IsDistributor == 1 ? TwoUserId == OneUserId ? 0 : 1 : 2,
IsGoodsDistribution = item.SeparateDistribution,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = OrderId,
Remark = "",
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = TwoUserId,
Type = 1,
IsRemit = 0
};
gocList.Add(gocModel);
}
else
break;
case 3:
if (ThreeUserId > 0)
{
//获取分销商等级
if (ThreeDistributorGrade > 0)
DcommionMoney = 0;
if (item.SeparateDistribution == 1)
{
var dgradeModel = dgradeList.Where(x => x.Id == ThreeDistributorGrade).FirstOrDefault();
DcommionMoney = dgradeModel?.ThreeCommission ?? 0;
if (dgradeModel.DistributionCommissionType == 1)
if (item.SeparateDistributionType == 1)
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.DistributorGrade == ThreeDistributorGrade).FirstOrDefault()?.ThreeCommission ?? 0;
}
else
{
DcommionMoney = dcList.Where(x => x.GoodsId == item.GoodsId && x.SpecificationSort == item.SpecificationSort && x.DistributorGrade == ThreeDistributorGrade).FirstOrDefault()?.ThreeCommission ?? 0;
}
if (item.SeparateDistributionMoneyType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
}
else
{
//默认分销商等级 读取基本配置的返佣
DcommionMoney = basicModel.ThreeCommission ?? 0;
if (basicModel.DistributorCommissionType == 1)
//获取分销商等级
if (ThreeDistributorGrade > 0)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
var dgradeModel = dgradeList.Where(x => x.Id == ThreeDistributorGrade).FirstOrDefault();
DcommionMoney = dgradeModel?.ThreeCommission ?? 0;
if (dgradeModel.DistributionCommissionType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
}
else
{
//默认分销商等级 读取基本配置的返佣
DcommionMoney = basicModel.ThreeCommission ?? 0;
if (basicModel.DistributorCommissionType == 1)
{
DcommionMoney = Math.Round((item.Final_Price ?? 0) * DcommionMoney / 100, 2, MidpointRounding.AwayFromZero);
}
}
}
}
#region 获取返佣等级
int Grade = 0;
if (OneUserId == TwoUserId && TwoUserId == ThreeUserId)
{
Grade = 0;
}
else if (OneUserId != TwoUserId && TwoUserId == ThreeUserId)
{
Grade = 1;
}
else
{
Grade = 2;
}
if (umodel.IsDistributor != 1)
{
Grade++;
}
#endregion
gocModel = new RB_Goods_OrderCommission()
{
Id = 0,
Commission = DcommionMoney,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = Grade,
IsGoodsDistribution = item.SeparateDistribution,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = OrderId,
Remark = "",
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = ThreeUserId,
Type = 1,
IsRemit = 0
};
gocList.Add(gocModel);
}
#region 获取返佣等级
int Grade = 0;
if (OneUserId == TwoUserId && TwoUserId == ThreeUserId)
{
Grade = 0;
}
else if (OneUserId != TwoUserId && TwoUserId == ThreeUserId)
{
Grade = 1;
}
else
{
Grade = 2;
}
if (umodel.IsDistributor != 1)
{
Grade++;
}
#endregion
gocModel = new RB_Goods_OrderCommission()
{
Id = 0,
Commission = DcommionMoney,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = Grade,
IsGoodsDistribution = item.SeparateDistribution,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = OrderId,
Remark = "",
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = ThreeUserId,
Type = 1,
IsRemit = 0
};
gocList.Add(gocModel);
}
break;
break;
}
}
}
List<RB_Goods_OrderCommission> gocfulList = gocList;
//gocList 合并用户金额
if (basicModel.IsCommissionResidue == 1)
{
if (gocList.Count() != gocList.Select(x => x.UserId).Distinct().Count())
List<RB_Goods_OrderCommission> gocfulList = gocList;
//gocList 合并用户金额
if (basicModel.IsCommissionResidue == 1)
{
gocfulList = new List<RB_Goods_OrderCommission>();
//说明有用户可以合并
var userIdList = gocList.Select(x => x.UserId).Distinct().ToList();
foreach (var qitem in userIdList)
if (gocList.Count() != gocList.Select(x => x.UserId).Distinct().Count())
{
var gocModel = gocList.Where(x => x.UserId == qitem).FirstOrDefault();
if (gocList.Where(x => x.UserId == qitem).Count() > 1)
gocfulList = new List<RB_Goods_OrderCommission>();
//说明有用户可以合并
var userIdList = gocList.Select(x => x.UserId).Distinct().ToList();
foreach (var qitem in userIdList)
{
decimal tcommission = gocList.Where(x => x.UserId == qitem).Sum(x => x.Commission ?? 0);
gocModel.Commission = tcommission;
gocModel.Remark = "多级全额返佣";
var gocModel = gocList.Where(x => x.UserId == qitem).FirstOrDefault();
if (gocList.Where(x => x.UserId == qitem).Count() > 1)
{
decimal tcommission = gocList.Where(x => x.UserId == qitem).Sum(x => x.Commission ?? 0);
gocModel.Commission = tcommission;
gocModel.Remark = "多级全额返佣";
}
gocfulList.Add(gocModel);
}
gocfulList.Add(gocModel);
}
}
}
if (gocfulList.Any())
{
foreach (var qitem in gocfulList)
if (gocfulList.Any())
{
qitem.Commission = (qitem.Commission ?? 0) * (item.Number ?? 0);
goods_OrderCommissionRepository.Insert(qitem, trans);
foreach (var qitem in gocfulList)
{
qitem.Commission = (qitem.Commission ?? 0) * (item.Number ?? 0);
goods_OrderCommissionRepository.Insert(qitem, trans);
}
}
}
}
......
......@@ -152,6 +152,11 @@ namespace Mall.Module.Product
/// 商品代理
/// </summary>
private readonly RB_Goods_ProxyRepository goods_ProxyRepository = new RB_Goods_ProxyRepository();
/// <summary>
/// 粉象返佣
/// </summary>
private readonly RB_Distributor_FXGradeRepository distributor_FXGradeRepository = new RB_Distributor_FXGradeRepository();
......@@ -1264,52 +1269,50 @@ namespace Mall.Module.Product
var BasicsModel = distributor_BasicsRepository.GetList(new RB_Distributor_Basics_Extend() { TenantId = TenantId, MallBaseId = MallBaseId }).FirstOrDefault();
if ((BasicsModel?.IsEnableFXGrade??2) == 1)
{
if (model.IsCustomSpecification == 1)
{
var dcList = model.SpecificationPriceList.Where(x => x.DistributorGrade == disModel.GradeId).ToList();
model.MaxShare = dcList.Max(x => x.OneCommission ?? 0);
if (model.SeparateDistributionMoneyType == 1)
{
model.MaxShare = Math.Round(model.MaxShare * MaxSellMoney / 100, 2, MidpointRounding.AwayFromZero);
}
}
else
var FXList = distributor_FXGradeRepository.GetList(new RB_Distributor_FXGrade_Extend() { TenantId = TenantId, MallBaseId = MallBaseId });
if (FXList.Any() && FXList.Where(x => x.IsGuest == 1).Any())
{
if (disModel.GradeId == 0)
var FXModel = FXList.Where(x => x.Id == disModel.FXGradeId).FirstOrDefault();
var PModel = FXList.Where(x => x.IsGuest == 1).FirstOrDefault();
if (FXModel != null && PModel != null)
{
//拿分销基础配置
//if ((BasicsModel?.IsCommissionResidue ?? 2) == 1)
//{
// model.MaxShare = (BasicsModel?.OneCommission ?? 0) + (BasicsModel?.TwoCommission ?? 0) + (BasicsModel?.ThreeCommission ?? 0);
//}
//else
//{
model.MaxShare = BasicsModel?.OneCommission ?? 0;
//}
if ((BasicsModel?.DistributorCommissionType ?? 2) == 1)
decimal CRate = 0;
if (FXModel.Id == PModel.Id)
{
model.MaxShare = Math.Round(model.MaxShare * MaxSellMoney / 100, 2, MidpointRounding.AwayFromZero);
CRate = FXModel.SiblingRatio ?? 0;
}
}
else if (disModel.GradeId > 0)
{
//获取分销商等级
var disgradeModel = distributor_GradeRepository.GetEntity(disModel.GradeId);
if (disgradeModel != null)
else
{
//if ((BasicsModel?.IsCommissionResidue ?? 2) == 1)
//{
// model.MaxShare = (disgradeModel?.OneCommission ?? 0) + (disgradeModel?.TwoCommission ?? 0) + (disgradeModel?.ThreeCommission ?? 0);
//}
//else
//{
model.MaxShare = disgradeModel?.OneCommission ?? 0;
//}
if ((disgradeModel?.DistributionCommissionType ?? 2) == 1)
CRate = (FXModel.CommissionRatio ?? 0) - (PModel.CommissionRatio ?? 0);
}
if (model.IsCustomSpecification == 1)
{
var dcModel = model.SpecificationPriceList.OrderByDescending(x => x.Commission).FirstOrDefault();
if (dcModel.Commission > 0)
{
model.MaxShare = Math.Round(model.MaxShare * MaxSellMoney / 100, 2, MidpointRounding.AwayFromZero);
if (FXModel.DecimalType == 1)
{
model.MaxShare = Math.Ceiling(dcModel.Commission * CRate / 100);
}
else
{
model.MaxShare = Math.Ceiling(dcModel.Commission * CRate) / 100;
}
}
}
else
{
if (model.Commission > 0)
{
if (FXModel.DecimalType == 1)
{
model.MaxShare = Math.Ceiling(model.Commission * CRate / 100);
}
else
{
model.MaxShare = Math.Ceiling(model.Commission * CRate) / 100;
}
}
}
}
......
......@@ -4426,6 +4426,7 @@ namespace Mall.Module.User
{ nameof(RB_Distributor_FXGrade.UpgradeNum),demodel.UpgradeNum},
{ nameof(RB_Distributor_FXGrade.UpgradeId),demodel.UpgradeId},
{ nameof(RB_Distributor_FXGrade.UpdateDate),demodel.UpdateDate},
{ nameof(RB_Distributor_FXGrade.DecimalType),demodel.DecimalType},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
......
......@@ -2658,6 +2658,7 @@ namespace Mall.WebApi.Controllers.User
x.BuyMoney,
x.IsUpgrade,
x.UpgradeNum,
x.DecimalType,
x.UpgradeId,
UpdateDate = x.UpdateDate.HasValue ? x.UpdateDate.Value.ToString("yyyy-MM-dd") : ""
});
......@@ -2720,6 +2721,7 @@ namespace Mall.WebApi.Controllers.User
demodel.IsUpgrade ??= 0;
demodel.UpgradeNum ??= 0;
demodel.UpgradeId ??= 0;
demodel.DecimalType ??= 1;
demodel.CreateDate = DateTime.Now;
demodel.UpdateDate = DateTime.Now;
bool flag = userModule.SetFXDistributorGradeInfo(demodel);
......@@ -2747,6 +2749,7 @@ namespace Mall.WebApi.Controllers.User
{
return ApiResult.ParamIsNull();
}
//验证 有用户在使用该等级 不能删除
bool flag = userModule.DelFXDistributorGradeInfo(GradeId, req.TenantId, req.MallBaseId);
if (flag)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment