diff --git a/BBWY.Server.API/Controllers/TestController.cs b/BBWY.Server.API/Controllers/TestController.cs index 6a5d2d0c..894d4245 100644 --- a/BBWY.Server.API/Controllers/TestController.cs +++ b/BBWY.Server.API/Controllers/TestController.cs @@ -22,12 +22,6 @@ namespace BBWY.Server.API.Controllers { testBusiness.StatisticsProduct(); - } - - [HttpPost] - public void XiuFu() - { - testBusiness.XiuFu(); - } + } } } diff --git a/BBWY.Server.Business/Order/OrderBusiness.cs b/BBWY.Server.Business/Order/OrderBusiness.cs index 114d44bf..edd66f35 100644 --- a/BBWY.Server.Business/Order/OrderBusiness.cs +++ b/BBWY.Server.Business/Order/OrderBusiness.cs @@ -593,7 +593,7 @@ namespace BBWY.Server.Business StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity }; //orderCostDetail.SkuGrossProfit = orderSku.Price.Value * deductionQuantity - avgPreferential - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * deductionQuantity * autoCalculationCostRequest.PlatformCommissionRatio; - orderCostDetail.SkuGrossProfit = (orderSku.ShouldPay ?? 0M) - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; + orderCostDetail.SkuGrossProfit = ((orderSku.ShouldPay ?? 0M) + (orderSku.Coupon ?? 0M)) * deductionQuantity - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; insertOrderCostDetailList.Add(orderCostDetail); } } @@ -662,7 +662,8 @@ namespace BBWY.Server.Business osku.SkuId, osku.Price, osku.ItemTotal, - osku.ShouldPay + osku.ShouldPay, + osku.Coupon }); var avgPreferential = dbOrder.PreferentialAmount / orderSkuList.Count(); @@ -687,7 +688,7 @@ namespace BBWY.Server.Business //orderCostDetail.SkuGrossProfit = osku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential - // (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - // osku.Price.Value * orderCostDetail.DeductionQuantity * manualCalculationCostRequest.PlatformCommissionRatio; - orderCostDetail.SkuGrossProfit = (osku.ShouldPay ?? 0M) - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; + orderCostDetail.SkuGrossProfit = ((osku.ShouldPay ?? 0M) + (osku.Coupon ?? 0M)) * orderCostDetail.DeductionQuantity - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; } } @@ -946,7 +947,7 @@ namespace BBWY.Server.Business //orderCostDetail.SkuGrossProfit = dbOrderSku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential - // (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - // dbOrderSku.Price.Value * orderCostDetail.DeductionQuantity * relationPurchaseOrderRequestV2.PlatformCommissionRatio; - orderCostDetail.SkuGrossProfit = (dbOrderSku.ShouldPay ?? 0M) - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; + orderCostDetail.SkuGrossProfit = ((dbOrderSku.ShouldPay ?? 0M) + dbOrderSku.Coupon ?? 0M) * orderCostDetail.DeductionQuantity - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; } #endregion } diff --git a/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 85734250..dd62b483 100644 --- a/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -265,7 +265,7 @@ namespace BBWY.Server.Business }; //orderCostDetail.SkuGrossProfit = orderSku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * orderCostDetail.DeductionQuantity * createOnlinePurchaseOrderRequest.PlatformCommissionRatio; - orderCostDetail.SkuGrossProfit = (orderSku.ShouldPay ?? 0M) - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; + orderCostDetail.SkuGrossProfit = ((orderSku.ShouldPay ?? 0M) + orderSku.Coupon ?? 0M) * orderCostDetail.DeductionQuantity - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; insertOrderCostDetails.Add(orderCostDetail); #endregion diff --git a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs index 08f79260..75132231 100644 --- a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs @@ -98,7 +98,7 @@ namespace BBWY.Server.Business } - private void SyncOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false, Enums.SortTimeType? sortTimeType = null) + public void SyncOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false, Enums.SortTimeType? sortTimeType = null) { try { @@ -576,7 +576,7 @@ namespace BBWY.Server.Business if (dbOsku != null) { var oskuCF = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == dbOsku.SkuId); - var isDetailChanged = dbOsku.ShouldPay == 0 && oskuCF != null && oskuCF.ShouldPay != 0; + var isDetailChanged = (dbOsku.ShouldPay == 0 || dbOsku.ShouldPay == null) && oskuCF != null && oskuCF.ShouldPay != 0; if (dbOsku.ProductId != wareId || isDetailChanged) { var update = fsql.Update(dbOsku.Id) @@ -730,12 +730,19 @@ namespace BBWY.Server.Business { 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; + decimal? coupon = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Coupon; + if (coupon == null) + coupon = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Coupon; + if (coupon == null) + coupon = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Coupon; + //var itemPrice = orderSkuJToken.Value("jdPrice"); //sku单价 var isReduceMultiTimes = false; //是否多次扣减库存 while (itemTotal != 0) @@ -794,7 +801,7 @@ namespace BBWY.Server.Business //orderCostDetail.SkuGrossProfit = itemPrice * deductionQuantity - avgPreferential - // (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - // itemPrice * deductionQuantity * platformCommissionRatio; - orderCostDetail.SkuGrossProfit = (skuShouldPay ?? 0M) - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; + orderCostDetail.SkuGrossProfit = ((skuShouldPay ?? 0M) + (coupon ?? 0M)) * deductionQuantity - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight; insertOrderCostDetailList.Add(orderCostDetail); } } diff --git a/BBWY.Server.Business/TestBusiness.cs b/BBWY.Server.Business/TestBusiness.cs index c4398cee..1dc98590 100644 --- a/BBWY.Server.Business/TestBusiness.cs +++ b/BBWY.Server.Business/TestBusiness.cs @@ -3,12 +3,14 @@ using BBWY.Common.Models; using BBWY.Server.Model; using BBWY.Server.Model.Db; using BBWY.Server.Model.Db.Mds; +using BBWY.Server.Model.Dto; using FreeSql; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading; namespace BBWY.Server.Business { @@ -17,14 +19,19 @@ namespace BBWY.Server.Business private FreeSqlMultiDBManager freeSqlMultiDBManager; private VenderBusiness venderBusiness; private IFreeSql fsql; + private OrderSyncBusiness orderSyncBusiness; public TestBusiness(RestApiService restApiService, IOptions options, FreeSqlMultiDBManager freeSqlMultiDBManager, - VenderBusiness venderBusiness, YunDingBusiness yunDingBusiness, IFreeSql fsql) : base(restApiService, options, yunDingBusiness) + VenderBusiness venderBusiness, + YunDingBusiness yunDingBusiness, + IFreeSql fsql, + OrderSyncBusiness orderSyncBusiness) : base(restApiService, options, yunDingBusiness) { this.freeSqlMultiDBManager = freeSqlMultiDBManager; this.venderBusiness = venderBusiness; this.fsql = fsql; + this.orderSyncBusiness = orderSyncBusiness; } public void SyncVenderId() @@ -129,6 +136,91 @@ namespace BBWY.Server.Business } Console.WriteLine("更新完毕"); } + + public void RepairSkuDetailAndSkuGriooProfit(RepairSkuDetailAndSkuGriooProfit request) + { + request.EndTime = request.EndTime.Date.AddDays(1).AddSeconds(-1); + var banedList = new List() + { + "森王汽车用品专营店", + "森王玩具专营店", + "广发玩具专营店", + "广发汽车用品专营店", + "言义汽车用品专营店", + "杰博玩具专营店", + "安吉玩具专营店", + "布莱特玩具专营店", + "畅阳汽车用品专营店", + "熊猴汽车用品专营店", + "布莱特汽车用品专营店", + "越驭玩具专营店", + "言义玩具专营店", + "瑞源汽车用品专营店", + "熊猴玩具专营店", + "奥德汽车用品专营店", + "创天户外专营店", + "桑妮玩具专营店", + "瑞源玩具专营店" + }; + var shopList = venderBusiness.GetShopList(request.ShopId, Enums.Platform.京东); + var shopIndex = 0; + + foreach (var shop in shopList) + { + shopIndex++; + Console.WriteLine($"shopProgress {shopIndex}/{shopList.Count()}"); + var shopId = long.Parse(shop.ShopId); + if (banedList.Contains(shop.ShopName)) + continue; + var orderIdList = fsql.Select() + .Where(o => o.ShopId == shopId && + o.OrderState != Enums.OrderState.已取消 && + o.StorageType != Enums.StorageType.SD && + o.StartTime >= request.StartTime && + o.StartTime <= request.EndTime && + !fsql.Select().Where(ot => ot.Id == o.Id).Any()) + .ToList(o => o.Id); + foreach (var orderId in orderIdList) + { + orderSyncBusiness.SyncOrder(shop, orderId); + Thread.Sleep(500); + } + + var orderList = fsql.Select(orderIdList).ToList(); + var orderSkuList = fsql.Select().Where(osku => osku.Price > 0 && orderIdList.Contains(osku.OrderId)).ToList(); + var orderCostDetailList = fsql.Select().Where(ocd => orderIdList.Contains(ocd.OrderId) && ocd.IsEnabled == true).ToList(); + + var orderIndex = 0; + foreach (var order in orderList) + { + orderIndex++; + Console.WriteLine($"shopProgress {shopIndex}/{shopList.Count()}, orderProgress {orderIndex}/{orderList.Count()}"); + + var currentOrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id).ToList(); + + if (currentOrderCostDetailList.Count() > 0) + { + List> updateOrderCostDetailList = new List>(); + var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList(); + foreach (var orderSku in currentOrderSkuList) + { + var ocd = currentOrderCostDetailList.FirstOrDefault(x => x.SkuId == orderSku.SkuId); + ocd.SkuGrossProfit = ((orderSku.ShouldPay ?? 0M) + (orderSku.Coupon ?? 0M)) * ocd.DeductionQuantity - ocd.TotalCost - ocd.DeliveryExpressFreight; + var update = fsql.Update(ocd.Id).Set(x => x.SkuGrossProfit, ocd.SkuGrossProfit); + updateOrderCostDetailList.Add(update); + } + if (updateOrderCostDetailList.Count() > 0) + { + fsql.Transaction(() => + { + foreach (var update in updateOrderCostDetailList) + update.ExecuteAffrows(); + }); + } + } + } + } + } } public class JPCount diff --git a/BBWY.Server.Model/Dto/Request/Test/RepairSkuDetailAndSkuGriooProfit.cs b/BBWY.Server.Model/Dto/Request/Test/RepairSkuDetailAndSkuGriooProfit.cs new file mode 100644 index 00000000..4f09dea5 --- /dev/null +++ b/BBWY.Server.Model/Dto/Request/Test/RepairSkuDetailAndSkuGriooProfit.cs @@ -0,0 +1,13 @@ +using System; + +namespace BBWY.Server.Model.Dto +{ + public class RepairSkuDetailAndSkuGriooProfit + { + public DateTime StartTime { get; set; } + + public DateTime EndTime { get; set; } + + public long? ShopId { get; set; } + } +}