From 85f762c8efc264e5629642b78919c8d25599e277 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sat, 12 Aug 2023 16:30:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E8=81=94=E9=A2=84=E8=A7=88=EF=BC=8C?= =?UTF-8?q?=E5=85=B3=E8=81=94=E9=87=87=E8=B4=AD=E6=94=AF=E6=8C=81=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E5=A4=9A=E9=87=87=E8=B4=AD=E5=95=86=E7=9A=84=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRepairController.cs | 9 - .../Controllers/PurchaseSchemeController.cs | 38 ++-- .../DataRepair/DataRepairBusiness.cs | 67 ------ .../PurchaseOrder/PurchaseOrderBusiness.cs | 198 +++++++++--------- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 22 +- 5 files changed, 131 insertions(+), 203 deletions(-) diff --git a/BBWYB.Server.API/Controllers/DataRepairController.cs b/BBWYB.Server.API/Controllers/DataRepairController.cs index c741111..9c2bdbe 100644 --- a/BBWYB.Server.API/Controllers/DataRepairController.cs +++ b/BBWYB.Server.API/Controllers/DataRepairController.cs @@ -25,15 +25,6 @@ namespace BBWYB.Server.API.Controllers dataRepairBusiness.SubscribeKD100(waybillNo, targetCompanyCode); } - /// - /// 修复采购商信息 - /// - [HttpPost] - public void SupplementPurchaserInfo() - { - dataRepairBusiness.SupplementPurchaserInfo(); - } - /// /// 修复订单Sku成本 /// diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 673114c..1244ca6 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -38,15 +38,15 @@ namespace BBWYB.Server.API.Controllers return purchaseSchemeBusiness.GetPurchaseSchemeList(querySchemeRequest); } - /// - /// 删除采购商 - /// - /// - [HttpDelete] - public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) - { - purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest); - } + ///// + ///// 删除采购商 + ///// + ///// + //[HttpDelete] + //public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) + //{ + // purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest); + //} /// /// 删除采购方案 @@ -58,16 +58,16 @@ namespace BBWYB.Server.API.Controllers purchaseSchemeBusiness.DeletePurchaseScheme(schemeId); } - /// - /// 查询共有采购商 - /// - /// - /// - [HttpPost] - public IList GetSharePurchaser([FromBody] QuerySchemeRequest querySchemeRequest) - { - return purchaseSchemeBusiness.GetSharePurchaser(querySchemeRequest); - } + ///// + ///// 查询共有采购商 + ///// + ///// + ///// + //[HttpPost] + //public IList GetSharePurchaser([FromBody] QuerySchemeRequest querySchemeRequest) + //{ + // return purchaseSchemeBusiness.GetSharePurchaser(querySchemeRequest); + //} /// /// 查询采购方案中采购Sku的基本信息 diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index f70c444..dcf2821 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -38,73 +38,6 @@ namespace BBWYB.Server.Business purchaseOrderBusiness.OnSomeOnePurchaseOrderChanged(pid, false); } - public void SupplementPurchaserInfo() - { - var purlList = fsql.Select() - .InnerJoin((psp, ps, p) => psp.SkuPurchaseSchemeId == ps.Id) - .InnerJoin((psp, ps, p) => ps.PurchaserId == p.Id) - .Where((psp, ps, p) => ps.PurchasePlatform == Enums.Platform.阿里巴巴 && string.IsNullOrEmpty(p.Id2)) - .ToList((psp, ps, p) => new - { - //psp.PurchaseUrl, - psp.PurchaseProductId, - p.Id - }); - var groups = purlList.GroupBy(p => p.Id); - Console.WriteLine(groups.Count()); - IList> updatePurchaserList = new List>(); - int i = 1; - foreach (var group in groups) - { - var purchaseId = group.Key; - var productId = group.Max(p => p.PurchaseProductId); - Thread.Sleep(1000); - Console.WriteLine(); - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine($"index {i}"); - Console.ResetColor(); - Console.WriteLine(); - var response = purchaseSchemeBusiness.GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest() - { - FirstApiMode = Enums.PurchaseProductAPIMode.Spider, - Platform = Enums.Platform.阿里巴巴, - PriceMode = Enums.PurchaseOrderMode.批发, - PurchaseProductId = productId - }); - if (!string.IsNullOrEmpty(response?.Purchaser?.Id2)) - { - if (response.Purchaser.Id2.Length > 20) - Console.WriteLine(response.Purchaser.Id2); - var update = fsql.Update(purchaseId).Set(p => p.Id2, response.Purchaser.Id2); - updatePurchaserList.Add(update); - } - i++; - - if (updatePurchaserList.Count >= 10) - { - fsql.Transaction(() => - { - foreach (var update in updatePurchaserList) - update.ExecuteAffrows(); - }); - updatePurchaserList.Clear(); - Console.WriteLine(); - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("更新数据库更新"); - Console.ResetColor(); - Console.WriteLine(); - } - } - - if (updatePurchaserList.Count() > 0) - { - fsql.Transaction(() => - { - foreach (var update in updatePurchaserList) - update.ExecuteAffrows(); - }); - } - } public void SupplementOrderSkuCost() { diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index a4eed99..a83adf7 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -749,12 +749,13 @@ namespace BBWYB.Server.Business { if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴) { - #region 补齐采购SKU + #region 补齐采购SKU和采购关系 var purchaseAccount = dbPurchaseAccountList.FirstOrDefault(pa => pa.Id == purchaseOrder.PurchaseAccountId || pa.AccountName == purchaseOrder.PurchaseAccountName); if (purchaseAccount == null) throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId}缺少有效的采购账号"); + #region 查询1688采购单 var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)purchaseOrder.PurchasePlatform); var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() { @@ -763,6 +764,7 @@ namespace BBWYB.Server.Business AppToken = purchaseAccount.AppToken, OrderId = purchaseOrder.PurchaseOrderId }); + #endregion #region 处理采购商Id var purchaserId = purchaseOrderSimpleInfo.PurchaserId; @@ -782,58 +784,29 @@ namespace BBWYB.Server.Business #region 匹配采购方案 var skuIds = purchaseOrder.AssocationOrderCostDetailList.Select(ocd => ocd.SkuId).ToList(); - var purchaseSchemeSkuList = fsql.Select() - .InnerJoin((p, ps, pss) => p.Id == ps.PurchaserId) - .InnerJoin((p, ps, pss) => ps.Id == pss.SkuPurchaseSchemeId) - .Where((p, ps, pss) => p.Id == purchaserId) - .Where((p, ps, pss) => ps.PurchasePlatform == Enums.Platform.阿里巴巴) - .Where((p, ps, pss) => skuIds.Contains(pss.SkuId)) - .ToList((p, ps, pss) => new - { - pss.Id, - pss.SkuId, - pss.ProductId, - pss.PurchaseProductId, - pss.PurchaseSkuId, - pss.PurchaseSkuSpecId, - pss.SkuPurchaseSchemeId - }); - if (purchaseSchemeSkuList.Count() == 0) - throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案"); - #endregion - - - foreach (var purchaseOrderSku in purchaseOrderSimpleInfo.ItemList) + var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() { - 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); - } + ShopId = dbOrder.ShopId, + SkuIdList = skuIds + }); + if (purchaseSchemeList.Count() == 0) + throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案"); #endregion #region 补齐采购关系 foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) { - var currentPurchaseSchemeSkuList = purchaseSchemeSkuList.Where(x => x.SkuId == assOrderCostDetail.SkuId).ToList(); - if (currentPurchaseSchemeSkuList == null || currentPurchaseSchemeSkuList.Count() == 0) + var matchResultList = MatchPurchaseScheme(assOrderCostDetail.SkuId, + assOrderCostDetail.PurchaseQuantity, + purchaserId, + purchaseSchemeList, + purchaseOrderSimpleInfo); + if (matchResultList.Count() == 0) throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id {purchaserId} Sku{assOrderCostDetail.SkuId}缺少采购方案"); - var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); - foreach (var currentPurchaseSchemeSku in currentPurchaseSchemeSkuList) + foreach (var cargoParam in matchResultList) { - 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 dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); var orderPurchaseRelationInfo = new OrderPurchaseRelationInfo() { Id = idGenerator.NewLong(), @@ -841,16 +814,37 @@ namespace BBWYB.Server.Business CreateTime = DateTime.Now, OrderId = assOrderCostDetail.OrderId, PurchaseOrderId = purchaseOrder.PurchaseOrderId, - PurchaseSkuId = currentPurchaseSchemeSku.PurchaseSkuId, - PurchaseProductId = currentPurchaseSchemeSku.PurchaseProductId, - PurchaseSpecId = currentPurchaseSchemeSku.PurchaseSkuSpecId, - SchemeId = currentPurchaseSchemeSku.SkuPurchaseSchemeId, + PurchaseSkuId = cargoParam.SkuId, + PurchaseProductId = cargoParam.ProductId, + PurchaseSpecId = cargoParam.SpecId, + SchemeId = cargoParam.SchemeId, Quantity = assOrderCostDetail.PurchaseQuantity, SourceSkuId = dbOrderSku.BelongSkuId }; insertOrderPurchaseRelationInfoList.Add(orderPurchaseRelationInfo); + } } + + #region 补齐采购SKU + 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 + + #endregion + #endregion } @@ -1151,27 +1145,6 @@ namespace BBWYB.Server.Business #region 查询订单sku所有采购方案 var skuIds = dbOrderSkuList.Select(osku => osku.SkuId).ToList(); - - - //var purchaseSchemeSkuList = fsql.Select() - // .InnerJoin((p, ps, pss) => p.Id == ps.PurchaserId) - // .InnerJoin((p, ps, pss) => ps.Id == pss.SkuPurchaseSchemeId) - // .Where((p, ps, pss) => p.Id == purchaserId) - // .Where((p, ps, pss) => ps.PurchasePlatform == Enums.Platform.阿里巴巴) - // .Where((p, ps, pss) => skuIds.Contains(pss.SkuId)) - // .ToList((p, ps, pss) => new - // { - // pss.Id, - // pss.SkuId, - // pss.ProductId, - // pss.PurchaseProductId, - // pss.PurchaseSkuId, - // pss.PurchaseSkuSpecId, - // pss.SkuPurchaseSchemeId - // }); - //if (purchaseSchemeSkuList.Count() == 0) - // throw new BusinessException($"采购单{request.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案"); - var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest() { ShopId = order.ShopId, @@ -1183,41 +1156,17 @@ namespace BBWYB.Server.Business #region 匹配采购单所使用到的采购方案 var cargoParamList = new List(); - foreach (var scheme in purchaseSchemeList) + foreach (var orderSku in dbOrderSkuList) { - var samePurchaserProductList = scheme.PurchaseSchemeProductList.Where(psp => psp.PurchaserId == purchaserId).ToList(); - if (samePurchaserProductList.Count() == 0) - continue; - foreach (var schemeProduct in samePurchaserProductList) - { - - } + var matchResultList = MatchPurchaseScheme(orderSku.SkuId, orderSku.ItemTotal ?? 1, purchaserId, purchaseSchemeList, purchaseOrderSimpleInfo); + if (matchResultList.Count() > 0) + cargoParamList.AddRange(matchResultList); } if (cargoParamList.Count() == 0) throw new BusinessException("未匹配到采购方案"); - var assocationOrderCostDetailList = new List(); - - //var purchaseSchemeGroups = purchaseSchemeSkuList.GroupBy(s => s.SkuPurchaseSchemeId); - - //foreach (var schemeGroup in purchaseSchemeGroups) - //{ - // var schemePurchaseSkuList = schemeGroup.ToList(); - // if (schemePurchaseSkuList.Any(psku => purchaseOrderSimpleInfo.ItemList.Count(x => x.SkuId == psku.PurchaseSkuId) == 0)) - // continue; - // cargoParamList.AddRange(schemePurchaseSkuList.Select(x => new CargoParamRequest() - // { - // BelongSkuId = x.SkuId, - // ProductId = x.PurchaseProductId, - // SkuId = x.PurchaseSkuId, - // Quantity = dbOrderSkuList.FirstOrDefault(s => s.SkuId == x.SkuId)?.ItemTotal ?? 1, - // SchemeId = x.SkuPurchaseSchemeId, - // SpecId = x.PurchaseSkuSpecId - // })); - //} - var belongSkuGroups = cargoParamList.GroupBy(p => p.BelongSkuId); var purchaseSkuTotalQuantity = cargoParamList.Sum(x => x.Quantity); foreach (var belongSkuGroup in belongSkuGroups) @@ -3011,5 +2960,60 @@ namespace BBWYB.Server.Business } } + /// + /// 匹配采购方案 + /// + /// + /// + /// + /// + /// + /// + private IList MatchPurchaseScheme(string skuId, + int itemTotal, + string purchaserId, + IList purchaseSchemeList, + PP_QueryOrderDetailResponse purchaseOrderSimpleInfo) + { + List cargoParamList = new List(); + var currentSkuSchemeList = purchaseSchemeList.Where(ps => ps.SkuId == skuId).ToList(); + if (currentSkuSchemeList.Count() > 0) + { + foreach (var scheme in currentSkuSchemeList) + { + var samePurchaserProductList = scheme.PurchaseSchemeProductList.Where(psp => psp.PurchaserId == purchaserId).ToList(); + if (samePurchaserProductList.Count() == 0) + continue; + + bool isMatch = true; + foreach (var schemeProduct in samePurchaserProductList) + { + if (schemeProduct.PurchaseSchemeProductSkuList.Any(pss => purchaseOrderSimpleInfo.ItemList.Count(x => x.SkuId == pss.PurchaseSkuId) == 0)) + { + isMatch = false; + break; + } + } + + if (isMatch) + { + foreach (var schemeProduct in samePurchaserProductList) + { + cargoParamList.AddRange(schemeProduct.PurchaseSchemeProductSkuList.Select(pss => new CargoParamRequest() + { + BelongSkuId = pss.SkuId, + ProductId = pss.PurchaseProductId, + SkuId = pss.PurchaseSkuId, + SchemeId = pss.SkuPurchaseSchemeId, + SpecId = pss.PurchaseSkuSpecId, + Quantity = (itemTotal * pss.PurchaseRatio) ?? 1 + })); + } + break; + } + } + } + return cargoParamList; + } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index c0a5923..7a59a5b 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -316,18 +316,18 @@ namespace BBWYB.Server.Business // return fsql.Select().Where(p => sharePurchaserIdList.Contains(p.Id)).ToList(); //} - public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) - { - var purchaseSchemeIdList = fsql.Select().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId && - ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id); + //public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) + //{ + // var purchaseSchemeIdList = fsql.Select().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId && + // ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id); - fsql.Transaction(() => - { - fsql.Delete(purchaseSchemeIdList).ExecuteAffrows(); - fsql.Delete().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows(); - fsql.Delete().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows(); - }); - } + // fsql.Transaction(() => + // { + // fsql.Delete(purchaseSchemeIdList).ExecuteAffrows(); + // fsql.Delete().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows(); + // fsql.Delete().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows(); + // }); + //} public void DeletePurchaseScheme(long schemeId) {