Browse Source

调整订单同步,订单合计信息应付=0时不保存拆分明细,同时不产生京仓云仓的采购成本

pjzs_starttask_update
shanji 2 years ago
parent
commit
e0dc74ecf7
  1. 627
      BBWY.Server.Business/Sync/OrderSyncBusiness.cs

627
BBWY.Server.Business/Sync/OrderSyncBusiness.cs

@ -306,150 +306,151 @@ namespace BBWY.Server.Business
if (orderCouponDetailResponse.Success) if (orderCouponDetailResponse.Success)
{ {
var jtoken = orderCouponDetailResponse.Data["jingdong_pop_order_queryCouponDetai_responce"]["couponDetailExternal"]["couponDetailVo"]; var jtoken = orderCouponDetailResponse.Data["jingdong_pop_order_queryCouponDetai_responce"]["couponDetailExternal"]["couponDetailVo"];
if (jtoken.Value<decimal>("totalShouldPay") > 0M)
#region 订单合计信息
var orderTotal = new OrderTotalInfo()
{
CreateTime = DateTime.Now,
Id = orderId,
TotalBalance = jtoken.Value<decimal>("totalBalance"),
TotalBaseDiscount = jtoken.Value<decimal>("TotalBaseDiscount"),
TotalBaseFee = jtoken.Value<decimal>("totalBaseFee"),
TotalCoupon = jtoken.Value<decimal>("totalCoupon"),
TotalDongQuan = jtoken.Value<decimal>("totalDongQuan"),
TotalExpiryGiftDiscount = jtoken.Value<decimal>("totalExpiryGiftDiscount"),
TotalGlobalGeneralIncludeTax = jtoken.Value<decimal>("totalGlobalGeneralIncludeTax"),
TotalGlobalGeneralTax = jtoken.Value<decimal>("totalGlobalGeneralTax"),
TotalItemPrice = jtoken.Value<decimal>("totalItemPrice"),
TotalJdZhiFuYouHui = jtoken.Value<decimal>("totalJdZhiFuYouHui"),
TotalJingDou = jtoken.Value<decimal>("totalJingDou"),
TotalJingQuan = jtoken.Value<decimal>("totalJingQuan"),
TotalJingXiangLiJin = jtoken.Value<decimal>("totalJingXiangLiJin"),
TotalLiJinYouHui = jtoken.Value<decimal>("totalLiJinYouHui"),
TotalLuoDiPeiService = jtoken.Value<decimal>("totalLuoDiPeiService"),
TotalManJian = jtoken.Value<decimal>("totalManJian"),
TotalPingTaiChengDanYouHuiQuan = jtoken.Value<decimal>("totalPingTaiChengDanYouHuiQuan"),
TotalPlus95 = jtoken.Value<decimal>("totalPlus95"),
TotalPromotionDiscount = jtoken.Value<decimal>("totalPromotionDiscount"),
TotalRemoteFee = jtoken.Value<decimal>("totalRemoteFee"),
TotalShouldPay = jtoken.Value<decimal>("totalShouldPay"),
TotalSuperRedEnvelope = jtoken.Value<decimal>("totalSuperRedEnvelope"),
TotalTaxFee = jtoken.Value<decimal>("totalTaxFee"),
TotalTuiHuanHuoWuYou = jtoken.Value<decimal>("totalTuiHuanHuoWuYou"),
TotalVenderFee = jtoken.Value<decimal>("totalVenderFee"),
TotalXianPinLeiDongQuan = jtoken.Value<decimal>("totalXianPinLeiDongQuan"),
TotalXianPinLeiJingQuan = jtoken.Value<decimal>("totalXianPinLeiJingQuan"),
TotalZhiFuYingXiaoYouHui = jtoken.Value<decimal>("totalZhiFuYingXiaoYouHui")
};
insertOrderTotalInfoList.Add(orderTotal);
#endregion
#region 订单优惠券信息
var couponJArray = jtoken["couponList"] as JArray;
if (couponJArray != null && couponJArray.Count() > 0)
{ {
insertOrderCouponNewList.AddRange(couponJArray.Select(j => new OrderCoupon_New() #region 订单合计信息
var orderTotal = new OrderTotalInfo()
{ {
Id = idGenerator.NewLong(),
CouponId = j.Value<int>("couponId"),
CouponName = j.Value<string>("couponName"),
CouponNum = j.Value<int>("couponNum"),
CouponPrice = j.Value<decimal>("couponPrice"),
CouponTypeDesc = j.Value<string>("couponTypeDesc"),
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
JdCouponId = j.Value<string>("jdCouponId"), Id = orderId,
JdDivideMoney = j.Value<decimal>("jdDivideMoney"), TotalBalance = jtoken.Value<decimal>("totalBalance"),
OrderId = orderId, TotalBaseDiscount = jtoken.Value<decimal>("TotalBaseDiscount"),
PriceDivide = j.Value<bool>("priceDivide"), TotalBaseFee = jtoken.Value<decimal>("totalBaseFee"),
VenderDivideMoney = j.Value<decimal>("venderDivideMoney") TotalCoupon = jtoken.Value<decimal>("totalCoupon"),
})); TotalDongQuan = jtoken.Value<decimal>("totalDongQuan"),
} TotalExpiryGiftDiscount = jtoken.Value<decimal>("totalExpiryGiftDiscount"),
TotalGlobalGeneralIncludeTax = jtoken.Value<decimal>("totalGlobalGeneralIncludeTax"),
TotalGlobalGeneralTax = jtoken.Value<decimal>("totalGlobalGeneralTax"),
TotalItemPrice = jtoken.Value<decimal>("totalItemPrice"),
TotalJdZhiFuYouHui = jtoken.Value<decimal>("totalJdZhiFuYouHui"),
TotalJingDou = jtoken.Value<decimal>("totalJingDou"),
TotalJingQuan = jtoken.Value<decimal>("totalJingQuan"),
TotalJingXiangLiJin = jtoken.Value<decimal>("totalJingXiangLiJin"),
TotalLiJinYouHui = jtoken.Value<decimal>("totalLiJinYouHui"),
TotalLuoDiPeiService = jtoken.Value<decimal>("totalLuoDiPeiService"),
TotalManJian = jtoken.Value<decimal>("totalManJian"),
TotalPingTaiChengDanYouHuiQuan = jtoken.Value<decimal>("totalPingTaiChengDanYouHuiQuan"),
TotalPlus95 = jtoken.Value<decimal>("totalPlus95"),
TotalPromotionDiscount = jtoken.Value<decimal>("totalPromotionDiscount"),
TotalRemoteFee = jtoken.Value<decimal>("totalRemoteFee"),
TotalShouldPay = jtoken.Value<decimal>("totalShouldPay"),
TotalSuperRedEnvelope = jtoken.Value<decimal>("totalSuperRedEnvelope"),
TotalTaxFee = jtoken.Value<decimal>("totalTaxFee"),
TotalTuiHuanHuoWuYou = jtoken.Value<decimal>("totalTuiHuanHuoWuYou"),
TotalVenderFee = jtoken.Value<decimal>("totalVenderFee"),
TotalXianPinLeiDongQuan = jtoken.Value<decimal>("totalXianPinLeiDongQuan"),
TotalXianPinLeiJingQuan = jtoken.Value<decimal>("totalXianPinLeiJingQuan"),
TotalZhiFuYingXiaoYouHui = jtoken.Value<decimal>("totalZhiFuYingXiaoYouHui")
};
insertOrderTotalInfoList.Add(orderTotal);
#endregion
#endregion #region 订单优惠券信息
var couponJArray = jtoken["couponList"] as JArray;
if (couponJArray != null && couponJArray.Count() > 0)
{
insertOrderCouponNewList.AddRange(couponJArray.Select(j => new OrderCoupon_New()
{
Id = idGenerator.NewLong(),
CouponId = j.Value<int>("couponId"),
CouponName = j.Value<string>("couponName"),
CouponNum = j.Value<int>("couponNum"),
CouponPrice = j.Value<decimal>("couponPrice"),
CouponTypeDesc = j.Value<string>("couponTypeDesc"),
CreateTime = DateTime.Now,
JdCouponId = j.Value<string>("jdCouponId"),
JdDivideMoney = j.Value<decimal>("jdDivideMoney"),
OrderId = orderId,
PriceDivide = j.Value<bool>("priceDivide"),
VenderDivideMoney = j.Value<decimal>("venderDivideMoney")
}));
}
#region 订单活动信息 #endregion
var promotionJArray = jtoken["promotionList"] as JArray;
if (promotionJArray != null && promotionJArray.Count() > 0) #region 订单活动信息
{ var promotionJArray = jtoken["promotionList"] as JArray;
insertOrderPromotionList.AddRange(promotionJArray.Select(j => new OrderPromotion() if (promotionJArray != null && promotionJArray.Count() > 0)
{ {
Id = idGenerator.NewLong(), insertOrderPromotionList.AddRange(promotionJArray.Select(j => new OrderPromotion()
BeginTime = j.Value<DateTime>("beginTime"), {
EndTime = j.Value<DateTime>("endTime"), Id = idGenerator.NewLong(),
CreateTime = DateTime.Now, BeginTime = j.Value<DateTime>("beginTime"),
OrderId = orderId, EndTime = j.Value<DateTime>("endTime"),
PromotionId = j.Value<long>("promotionId"), CreateTime = DateTime.Now,
PromotionName = j.Value<string>("promotionName"), OrderId = orderId,
SalePrice = j.Value<decimal>("salePrice"), PromotionId = j.Value<long>("promotionId"),
SaleTypeDesc = j.Value<string>("saleTypeDesc") PromotionName = j.Value<string>("promotionName"),
})); SalePrice = j.Value<decimal>("salePrice"),
} SaleTypeDesc = j.Value<string>("saleTypeDesc")
#endregion }));
}
#endregion
#region 订单sku金额明细 #region 订单sku金额明细
var skuJArray = jtoken["skuList"] as JArray; var skuJArray = jtoken["skuList"] as JArray;
if (skuJArray != null && skuJArray.Count() > 0) if (skuJArray != null && skuJArray.Count() > 0)
{
foreach (var oskuJtoken in skuJArray)
{ {
var skuDiscountInfoList = oskuJtoken["skuDiscountInfoList"] as JArray; foreach (var oskuJtoken in skuJArray)
decimal? xianPinLeiDongQuan = 0M;
if (skuDiscountInfoList != null && skuDiscountInfoList.Count > 0)
{ {
foreach (var item1 in skuDiscountInfoList) var skuDiscountInfoList = oskuJtoken["skuDiscountInfoList"] as JArray;
decimal? xianPinLeiDongQuan = 0M;
if (skuDiscountInfoList != null && skuDiscountInfoList.Count > 0)
{ {
var discountTypeList = item1["discountTypeList"] as JArray; foreach (var item1 in skuDiscountInfoList)
if (discountTypeList != null && discountTypeList.Count() > 0)
{ {
foreach (var discountType in discountTypeList) var discountTypeList = item1["discountTypeList"] as JArray;
if (discountTypeList != null && discountTypeList.Count() > 0)
{ {
if (discountType.Value<int>("type") == 6) foreach (var discountType in discountTypeList)
xianPinLeiDongQuan += discountType.Value<decimal>("amount"); {
if (discountType.Value<int>("type") == 6)
xianPinLeiDongQuan += discountType.Value<decimal>("amount");
}
} }
} }
} }
}
if (xianPinLeiDongQuan == 0M) if (xianPinLeiDongQuan == 0M)
xianPinLeiDongQuan = oskuJtoken.Value<decimal>("xianPinLeiDongQuan"); xianPinLeiDongQuan = oskuJtoken.Value<decimal>("xianPinLeiDongQuan");
var oskuCF = new OrderSkuCFDetail() var oskuCF = new OrderSkuCFDetail()
{ {
OrderId = orderId, OrderId = orderId,
SkuId = oskuJtoken.Value<string>("skuCode"), SkuId = oskuJtoken.Value<string>("skuCode"),
Balance = oskuJtoken.Value<decimal>("balance"), Balance = oskuJtoken.Value<decimal>("balance"),
BaseDiscount = oskuJtoken.Value<decimal>("baseDiscount"), BaseDiscount = oskuJtoken.Value<decimal>("baseDiscount"),
BaseFee = oskuJtoken.Value<decimal>("baseFee"), BaseFee = oskuJtoken.Value<decimal>("baseFee"),
Coupon = oskuJtoken.Value<decimal>("coupon"), Coupon = oskuJtoken.Value<decimal>("coupon"),
DongQuan = oskuJtoken.Value<decimal>("dongQuan"), DongQuan = oskuJtoken.Value<decimal>("dongQuan"),
ExpiryGiftDiscount = oskuJtoken.Value<decimal>("expiryGiftDiscount"), ExpiryGiftDiscount = oskuJtoken.Value<decimal>("expiryGiftDiscount"),
GlobalGeneralIncludeTax = oskuJtoken.Value<decimal>("globalGeneralIncludeTax"), GlobalGeneralIncludeTax = oskuJtoken.Value<decimal>("globalGeneralIncludeTax"),
GlobalGeneralTax = oskuJtoken.Value<decimal>("globalGeneralTax"), GlobalGeneralTax = oskuJtoken.Value<decimal>("globalGeneralTax"),
JdZhiFuYouHui = oskuJtoken.Value<decimal>("jdZhiFuYouHui"), JdZhiFuYouHui = oskuJtoken.Value<decimal>("jdZhiFuYouHui"),
JingDou = oskuJtoken.Value<decimal>("jingDou"), JingDou = oskuJtoken.Value<decimal>("jingDou"),
JingQuan = oskuJtoken.Value<decimal>("jingQuan"), JingQuan = oskuJtoken.Value<decimal>("jingQuan"),
JingXiangLiJin = oskuJtoken.Value<decimal>("jingXiangLiJin"), JingXiangLiJin = oskuJtoken.Value<decimal>("jingXiangLiJin"),
LiJinYouHui = oskuJtoken.Value<decimal>("liJinYouHui"), LiJinYouHui = oskuJtoken.Value<decimal>("liJinYouHui"),
LuoDiPeiService = oskuJtoken.Value<decimal>("luoDiPeiService"), LuoDiPeiService = oskuJtoken.Value<decimal>("luoDiPeiService"),
ManJian = oskuJtoken.Value<decimal>("manJian"), ManJian = oskuJtoken.Value<decimal>("manJian"),
PingTaiChengDanYouHuiQuan = oskuJtoken.Value<decimal>("pingTaiChengDanYouHuiQuan"), PingTaiChengDanYouHuiQuan = oskuJtoken.Value<decimal>("pingTaiChengDanYouHuiQuan"),
Plus95 = oskuJtoken.Value<decimal>("plus95"), Plus95 = oskuJtoken.Value<decimal>("plus95"),
PromotionDiscount = oskuJtoken.Value<decimal>("promotionDiscount"), PromotionDiscount = oskuJtoken.Value<decimal>("promotionDiscount"),
RemoteFee = oskuJtoken.Value<decimal>("remoteFee"), RemoteFee = oskuJtoken.Value<decimal>("remoteFee"),
ShouldPay = oskuJtoken.Value<decimal>("shouldPay"), ShouldPay = oskuJtoken.Value<decimal>("shouldPay"),
SuperRedEnvelope = oskuJtoken.Value<decimal>("superRedEnvelope"), SuperRedEnvelope = oskuJtoken.Value<decimal>("superRedEnvelope"),
TaxFee = oskuJtoken.Value<decimal>("taxFee"), TaxFee = oskuJtoken.Value<decimal>("taxFee"),
TuiHuanHuoWuYou = oskuJtoken.Value<decimal>("tuiHuanHuoWuYou"), TuiHuanHuoWuYou = oskuJtoken.Value<decimal>("tuiHuanHuoWuYou"),
VenderFee = oskuJtoken.Value<decimal>("venderFee"), VenderFee = oskuJtoken.Value<decimal>("venderFee"),
XianPinLeiDongQuan = xianPinLeiDongQuan, //数据不齐 XianPinLeiDongQuan = xianPinLeiDongQuan, //数据不齐
XianPinLeiJingQuan = oskuJtoken.Value<decimal>("xianPinLeiJingQuan"), XianPinLeiJingQuan = oskuJtoken.Value<decimal>("xianPinLeiJingQuan"),
ZhiFuYingXiaoYouHui = oskuJtoken.Value<decimal>("zhiFuYingXiaoYouHui") ZhiFuYingXiaoYouHui = oskuJtoken.Value<decimal>("zhiFuYingXiaoYouHui")
}; };
orderSkuCFDetailList.Add(oskuCF); orderSkuCFDetailList.Add(oskuCF);
}
} }
#endregion
} }
#endregion
} }
} }
} }
@ -726,199 +727,211 @@ namespace BBWY.Server.Business
orderState != Enums.OrderState. && orderState != Enums.OrderState. &&
orderState != Enums.OrderState.) orderState != Enums.OrderState.)
{ {
var orderCost = dbOrderCostList.FirstOrDefault(oc => oc.OrderId == dbOrder.Id); bool checkOrderTotal = true;
if (orderCost == null && orderSellerPrice > 0M) if (dbOrder.StorageType == Enums.StorageType. || dbOrder.StorageType == Enums.StorageType.)
{ {
if (isNewOrder && dbOrder.StorageType == Enums.StorageType.SD && sDCalculationCostRequest != null) var orderTotalInfo = insertOrderTotalInfoList.FirstOrDefault(x => x.Id == dbOrder.Id);
if (orderTotalInfo == null)
orderTotalInfo = dbOrderTotalList.FirstOrDefault(x => x.Id == dbOrder.Id);
if (orderTotalInfo == null || orderTotalInfo.TotalShouldPay == 0M)
checkOrderTotal = false;
}
if (checkOrderTotal)
{
var orderCost = dbOrderCostList.FirstOrDefault(oc => oc.OrderId == dbOrder.Id);
if (orderCost == null && orderSellerPrice > 0M)
{ {
//检查SD埋点 if (isNewOrder && dbOrder.StorageType == Enums.StorageType.SD && sDCalculationCostRequest != null)
if (sDCalculationCostRequest.PlatformCommissionRatio == 0M)
sDCalculationCostRequest.PlatformCommissionRatio = 0.05M;
orderCost = new OrderCost()
{ {
OrderId = sDCalculationCostRequest.OrderId, //检查SD埋点
PlatformCommissionRatio = sDCalculationCostRequest.PlatformCommissionRatio, if (sDCalculationCostRequest.PlatformCommissionRatio == 0M)
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount, sDCalculationCostRequest.PlatformCommissionRatio = 0.05M;
Profit = 0, orderCost = new OrderCost()
DeliveryExpressFreight = sDCalculationCostRequest.DeliveryExpressFreight, {
CreateTime = DateTime.Now, OrderId = sDCalculationCostRequest.OrderId,
IsManualEdited = true, PlatformCommissionRatio = sDCalculationCostRequest.PlatformCommissionRatio,
SDCommissionAmount = sDCalculationCostRequest.SDCommissionAmount, PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
SDOrderAmount = sDCalculationCostRequest.SDOrderAmount Profit = 0,
}; DeliveryExpressFreight = sDCalculationCostRequest.DeliveryExpressFreight,
orderCost.CalculationSDOrderProfitAndCost(dbOrder, null); CreateTime = DateTime.Now,
insertOrderCostList.Add(orderCost); IsManualEdited = true,
} SDCommissionAmount = sDCalculationCostRequest.SDCommissionAmount,
else if (!fsql.Select<OrderCost>(dbOrder.Id).Any()) //再查询一次数据库,以防同步开始执行后被人为操作扣减库存,造成重复扣减库存 SDOrderAmount = sDCalculationCostRequest.SDOrderAmount
{ };
var orderSkuJArray = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value<decimal>("jdPrice") != 0M); orderCost.CalculationSDOrderProfitAndCost(dbOrder, null);
if (orderSkuJArray != null && orderSkuJArray.Count() > 0) insertOrderCostList.Add(orderCost);
}
else if (!fsql.Select<OrderCost>(dbOrder.Id).Any()) //再查询一次数据库,以防同步开始执行后被人为操作扣减库存,造成重复扣减库存
{ {
var orderCostPurchaseAmount = 0M; var orderSkuJArray = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value<decimal>("jdPrice") != 0M);
var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价 if (orderSkuJArray != null && orderSkuJArray.Count() > 0)
//var avgPreferential = preferentialAmount / orderSkuJArray.Count();
#region 扣减库存
foreach (var orderSkuJToken in orderSkuJArray)
{ {
var orderSkuId = orderSkuJToken.Value<string>("skuId"); var orderCostPurchaseAmount = 0M;
var itemTotal = orderSkuJToken.Value<int>("itemTotal"); //sku购买数量 var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价
#region sku拆分明细 //var avgPreferential = preferentialAmount / orderSkuJArray.Count();
decimal? skuShouldPay = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.ShouldPay;
if (skuShouldPay == null)
skuShouldPay = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.ShouldPay;
if (skuShouldPay == null)
skuShouldPay = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.ShouldPay;
decimal? skuPingTaiChengDanYouHuiQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.PingTaiChengDanYouHuiQuan;
if (skuPingTaiChengDanYouHuiQuan == null)
skuPingTaiChengDanYouHuiQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.PingTaiChengDanYouHuiQuan;
if (skuPingTaiChengDanYouHuiQuan == null)
skuPingTaiChengDanYouHuiQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.PingTaiChengDanYouHuiQuan;
decimal? skuSuperRedEnvelope = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.SuperRedEnvelope;
if (skuSuperRedEnvelope == null)
skuSuperRedEnvelope = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.SuperRedEnvelope;
if (skuSuperRedEnvelope == null)
skuSuperRedEnvelope = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.SuperRedEnvelope;
decimal? skuXianPinLeiDongQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.XianPinLeiDongQuan;
if (skuXianPinLeiDongQuan == null)
skuXianPinLeiDongQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.XianPinLeiDongQuan;
if (skuXianPinLeiDongQuan == null)
skuXianPinLeiDongQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.XianPinLeiDongQuan;
decimal? skuVenderFee = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.VenderFee;
if (skuVenderFee == null)
skuVenderFee = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.VenderFee;
if (skuVenderFee == null)
skuVenderFee = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.VenderFee;
decimal? skuJingDou = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.JingDou;
if (skuJingDou == null)
skuJingDou = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.JingDou;
if (skuJingDou == null)
skuJingDou = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.JingDou;
decimal? skuDongQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.DongQuan;
if (skuDongQuan == null)
skuDongQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.DongQuan;
if (skuDongQuan == null)
skuDongQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.DongQuan;
decimal? skuBalnace = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.Balance;
if (skuBalnace == null)
skuBalnace = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Balance;
if (skuBalnace == null)
skuBalnace = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Balance;
#endregion
//var itemPrice = orderSkuJToken.Value<decimal>("jdPrice"); //sku单价 #region 扣减库存
var isReduceMultiTimes = false; //是否多次扣减库存 foreach (var orderSkuJToken in orderSkuJArray)
while (itemTotal != 0)
{ {
var purchaseOrder = dbPurchaseOrderList.FirstOrDefault(po => po.StorageType == dbOrder.StorageType && var orderSkuId = orderSkuJToken.Value<string>("skuId");
po.RemainingQuantity != 0 && var itemTotal = orderSkuJToken.Value<int>("itemTotal"); //sku购买数量
po.SkuId == orderSkuId);
if (purchaseOrder == null) #region sku拆分明细
break; //没有库存了 decimal? skuShouldPay = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.ShouldPay;
if (skuShouldPay == null)
//本次扣减量 skuShouldPay = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.ShouldPay;
var deductionQuantity = purchaseOrder.RemainingQuantity >= itemTotal ? itemTotal : purchaseOrder.RemainingQuantity; if (skuShouldPay == null)
//var deductionQuantity = itemTotal; skuShouldPay = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.ShouldPay;
//本次扣减量的采购成本
var currentPurchaseAmount = purchaseOrder.UnitCost * deductionQuantity;
//本次扣减量的发货运费 decimal? skuPingTaiChengDanYouHuiQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
var currentSkuDeliveryFreight = isReduceMultiTimes ? x.SkuId == orderSkuId)?.PingTaiChengDanYouHuiQuan;
(purchaseOrder.SingleDeliveryFreight / 2 * deductionQuantity) : if (skuPingTaiChengDanYouHuiQuan == null)
(purchaseOrder.SingleDeliveryFreight + purchaseOrder.SingleDeliveryFreight / 2 * (deductionQuantity - 1)); skuPingTaiChengDanYouHuiQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.PingTaiChengDanYouHuiQuan;
if (skuPingTaiChengDanYouHuiQuan == null)
purchaseOrder.RemainingQuantity -= deductionQuantity; skuPingTaiChengDanYouHuiQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.PingTaiChengDanYouHuiQuan;
itemTotal -= deductionQuantity;
decimal? skuSuperRedEnvelope = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
//累计采购成本 x.SkuId == orderSkuId)?.SuperRedEnvelope;
orderCostPurchaseAmount += currentPurchaseAmount; if (skuSuperRedEnvelope == null)
//累计发货运费(销售运费) skuSuperRedEnvelope = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.SuperRedEnvelope;
orderDeliveryExpressFreight += currentSkuDeliveryFreight; if (skuSuperRedEnvelope == null)
isReduceMultiTimes = true; skuSuperRedEnvelope = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.SuperRedEnvelope;
var updateSql = fsql.Update<PurchaseOrder>(purchaseOrder.Id).Set(po => po.RemainingQuantity - deductionQuantity); decimal? skuXianPinLeiDongQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
updatePurchaseOrderList.Add(updateSql); x.SkuId == orderSkuId)?.XianPinLeiDongQuan;
if (skuXianPinLeiDongQuan == null)
var orderCostDetail = new OrderCostDetail() skuXianPinLeiDongQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.XianPinLeiDongQuan;
if (skuXianPinLeiDongQuan == null)
skuXianPinLeiDongQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.XianPinLeiDongQuan;
decimal? skuVenderFee = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.VenderFee;
if (skuVenderFee == null)
skuVenderFee = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.VenderFee;
if (skuVenderFee == null)
skuVenderFee = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.VenderFee;
decimal? skuJingDou = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.JingDou;
if (skuJingDou == null)
skuJingDou = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.JingDou;
if (skuJingDou == null)
skuJingDou = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.JingDou;
decimal? skuDongQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.DongQuan;
if (skuDongQuan == null)
skuDongQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.DongQuan;
if (skuDongQuan == null)
skuDongQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.DongQuan;
decimal? skuBalnace = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.Balance;
if (skuBalnace == null)
skuBalnace = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Balance;
if (skuBalnace == null)
skuBalnace = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Balance;
#endregion
//var itemPrice = orderSkuJToken.Value<decimal>("jdPrice"); //sku单价
var isReduceMultiTimes = false; //是否多次扣减库存
while (itemTotal != 0)
{ {
Id = idGenerator.NewLong(), var purchaseOrder = dbPurchaseOrderList.FirstOrDefault(po => po.StorageType == dbOrder.StorageType &&
OrderId = orderId, po.RemainingQuantity != 0 &&
ProductId = orderSkuJToken.Value<string>("wareId"), po.SkuId == orderSkuId);
SkuId = orderSkuId, if (purchaseOrder == null)
CreateTime = DateTime.Now, break; //没有库存了
PurchaseOrderPKId = purchaseOrder.Id,
//UnitCost = purchaseOrder.UnitCost, //本次扣减量
DeductionQuantity = deductionQuantity, var deductionQuantity = purchaseOrder.RemainingQuantity >= itemTotal ? itemTotal : purchaseOrder.RemainingQuantity;
DeliveryExpressFreight = currentSkuDeliveryFreight, //var deductionQuantity = itemTotal;
//TotalCost = currentPurchaseAmount, //本次扣减量的采购成本
ConsumableAmount = purchaseOrder.SingleConsumableAmount * deductionQuantity, var currentPurchaseAmount = purchaseOrder.UnitCost * deductionQuantity;
FirstFreight = purchaseOrder.SingleFirstFreight * deductionQuantity, //本次扣减量的发货运费
//OperationAmount = purchaseOrder.SingleOperationAmount * deductionQuantity, var currentSkuDeliveryFreight = isReduceMultiTimes ?
InStorageAmount = purchaseOrder.SingleInStorageAmount * deductionQuantity, (purchaseOrder.SingleDeliveryFreight / 2 * deductionQuantity) :
OutStorageAmount = purchaseOrder.SingleOutStorageAmount * deductionQuantity, (purchaseOrder.SingleDeliveryFreight + purchaseOrder.SingleDeliveryFreight / 2 * (deductionQuantity - 1));
PurchaseFreight = purchaseOrder.SingleFreight * deductionQuantity,
SkuAmount = purchaseOrder.SingleSkuAmount * deductionQuantity, purchaseOrder.RemainingQuantity -= deductionQuantity;
StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity, itemTotal -= deductionQuantity;
IsEnabled = true
}; //累计采购成本
orderCostPurchaseAmount += currentPurchaseAmount;
//orderCostDetail.SkuGrossProfit = itemPrice * deductionQuantity - avgPreferential - //累计发货运费(销售运费)
// (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderDeliveryExpressFreight += currentSkuDeliveryFreight;
// itemPrice * deductionQuantity * platformCommissionRatio; isReduceMultiTimes = true;
//var koudian = (skuShouldPay.Value - venderFee.Value) * deductionQuantity * platformCommissionRatio; var updateSql = fsql.Update<PurchaseOrder>(purchaseOrder.Id).Set(po => po.RemainingQuantity - deductionQuantity);
//orderCostDetail.SkuGrossProfit = (skuShouldPay.Value + pingtaiCoupon.Value) * deductionQuantity - updatePurchaseOrderList.Add(updateSql);
// orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight -
// koudian; var orderCostDetail = new OrderCostDetail()
{
orderCostDetail.CalculationSkuGrossProfit(skuShouldPay ?? 0M, Id = idGenerator.NewLong(),
skuPingTaiChengDanYouHuiQuan ?? 0M, OrderId = orderId,
skuSuperRedEnvelope ?? 0M, ProductId = orderSkuJToken.Value<string>("wareId"),
skuXianPinLeiDongQuan ?? 0M, SkuId = orderSkuId,
skuVenderFee ?? 0M, CreateTime = DateTime.Now,
skuJingDou ?? 0M, PurchaseOrderPKId = purchaseOrder.Id,
skuDongQuan ?? 0M, //UnitCost = purchaseOrder.UnitCost,
skuBalnace ?? 0M, DeductionQuantity = deductionQuantity,
platformCommissionRatio); DeliveryExpressFreight = currentSkuDeliveryFreight,
insertOrderCostDetailList.Add(orderCostDetail); //TotalCost = currentPurchaseAmount,
ConsumableAmount = purchaseOrder.SingleConsumableAmount * deductionQuantity,
FirstFreight = purchaseOrder.SingleFirstFreight * deductionQuantity,
//OperationAmount = purchaseOrder.SingleOperationAmount * deductionQuantity,
InStorageAmount = purchaseOrder.SingleInStorageAmount * deductionQuantity,
OutStorageAmount = purchaseOrder.SingleOutStorageAmount * deductionQuantity,
PurchaseFreight = purchaseOrder.SingleFreight * deductionQuantity,
SkuAmount = purchaseOrder.SingleSkuAmount * deductionQuantity,
StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity,
IsEnabled = true
};
//orderCostDetail.SkuGrossProfit = itemPrice * deductionQuantity - avgPreferential -
// (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
// itemPrice * deductionQuantity * platformCommissionRatio;
//var koudian = (skuShouldPay.Value - venderFee.Value) * deductionQuantity * platformCommissionRatio;
//orderCostDetail.SkuGrossProfit = (skuShouldPay.Value + pingtaiCoupon.Value) * deductionQuantity -
// orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight -
// koudian;
orderCostDetail.CalculationSkuGrossProfit(skuShouldPay ?? 0M,
skuPingTaiChengDanYouHuiQuan ?? 0M,
skuSuperRedEnvelope ?? 0M,
skuXianPinLeiDongQuan ?? 0M,
skuVenderFee ?? 0M,
skuJingDou ?? 0M,
skuDongQuan ?? 0M,
skuBalnace ?? 0M,
platformCommissionRatio);
insertOrderCostDetailList.Add(orderCostDetail);
}
} }
} #endregion
#endregion
#region 计算成本 #region 计算成本
orderCost = new OrderCost() orderCost = new OrderCost()
{ {
OrderId = orderId, OrderId = orderId,
PlatformCommissionRatio = platformCommissionRatio, PlatformCommissionRatio = platformCommissionRatio,
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount, PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
Profit = 0, Profit = 0,
PurchaseAmount = orderCostPurchaseAmount, PurchaseAmount = orderCostPurchaseAmount,
DeliveryExpressFreight = orderDeliveryExpressFreight, DeliveryExpressFreight = orderDeliveryExpressFreight,
CreateTime = DateTime.Now CreateTime = DateTime.Now
}; };
if (dbOrder.OrderTotalPrice != 0) if (dbOrder.OrderTotalPrice != 0)
orderCost.CalculationOrderProfitAndCost(dbOrder, null); orderCost.CalculationOrderProfitAndCost(dbOrder, null);
else else
orderCost.CalculationOrderProfitAndCost(actualAmount, null); orderCost.CalculationOrderProfitAndCost(actualAmount, null);
insertOrderCostList.Add(orderCost); insertOrderCostList.Add(orderCost);
#endregion #endregion
}
} }
} }
} }

Loading…
Cancel
Save