diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index 6705983..a641609 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -496,7 +496,7 @@ namespace BBWYB.Server.Business IList purchaseAccountIdList = request.AssociationPurchaseOrderList.Select(x => string.IsNullOrEmpty(x.PurchaseAccountId) ? x.PurchaseAccountName : x.PurchaseAccountId).Distinct().ToList(); - IList purchaseSchemeList = null; + IList purchaseSchemeSkuList = null; IList dbPurchaseAccountList = null; foreach (var purchaseOrder in request.AssociationPurchaseOrderList) { @@ -508,11 +508,7 @@ namespace BBWYB.Server.Business } if (schemeIdList.Count() > 0) { - purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() - { - ShopId = request.ShopId, - SchemeIdList = schemeIdList - }); + purchaseSchemeSkuList = fsql.Select().Where(pss => schemeIdList.Contains(pss.SkuPurchaseSchemeId)).ToList(); } if (purchaseAccountIdList.Count() > 0) { @@ -554,7 +550,7 @@ namespace BBWYB.Server.Business throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId}缺少采购方案"); #endregion - #region 验证采购方案和订单详情是否完整 + #region 补齐采购SKU var purchaseAccount = dbPurchaseAccountList.FirstOrDefault(pa => pa.Id == purchaseOrder.PurchaseAccountId || pa.AccountName == purchaseOrder.PurchaseAccountName); if (purchaseAccount == null) @@ -569,31 +565,61 @@ namespace BBWYB.Server.Business OrderId = purchaseOrder.PurchaseOrderId }); + foreach (var purchaseOrderSku in purchaseOrderSimpleInfo.ItemList) + { + var orderPurchaseSkuInfo = new OrderPurchaseSkuInfo() + { + Id = purchaseOrderSku.OrderSkuId, + CreateTime = DateTime.Now, + OrderId = request.OrderId, + PurchaseOrderId = purchaseOrder.PurchaseOrderId, + PurchaseProductId = purchaseOrderSku.ProductId, + PurchaseSkuId = purchaseOrderSku.SkuId, + ShopId = request.ShopId + }; + insertOrderPurchaseSkuInfoList.Add(orderPurchaseSkuInfo); + } + #endregion + + #region 补齐采购关系 + foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) + { + var currentPurchaseSchemeSkuList = purchaseSchemeSkuList.Where(x => x.SkuId == assOrderCostDetail.SkuId).ToList(); + if (currentPurchaseSchemeSkuList == null || currentPurchaseSchemeSkuList.Count() == 0) + throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} Sku{assOrderCostDetail.SkuId}缺少采购方案"); + var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); + foreach (var currentPurchaseSchemeSku in currentPurchaseSchemeSkuList) + { + var purchaseSkuFromApi = purchaseOrderSimpleInfo.ItemList.FirstOrDefault(x => x.SkuId == currentPurchaseSchemeSku.PurchaseSkuId); + if (purchaseSkuFromApi == null) + { + throw new BusinessException($"Sku{assOrderCostDetail.SkuId}使用了采购方案{currentPurchaseSchemeSku.SkuPurchaseSchemeId}下的采购Sku{currentPurchaseSchemeSku.PurchaseSkuId},而且在采购单{purchaseOrder.PurchaseOrderId}的商品明细中没有找到该采购sku"); + } + var orderPurchaseRelationInfo = new OrderPurchaseRelationInfo() + { + Id = idGenerator.NewLong(), + BelongSkuId = assOrderCostDetail.SkuId, + CreateTime = DateTime.Now, + OrderId = assOrderCostDetail.OrderId, + PurchaseOrderId = purchaseOrder.PurchaseOrderId, + PurchaseSkuId = currentPurchaseSchemeSku.PurchaseSkuId, + PurchaseProductId = currentPurchaseSchemeSku.PurchaseProductId, + PurchaseSpecId = currentPurchaseSchemeSku.PurchaseSkuSpecId, + SchemeId = currentPurchaseSchemeSku.SkuPurchaseSchemeId, + Quantity = assOrderCostDetail.PurchaseQuantity, + SourceSkuId = dbOrderSku.BelongSkuId + }; + insertOrderPurchaseRelationInfoList.Add(orderPurchaseRelationInfo); + } + } #endregion } - dbPurchaserOrder = new OrderPurchaseInfo() - { - Id = idGenerator.NewLong(), - OrderId = request.OrderId, - PurchaseAccountId = purchaseOrder.PurchaseAccountId, - PurchaseAccountName = purchaseOrder.PurchaseAccountName, - IsEnabled = true, - BelongSkuIds = string.Join(",", purchaseOrder.AssocationOrderCostDetailList.Select(x => x.SkuId)), - CreateTime = DateTime.Now, - PurchaseMethod = Enums.PurchaseMethod.关联外部单, - PurchaseOrderId = purchaseOrder.PurchaseOrderId, - PurchasePlatform = purchaseOrder.PurchasePlatform, - PurchaserId = purchaseOrder.PurchaserId, - PurchaserName = purchaseOrder.PurchaserName, - ShopId = request.ShopId - }; - insertOrderPurchaseInfoList.Add(dbPurchaserOrder); - + #region 订单成本明细 foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) { - #region 订单成本 + var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); var purchaseFreight = purchaseOrder.PurchaseFreight * (1.0M * assOrderCostDetail.PurchaseQuantity / totalQuantity); var orderCostDetail = new OrderCostDetail() @@ -615,8 +641,28 @@ namespace BBWYB.Server.Business 0M, 0M); insertOrderCostDetailList.Add(orderCostDetail); - #endregion } + #endregion + + #region 采购单 + dbPurchaserOrder = new OrderPurchaseInfo() + { + Id = idGenerator.NewLong(), + OrderId = request.OrderId, + PurchaseAccountId = purchaseOrder.PurchaseAccountId, + PurchaseAccountName = purchaseOrder.PurchaseAccountName, + IsEnabled = true, + BelongSkuIds = string.Join(",", purchaseOrder.AssocationOrderCostDetailList.Select(x => x.SkuId)), + CreateTime = DateTime.Now, + PurchaseMethod = Enums.PurchaseMethod.关联外部单, + PurchaseOrderId = purchaseOrder.PurchaseOrderId, + PurchasePlatform = purchaseOrder.PurchasePlatform, + PurchaserId = purchaseOrder.PurchaserId, + PurchaserName = purchaseOrder.PurchaserName, + ShopId = request.ShopId + }; + insertOrderPurchaseInfoList.Add(dbPurchaserOrder); + #endregion } else {