From 2cba1b6d324a9b66d150e33a35b0afbfe0e3b2de Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 12 Nov 2023 11:39:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=90=8C=E6=AD=A5=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E6=8D=95=E6=8D=89=E4=B8=8B=E6=B2=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sync/OrderSyncBusiness.cs | 1065 +++++++++-------- 1 file changed, 538 insertions(+), 527 deletions(-) diff --git a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs index 9f7999bb..08f79260 100644 --- a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs @@ -222,7 +222,7 @@ namespace BBWY.Server.Business var interfaceOrderIdList = validOrders.Select(orderJToken => orderJToken.Value("orderId")); var interfaceCanceledOrderIdList = validOrders.Where(orderJToken => orderJToken.Value("orderState").Equals("TRADE_CANCELED")) - .Select(orderJToken => orderJToken.Value("orderId")); //接口查询结果中取消状态的订单Id + .Select(orderJToken => orderJToken.Value("orderId")); //接口查询结果中取消状态的订单Id var dbOrderList = fsql.Select().Where(o => interfaceOrderIdList.Contains(o.Id)).ToList(o => new Order @@ -282,592 +282,603 @@ namespace BBWY.Server.Business foreach (var orderJToken in validOrders) { var orderId = orderJToken.Value("orderId"); - if (insertOrderList.Any(o => o.Id == orderId)) - continue; - var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == orderId); - var isNewOrder = dbOrder == null; - SDCalculationCostRequest sDCalculationCostRequest = null; //SD信息埋点 - - #region 优惠券/促销/拆分明细 - if (!dbOrderTotalList.Any(ot => ot.Id == orderId)) + try { - var orderCouponDetailHttpResult = restApiService.SendRequest("http://yunding.qiyue666.com", "api/PlatformSDK/GetOrderCouponDetail", new - { - OrderId = orderId, - AppKey = appKey, - AppSecret = appSecret, - AppToken = appToken, - Platform = Enums.Platform.京东 - }, null, HttpMethod.Post); - if (orderCouponDetailHttpResult.StatusCode == System.Net.HttpStatusCode.OK) + + if (insertOrderList.Any(o => o.Id == orderId)) + continue; + var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == orderId); + var isNewOrder = dbOrder == null; + SDCalculationCostRequest sDCalculationCostRequest = null; //SD信息埋点 + + #region 优惠券/促销/拆分明细 + if (!dbOrderTotalList.Any(ot => ot.Id == orderId)) { - var orderCouponDetailResponse = JsonConvert.DeserializeObject>(orderCouponDetailHttpResult.Content); - if (orderCouponDetailResponse.Success) + var orderCouponDetailHttpResult = restApiService.SendRequest("http://yunding.qiyue666.com", "api/PlatformSDK/GetOrderCouponDetail", new { - var jtoken = orderCouponDetailResponse.Data["jingdong_pop_order_coupondetail_responce"]["couponDetailExternal"]["couponDetailVo"]; - - #region 订单合计信息 - var orderTotal = new OrderTotalInfo() + OrderId = orderId, + AppKey = appKey, + AppSecret = appSecret, + AppToken = appToken, + Platform = Enums.Platform.京东 + }, null, HttpMethod.Post); + if (orderCouponDetailHttpResult.StatusCode == System.Net.HttpStatusCode.OK) + { + var orderCouponDetailResponse = JsonConvert.DeserializeObject>(orderCouponDetailHttpResult.Content); + if (orderCouponDetailResponse.Success) { - CreateTime = DateTime.Now, - Id = orderId, - TotalBalance = jtoken.Value("totalBalance"), - TotalBaseDiscount = jtoken.Value("TotalBaseDiscount"), - TotalBaseFee = jtoken.Value("totalBaseFee"), - TotalCoupon = jtoken.Value("totalCoupon"), - TotalDongQuan = jtoken.Value("totalDongQuan"), - TotalExpiryGiftDiscount = jtoken.Value("totalExpiryGiftDiscount"), - TotalGlobalGeneralIncludeTax = jtoken.Value("totalGlobalGeneralIncludeTax"), - TotalGlobalGeneralTax = jtoken.Value("totalGlobalGeneralTax"), - TotalItemPrice = jtoken.Value("totalItemPrice"), - TotalJdZhiFuYouHui = jtoken.Value("totalJdZhiFuYouHui"), - TotalJingDou = jtoken.Value("totalJingDou"), - TotalJingQuan = jtoken.Value("totalJingQuan"), - TotalJingXiangLiJin = jtoken.Value("totalJingXiangLiJin"), - TotalLiJinYouHui = jtoken.Value("totalLiJinYouHui"), - TotalLuoDiPeiService = jtoken.Value("totalLuoDiPeiService"), - TotalManJian = jtoken.Value("totalManJian"), - TotalPingTaiChengDanYouHuiQuan = jtoken.Value("totalPingTaiChengDanYouHuiQuan"), - TotalPlus95 = jtoken.Value("totalPlus95"), - TotalPromotionDiscount = jtoken.Value("totalPromotionDiscount"), - TotalRemoteFee = jtoken.Value("totalRemoteFee"), - TotalShouldPay = jtoken.Value("totalShouldPay"), - TotalSuperRedEnvelope = jtoken.Value("totalSuperRedEnvelope"), - TotalTaxFee = jtoken.Value("totalTaxFee"), - TotalTuiHuanHuoWuYou = jtoken.Value("totalTuiHuanHuoWuYou"), - TotalVenderFee = jtoken.Value("totalVenderFee"), - TotalXianPinLeiDongQuan = jtoken.Value("totalXianPinLeiDongQuan"), - TotalXianPinLeiJingQuan = jtoken.Value("totalXianPinLeiJingQuan"), - TotalZhiFuYingXiaoYouHui = jtoken.Value("totalZhiFuYingXiaoYouHui") - }; - insertOrderTotalInfoList.Add(orderTotal); - #endregion + var jtoken = orderCouponDetailResponse.Data["jingdong_pop_order_coupondetail_responce"]["couponDetailExternal"]["couponDetailVo"]; - #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("couponId"), - CouponName = j.Value("couponName"), - CouponNum = j.Value("couponNum"), - CouponPrice = j.Value("couponPrice"), - CouponTypeDesc = j.Value("couponTypeDesc"), CreateTime = DateTime.Now, - JdCouponId = j.Value("jdCouponId"), - JdDivideMoney = j.Value("jdDivideMoney"), - OrderId = orderId, - PriceDivide = j.Value("priceDivide"), - VenderDivideMoney = j.Value("venderDivideMoney") - })); - } + Id = orderId, + TotalBalance = jtoken.Value("totalBalance"), + TotalBaseDiscount = jtoken.Value("TotalBaseDiscount"), + TotalBaseFee = jtoken.Value("totalBaseFee"), + TotalCoupon = jtoken.Value("totalCoupon"), + TotalDongQuan = jtoken.Value("totalDongQuan"), + TotalExpiryGiftDiscount = jtoken.Value("totalExpiryGiftDiscount"), + TotalGlobalGeneralIncludeTax = jtoken.Value("totalGlobalGeneralIncludeTax"), + TotalGlobalGeneralTax = jtoken.Value("totalGlobalGeneralTax"), + TotalItemPrice = jtoken.Value("totalItemPrice"), + TotalJdZhiFuYouHui = jtoken.Value("totalJdZhiFuYouHui"), + TotalJingDou = jtoken.Value("totalJingDou"), + TotalJingQuan = jtoken.Value("totalJingQuan"), + TotalJingXiangLiJin = jtoken.Value("totalJingXiangLiJin"), + TotalLiJinYouHui = jtoken.Value("totalLiJinYouHui"), + TotalLuoDiPeiService = jtoken.Value("totalLuoDiPeiService"), + TotalManJian = jtoken.Value("totalManJian"), + TotalPingTaiChengDanYouHuiQuan = jtoken.Value("totalPingTaiChengDanYouHuiQuan"), + TotalPlus95 = jtoken.Value("totalPlus95"), + TotalPromotionDiscount = jtoken.Value("totalPromotionDiscount"), + TotalRemoteFee = jtoken.Value("totalRemoteFee"), + TotalShouldPay = jtoken.Value("totalShouldPay"), + TotalSuperRedEnvelope = jtoken.Value("totalSuperRedEnvelope"), + TotalTaxFee = jtoken.Value("totalTaxFee"), + TotalTuiHuanHuoWuYou = jtoken.Value("totalTuiHuanHuoWuYou"), + TotalVenderFee = jtoken.Value("totalVenderFee"), + TotalXianPinLeiDongQuan = jtoken.Value("totalXianPinLeiDongQuan"), + TotalXianPinLeiJingQuan = jtoken.Value("totalXianPinLeiJingQuan"), + TotalZhiFuYingXiaoYouHui = jtoken.Value("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("couponId"), + CouponName = j.Value("couponName"), + CouponNum = j.Value("couponNum"), + CouponPrice = j.Value("couponPrice"), + CouponTypeDesc = j.Value("couponTypeDesc"), + CreateTime = DateTime.Now, + JdCouponId = j.Value("jdCouponId"), + JdDivideMoney = j.Value("jdDivideMoney"), + OrderId = orderId, + PriceDivide = j.Value("priceDivide"), + VenderDivideMoney = j.Value("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("beginTime"), - EndTime = j.Value("endTime"), - CreateTime = DateTime.Now, - OrderId = orderId, - PromotionId = j.Value("promotionId"), - PromotionName = j.Value("promotionName"), - SalePrice = j.Value("salePrice"), - SaleTypeDesc = j.Value("saleTypeDesc") - })); - } - #endregion + insertOrderPromotionList.AddRange(promotionJArray.Select(j => new OrderPromotion() + { + Id = idGenerator.NewLong(), + BeginTime = j.Value("beginTime"), + EndTime = j.Value("endTime"), + CreateTime = DateTime.Now, + OrderId = orderId, + PromotionId = j.Value("promotionId"), + PromotionName = j.Value("promotionName"), + SalePrice = j.Value("salePrice"), + SaleTypeDesc = j.Value("saleTypeDesc") + })); + } + #endregion - #region 订单sku金额明细 - var skuJArray = jtoken["skuList"] as JArray; - foreach (var oskuJtoken in skuJArray) - { - var oskuCF = new OrderSkuCFDetail() + #region 订单sku金额明细 + var skuJArray = jtoken["skuList"] as JArray; + if (skuJArray != null && skuJArray.Count() > 0) { - OrderId = orderId, - SkuId = oskuJtoken.Value("skuCode"), - Balance = oskuJtoken.Value("balance"), - BaseDiscount = oskuJtoken.Value("baseDiscount"), - BaseFee = oskuJtoken.Value("baseFee"), - Coupon = oskuJtoken.Value("coupon"), - DongQuan = oskuJtoken.Value("dongQuan"), - ExpiryGiftDiscount = oskuJtoken.Value("expiryGiftDiscount"), - GlobalGeneralIncludeTax = oskuJtoken.Value("globalGeneralIncludeTax"), - GlobalGeneralTax = oskuJtoken.Value("globalGeneralTax"), - JdZhiFuYouHui = oskuJtoken.Value("jdZhiFuYouHui"), - JingDou = oskuJtoken.Value("jingDou"), - JingQuan = oskuJtoken.Value("jingQuan"), - JingXiangLiJin = oskuJtoken.Value("jingXiangLiJin"), - LiJinYouHui = oskuJtoken.Value("liJinYouHui"), - LuoDiPeiService = oskuJtoken.Value("luoDiPeiService"), - ManJian = oskuJtoken.Value("manJian"), - PingTaiChengDanYouHuiQuan = oskuJtoken.Value("pingTaiChengDanYouHuiQuan"), - Plus95 = oskuJtoken.Value("plus95"), - PromotionDiscount = oskuJtoken.Value("promotionDiscount"), - RemoteFee = oskuJtoken.Value("remoteFee"), - ShouldPay = oskuJtoken.Value("shouldPay"), - SuperRedEnvelope = oskuJtoken.Value("superRedEnvelope"), - TaxFee = oskuJtoken.Value("taxFee"), - TuiHuanHuoWuYou = oskuJtoken.Value("tuiHuanHuoWuYou"), - VenderFee = oskuJtoken.Value("venderFee"), - XianPinLeiDongQuan = oskuJtoken.Value("xianPinLeiDongQuan"), - XianPinLeiJingQuan = oskuJtoken.Value("xianPinLeiJingQuan"), - ZhiFuYingXiaoYouHui = oskuJtoken.Value("zhiFuYingXiaoYouHui") - }; - orderSkuCFDetailList.Add(oskuCF); - } - #endregion + foreach (var oskuJtoken in skuJArray) + { + var oskuCF = new OrderSkuCFDetail() + { + OrderId = orderId, + SkuId = oskuJtoken.Value("skuCode"), + Balance = oskuJtoken.Value("balance"), + BaseDiscount = oskuJtoken.Value("baseDiscount"), + BaseFee = oskuJtoken.Value("baseFee"), + Coupon = oskuJtoken.Value("coupon"), + DongQuan = oskuJtoken.Value("dongQuan"), + ExpiryGiftDiscount = oskuJtoken.Value("expiryGiftDiscount"), + GlobalGeneralIncludeTax = oskuJtoken.Value("globalGeneralIncludeTax"), + GlobalGeneralTax = oskuJtoken.Value("globalGeneralTax"), + JdZhiFuYouHui = oskuJtoken.Value("jdZhiFuYouHui"), + JingDou = oskuJtoken.Value("jingDou"), + JingQuan = oskuJtoken.Value("jingQuan"), + JingXiangLiJin = oskuJtoken.Value("jingXiangLiJin"), + LiJinYouHui = oskuJtoken.Value("liJinYouHui"), + LuoDiPeiService = oskuJtoken.Value("luoDiPeiService"), + ManJian = oskuJtoken.Value("manJian"), + PingTaiChengDanYouHuiQuan = oskuJtoken.Value("pingTaiChengDanYouHuiQuan"), + Plus95 = oskuJtoken.Value("plus95"), + PromotionDiscount = oskuJtoken.Value("promotionDiscount"), + RemoteFee = oskuJtoken.Value("remoteFee"), + ShouldPay = oskuJtoken.Value("shouldPay"), + SuperRedEnvelope = oskuJtoken.Value("superRedEnvelope"), + TaxFee = oskuJtoken.Value("taxFee"), + TuiHuanHuoWuYou = oskuJtoken.Value("tuiHuanHuoWuYou"), + VenderFee = oskuJtoken.Value("venderFee"), + XianPinLeiDongQuan = oskuJtoken.Value("xianPinLeiDongQuan"), + XianPinLeiJingQuan = oskuJtoken.Value("xianPinLeiJingQuan"), + ZhiFuYingXiaoYouHui = oskuJtoken.Value("zhiFuYingXiaoYouHui") + }; + orderSkuCFDetailList.Add(oskuCF); + } + } + #endregion + } } } - } - #endregion - - #region 订单基本信息 - var buyerRemark = orderJToken.Value("orderRemark"); - var venderRemark = orderJToken.Value("venderRemark"); - var modifyTime = orderJToken.Value("modified"); - var endTime = orderJToken.Value("orderEndTime"); - var waybillNo = orderJToken.Value("waybill"); - var freightPrice = orderJToken.Value("freightPrice"); - var orderPayment = orderJToken.Value("orderPayment"); - var sellerPreferentialAmount = orderJToken.Value("sellerDiscount"); - var orderSellerPrice = orderJToken.Value("orderSellerPrice"); - var orderTotalPrice = orderJToken.Value("orderTotalPrice"); - var storeOrder = orderJToken.Value("storeOrder") ?? string.Empty; - var storeId = orderJToken.Value("storeId"); - var storageType = ConvertStoreOrder(storeOrder); - var preferentialAmount = 0M; - if (dbOrder == null) - { - dbOrder = new Order() - { - Id = orderId, - BuyerRemark = buyerRemark, - VenderRemark = venderRemark, - FreightPrice = freightPrice, - EndTime = endTime, - StartTime = orderJToken.Value("orderStartTime"), - ModifyTime = modifyTime, - OrderPayment = orderPayment, - SellerPreferentialAmount = sellerPreferentialAmount, - OrderSellerPrice = orderSellerPrice, - OrderTotalPrice = orderTotalPrice, - OrderType = (Enums.OrderType)orderJToken.Value("orderType"), - Platform = Enums.Platform.京东, - ShopId = shopId, - //VenderId = orderJToken.Value("venderId"), - WaybillNo = waybillNo, - StoreOrder = storeOrder, - StoreId = storeId, - IsGift = orderSellerPrice == 0M, - StorageType = storageType - }; - - if (memoryCache.TryGetValue(orderId, out sDCalculationCostRequest)) - { - dbOrder.StorageType = Enums.StorageType.SD; - dbOrder.SDType = sDCalculationCostRequest.SDType; - dbOrder.Flag = sDCalculationCostRequest.Flag; - if (!string.IsNullOrEmpty(sDCalculationCostRequest.VenderRemark)) - dbOrder.VenderRemark = sDCalculationCostRequest.VenderRemark; - dbOrder.SDKey = sDCalculationCostRequest.SDKey; - dbOrder.SDPayBillNo = sDCalculationCostRequest.SDPayBillNo; - dbOrder.SDOperator = sDCalculationCostRequest.SDOperator; - dbOrder.SDPayChannel = sDCalculationCostRequest.SDPayChannel; - } + #endregion - var payType = orderJToken.Value("payType"); - if (payType.Contains("-")) - dbOrder.PayType = (Enums.PayType)Convert.ToInt32(payType.Substring(0, 1)); + #region 订单基本信息 + var buyerRemark = orderJToken.Value("orderRemark"); + var venderRemark = orderJToken.Value("venderRemark"); + var modifyTime = orderJToken.Value("modified"); + var endTime = orderJToken.Value("orderEndTime"); + var waybillNo = orderJToken.Value("waybill"); + var freightPrice = orderJToken.Value("freightPrice"); + var orderPayment = orderJToken.Value("orderPayment"); + var sellerPreferentialAmount = orderJToken.Value("sellerDiscount"); + var orderSellerPrice = orderJToken.Value("orderSellerPrice"); + var orderTotalPrice = orderJToken.Value("orderTotalPrice"); + var storeOrder = orderJToken.Value("storeOrder") ?? string.Empty; + var storeId = orderJToken.Value("storeId"); + var storageType = ConvertStoreOrder(storeOrder); + var preferentialAmount = 0M; + if (dbOrder == null) + { + dbOrder = new Order() + { + Id = orderId, + BuyerRemark = buyerRemark, + VenderRemark = venderRemark, + FreightPrice = freightPrice, + EndTime = endTime, + StartTime = orderJToken.Value("orderStartTime"), + ModifyTime = modifyTime, + OrderPayment = orderPayment, + SellerPreferentialAmount = sellerPreferentialAmount, + OrderSellerPrice = orderSellerPrice, + OrderTotalPrice = orderTotalPrice, + OrderType = (Enums.OrderType)orderJToken.Value("orderType"), + Platform = Enums.Platform.京东, + ShopId = shopId, + //VenderId = orderJToken.Value("venderId"), + WaybillNo = waybillNo, + StoreOrder = storeOrder, + StoreId = storeId, + IsGift = orderSellerPrice == 0M, + StorageType = storageType + }; - insertOrderList.Add(dbOrder); + if (memoryCache.TryGetValue(orderId, out sDCalculationCostRequest)) + { + dbOrder.StorageType = Enums.StorageType.SD; + dbOrder.SDType = sDCalculationCostRequest.SDType; + dbOrder.Flag = sDCalculationCostRequest.Flag; + if (!string.IsNullOrEmpty(sDCalculationCostRequest.VenderRemark)) + dbOrder.VenderRemark = sDCalculationCostRequest.VenderRemark; + dbOrder.SDKey = sDCalculationCostRequest.SDKey; + dbOrder.SDPayBillNo = sDCalculationCostRequest.SDPayBillNo; + dbOrder.SDOperator = sDCalculationCostRequest.SDOperator; + dbOrder.SDPayChannel = sDCalculationCostRequest.SDPayChannel; + } - #region OrderSku - var itemInfoList = orderJToken["itemInfoList"] as JArray; - foreach (var orderSkuJToken in itemInfoList) - { - var itemTotal = orderSkuJToken.Value("itemTotal"); - var jdPrice = orderSkuJToken.Value("jdPrice"); - var wareId = orderSkuJToken.Value("wareId"); - var skuId = orderSkuJToken.Value("skuId"); + var payType = orderJToken.Value("payType"); + if (payType.Contains("-")) + dbOrder.PayType = (Enums.PayType)Convert.ToInt32(payType.Substring(0, 1)); - //if (orderSkuJToken.Value("jdPrice") != 0M) - //{ - var oskuCF = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == skuId); + insertOrderList.Add(dbOrder); - var osku = new OrderSku() + #region OrderSku + var itemInfoList = orderJToken["itemInfoList"] as JArray; + foreach (var orderSkuJToken in itemInfoList) { - Id = idGenerator.NewLong(), - ItemTotal = itemTotal, - Price = jdPrice, - ProductId = wareId, - Title = orderSkuJToken.Value("skuName").SimplifySkuName(), - ProductNo = orderSkuJToken.Value("productNo"), - CreateTime = DateTime.Now, - OrderId = orderId, - SkuId = skuId, - Balance = oskuCF?.Balance ?? 0M, - BaseDiscount = oskuCF?.BaseFee ?? 0M, - BaseFee = oskuCF?.BaseFee ?? 0M, - Coupon = oskuCF?.Coupon ?? 0M, - DongQuan = oskuCF?.DongQuan ?? 0M, - ExpiryGiftDiscount = oskuCF?.ExpiryGiftDiscount ?? 0M, - GlobalGeneralIncludeTax = oskuCF?.GlobalGeneralIncludeTax ?? 0M, - GlobalGeneralTax = oskuCF?.GlobalGeneralTax ?? 0M, - JdZhiFuYouHui = oskuCF?.JdZhiFuYouHui ?? 0M, - JingDou = oskuCF?.JingDou ?? 0M, - JingQuan = oskuCF?.JingQuan ?? 0M, - JingXiangLiJin = oskuCF?.JingXiangLiJin ?? 0M, - LiJinYouHui = oskuCF?.LiJinYouHui ?? 0M, - LuoDiPeiService = oskuCF?.LuoDiPeiService ?? 0M, - ManJian = oskuCF?.ManJian ?? 0M, - PingTaiChengDanYouHuiQuan = oskuCF?.PingTaiChengDanYouHuiQuan ?? 0M, - Plus95 = oskuCF?.Plus95 ?? 0M, - PromotionDiscount = oskuCF?.PromotionDiscount ?? 0M, - RemoteFee = oskuCF?.RemoteFee ?? 0M, - ShouldPay = oskuCF?.ShouldPay ?? 0M, - SuperRedEnvelope = oskuCF?.SuperRedEnvelope ?? 0M, - TaxFee = oskuCF?.TaxFee ?? 0M, - TuiHuanHuoWuYou = oskuCF?.TuiHuanHuoWuYou ?? 0M, - VenderFee = oskuCF?.VenderFee ?? 0M, - XianPinLeiDongQuan = oskuCF?.XianPinLeiDongQuan ?? 0M, - XianPinLeiJingQuan = oskuCF?.XianPinLeiJingQuan ?? 0M, - ZhiFuYingXiaoYouHui = oskuCF?.ZhiFuYingXiaoYouHui ?? 0M - }; - insertOrderSkuList.Add(osku); - //} - //CumulativeSkuDailySalesDetail(skuDailySalesDetailDictionary, dbOrder.StartTime.Value, shopId, skuId, wareId, jdPrice, itemTotal); + var itemTotal = orderSkuJToken.Value("itemTotal"); + var jdPrice = orderSkuJToken.Value("jdPrice"); + var wareId = orderSkuJToken.Value("wareId"); + var skuId = orderSkuJToken.Value("skuId"); + + //if (orderSkuJToken.Value("jdPrice") != 0M) + //{ + var oskuCF = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == skuId); + + var osku = new OrderSku() + { + Id = idGenerator.NewLong(), + ItemTotal = itemTotal, + Price = jdPrice, + ProductId = wareId, + Title = orderSkuJToken.Value("skuName").SimplifySkuName(), + ProductNo = orderSkuJToken.Value("productNo"), + CreateTime = DateTime.Now, + OrderId = orderId, + SkuId = skuId, + Balance = oskuCF?.Balance ?? 0M, + BaseDiscount = oskuCF?.BaseFee ?? 0M, + BaseFee = oskuCF?.BaseFee ?? 0M, + Coupon = oskuCF?.Coupon ?? 0M, + DongQuan = oskuCF?.DongQuan ?? 0M, + ExpiryGiftDiscount = oskuCF?.ExpiryGiftDiscount ?? 0M, + GlobalGeneralIncludeTax = oskuCF?.GlobalGeneralIncludeTax ?? 0M, + GlobalGeneralTax = oskuCF?.GlobalGeneralTax ?? 0M, + JdZhiFuYouHui = oskuCF?.JdZhiFuYouHui ?? 0M, + JingDou = oskuCF?.JingDou ?? 0M, + JingQuan = oskuCF?.JingQuan ?? 0M, + JingXiangLiJin = oskuCF?.JingXiangLiJin ?? 0M, + LiJinYouHui = oskuCF?.LiJinYouHui ?? 0M, + LuoDiPeiService = oskuCF?.LuoDiPeiService ?? 0M, + ManJian = oskuCF?.ManJian ?? 0M, + PingTaiChengDanYouHuiQuan = oskuCF?.PingTaiChengDanYouHuiQuan ?? 0M, + Plus95 = oskuCF?.Plus95 ?? 0M, + PromotionDiscount = oskuCF?.PromotionDiscount ?? 0M, + RemoteFee = oskuCF?.RemoteFee ?? 0M, + ShouldPay = oskuCF?.ShouldPay ?? 0M, + SuperRedEnvelope = oskuCF?.SuperRedEnvelope ?? 0M, + TaxFee = oskuCF?.TaxFee ?? 0M, + TuiHuanHuoWuYou = oskuCF?.TuiHuanHuoWuYou ?? 0M, + VenderFee = oskuCF?.VenderFee ?? 0M, + XianPinLeiDongQuan = oskuCF?.XianPinLeiDongQuan ?? 0M, + XianPinLeiJingQuan = oskuCF?.XianPinLeiJingQuan ?? 0M, + ZhiFuYingXiaoYouHui = oskuCF?.ZhiFuYingXiaoYouHui ?? 0M + }; + insertOrderSkuList.Add(osku); + //} + //CumulativeSkuDailySalesDetail(skuDailySalesDetailDictionary, dbOrder.StartTime.Value, shopId, skuId, wareId, jdPrice, itemTotal); + } + #endregion } - #endregion - } - else - { - //preferentialAmount = dbOrder.PreferentialAmount; - if (storageType != null && dbOrder.StorageType != storageType) - dbOrder.StorageType = storageType; + else + { + //preferentialAmount = dbOrder.PreferentialAmount; + if (storageType != null && dbOrder.StorageType != storageType) + dbOrder.StorageType = storageType; - var currentDbOrderSkuList = dbOrderSkuList.Where(osku => osku.OrderId == orderId).ToList(); + var currentDbOrderSkuList = dbOrderSkuList.Where(osku => osku.OrderId == orderId).ToList(); - var itemInfoList = orderJToken["itemInfoList"] as JArray; - foreach (var orderSkuJToken in itemInfoList) - { - //var itemTotal = orderSkuJToken.Value("itemTotal"); - //var jdPrice = orderSkuJToken.Value("jdPrice"); - var wareId = orderSkuJToken.Value("wareId"); - var skuId = orderSkuJToken.Value("skuId"); - var dbOsku = currentDbOrderSkuList.FirstOrDefault(osku => osku.SkuId == skuId); - var skuUpdateKey = $"{orderId}_{skuId}"; - if (dbOsku != null) + var itemInfoList = orderJToken["itemInfoList"] as JArray; + foreach (var orderSkuJToken in itemInfoList) { - var oskuCF = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == dbOsku.SkuId); - var isDetailChanged = dbOsku.ShouldPay == 0 && oskuCF != null && oskuCF.ShouldPay != 0; - if (dbOsku.ProductId != wareId || isDetailChanged) + //var itemTotal = orderSkuJToken.Value("itemTotal"); + //var jdPrice = orderSkuJToken.Value("jdPrice"); + var wareId = orderSkuJToken.Value("wareId"); + var skuId = orderSkuJToken.Value("skuId"); + var dbOsku = currentDbOrderSkuList.FirstOrDefault(osku => osku.SkuId == skuId); + var skuUpdateKey = $"{orderId}_{skuId}"; + if (dbOsku != null) { - var update = fsql.Update(dbOsku.Id) - .SetIf(dbOsku.ProductId != wareId, osku => osku.ProductId, wareId) - .SetIf(isDetailChanged, osku => osku.ShouldPay, oskuCF?.ShouldPay) - .SetIf(isDetailChanged, osku => osku.Balance, oskuCF?.Balance) - .SetIf(isDetailChanged, osku => osku.BaseDiscount, oskuCF?.BaseDiscount) - .SetIf(isDetailChanged, osku => osku.BaseFee, oskuCF?.BaseFee) - .SetIf(isDetailChanged, osku => osku.Coupon, oskuCF?.Coupon) - .SetIf(isDetailChanged, osku => osku.DongQuan, oskuCF?.DongQuan) - .SetIf(isDetailChanged, osku => osku.ExpiryGiftDiscount, oskuCF?.ExpiryGiftDiscount) - .SetIf(isDetailChanged, osku => osku.GlobalGeneralIncludeTax, oskuCF?.GlobalGeneralIncludeTax) - .SetIf(isDetailChanged, osku => osku.GlobalGeneralTax, oskuCF?.GlobalGeneralTax) - .SetIf(isDetailChanged, osku => osku.JdZhiFuYouHui, oskuCF?.JdZhiFuYouHui) - .SetIf(isDetailChanged, osku => osku.JingDou, oskuCF?.JingDou) - .SetIf(isDetailChanged, osku => osku.JingQuan, oskuCF?.JingQuan) - .SetIf(isDetailChanged, osku => osku.JingXiangLiJin, oskuCF?.JingXiangLiJin) - .SetIf(isDetailChanged, osku => osku.LiJinYouHui, oskuCF?.LiJinYouHui) - .SetIf(isDetailChanged, osku => osku.LuoDiPeiService, oskuCF?.LuoDiPeiService) - .SetIf(isDetailChanged, osku => osku.ManJian, oskuCF?.ManJian) - .SetIf(isDetailChanged, osku => osku.PingTaiChengDanYouHuiQuan, oskuCF?.PingTaiChengDanYouHuiQuan) - .SetIf(isDetailChanged, osku => osku.Plus95, oskuCF?.Plus95) - .SetIf(isDetailChanged, osku => osku.PromotionDiscount, oskuCF?.PromotionDiscount) - .SetIf(isDetailChanged, osku => osku.RemoteFee, oskuCF?.RemoteFee) - .SetIf(isDetailChanged, osku => osku.SuperRedEnvelope, oskuCF?.SuperRedEnvelope) - .SetIf(isDetailChanged, osku => osku.TaxFee, oskuCF?.TaxFee) - .SetIf(isDetailChanged, osku => osku.TuiHuanHuoWuYou, oskuCF?.TuiHuanHuoWuYou) - .SetIf(isDetailChanged, osku => osku.VenderFee, oskuCF?.VenderFee) - .SetIf(isDetailChanged, osku => osku.XianPinLeiDongQuan, oskuCF?.XianPinLeiDongQuan) - .SetIf(isDetailChanged, osku => osku.XianPinLeiJingQuan, oskuCF?.XianPinLeiJingQuan) - .SetIf(isDetailChanged, osku => osku.ZhiFuYingXiaoYouHui, oskuCF?.ZhiFuYingXiaoYouHui); - ; - updateOrderSkuDictionary.Add(skuUpdateKey, update); + var oskuCF = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == dbOsku.SkuId); + var isDetailChanged = dbOsku.ShouldPay == 0 && oskuCF != null && oskuCF.ShouldPay != 0; + if (dbOsku.ProductId != wareId || isDetailChanged) + { + var update = fsql.Update(dbOsku.Id) + .SetIf(dbOsku.ProductId != wareId, osku => osku.ProductId, wareId) + .SetIf(isDetailChanged, osku => osku.ShouldPay, oskuCF?.ShouldPay) + .SetIf(isDetailChanged, osku => osku.Balance, oskuCF?.Balance) + .SetIf(isDetailChanged, osku => osku.BaseDiscount, oskuCF?.BaseDiscount) + .SetIf(isDetailChanged, osku => osku.BaseFee, oskuCF?.BaseFee) + .SetIf(isDetailChanged, osku => osku.Coupon, oskuCF?.Coupon) + .SetIf(isDetailChanged, osku => osku.DongQuan, oskuCF?.DongQuan) + .SetIf(isDetailChanged, osku => osku.ExpiryGiftDiscount, oskuCF?.ExpiryGiftDiscount) + .SetIf(isDetailChanged, osku => osku.GlobalGeneralIncludeTax, oskuCF?.GlobalGeneralIncludeTax) + .SetIf(isDetailChanged, osku => osku.GlobalGeneralTax, oskuCF?.GlobalGeneralTax) + .SetIf(isDetailChanged, osku => osku.JdZhiFuYouHui, oskuCF?.JdZhiFuYouHui) + .SetIf(isDetailChanged, osku => osku.JingDou, oskuCF?.JingDou) + .SetIf(isDetailChanged, osku => osku.JingQuan, oskuCF?.JingQuan) + .SetIf(isDetailChanged, osku => osku.JingXiangLiJin, oskuCF?.JingXiangLiJin) + .SetIf(isDetailChanged, osku => osku.LiJinYouHui, oskuCF?.LiJinYouHui) + .SetIf(isDetailChanged, osku => osku.LuoDiPeiService, oskuCF?.LuoDiPeiService) + .SetIf(isDetailChanged, osku => osku.ManJian, oskuCF?.ManJian) + .SetIf(isDetailChanged, osku => osku.PingTaiChengDanYouHuiQuan, oskuCF?.PingTaiChengDanYouHuiQuan) + .SetIf(isDetailChanged, osku => osku.Plus95, oskuCF?.Plus95) + .SetIf(isDetailChanged, osku => osku.PromotionDiscount, oskuCF?.PromotionDiscount) + .SetIf(isDetailChanged, osku => osku.RemoteFee, oskuCF?.RemoteFee) + .SetIf(isDetailChanged, osku => osku.SuperRedEnvelope, oskuCF?.SuperRedEnvelope) + .SetIf(isDetailChanged, osku => osku.TaxFee, oskuCF?.TaxFee) + .SetIf(isDetailChanged, osku => osku.TuiHuanHuoWuYou, oskuCF?.TuiHuanHuoWuYou) + .SetIf(isDetailChanged, osku => osku.VenderFee, oskuCF?.VenderFee) + .SetIf(isDetailChanged, osku => osku.XianPinLeiDongQuan, oskuCF?.XianPinLeiDongQuan) + .SetIf(isDetailChanged, osku => osku.XianPinLeiJingQuan, oskuCF?.XianPinLeiJingQuan) + .SetIf(isDetailChanged, osku => osku.ZhiFuYingXiaoYouHui, oskuCF?.ZhiFuYingXiaoYouHui); + ; + updateOrderSkuDictionary.Add(skuUpdateKey, update); + } } } } - } - #endregion + #endregion - #region 收货人信息 - if (dbOrderConsigneeList.FirstOrDefault(oc => oc.OrderId == orderId) == null) - { - var orderConsignee = new OrderConsignee() + #region 收货人信息 + if (dbOrderConsigneeList.FirstOrDefault(oc => oc.OrderId == orderId) == null) { - OrderId = orderId, - City = orderJToken["consigneeInfo"].Value("city"), - Province = orderJToken["consigneeInfo"].Value("province"), - County = orderJToken["consigneeInfo"].Value("county"), - Town = orderJToken["consigneeInfo"].Value("town"), - IsDecode = false, - CreateTime = DateTime.Now - }; - insertOrderConsigneeList.Add(orderConsignee); - } - #endregion + var orderConsignee = new OrderConsignee() + { + OrderId = orderId, + City = orderJToken["consigneeInfo"].Value("city"), + Province = orderJToken["consigneeInfo"].Value("province"), + County = orderJToken["consigneeInfo"].Value("county"), + Town = orderJToken["consigneeInfo"].Value("town"), + IsDecode = false, + CreateTime = DateTime.Now + }; + insertOrderConsigneeList.Add(orderConsignee); + } + #endregion - #region 订单优惠 + #region 订单优惠 - var orderCouponJArray = (JArray)orderJToken["couponDetailList"]; - if (orderCouponJArray.HasValues) - { - foreach (var orderCouponJToken in orderCouponJArray) + var orderCouponJArray = (JArray)orderJToken["couponDetailList"]; + if (orderCouponJArray.HasValues) { - var couponType = orderCouponJToken.Value("couponType"); - if (string.IsNullOrEmpty(couponType)) - continue; - //dbOrder.PreferentialAmount += orderCouponJToken.Value("couponPrice"); - preferentialAmount += orderCouponJToken.Value("couponPrice"); - if (!dbOrderCouponList.Any(oc => oc.OrderId == orderId)) + foreach (var orderCouponJToken in orderCouponJArray) { - insertOrderCouponList.Add(new OrderCoupon() + var couponType = orderCouponJToken.Value("couponType"); + if (string.IsNullOrEmpty(couponType)) + continue; + //dbOrder.PreferentialAmount += orderCouponJToken.Value("couponPrice"); + preferentialAmount += orderCouponJToken.Value("couponPrice"); + if (!dbOrderCouponList.Any(oc => oc.OrderId == orderId)) { - Id = idGenerator.NewLong(), - SkuId = orderCouponJToken.Value("skuId"), - OrderId = orderId, - CreateTime = DateTime.Now, - CouponType = couponType, - CouponPrice = orderCouponJToken.Value("couponPrice") - }); + insertOrderCouponList.Add(new OrderCoupon() + { + Id = idGenerator.NewLong(), + SkuId = orderCouponJToken.Value("skuId"), + OrderId = orderId, + CreateTime = DateTime.Now, + CouponType = couponType, + CouponPrice = orderCouponJToken.Value("couponPrice") + }); + } } } - } - #endregion - - #region 订单状态转换 - var orderState = ConvertOrderState(orderJToken, dbOrder.StorageType); - #endregion - - #region 取消订单恢复库存 - if (orderState == Enums.OrderState.已取消 && - !isNewOrder && - dbOrder.OrderState != Enums.OrderState.已取消 && - dbOrder.StorageType != Enums.StorageType.SD && - dbOrder.StorageType != Enums.StorageType.代发) - { - var currentOrderCostDetailList = dbOrderCostDetailList.Where(ocd => ocd.OrderId == orderId); - if (currentOrderCostDetailList.Count() > 0) + #endregion + + #region 订单状态转换 + var orderState = ConvertOrderState(orderJToken, dbOrder.StorageType); + #endregion + + #region 取消订单恢复库存 + if (orderState == Enums.OrderState.已取消 && + !isNewOrder && + dbOrder.OrderState != Enums.OrderState.已取消 && + dbOrder.StorageType != Enums.StorageType.SD && + dbOrder.StorageType != Enums.StorageType.代发) { - foreach (var orderCostDetail in currentOrderCostDetailList) + var currentOrderCostDetailList = dbOrderCostDetailList.Where(ocd => ocd.OrderId == orderId); + if (currentOrderCostDetailList.Count() > 0) { - var updateSql = fsql.Update(orderCostDetail.PurchaseOrderPKId) - .Set(po => po.RemainingQuantity + orderCostDetail.DeductionQuantity); - updatePurchaseOrderList.Add(updateSql); + foreach (var orderCostDetail in currentOrderCostDetailList) + { + var updateSql = fsql.Update(orderCostDetail.PurchaseOrderPKId) + .Set(po => po.RemainingQuantity + orderCostDetail.DeductionQuantity); + updatePurchaseOrderList.Add(updateSql); + } } } - } - #endregion - - #region 扣减库存, 计算成本 - if (dbOrder.StorageType != null && - dbOrder.StorageType != Enums.StorageType.代发 && - orderState != null && - orderState != Enums.OrderState.待付款 && - orderState != Enums.OrderState.已取消) - { - var orderCost = dbOrderCostList.FirstOrDefault(oc => oc.OrderId == dbOrder.Id); - if (orderCost == null && orderSellerPrice > 0M) + #endregion + + #region 扣减库存, 计算成本 + if (dbOrder.StorageType != null && + dbOrder.StorageType != Enums.StorageType.代发 && + orderState != null && + orderState != Enums.OrderState.待付款 && + orderState != Enums.OrderState.已取消) { - if (isNewOrder && dbOrder.StorageType == Enums.StorageType.SD && sDCalculationCostRequest != null) + 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 = 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(dbOrder.Id).Any()) //再查询一次数据库,以防同步开始执行后被人为操作扣减库存,造成重复扣减库存 - { - var orderSkuJArray = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value("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 = 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(dbOrder.Id).Any()) //再查询一次数据库,以防同步开始执行后被人为操作扣减库存,造成重复扣减库存 { - var orderCostPurchaseAmount = 0M; - var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价 + var orderSkuJArray = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value("jdPrice") != 0M); + if (orderSkuJArray != null && orderSkuJArray.Count() > 0) + { + var orderCostPurchaseAmount = 0M; + var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价 - var avgPreferential = preferentialAmount / orderSkuJArray.Count(); + var avgPreferential = preferentialAmount / orderSkuJArray.Count(); - #region 扣减库存 - foreach (var orderSkuJToken in orderSkuJArray) - { - var orderSkuId = orderSkuJToken.Value("skuId"); - var itemTotal = orderSkuJToken.Value("itemTotal"); //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; - - //var itemPrice = orderSkuJToken.Value("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.Id).Set(po => po.RemainingQuantity - deductionQuantity); - updatePurchaseOrderList.Add(updateSql); - - var orderCostDetail = new OrderCostDetail() + var orderSkuId = orderSkuJToken.Value("skuId"); + var itemTotal = orderSkuJToken.Value("itemTotal"); //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; + + //var itemPrice = orderSkuJToken.Value("jdPrice"); //sku单价 + var isReduceMultiTimes = false; //是否多次扣减库存 + while (itemTotal != 0) { - Id = idGenerator.NewLong(), - OrderId = orderId, - ProductId = orderSkuJToken.Value("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; - orderCostDetail.SkuGrossProfit = (skuShouldPay ?? 0M) - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; - 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.Id).Set(po => po.RemainingQuantity - deductionQuantity); + updatePurchaseOrderList.Add(updateSql); + + var orderCostDetail = new OrderCostDetail() + { + Id = idGenerator.NewLong(), + OrderId = orderId, + ProductId = orderSkuJToken.Value("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; + orderCostDetail.SkuGrossProfit = (skuShouldPay ?? 0M) - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; + insertOrderCostDetailList.Add(orderCostDetail); + } } - } - #endregion + #endregion - #region 计算成本 - orderCost = new OrderCost() - { - OrderId = orderId, - PlatformCommissionRatio = platformCommissionRatio, - PreferentialAmount = preferentialAmount, - Profit = 0, - PurchaseAmount = orderCostPurchaseAmount, - DeliveryExpressFreight = orderDeliveryExpressFreight, - CreateTime = DateTime.Now - }; - if (dbOrder.OrderTotalPrice != 0) - orderCost.CalculationOrderProfitAndCost(dbOrder, null); - else - orderCost.CalculationOrderProfitAndCost(orderSellerPrice, freightPrice, null); - - insertOrderCostList.Add(orderCost); - #endregion + #region 计算成本 + orderCost = new OrderCost() + { + OrderId = orderId, + PlatformCommissionRatio = platformCommissionRatio, + PreferentialAmount = preferentialAmount, + Profit = 0, + PurchaseAmount = orderCostPurchaseAmount, + DeliveryExpressFreight = orderDeliveryExpressFreight, + CreateTime = DateTime.Now + }; + if (dbOrder.OrderTotalPrice != 0) + orderCost.CalculationOrderProfitAndCost(dbOrder, null); + else + orderCost.CalculationOrderProfitAndCost(orderSellerPrice, freightPrice, null); + + insertOrderCostList.Add(orderCost); + #endregion + } } } } - } - #endregion + #endregion - #region 检查订单信息是否变化 - if (isNewOrder) - { - dbOrder.OrderState = orderState; - dbOrder.PreferentialAmount = preferentialAmount; - } - else if ((orderState != null && orderState != dbOrder.OrderState) || - buyerRemark != dbOrder.BuyerRemark || - venderRemark != dbOrder.VenderRemark || - modifyTime != dbOrder.ModifyTime || - endTime != dbOrder.EndTime || - waybillNo != dbOrder.WaybillNo || - freightPrice != dbOrder.FreightPrice || - orderPayment != dbOrder.OrderPayment || - sellerPreferentialAmount != dbOrder.SellerPreferentialAmount || - orderSellerPrice != dbOrder.OrderSellerPrice || - (orderSellerPrice > 0M && dbOrder.IsGift) || - orderTotalPrice != dbOrder.OrderTotalPrice || - storeOrder != dbOrder.StoreOrder || - preferentialAmount != dbOrder.PreferentialAmount || - storeId != dbOrder.StoreId) - { - var updateSql = fsql.Update(orderId).SetIf(orderState != null && orderState != dbOrder.OrderState, o => o.OrderState, orderState) - .SetIf(buyerRemark != dbOrder.BuyerRemark, o => o.BuyerRemark, buyerRemark) - .SetIf(venderRemark != dbOrder.VenderRemark, o => o.VenderRemark, venderRemark) - .SetIf(modifyTime != dbOrder.ModifyTime, o => o.ModifyTime, modifyTime) - .SetIf(endTime != dbOrder.EndTime, o => o.EndTime, modifyTime) - .SetIf(waybillNo != dbOrder.WaybillNo, o => o.WaybillNo, waybillNo) - .SetIf(freightPrice != dbOrder.FreightPrice, o => o.FreightPrice, freightPrice) - .SetIf(orderPayment != dbOrder.OrderPayment, o => o.OrderPayment, orderPayment) - .SetIf(sellerPreferentialAmount != dbOrder.SellerPreferentialAmount, o => o.SellerPreferentialAmount, sellerPreferentialAmount) - .SetIf(orderSellerPrice != dbOrder.OrderSellerPrice, o => o.OrderSellerPrice, orderSellerPrice) - .SetIf(orderTotalPrice != dbOrder.OrderTotalPrice, o => o.OrderTotalPrice, orderTotalPrice) - .SetIf(orderSellerPrice > 0M && dbOrder.IsGift == true, o => o.IsGift, false) - .SetIf(storeOrder != dbOrder.StoreOrder, o => o.StoreOrder, storeOrder) - .SetIf(storeOrder != dbOrder.StoreOrder, o => o.StorageType, storageType) - .SetIf(preferentialAmount != dbOrder.PreferentialAmount, o => o.PreferentialAmount, preferentialAmount) - .SetIf(storeId != dbOrder.StoreId, o => o.StoreId, storeId); - updateOrderList.Add(updateSql); - } - #endregion + #region 检查订单信息是否变化 + if (isNewOrder) + { + dbOrder.OrderState = orderState; + dbOrder.PreferentialAmount = preferentialAmount; + } + else if ((orderState != null && orderState != dbOrder.OrderState) || + buyerRemark != dbOrder.BuyerRemark || + venderRemark != dbOrder.VenderRemark || + modifyTime != dbOrder.ModifyTime || + endTime != dbOrder.EndTime || + waybillNo != dbOrder.WaybillNo || + freightPrice != dbOrder.FreightPrice || + orderPayment != dbOrder.OrderPayment || + sellerPreferentialAmount != dbOrder.SellerPreferentialAmount || + orderSellerPrice != dbOrder.OrderSellerPrice || + (orderSellerPrice > 0M && dbOrder.IsGift) || + orderTotalPrice != dbOrder.OrderTotalPrice || + storeOrder != dbOrder.StoreOrder || + preferentialAmount != dbOrder.PreferentialAmount || + storeId != dbOrder.StoreId) + { + var updateSql = fsql.Update(orderId).SetIf(orderState != null && orderState != dbOrder.OrderState, o => o.OrderState, orderState) + .SetIf(buyerRemark != dbOrder.BuyerRemark, o => o.BuyerRemark, buyerRemark) + .SetIf(venderRemark != dbOrder.VenderRemark, o => o.VenderRemark, venderRemark) + .SetIf(modifyTime != dbOrder.ModifyTime, o => o.ModifyTime, modifyTime) + .SetIf(endTime != dbOrder.EndTime, o => o.EndTime, modifyTime) + .SetIf(waybillNo != dbOrder.WaybillNo, o => o.WaybillNo, waybillNo) + .SetIf(freightPrice != dbOrder.FreightPrice, o => o.FreightPrice, freightPrice) + .SetIf(orderPayment != dbOrder.OrderPayment, o => o.OrderPayment, orderPayment) + .SetIf(sellerPreferentialAmount != dbOrder.SellerPreferentialAmount, o => o.SellerPreferentialAmount, sellerPreferentialAmount) + .SetIf(orderSellerPrice != dbOrder.OrderSellerPrice, o => o.OrderSellerPrice, orderSellerPrice) + .SetIf(orderTotalPrice != dbOrder.OrderTotalPrice, o => o.OrderTotalPrice, orderTotalPrice) + .SetIf(orderSellerPrice > 0M && dbOrder.IsGift == true, o => o.IsGift, false) + .SetIf(storeOrder != dbOrder.StoreOrder, o => o.StoreOrder, storeOrder) + .SetIf(storeOrder != dbOrder.StoreOrder, o => o.StorageType, storageType) + .SetIf(preferentialAmount != dbOrder.PreferentialAmount, o => o.PreferentialAmount, preferentialAmount) + .SetIf(storeId != dbOrder.StoreId, o => o.StoreId, storeId); + updateOrderList.Add(updateSql); + } + #endregion - #region 删除SD埋点 - try + #region 删除SD埋点 + try + { + if (sDCalculationCostRequest != null) + memoryCache.Remove(orderId); + } + catch { } + #endregion + } + catch (Exception ex) { - if (sDCalculationCostRequest != null) - memoryCache.Remove(orderId); + nLogManager.Default().Error(ex, $"SyncOrder OrderLevel Error, OrderId:{orderId}, ShopId:{shopId}"); } - catch { } - #endregion } #region 补齐sku logo @@ -930,7 +941,7 @@ namespace BBWY.Server.Business fsql.Insert(insertOrderSkuList).ExecuteAffrows(); if (insertOrderConsigneeList.Count() > 0) fsql.Insert(insertOrderConsigneeList).ExecuteAffrows(); - if (insertOrderCostList.Count() > 0) + if (insertOrderCostList.Count() > 0) fsql.Insert(insertOrderCostList).ExecuteAffrows(); if (insertOrderCostDetailList.Count() > 0) fsql.Insert(insertOrderCostDetailList).ExecuteAffrows();