Commit ccc7b5e9 authored by liudong1993's avatar liudong1993

赞羊返佣调整

parent 705090d0
...@@ -399,5 +399,15 @@ namespace Mall.Model.Entity.Product ...@@ -399,5 +399,15 @@ namespace Mall.Model.Entity.Product
/// 规格对应的班级(甲鹤小程序) /// 规格对应的班级(甲鹤小程序)
/// </summary> /// </summary>
public int ClassId { get; set; } public int ClassId { get; set; }
/// <summary>
/// 原成本价格
/// </summary>
public decimal OriginalCostMoney { get; set; }
/// <summary>
/// 粉象初始佣金
/// </summary>
public decimal FXCommission { get; set; }
} }
} }
...@@ -7803,7 +7803,9 @@ namespace Mall.Module.Product ...@@ -7803,7 +7803,9 @@ namespace Mall.Module.Product
DepositMoney = item.DepositMoney, DepositMoney = item.DepositMoney,
DepositFreightMoney = item.DepositFreightMoney, DepositFreightMoney = item.DepositFreightMoney,
DepositRefundMoney = item.DepositRefundMoney, DepositRefundMoney = item.DepositRefundMoney,
ClassId = item.ClassId ClassId = item.ClassId,
FXCommission = item.CommissionPrice,
OriginalCostMoney = item.CostMoney ?? 0
}, trans); }, trans);
item.Id = detailId; item.Id = detailId;
if (detailId > 0 && SatisfiedGoodsList.Any()) if (detailId > 0 && SatisfiedGoodsList.Any())
......
...@@ -5870,18 +5870,18 @@ namespace Mall.Module.Product ...@@ -5870,18 +5870,18 @@ namespace Mall.Module.Product
/// <summary> /// <summary>
/// 修改商品订单成本价 /// 修改商品订单成本价
/// </summary> /// </summary>
/// <param name="orderId"></param> /// <param name="OrderDetailId"></param>
/// <param name="income"></param> /// <param name="costMoney"></param>
/// <param name="freightMoney"></param> /// <param name="CreateBy"></param>
/// <param name="tenantId"></param> /// <param name="tenantId"></param>
/// <param name="mallBaseId"></param> /// <param name="mallBaseId"></param>
/// <returns></returns> /// <returns></returns>
public bool SetOrderCostMoney(int OrderDetailId, decimal costMoney, int CreateBy, int tenantId, int mallBaseId) public string SetOrderCostMoney(int OrderDetailId, decimal costMoney, int CreateBy, int tenantId, int mallBaseId)
{ {
var orderModel = goods_OrderDetailRepository.GetEntity(OrderDetailId); var orderModel = goods_OrderDetailRepository.GetEntity(OrderDetailId);
if (orderModel == null) if (orderModel == null)
{ {
return false; return "订单明细不存在";
} }
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() { Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Goods_OrderDetail.CostMoney),costMoney } { nameof(RB_Goods_OrderDetail.CostMoney),costMoney }
...@@ -5921,8 +5921,335 @@ namespace Mall.Module.Product ...@@ -5921,8 +5921,335 @@ namespace Mall.Module.Product
NewCostPrice = costMoney, NewCostPrice = costMoney,
Type = 1 Type = 1
})); }));
#region 调高成本重新返佣
// ld 2021-09-17
//暂只有 赞羊使用
if (orderModel.MallBaseId == 1 && orderModel.FXCommission > 0 && orderModel.OriginalCostMoney > 0 && costMoney > orderModel.OriginalCostMoney && (orderModel.Unit_Price ?? 0) - orderModel.OriginalCostMoney > 0) {
//先计算 调高返佣后 应发佣金
decimal NewCommission = (orderModel.FXCommission / ((orderModel.Unit_Price ?? 0) - orderModel.OriginalCostMoney)) * ((orderModel.Unit_Price ?? 0) - costMoney);
NewCommission -= (orderModel.DeductionCommission ?? 0);// 减去下单已抵扣的佣金
var trans = goods_OrderCommissionRepository.DbTransaction;
try
{
#region 重新跑返佣
//只重置粉象模式
var basicModel = distributor_BasicsRepository.GetList(new RB_Distributor_Basics_Extend() { TenantId = orderModel.TenantId, MallBaseId = orderModel.MallBaseId }).FirstOrDefault();
if ((basicModel?.IsEnableFXGrade ?? 2) == 1)
{
bool IsReset = false;
#region 先清除当前商品返佣
var commissionList = goods_OrderCommissionRepository.GetList(new RB_Goods_OrderCommission_Extend() { MallBaseId = orderModel.MallBaseId, OrderId = orderModel.OrderId, OrderDetailId = orderModel.Id });
if (commissionList.Any())
{
if (!commissionList.Where(x => x.CommissionState == 2).Any())
{
IsReset = true;
//删除原返佣记录 排除抵扣的
var dellist = commissionList.Where(x => !((x.Commission ?? 0) == 0 && (x.DeductionCommission ?? 0) > 0)).ToList();
if (dellist.Any())
{
goods_OrderCommissionRepository.DeleteBatch(dellist);
}
}
}
#endregion
if (IsReset && NewCommission > 0)
{
var demodel = goods_OrderRepository.GetEntity<RB_Goods_Order_Extend>(orderModel.OrderId);
demodel.DetailList = new List<RB_Goods_OrderDetail_Extend>() { };
demodel.DetailList.Add(orderModel.RefMapperTo<RB_Goods_OrderDetail_Extend>());
int userId = demodel.UserId ?? 0;
var umodel = member_UserRepository.GetEntity(userId);
if (((basicModel?.IsEnableNoSuperiorFY ?? 1) == 1) || ((basicModel?.IsEnableNoSuperiorFY ?? 1) == 2 && (umodel.SuperiorId ?? 0) > 0))
{
//粉象返佣
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)
{
//查询出当前用户的所有上级
string UserIds = member_UserRepository.GetMemberParentIdStr(umodel.Id);
var ulist = member_UserRepository.GetList(new RB_Member_User_Extend() { UserIds = UserIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
//查询出用户的所有分销信息
var dlist = distributor_InfoRepository.GetListForSingle(new RB_Distributor_Info_Extend() { UserIds = UserIds, TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId });
foreach (var item in dlist)
{
item.Grade = FXList.Where(x => x.Id == item.FXGradeId).FirstOrDefault()?.Grade ?? 0;
}
//开始慢慢找 注 同级返佣数量 返佣建子表可以无限级返佣了 --2020/10/16 未使用课程卡的才能返佣
var DetailList = demodel.DetailList.Where(x => (x.EducationCouponId ?? 0) == 0).ToList();
foreach (var item in DetailList)
{
item.CommissionPrice = NewCommission;//直接赋值当前商品应发佣金
if ((item.PresentFXGrade ?? 0) > 0)
{
//是赠送VIP等级的 暂直接表示 反购买VIP佣金 2020-08-03 ld
continue;
}
//返佣
List<RB_Goods_OrderCommission> gocList = new List<RB_Goods_OrderCommission>();
List<FXOrderCommissionNumModel> fxNumList = new List<FXOrderCommissionNumModel>();
decimal TotalCommission = item.CommissionPrice;
int UserId = umodel.Id;
int Num = 1;
while (UserId > 0 && TotalCommission > 0)
{
var numodel = ulist.Where(x => x.Id == UserId).FirstOrDefault();
if (numodel == null)
{
UserId = 0;
break;
}
if (numodel.Id == umodel.Id)
{
//第一个进来 按等级的返佣比例给佣金
UserId = numodel.SuperiorId ?? 0;
decimal DcommionMoney = 0;
if (FXModel.DecimalType == 1)
{
DcommionMoney = Math.Ceiling(item.CommissionPrice * (FXModel.CommissionRatio ?? 0) / 100);
}
else
{
DcommionMoney = Math.Ceiling(item.CommissionPrice * (FXModel.CommissionRatio ?? 0)) / 100;
}
fxNumList.Add(new FXOrderCommissionNumModel()
{
GradeId = FXModel.Id,
Grade = FXModel.Grade ?? 0,
Money = DcommionMoney,
Sort = Num,
IsSelfBuy = 1
});
Num++;
TotalCommission -= DcommionMoney;
RB_Goods_OrderCommission gocModel = new RB_Goods_OrderCommission()
{
Id = 0,
Commission = FXModel.CommissionType == 2 ? 0 : DcommionMoney,//下单抵扣了 返佣金额=0
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = FXModel.Id,
IsGoodsDistribution = 2,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = orderModel.OrderId,
Remark = "粉象 " + FXModel.GradeName + "下单返佣,返佣比例:" + (FXModel.CommissionRatio ?? 0) + "%;" + (FXModel.CommissionType == 2 ? "已抵扣" + (DcommionMoney * (item.Number ?? 0)) + "金额" : ""),
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = numodel.Id,
Type = 3,
IsRemit = 0,
DeductionCommission = (DcommionMoney * (item.Number ?? 0))
};
gocList.Add(gocModel);
}
else
{
var d2Model = dlist.Where(x => x.UserId == numodel.Id).FirstOrDefault();
var FXGModel = new RB_Distributor_FXGrade_Extend();
if (d2Model == null)
{
LogHelper.Write("粉象返佣 用户分销商信息不存在:UserId:" + numodel.Id);
FXGModel = FXPModel;
}
else
{
FXGModel = FXList.Where(x => x.Id == d2Model.FXGradeId).FirstOrDefault();
if (FXGModel == null)
{
FXGModel = FXPModel;
}
}
int MaxGrade = fxNumList.Max(x => x.Grade);
if (FXGModel.Grade < MaxGrade)
{
//后面的全部不返佣 2020-08-06 刘东 继续找下一级返佣
UserId = numodel.SuperiorId ?? 0;
continue;
}
int MaxGradeNum = fxNumList.Where(x => x.Grade == FXGModel.Grade).Count();
int MaxGradeId = fxNumList.Where(x => x.Grade == MaxGrade).FirstOrDefault()?.GradeId ?? 0;
if ((FXGModel.SiblingRebatesNum ?? 0) + 1 > MaxGradeNum)
{
UserId = numodel.SuperiorId ?? 0;
decimal DcommionMoney = 0;
decimal CommissionRatio = 0;
if (FXGModel.Grade > MaxGrade && fxNumList.Where(x => x.GradeId == FXPModel.Id).Count() == 2 && MaxGrade == FXPModel.Grade)
{
//需要提间接普会
CommissionRatio = GetFXGradeRatioCommon(FXList, FXGModel.Id, FXPModel.Id, 2);
}
else
{
CommissionRatio = GetFXGradeRatioCommon(FXList, FXGModel.Id, MaxGradeId, 1);
}
if (FXGModel.DecimalType == 1)
{
DcommionMoney = Math.Ceiling(item.CommissionPrice * CommissionRatio / 100);
}
else
{
DcommionMoney = Math.Ceiling(item.CommissionPrice * CommissionRatio) / 100;
}
fxNumList.Add(new FXOrderCommissionNumModel()
{
GradeId = FXGModel.Id,
Grade = FXGModel.Grade ?? 0,
Money = DcommionMoney,
Sort = Num,
IsSelfBuy = 2
});
Num++;
bool IsMoneyLack = false;
if (TotalCommission < DcommionMoney)
{
DcommionMoney = TotalCommission;
IsMoneyLack = true;
}
RB_Goods_OrderCommission gocModel = new RB_Goods_OrderCommission()
{
Id = 0,
Commission = DcommionMoney,
CommissionState = 1,
CreateDate = DateTime.Now,
Grade = FXGModel.Id,
IsGoodsDistribution = 2,
MallBaseId = demodel.MallBaseId,
OrderDetailId = item.Id,
OrderId = orderModel.OrderId,
Remark = "粉象 " + FXGModel.GradeName + "返佣,返佣比例:" + CommissionRatio + "%" + (IsMoneyLack ? " 佣金不够、未返完" : ""),
TenantId = demodel.TenantId,
UpdateDate = DateTime.Now,
UserId = numodel.Id,
Type = 3,
IsRemit = 0
};
gocList.Add(gocModel);
TotalCommission -= DcommionMoney;
}
else
{
UserId = 0;
//该等级的已提完了 看是否可以直接找到下一个等级的
var fx2List = dlist.Where(x => x.Grade > MaxGrade).ToList();
if (fx2List.Any())
{
//说明是有下一级的
for (var i = 0; i < ulist.Count; i++)
{
var n1umodel = ulist.Where(x => x.Id == (numodel.SuperiorId ?? 0)).FirstOrDefault();
if (n1umodel == null)
{
UserId = 0;
break;
}
var dis1Model = dlist.Where(x => x.UserId == n1umodel.Id).FirstOrDefault();
var FXG2Model = new RB_Distributor_FXGrade_Extend();
if (dis1Model == null)
{
LogHelper.Write("粉象返佣 用户分销商信息不存在:UserId:" + n1umodel.Id);
FXG2Model = FXPModel;
}
else
{
FXG2Model = FXList.Where(x => x.Id == dis1Model.FXGradeId).FirstOrDefault();
if (FXG2Model == null)
{
FXG2Model = FXPModel;
}
}
if (FXG2Model.Grade < MaxGrade)
{
//后面的全部不返佣
UserId = 0;
numodel = n1umodel;//继续查找下一级 2020-08-06 刘东
}
else if (FXG2Model.Grade > MaxGrade)
{
//已找到上级 继续返佣
UserId = n1umodel.Id;
break;
}
else
{
UserId = 0;
numodel = n1umodel;//继续查找下一级
}
}
}
}
}
}
//只插入非抵扣类型的佣金
foreach (var qitem in gocList.Where(x => !((x.Commission ?? 0) == 0 && (x.DeductionCommission??0) >0)))
{
qitem.Commission = (qitem.Commission ?? 0) * (item.Number ?? 0);
goods_OrderCommissionRepository.Insert(qitem, trans);
}
}
}
}
}
#region 记录操作日志
goods_LogRepository.Insert(new RB_Goods_Log()
{
Id = 0,
Type = 1,
SourceId = orderModel.OrderId,
Content = "调整订单商品成本为:" + costMoney + ",触发重置该商品返佣",
CreateDate = DateTime.Now,
MallBaseId = orderModel.MallBaseId,
TenantId = orderModel.TenantId
}, trans);
//更新订单备注
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Goods_Order_Extend.Remark), demodel.Remark + ";修改订单商品"+orderModel.Id+"成本,返佣已更新"}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName= nameof(RB_Goods_Order_Extend.OrderId ),
FiledValue= demodel.OrderId,
OperatorEnum=OperatorEnum.Equal
}
};
goods_OrderRepository.Update(keyValues, wheres, trans);
#endregion
}
}
#endregion
goods_OrderCommissionRepository.DBSession.Commit();
}
catch (Exception ex)
{
LogHelper.Write(ex, "SetOrderCostMoney 重置返佣失败");
goods_OrderCommissionRepository.DBSession.Rollback();
}
}
#endregion
} }
return flag; return flag ? "" : "出错了,请联系管理员";
} }
......
...@@ -35,6 +35,10 @@ namespace Mall.Repository.Product ...@@ -35,6 +35,10 @@ namespace Mall.Repository.Product
{ {
where += $@" and oc.{nameof(RB_Goods_OrderCommission.OrderId)}={dmodel.OrderId}"; where += $@" and oc.{nameof(RB_Goods_OrderCommission.OrderId)}={dmodel.OrderId}";
} }
if (dmodel.OrderDetailId > 0)
{
where += $@" and oc.{nameof(RB_Goods_OrderCommission.OrderDetailId)}={dmodel.OrderDetailId}";
}
if (dmodel.UserId > 0) if (dmodel.UserId > 0)
{ {
where += $@" and oc.{nameof(RB_Goods_OrderCommission.UserId)}={dmodel.UserId}"; where += $@" and oc.{nameof(RB_Goods_OrderCommission.UserId)}={dmodel.UserId}";
......
...@@ -143,6 +143,8 @@ namespace Mall.WebApi.Controllers.MallBase ...@@ -143,6 +143,8 @@ namespace Mall.WebApi.Controllers.MallBase
IntegralNumber = y.IntegralNumber ?? 0, IntegralNumber = y.IntegralNumber ?? 0,
DeductionCommission = y.DeductionCommission ?? 0, DeductionCommission = y.DeductionCommission ?? 0,
y.IsApplyForAfterSale, y.IsApplyForAfterSale,
y.OriginalCostMoney,
y.FXCommission,
SFinanceList = y.FinanceList.Where(z => z.Type == Common.Enum.Finance.WFTempLateClassEnum.IN).Select(z => new SFinanceList = y.FinanceList.Where(z => z.Type == Common.Enum.Finance.WFTempLateClassEnum.IN).Select(z => new
{ {
z.FrID, z.FrID,
...@@ -2128,14 +2130,14 @@ namespace Mall.WebApi.Controllers.MallBase ...@@ -2128,14 +2130,14 @@ namespace Mall.WebApi.Controllers.MallBase
{ {
return ApiResult.ParamIsNull("请传递商品成本"); return ApiResult.ParamIsNull("请传递商品成本");
} }
bool flag = orderModule.SetOrderCostMoney(OrderId, costMoney, EmpId, req.TenantId, req.MallBaseId); string msg = orderModule.SetOrderCostMoney(OrderId, costMoney, EmpId, req.TenantId, req.MallBaseId);
if (flag) if (msg == "")
{ {
return ApiResult.Success(); return ApiResult.Success();
} }
else else
{ {
return ApiResult.Failed(); return ApiResult.Failed(msg);
} }
} }
...@@ -2569,7 +2571,10 @@ namespace Mall.WebApi.Controllers.MallBase ...@@ -2569,7 +2571,10 @@ namespace Mall.WebApi.Controllers.MallBase
SpecificationList = !string.IsNullOrEmpty(y.Specification) ? JsonConvert.DeserializeObject<List<string>>(y.Specification) : new List<string>(), SpecificationList = !string.IsNullOrEmpty(y.Specification) ? JsonConvert.DeserializeObject<List<string>>(y.Specification) : new List<string>(),
y.ProductCode, y.ProductCode,
y.Final_Price, y.Final_Price,
y.Number y.Number,
y.OriginalCostMoney,
y.FXCommission,
y.CostMoney
}), }),
x.Consignee, x.Consignee,
x.Mobile, x.Mobile,
......
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