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)
{
var jtoken = orderCouponDetailResponse.Data["jingdong_pop_order_queryCouponDetai_responce"]["couponDetailExternal"]["couponDetailVo"];
#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)
if (jtoken.Value<decimal>("totalShouldPay") > 0M)
{
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,
JdCouponId = j.Value<string>("jdCouponId"),
JdDivideMoney = j.Value<decimal>("jdDivideMoney"),
OrderId = orderId,
PriceDivide = j.Value<bool>("priceDivide"),
VenderDivideMoney = j.Value<decimal>("venderDivideMoney")
}));
}
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
#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 订单活动信息
var promotionJArray = jtoken["promotionList"] as JArray;
if (promotionJArray != null && promotionJArray.Count() > 0)
{
insertOrderPromotionList.AddRange(promotionJArray.Select(j => new OrderPromotion()
#endregion
#region 订单活动信息
var promotionJArray = jtoken["promotionList"] as JArray;
if (promotionJArray != null && promotionJArray.Count() > 0)
{
Id = idGenerator.NewLong(),
BeginTime = j.Value<DateTime>("beginTime"),
EndTime = j.Value<DateTime>("endTime"),
CreateTime = DateTime.Now,
OrderId = orderId,
PromotionId = j.Value<long>("promotionId"),
PromotionName = j.Value<string>("promotionName"),
SalePrice = j.Value<decimal>("salePrice"),
SaleTypeDesc = j.Value<string>("saleTypeDesc")
}));
}
#endregion
insertOrderPromotionList.AddRange(promotionJArray.Select(j => new OrderPromotion()
{
Id = idGenerator.NewLong(),
BeginTime = j.Value<DateTime>("beginTime"),
EndTime = j.Value<DateTime>("endTime"),
CreateTime = DateTime.Now,
OrderId = orderId,
PromotionId = j.Value<long>("promotionId"),
PromotionName = j.Value<string>("promotionName"),
SalePrice = j.Value<decimal>("salePrice"),
SaleTypeDesc = j.Value<string>("saleTypeDesc")
}));
}
#endregion
#region 订单sku金额明细
var skuJArray = jtoken["skuList"] as JArray;
if (skuJArray != null && skuJArray.Count() > 0)
{
foreach (var oskuJtoken in skuJArray)
#region 订单sku金额明细
var skuJArray = jtoken["skuList"] as JArray;
if (skuJArray != null && skuJArray.Count() > 0)
{
var skuDiscountInfoList = oskuJtoken["skuDiscountInfoList"] as JArray;
decimal? xianPinLeiDongQuan = 0M;
if (skuDiscountInfoList != null && skuDiscountInfoList.Count > 0)
foreach (var oskuJtoken in skuJArray)
{
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;
if (discountTypeList != null && discountTypeList.Count() > 0)
foreach (var item1 in skuDiscountInfoList)
{
foreach (var discountType in discountTypeList)
var discountTypeList = item1["discountTypeList"] as JArray;
if (discountTypeList != null && discountTypeList.Count() > 0)
{
if (discountType.Value<int>("type") == 6)
xianPinLeiDongQuan += discountType.Value<decimal>("amount");
foreach (var discountType in discountTypeList)
{
if (discountType.Value<int>("type") == 6)
xianPinLeiDongQuan += discountType.Value<decimal>("amount");
}
}
}
}
}
if (xianPinLeiDongQuan == 0M)
xianPinLeiDongQuan = oskuJtoken.Value<decimal>("xianPinLeiDongQuan");
if (xianPinLeiDongQuan == 0M)
xianPinLeiDongQuan = oskuJtoken.Value<decimal>("xianPinLeiDongQuan");
var oskuCF = new OrderSkuCFDetail()
{
OrderId = orderId,
SkuId = oskuJtoken.Value<string>("skuCode"),
Balance = oskuJtoken.Value<decimal>("balance"),
BaseDiscount = oskuJtoken.Value<decimal>("baseDiscount"),
BaseFee = oskuJtoken.Value<decimal>("baseFee"),
Coupon = oskuJtoken.Value<decimal>("coupon"),
DongQuan = oskuJtoken.Value<decimal>("dongQuan"),
ExpiryGiftDiscount = oskuJtoken.Value<decimal>("expiryGiftDiscount"),
GlobalGeneralIncludeTax = oskuJtoken.Value<decimal>("globalGeneralIncludeTax"),
GlobalGeneralTax = oskuJtoken.Value<decimal>("globalGeneralTax"),
JdZhiFuYouHui = oskuJtoken.Value<decimal>("jdZhiFuYouHui"),
JingDou = oskuJtoken.Value<decimal>("jingDou"),
JingQuan = oskuJtoken.Value<decimal>("jingQuan"),
JingXiangLiJin = oskuJtoken.Value<decimal>("jingXiangLiJin"),
LiJinYouHui = oskuJtoken.Value<decimal>("liJinYouHui"),
LuoDiPeiService = oskuJtoken.Value<decimal>("luoDiPeiService"),
ManJian = oskuJtoken.Value<decimal>("manJian"),
PingTaiChengDanYouHuiQuan = oskuJtoken.Value<decimal>("pingTaiChengDanYouHuiQuan"),
Plus95 = oskuJtoken.Value<decimal>("plus95"),
PromotionDiscount = oskuJtoken.Value<decimal>("promotionDiscount"),
RemoteFee = oskuJtoken.Value<decimal>("remoteFee"),
ShouldPay = oskuJtoken.Value<decimal>("shouldPay"),
SuperRedEnvelope = oskuJtoken.Value<decimal>("superRedEnvelope"),
TaxFee = oskuJtoken.Value<decimal>("taxFee"),
TuiHuanHuoWuYou = oskuJtoken.Value<decimal>("tuiHuanHuoWuYou"),
VenderFee = oskuJtoken.Value<decimal>("venderFee"),
XianPinLeiDongQuan = xianPinLeiDongQuan, //数据不齐
XianPinLeiJingQuan = oskuJtoken.Value<decimal>("xianPinLeiJingQuan"),
ZhiFuYingXiaoYouHui = oskuJtoken.Value<decimal>("zhiFuYingXiaoYouHui")
};
orderSkuCFDetailList.Add(oskuCF);
var oskuCF = new OrderSkuCFDetail()
{
OrderId = orderId,
SkuId = oskuJtoken.Value<string>("skuCode"),
Balance = oskuJtoken.Value<decimal>("balance"),
BaseDiscount = oskuJtoken.Value<decimal>("baseDiscount"),
BaseFee = oskuJtoken.Value<decimal>("baseFee"),
Coupon = oskuJtoken.Value<decimal>("coupon"),
DongQuan = oskuJtoken.Value<decimal>("dongQuan"),
ExpiryGiftDiscount = oskuJtoken.Value<decimal>("expiryGiftDiscount"),
GlobalGeneralIncludeTax = oskuJtoken.Value<decimal>("globalGeneralIncludeTax"),
GlobalGeneralTax = oskuJtoken.Value<decimal>("globalGeneralTax"),
JdZhiFuYouHui = oskuJtoken.Value<decimal>("jdZhiFuYouHui"),
JingDou = oskuJtoken.Value<decimal>("jingDou"),
JingQuan = oskuJtoken.Value<decimal>("jingQuan"),
JingXiangLiJin = oskuJtoken.Value<decimal>("jingXiangLiJin"),
LiJinYouHui = oskuJtoken.Value<decimal>("liJinYouHui"),
LuoDiPeiService = oskuJtoken.Value<decimal>("luoDiPeiService"),
ManJian = oskuJtoken.Value<decimal>("manJian"),
PingTaiChengDanYouHuiQuan = oskuJtoken.Value<decimal>("pingTaiChengDanYouHuiQuan"),
Plus95 = oskuJtoken.Value<decimal>("plus95"),
PromotionDiscount = oskuJtoken.Value<decimal>("promotionDiscount"),
RemoteFee = oskuJtoken.Value<decimal>("remoteFee"),
ShouldPay = oskuJtoken.Value<decimal>("shouldPay"),
SuperRedEnvelope = oskuJtoken.Value<decimal>("superRedEnvelope"),
TaxFee = oskuJtoken.Value<decimal>("taxFee"),
TuiHuanHuoWuYou = oskuJtoken.Value<decimal>("tuiHuanHuoWuYou"),
VenderFee = oskuJtoken.Value<decimal>("venderFee"),
XianPinLeiDongQuan = xianPinLeiDongQuan, //数据不齐
XianPinLeiJingQuan = oskuJtoken.Value<decimal>("xianPinLeiJingQuan"),
ZhiFuYingXiaoYouHui = oskuJtoken.Value<decimal>("zhiFuYingXiaoYouHui")
};
orderSkuCFDetailList.Add(oskuCF);
}
}
#endregion
}
#endregion
}
}
}
@ -726,199 +727,211 @@ namespace BBWY.Server.Business
orderState != Enums.OrderState. &&
orderState != Enums.OrderState.)
{
var orderCost = dbOrderCostList.FirstOrDefault(oc => oc.OrderId == dbOrder.Id);
if (orderCost == null && orderSellerPrice > 0M)
bool checkOrderTotal = true;
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 (sDCalculationCostRequest.PlatformCommissionRatio == 0M)
sDCalculationCostRequest.PlatformCommissionRatio = 0.05M;
orderCost = new OrderCost()
if (isNewOrder && dbOrder.StorageType == Enums.StorageType.SD && sDCalculationCostRequest != null)
{
OrderId = sDCalculationCostRequest.OrderId,
PlatformCommissionRatio = sDCalculationCostRequest.PlatformCommissionRatio,
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
Profit = 0,
DeliveryExpressFreight = sDCalculationCostRequest.DeliveryExpressFreight,
CreateTime = DateTime.Now,
IsManualEdited = true,
SDCommissionAmount = sDCalculationCostRequest.SDCommissionAmount,
SDOrderAmount = sDCalculationCostRequest.SDOrderAmount
};
orderCost.CalculationSDOrderProfitAndCost(dbOrder, null);
insertOrderCostList.Add(orderCost);
}
else if (!fsql.Select<OrderCost>(dbOrder.Id).Any()) //再查询一次数据库,以防同步开始执行后被人为操作扣减库存,造成重复扣减库存
{
var orderSkuJArray = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value<decimal>("jdPrice") != 0M);
if (orderSkuJArray != null && orderSkuJArray.Count() > 0)
//检查SD埋点
if (sDCalculationCostRequest.PlatformCommissionRatio == 0M)
sDCalculationCostRequest.PlatformCommissionRatio = 0.05M;
orderCost = new OrderCost()
{
OrderId = sDCalculationCostRequest.OrderId,
PlatformCommissionRatio = sDCalculationCostRequest.PlatformCommissionRatio,
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
Profit = 0,
DeliveryExpressFreight = sDCalculationCostRequest.DeliveryExpressFreight,
CreateTime = DateTime.Now,
IsManualEdited = true,
SDCommissionAmount = sDCalculationCostRequest.SDCommissionAmount,
SDOrderAmount = sDCalculationCostRequest.SDOrderAmount
};
orderCost.CalculationSDOrderProfitAndCost(dbOrder, null);
insertOrderCostList.Add(orderCost);
}
else if (!fsql.Select<OrderCost>(dbOrder.Id).Any()) //再查询一次数据库,以防同步开始执行后被人为操作扣减库存,造成重复扣减库存
{
var orderCostPurchaseAmount = 0M;
var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价
//var avgPreferential = preferentialAmount / orderSkuJArray.Count();
#region 扣减库存
foreach (var orderSkuJToken in orderSkuJArray)
var orderSkuJArray = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value<decimal>("jdPrice") != 0M);
if (orderSkuJArray != null && orderSkuJArray.Count() > 0)
{
var orderSkuId = orderSkuJToken.Value<string>("skuId");
var itemTotal = orderSkuJToken.Value<int>("itemTotal"); //sku购买数量
#region sku拆分明细
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 orderCostPurchaseAmount = 0M;
var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价
//var avgPreferential = preferentialAmount / orderSkuJArray.Count();
//var itemPrice = orderSkuJToken.Value<decimal>("jdPrice"); //sku单价
var isReduceMultiTimes = false; //是否多次扣减库存
while (itemTotal != 0)
#region 扣减库存
foreach (var orderSkuJToken in orderSkuJArray)
{
var purchaseOrder = dbPurchaseOrderList.FirstOrDefault(po => po.StorageType == dbOrder.StorageType &&
po.RemainingQuantity != 0 &&
po.SkuId == orderSkuId);
if (purchaseOrder == null)
break; //没有库存了
//本次扣减量
var deductionQuantity = purchaseOrder.RemainingQuantity >= itemTotal ? itemTotal : purchaseOrder.RemainingQuantity;
//var deductionQuantity = itemTotal;
//本次扣减量的采购成本
var currentPurchaseAmount = purchaseOrder.UnitCost * deductionQuantity;
//本次扣减量的发货运费
var currentSkuDeliveryFreight = isReduceMultiTimes ?
(purchaseOrder.SingleDeliveryFreight / 2 * deductionQuantity) :
(purchaseOrder.SingleDeliveryFreight + purchaseOrder.SingleDeliveryFreight / 2 * (deductionQuantity - 1));
purchaseOrder.RemainingQuantity -= deductionQuantity;
itemTotal -= deductionQuantity;
//累计采购成本
orderCostPurchaseAmount += currentPurchaseAmount;
//累计发货运费(销售运费)
orderDeliveryExpressFreight += currentSkuDeliveryFreight;
isReduceMultiTimes = true;
var updateSql = fsql.Update<PurchaseOrder>(purchaseOrder.Id).Set(po => po.RemainingQuantity - deductionQuantity);
updatePurchaseOrderList.Add(updateSql);
var orderCostDetail = new OrderCostDetail()
var orderSkuId = orderSkuJToken.Value<string>("skuId");
var itemTotal = orderSkuJToken.Value<int>("itemTotal"); //sku购买数量
#region sku拆分明细
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单价
var isReduceMultiTimes = false; //是否多次扣减库存
while (itemTotal != 0)
{
Id = idGenerator.NewLong(),
OrderId = orderId,
ProductId = orderSkuJToken.Value<string>("wareId"),
SkuId = orderSkuId,
CreateTime = DateTime.Now,
PurchaseOrderPKId = purchaseOrder.Id,
//UnitCost = purchaseOrder.UnitCost,
DeductionQuantity = deductionQuantity,
DeliveryExpressFreight = currentSkuDeliveryFreight,
//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);
var purchaseOrder = dbPurchaseOrderList.FirstOrDefault(po => po.StorageType == dbOrder.StorageType &&
po.RemainingQuantity != 0 &&
po.SkuId == orderSkuId);
if (purchaseOrder == null)
break; //没有库存了
//本次扣减量
var deductionQuantity = purchaseOrder.RemainingQuantity >= itemTotal ? itemTotal : purchaseOrder.RemainingQuantity;
//var deductionQuantity = itemTotal;
//本次扣减量的采购成本
var currentPurchaseAmount = purchaseOrder.UnitCost * deductionQuantity;
//本次扣减量的发货运费
var currentSkuDeliveryFreight = isReduceMultiTimes ?
(purchaseOrder.SingleDeliveryFreight / 2 * deductionQuantity) :
(purchaseOrder.SingleDeliveryFreight + purchaseOrder.SingleDeliveryFreight / 2 * (deductionQuantity - 1));
purchaseOrder.RemainingQuantity -= deductionQuantity;
itemTotal -= deductionQuantity;
//累计采购成本
orderCostPurchaseAmount += currentPurchaseAmount;
//累计发货运费(销售运费)
orderDeliveryExpressFreight += currentSkuDeliveryFreight;
isReduceMultiTimes = true;
var updateSql = fsql.Update<PurchaseOrder>(purchaseOrder.Id).Set(po => po.RemainingQuantity - deductionQuantity);
updatePurchaseOrderList.Add(updateSql);
var orderCostDetail = new OrderCostDetail()
{
Id = idGenerator.NewLong(),
OrderId = orderId,
ProductId = orderSkuJToken.Value<string>("wareId"),
SkuId = orderSkuId,
CreateTime = DateTime.Now,
PurchaseOrderPKId = purchaseOrder.Id,
//UnitCost = purchaseOrder.UnitCost,
DeductionQuantity = deductionQuantity,
DeliveryExpressFreight = currentSkuDeliveryFreight,
//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 计算成本
orderCost = new OrderCost()
{
OrderId = orderId,
PlatformCommissionRatio = platformCommissionRatio,
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
Profit = 0,
PurchaseAmount = orderCostPurchaseAmount,
DeliveryExpressFreight = orderDeliveryExpressFreight,
CreateTime = DateTime.Now
};
if (dbOrder.OrderTotalPrice != 0)
orderCost.CalculationOrderProfitAndCost(dbOrder, null);
else
orderCost.CalculationOrderProfitAndCost(actualAmount, null);
#region 计算成本
orderCost = new OrderCost()
{
OrderId = orderId,
PlatformCommissionRatio = platformCommissionRatio,
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
Profit = 0,
PurchaseAmount = orderCostPurchaseAmount,
DeliveryExpressFreight = orderDeliveryExpressFreight,
CreateTime = DateTime.Now
};
if (dbOrder.OrderTotalPrice != 0)
orderCost.CalculationOrderProfitAndCost(dbOrder, null);
else
orderCost.CalculationOrderProfitAndCost(actualAmount, null);
insertOrderCostList.Add(orderCost);
#endregion
insertOrderCostList.Add(orderCost);
#endregion
}
}
}
}

Loading…
Cancel
Save