From 33584967eae239bbe25c5a5aab861bf80a797082 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 11 Apr 2022 05:43:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9Asku=E4=B8=8B?= =?UTF-8?q?=E5=8D=95=20=E6=9C=AA=E5=AE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PurchaseOrderController.cs | 11 +- .../PurchaseOrder/PurchaseOrderBusiness.cs | 156 ++++++++++++++++-- .../Db/PurchaseOrder/PurchaseOrderDetail.cs | 21 +++ .../OnlinePurchase/CargoParamRequest.cs | 11 ++ 4 files changed, 179 insertions(+), 20 deletions(-) create mode 100644 BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrderDetail.cs diff --git a/BBWY.Server.API/Controllers/PurchaseOrderController.cs b/BBWY.Server.API/Controllers/PurchaseOrderController.cs index 1c341d5d..23de536e 100644 --- a/BBWY.Server.API/Controllers/PurchaseOrderController.cs +++ b/BBWY.Server.API/Controllers/PurchaseOrderController.cs @@ -54,7 +54,7 @@ namespace BBWY.Server.API.Controllers } /// - /// 创建在线采购单 + /// 创建在线采购单,即将废弃 /// /// [HttpPost] @@ -64,14 +64,13 @@ namespace BBWY.Server.API.Controllers } /// - /// 1688发货回调(即将废弃) + /// 创建在线采购单 /// - /// - /// + /// [HttpPost] - public void DeliveryCallbackFrom1688([FromForm] string message,[FromForm] string _aop_signature) + public void NewFastCreateOrder([FromBody] CreateOnlinePurchaseOrderRequest createOnlinePurchaseOrderRequest) { - purchaseOrderBusiness.DeliveryCallbackFrom1688(message); + purchaseOrderBusiness.NewFastCreateOrder(createOnlinePurchaseOrderRequest); } /// diff --git a/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 0dcaffc2..9f7d5ddf 100644 --- a/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -130,7 +130,7 @@ namespace BBWY.Server.Business CreateTime = DateTime.Now, ProductId = orderSku.ProductId, SkuId = orderSku.SkuId, - PurchaseMethod = Model.Enums.PurchaseMethod.线上采购, + PurchaseMethod = Enums.PurchaseMethod.线上采购, PurchaseOrderId = createOrderResponse.PurchaseOrderId, PurchasePlatform = createOnlinePurchaseOrderRequest.Platform, PurchaseQuantity = orderSku.ItemTotal.Value, @@ -143,7 +143,7 @@ namespace BBWY.Server.Business SingleOperationAmount = 0, SingleSkuAmount = createOrderResponse.ProductAmount / orderSku.ItemTotal.Value, SingleFreight = createOrderResponse.FreightAmount / orderSku.ItemTotal.Value, - StorageType = Model.Enums.StorageType.代发 + StorageType = Enums.StorageType.代发 }; insertPurchaseOrder = fsql.Insert(purchaseOrder); #endregion @@ -220,6 +220,146 @@ namespace BBWY.Server.Business }); } + public void NewFastCreateOrder(CreateOnlinePurchaseOrderRequest createOnlinePurchaseOrderRequest) + { + if (createOnlinePurchaseOrderRequest.Platform != Enums.Platform.阿里巴巴) + throw new NotImplementedException(); + var dbOrder = fsql.Select(createOnlinePurchaseOrderRequest.OrderId).ToOne(); + if (dbOrder == null) + throw new BusinessException("订单不存在"); + if (dbOrder.OrderState != Model.Enums.OrderState.等待采购) + throw new BusinessException("只能为等待采购的订单进行采购"); + + var orderSkus = fsql.Select().Where(osku => osku.OrderId == createOnlinePurchaseOrderRequest.OrderId).ToList(); + + var createOrderResponse = platformSDKBusinessList.FirstOrDefault(p => p.Platform == createOnlinePurchaseOrderRequest.Platform) + .FastCreateOrder(createOnlinePurchaseOrderRequest); + + + var purchaseOrderSimpleInfo = platformSDKBusinessList.FirstOrDefault(p => p.Platform == createOnlinePurchaseOrderRequest.Platform).GetOrderSimpleInfo(new GetOrderInfoRequest() + { + AppKey = createOnlinePurchaseOrderRequest.AppKey, + AppSecret = createOnlinePurchaseOrderRequest.AppSecret, + AppToken = createOnlinePurchaseOrderRequest.AppToken, + OrderId = createOrderResponse.PurchaseOrderId, + Platform = createOnlinePurchaseOrderRequest.Platform + }); + + List insertPurchaseOrders = new List(); + List insertOrderCostDetails = new List(); + List insertPurchaseOrderDetails = new List(); + + IInsert insertOrderCost = null; + IInsert insertOrderDropShipping = null; + foreach (var orderSku in orderSkus) + { + #region 计算当前sku的采购成本和采购运费 + var currentOrderSkuProductAmount = 0M; //采购成本 + var currentOrderSkuCargoParamList = createOnlinePurchaseOrderRequest.CargoParamList.Where(p => p.BelongSkuId == orderSku.SkuId); //找当前skuId的采购skuId + currentOrderSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => currentOrderSkuCargoParamList.Any(p1 => p1.SkuId == p.SkuId)) + ?.Sum(p => p.ProductAmount) ?? 0M; + + var currentOrderSkuFreightAmount = purchaseOrderSimpleInfo.FreightAmount / orderSkus.Count(); //采购运费(按sku数均分) + #endregion + + #region 采购单 + var purchaseOrder = new PurchaseOrder() + { + Id = idGenerator.NewLong(), + CreateTime = DateTime.Now, + ProductId = orderSku.ProductId, + SkuId = orderSku.SkuId, + PurchaseMethod = Enums.PurchaseMethod.线上采购, + PurchaseOrderId = createOrderResponse.PurchaseOrderId, + PurchasePlatform = createOnlinePurchaseOrderRequest.Platform, + PurchaseQuantity = orderSku.ItemTotal.Value, + RemainingQuantity = 0, + ShopId = createOnlinePurchaseOrderRequest.ShopId, + SingleConsumableAmount = 0, + SingleDeliveryFreight = 0, + SingleFirstFreight = 0, + SingleStorageAmount = 0, + SingleOperationAmount = 0, + SingleSkuAmount = currentOrderSkuProductAmount / orderSku.ItemTotal.Value, + SingleFreight = currentOrderSkuFreightAmount / orderSku.ItemTotal.Value, + StorageType = Enums.StorageType.代发 + }; + insertPurchaseOrders.Add(purchaseOrder); + #endregion + + #region 成本明细 + var orderCostDetail = new OrderCostDetail() + { + Id = idGenerator.NewLong(), + ConsumableAmount = 0, + CreateTime = DateTime.Now, + DeductionQuantity = orderSku.ItemTotal.Value, + DeliveryExpressFreight = 0, + FirstFreight = 0, + OperationAmount = 0, + OrderId = createOnlinePurchaseOrderRequest.OrderId, + ProductId = orderSku.ProductId, + PurchaseFreight = currentOrderSkuFreightAmount, + PurchaseOrderPKId = purchaseOrder.Id, + SkuAmount = currentOrderSkuProductAmount, + SkuId = orderSku.SkuId, + StorageAmount = 0, + UnitCost = purchaseOrder.UnitCost, + TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount//purchaseOrder.UnitCost * orderSku.ItemTotal.Value + }; + insertOrderCostDetail = fsql.Insert(orderCostDetail); + #endregion + } + + #region 订单成本 + var orderCost = new OrderCost() + { + OrderId = createOnlinePurchaseOrderRequest.OrderId, + CreateTime = DateTime.Now, + DeliveryExpressFreight = 0, + IsManualEdited = false, + PlatformCommissionRatio = 0.05M, + PreferentialAmount = dbOrder.PreferentialAmount, + SDCommissionAmount = 0, + PurchaseAmount = createOrderResponse.TotalAmount + }; + orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * orderCost.PlatformCommissionRatio; + orderCost.Profit = dbOrder.OrderSellerPrice + + dbOrder.FreightPrice - + orderCost.PurchaseAmount - + orderCost.DeliveryExpressFreight - + orderCost.PlatformCommissionAmount; + insertOrderCost = fsql.Insert(orderCost); + #endregion + + #region 采购信息 + var orderDropShipping = new OrderDropShipping() + { + OrderId = createOnlinePurchaseOrderRequest.OrderId, + PurchaseAccountId = createOnlinePurchaseOrderRequest.PurchaseAccountId, + BuyerAccount = createOnlinePurchaseOrderRequest.BuyerAccount, + SellerAccount = createOnlinePurchaseOrderRequest.SellerAccount, + CreateTime = DateTime.Now, + DeliveryFreight = 0, + PurchaseAmount = createOrderResponse.TotalAmount, + PurchaseOrderId = createOrderResponse.PurchaseOrderId, + PurchasePlatform = createOnlinePurchaseOrderRequest.Platform + }; + insertOrderDropShipping = fsql.Insert(orderDropShipping); + #endregion + + fsql.Transaction(() => + { + insertPurchaseOrder.ExecuteAffrows(); + insertOrderCostDetail.ExecuteAffrows(); + insertOrderCost.ExecuteAffrows(); + insertOrderDropShipping.ExecuteAffrows(); + fsql.Update(createOnlinePurchaseOrderRequest.OrderId).SetIf(dbOrder.OrderState == Enums.OrderState.等待采购, o => o.OrderState, Model.Enums.OrderState.待出库) + .Set(o => o.StorageType, Model.Enums.StorageType.代发) + .ExecuteAffrows(); + }); + } + #region CallBack #region 1688CallBack @@ -242,18 +382,6 @@ namespace BBWY.Server.Business } } - /// - /// 1688发货回调(即将废弃) - /// - /// - public void DeliveryCallbackFrom1688(string jsonStr) - { - logger.Info(jsonStr); - var orderJObject = JObject.Parse(jsonStr); - var purchaseOrderId = orderJObject["data"].Value("orderId"); - Task.Factory.StartNew(() => DeliveryCallback(purchaseOrderId, Enums.Platform.阿里巴巴), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); - } - /// /// 1688发货回调 /// diff --git a/BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrderDetail.cs b/BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrderDetail.cs new file mode 100644 index 00000000..777ff209 --- /dev/null +++ b/BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrderDetail.cs @@ -0,0 +1,21 @@ +using FreeSql.DataAnnotations; + +namespace BBWY.Server.Model.Db +{ + + [Table(Name = "purchaseorderdetail", DisableSyncStructure = true)] + public partial class PurchaseOrderDetail { + + [Column(IsPrimary = true)] + public long Id { get; set; } + + [Column(StringLength = 50)] + public string OrderId { get; set; } + + public long? PurchaseOrderPKId { get; set; } + + [Column(StringLength = 50)] + public string PurchaseSkuId { get; set; } + } + +} diff --git a/BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/CargoParamRequest.cs b/BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/CargoParamRequest.cs index 6f6f13df..1327199a 100644 --- a/BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/CargoParamRequest.cs +++ b/BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/CargoParamRequest.cs @@ -6,9 +6,20 @@ namespace BBWY.Server.Model.Dto { public class CargoParamRequest { + /// + /// 采购商品Id + /// public string ProductId { get; set; } + /// + /// 采购SkuId + /// public string SkuId { get; set; } public string SpecId { get; set; } public int Quantity { get; set; } + + /// + /// 订单SkuId + /// + public string BelongSkuId { get; set; } } }