diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs index c9335a2..e271b67 100644 --- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs +++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs @@ -15,7 +15,9 @@ using SDKAdapter.OperationPlatform.Client; using SDKAdapter.OperationPlatform.Models; using SDKAdapter.PurchasePlatform.Client; using SDKAdapter.PurchasePlatform.Models; +using System.Collections.Generic; using System.Data; +using System.Net.Http.Headers; using System.Reflection; using System.Text; using Yitter.IdGenerator; @@ -1473,9 +1475,10 @@ namespace BBWYB.Server.Business }); var errorPurchaserList = new List(); - var errorSchemeList = new List(); + //var errorSchemeList = new List(); var errorSchemeGroupList = new List(); + var dbPurchaserList = fsql.Select().ToList(); var dbPurchaseGroupList = fsql.Select().ToList(); var dbSchemeList = fsql.Select().ToList(); @@ -1486,6 +1489,8 @@ namespace BBWYB.Server.Business var updateSchemeGroupList = new List(); var deletePsgIdList = new List(); + + foreach (var purchaseRelation in purchaseRelations) { var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == purchaseRelation.PurchaserName); @@ -1504,6 +1509,8 @@ namespace BBWYB.Server.Business } } + List compareNullBelongSchemeList = new List(); + var errorBelongSchemeList = new List(); foreach (var purchaseRelation in purchaseRelations) { var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == purchaseRelation.PurchaserName); @@ -1512,11 +1519,12 @@ namespace BBWYB.Server.Business //查询使用了该采购商的采购方案 var usePurchaserSchemeIdList = dbSchemeProductList.Where(psp => psp.PurchaserId == dbPurchaser.Id) - .Select(psp => psp.SkuPurchaseSchemeId) - .Distinct() - .ToList(); + .Select(psp => psp.SkuPurchaseSchemeId) + .Distinct() + .ToList(); var usePurchaserSchemeList = dbSchemeList.Where(ps => usePurchaserSchemeIdList.Contains(ps.Id)).ToList(); + foreach (var scheme in usePurchaserSchemeList) { var pspList = dbSchemeProductList.Where(psp => psp.SkuPurchaseSchemeId == scheme.Id).ToList(); @@ -1527,14 +1535,27 @@ namespace BBWYB.Server.Business var currentSchemePurchaserBelongGroups = currentSchemePurchaserList.GroupBy(p => p.BelongBargainTeamId); if (currentSchemePurchaserBelongGroups.Count() > 1) { - var sb = new StringBuilder($"采购方案{scheme.Id}使用了{currentSchemePurchaserBelongGroups.Count()}个不同归属的采购商 "); + //if (currentSchemePurchaserBelongGroups.Any(g => string.IsNullOrEmpty(g.Key))) + //{ + //采购方案包含多个不同议价组的采购商且议价组Id为空 + var schemeModel = new BelongSchemeTestModel() + { + SchemeId = scheme.Id, + BelongPurchaserTestModelList = new List() + }; + compareNullBelongSchemeList.Add(schemeModel); + foreach (var belongGroup in currentSchemePurchaserBelongGroups) { - var teamName = belongGroup.FirstOrDefault()?.BelongBargainTeamName; - sb.Append($"{teamName}:{string.Join(",", belongGroup.Select(x => x.Name))},"); + foreach (var purchaser in belongGroup) + { + schemeModel.BelongPurchaserTestModelList.Add(new BelongPurchaserTestModel() + { + BelongTeam = string.IsNullOrEmpty(purchaser.BelongBargainTeamName) ? "空" : purchaser.BelongBargainTeamName, + PurchaserName = purchaser.Name + }); + } } - - errorSchemeList.Add(sb.ToString()); } else if (currentSchemePurchaserBelongGroups.Count() == 1) { @@ -1549,6 +1570,60 @@ namespace BBWYB.Server.Business } } + #region 筛选有没有混合空组采购商的情况 + foreach (var belongScheme in compareNullBelongSchemeList) + { + if (belongScheme.BelongPurchaserTestModelList.Any(p => p.BelongTeam == "空")) + { + var nullBelongPurchaserList = belongScheme.BelongPurchaserTestModelList.Where(p => p.BelongTeam == "空").ToList(); + var otherSchemeList = compareNullBelongSchemeList.Where(c => c.SchemeId != belongScheme.SchemeId && + c.BelongPurchaserTestModelList.Any(p => p.BelongTeam == "空") && + c.BelongGroupKey != belongScheme.BelongGroupKey && + c.BelongPurchaserTestModelList.Any(x => nullBelongPurchaserList.Any(y => y.PurchaserName == x.PurchaserName))).ToList(); + if (otherSchemeList.Count() > 0) + { + foreach (var belongPurchaser in nullBelongPurchaserList) + { + belongPurchaser.RelationSchemeIdList = otherSchemeList.Where(c => c.BelongPurchaserTestModelList.Any(x => belongPurchaser.PurchaserName == x.PurchaserName)).Select(c => c.SchemeId).Distinct().ToList(); + } + errorBelongSchemeList.Add(belongScheme); + } + else + { + //没有混合空组 + var firstNoNullBelongPurchaserName = belongScheme.BelongPurchaserTestModelList.FirstOrDefault(p => p.BelongTeam != "空")?.PurchaserName; + var firstNoNullBelongPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == firstNoNullBelongPurchaserName); + if (firstNoNullBelongPurchaser != null) + { + foreach (var nullBelongPurchaser in nullBelongPurchaserList) + { + var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == nullBelongPurchaser.PurchaserName); + if (dbPurchaser != null) + { + dbPurchaser.BelongBargainTeamId = firstNoNullBelongPurchaser.BelongBargainTeamId; + dbPurchaser.BelongBargainTeamName = firstNoNullBelongPurchaser.BelongBargainTeamName; + dbPurchaser.BelongType = Enums.PurchaserBelongType.临时; + updatePurchaserList.Add(dbPurchaser); + } + } + + var dbScheme = dbSchemeList.FirstOrDefault(s => s.Id == belongScheme.SchemeId); + if (dbScheme != null) + { + dbScheme.BelongBargainTeamId = firstNoNullBelongPurchaser.BelongBargainTeamId; + dbScheme.BelongBargainTeamName = firstNoNullBelongPurchaser.BelongBargainTeamName; + updateSchemeList.Add(dbScheme); + } + } + } + } + else + { + errorBelongSchemeList.Add(belongScheme); + } + } + #endregion + foreach (var psg in dbPurchaseGroupList) { var schemeList = dbSchemeList.Where(ps => ps.SchemeGroupId == psg.Id).ToList(); @@ -1561,13 +1636,34 @@ namespace BBWYB.Server.Business var currentPsgPurchaserBelongGroups = schemeList.GroupBy(ps => ps.BelongBargainTeamId); if (currentPsgPurchaserBelongGroups.Count() > 1) { - var sb = new StringBuilder($"采购分组{psg.GroupName}使用了{currentPsgPurchaserBelongGroups.Count()}个不同归属的采购方案 "); - foreach (var belongGroup in currentPsgPurchaserBelongGroups) + //var sb = new StringBuilder($"采购分组{psg.GroupName}使用了{currentPsgPurchaserBelongGroups.Count()}个不同归属的采购方案"); + //foreach (var belongGroup in currentPsgPurchaserBelongGroups) + //{ + // var teamName = belongGroup.FirstOrDefault()?.BelongBargainTeamName; + // sb.Append($"{teamName}:{string.Join(",", belongGroup.Select(x => x.Id))},"); + //} + //errorSchemeGroupList.Add(sb.ToString()); + + var ps = currentPsgPurchaserBelongGroups.SelectMany(g => g.ToList()).FirstOrDefault(ps => !string.IsNullOrEmpty(ps.BelongBargainTeamId)); + + foreach (var schemeGroup in currentPsgPurchaserBelongGroups) + { + foreach (var scheme in schemeGroup) + { + if (string.IsNullOrEmpty(scheme.BelongBargainTeamId)) + { + scheme.BelongBargainTeamId = ps?.BelongBargainTeamId; + scheme.BelongBargainTeamName = ps?.BelongBargainTeamName; + updateSchemeList.Add(scheme); + } + } + } + + if (psg.BelongBargainTeamId != ps?.BelongBargainTeamId) { - var teamName = belongGroup.FirstOrDefault()?.BelongBargainTeamName; - sb.Append($"{teamName}:{string.Join(",", belongGroup.Select(x => x.Id))},"); + psg.BelongBargainTeamId = ps?.BelongBargainTeamId; + updateSchemeGroupList.Add(psg); } - errorSchemeGroupList.Add(sb.ToString()); } else if (currentPsgPurchaserBelongGroups.Count() == 1) { @@ -1581,10 +1677,15 @@ namespace BBWYB.Server.Business } if (errorPurchaserList.Count() > 0 || - errorSchemeList.Count() > 0 || + errorBelongSchemeList.Count() > 0 || errorSchemeGroupList.Count() > 0) { - var msg = JsonConvert.SerializeObject(errorPurchaserList.Union(errorSchemeList).Union(errorSchemeGroupList)); + if (errorBelongSchemeList.Count() > 0) + { + var msg2 = JsonConvert.SerializeObject(errorBelongSchemeList); + throw new BusinessException(msg2); + } + var msg = JsonConvert.SerializeObject(errorPurchaserList.Union(errorSchemeGroupList)); throw new BusinessException(msg); } diff --git a/BBWYB.Server.Model/BelongTestModel.cs b/BBWYB.Server.Model/BelongTestModel.cs new file mode 100644 index 0000000..ba9c32c --- /dev/null +++ b/BBWYB.Server.Model/BelongTestModel.cs @@ -0,0 +1,28 @@ +namespace BBWYB.Server.Model +{ + public class BelongSchemeTestModel + { + public long SchemeId { get; set; } + + public IList BelongPurchaserTestModelList { get; set; } + + public string BelongGroupKey + { + get + { + return string.Join(",", BelongPurchaserTestModelList.OrderBy(x => x.BelongTeam) + .Select(x => x.BelongTeam) + .Distinct()); + } + } + } + + public class BelongPurchaserTestModel + { + public string PurchaserName { get; set; } + + public string BelongTeam { get; set; } + + public List RelationSchemeIdList { get; set; } + } +}