diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 692f3c9..286dd05 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -208,7 +208,7 @@ namespace BBWYB.Server.Business List dbSchemeGroupList = null; List dbPurchaseSchemeList = null; - + List deleteSchemeIdList = new List(); #region 数据验证 if ((batchCURDSchemeRequest.EditPurchaseSchemeList == null || batchCURDSchemeRequest.EditPurchaseSchemeList.Count == 0) && (batchCURDSchemeRequest.AddPurchaseSchemeList == null || batchCURDSchemeRequest.AddPurchaseSchemeList.Count == 0)) @@ -220,6 +220,9 @@ namespace BBWYB.Server.Business if (groupCount > 1) throw new BusinessException("只能对同一个spu的方案进行编辑"); + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.Id == 0)) + throw new BusinessException("更新方案中采购方案缺少Id"); + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => string.IsNullOrEmpty(ps.ProductId) || string.IsNullOrEmpty(ps.SkuId) || ps.PurchaseSchemeProductList.Any(psp => string.IsNullOrEmpty(psp.ProductId) || @@ -230,22 +233,42 @@ namespace BBWYB.Server.Business throw new BusinessException("更新方案缺少ProductId/SkuId"); } - if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList == null || - ps.PurchaseSchemeProductList.Count() == 0 || - ps.PurchaseSchemeProductList.Any(psp => psp.PurchaseSchemeProductSkuList == null || - psp.PurchaseSchemeProductSkuList.Count() == 0))) + #region 验证是否存在数据残缺的采购方案 + for (var i = 0; i < batchCURDSchemeRequest.EditPurchaseSchemeList.Count(); i++) { - throw new BusinessException("更新方案缺少商品信息"); + var editScheme = batchCURDSchemeRequest.EditPurchaseSchemeList[i]; + if (editScheme.PurchaseSchemeProductList != null && editScheme.PurchaseSchemeProductList.Count() > 0) + { + for (var j = 0; j < editScheme.PurchaseSchemeProductList.Count(); j++) + { + var editSchemeProduct = editScheme.PurchaseSchemeProductList[j]; + if (editSchemeProduct.PurchaseSchemeProductSkuList == null || editSchemeProduct.PurchaseSchemeProductSkuList.Count() == 0) + { + //如果采购商品不具备配件,则移除该采购商品 + editScheme.PurchaseSchemeProductList.RemoveAt(j); + j--; + } + } + } + + if (editScheme.PurchaseSchemeProductList == null || editScheme.PurchaseSchemeProductList.Count() == 0) + { + //采购方案不再具备采购商品,则移除该采购方案 + batchCURDSchemeRequest.EditPurchaseSchemeList.RemoveAt(i); + i--; + deleteSchemeIdList.Add(editScheme.Id); + } } + #endregion + + if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) || string.IsNullOrEmpty(pp.PurchaserId2) || string.IsNullOrEmpty(pp.PurchaserName)))) throw new BusinessException("更新方案中有采购商Id/Id2/Name/Location为空"); - if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.Id == 0)) - throw new BusinessException("更新方案中采购方案缺少Id"); if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.SchemeGroupId == null || ps.SchemeGroupId == 0)) throw new BusinessException("更新方案中采购方案缺少分组Id"); @@ -311,12 +334,14 @@ namespace BBWYB.Server.Business List addPurchaseSchemeProductList = new List(); List addPurchaseSchemeProductSkuList = new List(); List newPurchaserList = new List(); - List deletePurchaseSchemeIdList = new List(); + List deletePartsSchemeIdList = new List(); List> updatePurchaseSchemeList = new List>(); + List insertPurchaseSchemeGroupsList = new List(); IInsert? insertPurchaseSchemeGroupIndex = null; IUpdate? updatePurchaseSchemeGroupIndex = null; + if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0) { var firstScheme = batchCURDSchemeRequest.AddPurchaseSchemeList.First(); @@ -402,7 +427,7 @@ namespace BBWYB.Server.Business { ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList); - deletePurchaseSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id)); + deletePartsSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id)); foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList) { var schemeId = psReq.Id; @@ -446,10 +471,10 @@ namespace BBWYB.Server.Business fsql.Insert(newPurchaserList).ExecuteAffrows(); //更新,删除已存在的采购方案商品和Sku - if (deletePurchaseSchemeIdList.Count > 0) + if (deletePartsSchemeIdList.Count > 0) { - fsql.Delete().Where(p => deletePurchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); - fsql.Delete().Where(p => deletePurchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); + fsql.Delete().Where(p => deletePartsSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); + fsql.Delete().Where(p => deletePartsSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); } //新增 @@ -469,6 +494,10 @@ namespace BBWYB.Server.Business insertPurchaseSchemeGroupIndex?.ExecuteAffrows(); updatePurchaseSchemeGroupIndex?.ExecuteAffrows(); }); + + //删除信息残缺的采购方案 + if (deleteSchemeIdList.Count() > 0) + DeletePurchaseScheme(deleteSchemeIdList); } /// @@ -741,23 +770,61 @@ namespace BBWYB.Server.Business public void DeletePurchaseScheme(long schemeId) { - IDelete? deletePsg = null; - var purchaseScheme = fsql.Select(schemeId).ToOne(); - if (purchaseScheme == null) - throw new BusinessException("采购方案不存在"); - if (purchaseScheme.SchemeGroupId != 0) + //IDelete? deletePsg = null; + //var purchaseScheme = fsql.Select(schemeId).ToOne(); + //if (purchaseScheme == null) + // throw new BusinessException("采购方案不存在"); + //if (purchaseScheme.SchemeGroupId != 0) + //{ + // var sameGroupSchemeCount = fsql.Select().Where(ps => ps.SchemeGroupId == purchaseScheme.SchemeGroupId && + // ps.Id != purchaseScheme.Id).Count(); + // if (sameGroupSchemeCount == 0) + // deletePsg = fsql.Delete(purchaseScheme.SchemeGroupId); + //} + //fsql.Transaction(() => + //{ + // deletePsg?.ExecuteAffrows(); + // fsql.Delete(schemeId).ExecuteAffrows(); + // fsql.Delete().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows(); + // fsql.Delete().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows(); + //}); + DeletePurchaseScheme(new List() { schemeId }); + } + + public void DeletePurchaseScheme(List schemeIdList) + { + IList deleteSchemeGroupIdList = new List(); + var purchaseSchemeList = fsql.Select(schemeIdList).ToList(); + if (purchaseSchemeList.Count() == 0) + return; + var schemeGroupIdList = purchaseSchemeList.Where(ps => ps.SchemeGroupId != 0).Select(ps => ps.SchemeGroupId).ToList(); + var sameSchemeGroupCountGroups = fsql.Select().Where(ps => ps.SchemeGroupId != 0 && + schemeGroupIdList.Contains(ps.SchemeGroupId) && + !schemeIdList.Contains(ps.Id)) + .GroupBy(ps => ps.SchemeGroupId) + .ToList(g => new + { + SchemeGroupId = g.Key, + SchemeCount = g.Count() + }); + + foreach (var purchaseScheme in purchaseSchemeList) { - var sameGroupSchemeCount = fsql.Select().Where(ps => ps.SchemeGroupId == purchaseScheme.SchemeGroupId && - ps.Id != purchaseScheme.Id).Count(); - if (sameGroupSchemeCount == 0) - deletePsg = fsql.Delete(purchaseScheme.SchemeGroupId); + if (purchaseScheme.SchemeGroupId != 0) + { + var sameSchemeGroupCount = sameSchemeGroupCountGroups.FirstOrDefault(g => g.SchemeGroupId == purchaseScheme.SchemeGroupId); + if (sameSchemeGroupCount != null && sameSchemeGroupCount.SchemeCount == 0) + deleteSchemeGroupIdList.Add(purchaseScheme.SchemeGroupId); + } } + fsql.Transaction(() => { - deletePsg?.ExecuteAffrows(); - fsql.Delete(schemeId).ExecuteAffrows(); - fsql.Delete().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows(); - fsql.Delete().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows(); + if (deleteSchemeGroupIdList.Count() > 0) + fsql.Delete(deleteSchemeGroupIdList).ExecuteAffrows(); + fsql.Delete(schemeIdList).ExecuteAffrows(); + fsql.Delete().Where(p => schemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); + fsql.Delete().Where(p => schemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows(); }); } @@ -978,6 +1045,26 @@ namespace BBWYB.Server.Business if (schemeList.Count() == 0) throw new BusinessException("采购方案不存在"); var scheme = schemeList[0]; + + if (scheme.PurchaseSchemeProductList.Count() == 1) + { + var lastProduct = scheme.PurchaseSchemeProductList.FirstOrDefault(); + if (lastProduct.PurchaseSchemeProductSkuList.Count() == 1) + { + var lastSku = lastProduct.PurchaseSchemeProductSkuList.FirstOrDefault(); + if (lastSku.PurchaseSkuId == request.PurchaseSkuId && + lastSku.SkuId == request.SkuId) + { + DeletePurchaseScheme(request.SchemeId); + return 0M; + } + else + { + throw new BusinessException("未找到需要移除的采购sku"); + } + } + } + var defaultCost = 0M; long? pssId = null; @@ -993,11 +1080,7 @@ namespace BBWYB.Server.Business if (tartegtPurchaseProductSku != null) { if (schemeProduct.PurchaseSchemeProductSkuList.Count() == 1) - { - if (scheme.PurchaseSchemeProductList.Count() == 1) - throw new BusinessException("最后一个采购sku不能被移除"); deletePsp = fsql.Delete(schemeProduct.Id); - } pssId = tartegtPurchaseProductSku.Id; deletePss = fsql.Delete(pssId); } @@ -1005,7 +1088,6 @@ namespace BBWYB.Server.Business defaultCost += schemeProduct.PurchaseSchemeProductSkuList.Where(pss => !(pss.SkuId == request.SkuId && pss.PurchaseSkuId == request.PurchaseSkuId)) .Sum(pss => ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1)); } - if (pssId == null) throw new BusinessException("未找到需要移除的采购sku"); updatePs = fsql.Update(request.SchemeId).Set(ps => ps.DefaultCost, defaultCost); diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs index 61fba78..a9670b2 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs @@ -7,12 +7,12 @@ namespace BBWYB.Server.Model.Dto /// /// 需要修改的采购方案 /// - public IList EditPurchaseSchemeList { get; set; } + public List EditPurchaseSchemeList { get; set; } /// /// 需要新增的采购方案 /// - public IList AddPurchaseSchemeList { get; set; } + public List AddPurchaseSchemeList { get; set; } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs index 141aa17..cd9caec 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs @@ -38,6 +38,6 @@ public Enums.Platform? PurchasePlatform { get; set; } - public IList PurchaseSchemeProductSkuList { get; set; } + public List PurchaseSchemeProductSkuList { get; set; } } } diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs index 955a6d0..25595ba 100644 --- a/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs +++ b/BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs @@ -23,6 +23,6 @@ namespace BBWYB.Server.Model.Dto public string ProductId { get; set; } public string SkuId { get; set; } - public IList PurchaseSchemeProductList { get; set; } + public List PurchaseSchemeProductList { get; set; } } }