From 0288470b0a2148f3abd17197f0be57650f9e0e29 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Sun, 27 Aug 2023 01:02:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A5=E5=88=86=E7=BB=84=E5=BD=A2=E5=BC=8F?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88=E5=88=97?= =?UTF-8?q?=E8=A1=A8,=20=E6=8C=89sku=E9=87=87=E8=B4=AD=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E5=90=8C=E4=BD=8D=E9=A1=BA=E5=BA=8F=E8=A1=A5=E9=BD=90=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E6=96=B9=E6=A1=88=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataRepair/DataRepairBusiness.cs | 46 +++++-- .../PurchaseScheme/PurchaseSchemeBusiness.cs | 124 ++++++++++++++++++ .../PurchaseScheme/BatchCURDSchemeRequest.cs | 2 + 3 files changed, 162 insertions(+), 10 deletions(-) diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index e744102..b86169e 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -141,17 +141,19 @@ namespace BBWYB.Server.Business public void SupplementPurchaseSchemeGroup() { List insertSchemeGroups = new List(); - IList> updatePurchaseSchemeList = new List>(); + Queue> updatePurchaseSchemeQueue = new Queue>(); - var purchaseSchemeList = fsql.Select().ToList().OrderByDescending(ps => ps.CreateTime); + var purchaseSchemeList = fsql.Select().OrderBy(ps => ps.Id).ToList(); var purchaseSchemeSpuGroups = purchaseSchemeList.GroupBy(ps => ps.ProductId); foreach (var purchaseSchemeSpuGroup in purchaseSchemeSpuGroups) { + Console.WriteLine($"正在处理spu {purchaseSchemeSpuGroup.Key}"); var purchaseSchemeSkuGroups = purchaseSchemeSpuGroup.GroupBy(ps => ps.SkuId); var maxPsGroupCount = purchaseSchemeSkuGroups.Max(g => g.Count()); //该spu最大的采购分组数 for (var i = 0; i < maxPsGroupCount; i++) { + Console.WriteLine($"正在处理第{i}组"); IList currentIndexSchemeList = new List(); //取每个sku的第i个方案 foreach (var purchaseSchemeSkuGroup in purchaseSchemeSkuGroups) @@ -165,14 +167,15 @@ namespace BBWYB.Server.Business } } var schemeGroupId = currentIndexSchemeList.FirstOrDefault(ps => ps.SchemeGroupId != null)?.SchemeGroupId; - if (schemeGroupId == null) + if (schemeGroupId == null || schemeGroupId == 0) { schemeGroupId = idGenerator.NewLong(); //同位中没有分组 var insertSchemeGroup = new PurchaseSchemeGroup() { Id = schemeGroupId.Value, - GroupName = schemeGroupId.Value.ToString(), + //GroupName = schemeGroupId.Value.ToString(), + GroupName = $"{purchaseSchemeSpuGroup.Key}_第{i + 1}组", CreateTime = DateTime.Now, ProductId = currentIndexSchemeList.First().ProductId, ShopId = currentIndexSchemeList.First().ShopId @@ -184,22 +187,45 @@ namespace BBWYB.Server.Business if (purchaseScheme.SchemeGroupId != schemeGroupId) { var update = fsql.Update(purchaseScheme.Id).Set(ps => ps.SchemeGroupId, schemeGroupId); - updatePurchaseSchemeList.Add(update); + updatePurchaseSchemeQueue.Enqueue(update); } } } } - + Console.WriteLine("数据库处理中"); fsql.Transaction(() => { if (insertSchemeGroups.Count() > 0) fsql.Insert(insertSchemeGroups).ExecuteAffrows(); - if (updatePurchaseSchemeList.Count() > 0) + }); + + var updatePurchaseSchemeList = new List>(); + while (true) + { + if (updatePurchaseSchemeQueue.TryDequeue(out var update)) + updatePurchaseSchemeList.Add(update); + else + break; + if (updatePurchaseSchemeList.Count() == 10) { - foreach (var update in updatePurchaseSchemeList) - update.ExecuteAffrows(); + Console.WriteLine($"执行数据库 {DateTime.Now}"); + fsql.Transaction(() => + { + foreach (var _update in updatePurchaseSchemeList) + _update.ExecuteAffrows(); + }); + updatePurchaseSchemeList.Clear(); } - }); + } + if (updatePurchaseSchemeList.Count() > 0) + { + Console.WriteLine($"最后执行数据库 {DateTime.Now}"); + fsql.Transaction(() => + { + foreach (var _update in updatePurchaseSchemeList) + _update.ExecuteAffrows(); + }); + } } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 2654983..d31a373 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -192,6 +192,130 @@ namespace BBWYB.Server.Business }); } + public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest) + { + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count == 0 && + batchCURDSchemeRequest.AddPurchaseSchemeList.Count == 0) + throw new BusinessException("非法参数"); + if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) || + string.IsNullOrEmpty(pp.PurchaserName)))) + throw new BusinessException("新增方案中有采购商Id/Name/Location为空"); + + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) || + string.IsNullOrEmpty(pp.PurchaserName)))) + throw new BusinessException("编辑方案中有采购商Id/Name/Location为空"); + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count() > 0 && batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.Id == 0)) + throw new BusinessException("编辑方案中采购方案缺少Id"); + + List addPurchaseSchemeList = new List(); + List addPurchaseSchemeProductList = new List(); + List addPurchaseSchemeProductSkuList = new List(); + List newPurchaserList = new List(); + List deletePurchaseSchemeIdList = new List(); + List> updatePurchaseSchemeList = new List>(); + + if (batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0) + { + ExtractNewPurchaser(batchCURDSchemeRequest.AddPurchaseSchemeList, newPurchaserList); + + foreach (var psReq in batchCURDSchemeRequest.AddPurchaseSchemeList) + { + var ps = new PurchaseScheme() + { + CreateTime = DateTime.Now, + Id = idGenerator.NewLong(), + ProductId = psReq.ProductId, + SkuId = psReq.SkuId, + ShopId = psReq.ShopId + }; + addPurchaseSchemeList.Add(ps); + foreach (var pspReq in psReq.PurchaseSchemeProductList) + { + var psp = pspReq.Map(); + psp.Id = idGenerator.NewLong(); + psp.CreateTime = DateTime.Now; + psp.SkuPurchaseSchemeId = ps.Id; + addPurchaseSchemeProductList.Add(psp); + + foreach (var pssReq in pspReq.PurchaseSchemeProductSkuList) + { + var pss = pssReq.Map(); + pss.Id = idGenerator.NewLong(); + pss.CreateTime = DateTime.Now; + pss.SkuPurchaseSchemeId = ps.Id; + addPurchaseSchemeProductSkuList.Add(pss); + ps.DefaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + } + } + } + } + + #region 更新采购方案 + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count > 0) + { + deletePurchaseSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id)); + foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList) + { + var schemeId = psReq.Id; + var defaultCost = 0M; + foreach (var pspReq in psReq.PurchaseSchemeProductList) + { + var psp = pspReq.Map(); + psp.Id = idGenerator.NewLong(); + psp.CreateTime = DateTime.Now; + psp.SkuPurchaseSchemeId = schemeId; + addPurchaseSchemeProductList.Add(psp); + + foreach (var pssReq in pspReq.PurchaseSchemeProductSkuList) + { + var pss = pssReq.Map(); + pss.Id = idGenerator.NewLong(); + pss.CreateTime = DateTime.Now; + pss.SkuPurchaseSchemeId = schemeId; + addPurchaseSchemeProductSkuList.Add(pss); + defaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); + } + } + var psupdate = fsql.Update(schemeId) + .Set(ps => ps.DefaultCost, defaultCost); + updatePurchaseSchemeList.Add(psupdate); + } + } + #endregion + + foreach (var purchaseProductSku in addPurchaseSchemeProductSkuList) + { + if (purchaseProductSku.PurchaseRatio == null) + purchaseProductSku.PurchaseRatio = 1; + } + + fsql.Transaction(() => + { + if (newPurchaserList.Count > 0) + fsql.Insert(newPurchaserList).ExecuteAffrows(); + + //更新,删除已存在的采购方案商品和Sku + if (deletePurchaseSchemeIdList.Count > 0) + { + fsql.Delete().Where(p => deletePurchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); + fsql.Delete().Where(p => deletePurchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); + } + + //新增 + if (addPurchaseSchemeList != null && addPurchaseSchemeList.Count > 0) + fsql.Insert(addPurchaseSchemeList).ExecuteAffrows(); + if (addPurchaseSchemeProductList.Count > 0) + fsql.Insert(addPurchaseSchemeProductList).ExecuteAffrows(); + if (addPurchaseSchemeProductSkuList.Count > 0) + fsql.Insert(addPurchaseSchemeProductSkuList).ExecuteAffrows(); + if (updatePurchaseSchemeList.Count() > 0) + { + foreach (var update in updatePurchaseSchemeList) + update.ExecuteAffrows(); + } + }); + } + /// /// 获取采购方案 /// diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs index 8176ee2..61fba78 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs @@ -13,5 +13,7 @@ namespace BBWYB.Server.Model.Dto /// 需要新增的采购方案 /// public IList AddPurchaseSchemeList { get; set; } + + } }