diff --git a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs index 0e4b68f..58a3631 100644 --- a/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs +++ b/BBWYB.Server.API/Controllers/PurchaseSchemeController.cs @@ -33,7 +33,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public void EditPurchaseSchemeV2([FromBody] BatchCURDSchemeRequest batchCURDSchemeRequest) { - purchaseSchemeBusiness.EditPurchaseSchemeV2(batchCURDSchemeRequest); + purchaseSchemeBusiness.EditPurchaseSchemeV2(batchCURDSchemeRequest, GetUserId()); } /// @@ -206,7 +206,7 @@ namespace BBWYB.Server.API.Controllers [HttpPost] public void BatchEditPurchaseSkuActualPrice([FromBody] BatchEditPurchaseSkuActualPriceRequest request) { - purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request); + purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request, GetUserId()); } } } diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs index 0a9db9d..1bb343b 100644 --- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs +++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs @@ -7,6 +7,7 @@ using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; +using System.Linq; using Yitter.IdGenerator; namespace BBWYB.Server.Business @@ -16,6 +17,9 @@ namespace BBWYB.Server.Business private PurchaseProductAPIService purchaseProductAPIService; private RestApiService restApiService; private AggregionPurchaserBusiness aggregionPurchaserBusiness; + private UserBusiness userBusiness; + + private IList invalidOrderStateList; public PurchaseSchemeBusiness(IFreeSql fsql, @@ -23,7 +27,8 @@ namespace BBWYB.Server.Business IIdGenerator idGenerator, PurchaseProductAPIService purchaseProductAPIService, RestApiService restApiService, - AggregionPurchaserBusiness aggregionPurchaserBusiness) : base(fsql, nLogManager, idGenerator) + AggregionPurchaserBusiness aggregionPurchaserBusiness, + UserBusiness userBusiness) : base(fsql, nLogManager, idGenerator) { this.purchaseProductAPIService = purchaseProductAPIService; this.restApiService = restApiService; @@ -35,6 +40,7 @@ namespace BBWYB.Server.Business Enums.OrderState.部分采购 }; this.aggregionPurchaserBusiness = aggregionPurchaserBusiness; + this.userBusiness = userBusiness; } private void ExtractNewPurchaser(IList purchaserSchemeList, IList addPurchaserList) where T : InputPurchaseSchemeRequest @@ -211,9 +217,9 @@ namespace BBWYB.Server.Business }); } - public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest) + public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest, string userId) { - nLogManager.Default().Info($"EditPurchaseSchemeV2 {JsonConvert.SerializeObject(batchCURDSchemeRequest)}"); + //nLogManager.Default().Info($"EditPurchaseSchemeV2 {JsonConvert.SerializeObject(batchCURDSchemeRequest)}"); List dbSchemeGroupList = null; List dbPurchaseSchemeList = null; @@ -339,6 +345,56 @@ namespace BBWYB.Server.Business } } + var uInfo = userBusiness.GetisBargainTeamByUserId(userId); + if (uInfo.isBargainTeam) + { + #region 检测是否存在被其他议价组分配的采购商 + { + var tempPurchaseScmemeList = (batchCURDSchemeRequest.AddPurchaseSchemeList ?? new List()).Union(batchCURDSchemeRequest.EditPurchaseSchemeList ?? new List()).ToList(); + var allPurchaserList = tempPurchaseScmemeList.SelectMany(ps => ps.PurchaseSchemeProductList.Select(psp => new { psp.PurchaserId, psp.PurchaserName })).ToList(); + + var allPurchaserIdList = allPurchaserList.Select(p => p.PurchaserId).Distinct().ToList(); + var dbPurchaserList = fsql.Select(allPurchaserIdList).ToList(p => new Purchaser() + { + Id = p.Id, + Name = p.Name, + BelongBargainTeamId = p.BelongBargainTeamId, + BelongType = p.BelongType + }); + var noCurrentBargainTeamList = dbPurchaserList.Where(dp => !string.IsNullOrEmpty(dp.BelongBargainTeamId) && + dp.BelongBargainTeamId != uInfo.user.DepartmentId).ToList(); + if (noCurrentBargainTeamList.Count() > 0) + throw new BusinessException($"不能包含被其他议价组使用的采购商 [{string.Join(",", noCurrentBargainTeamList.Select(x => x.Name))}]"); + } + #endregion + + #region 检测同sku在该议价组下的数量是否超过3个 + { + if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count() > 0) + { + var addSchemeSkuList = batchCURDSchemeRequest.AddPurchaseSchemeList.Select(ps => ps.SkuId).Distinct().ToList(); + var dbSkuSchemeCountList = fsql.Select().Where(ps => ps.BelongBargainTeamId == uInfo.user.DepartmentId && + addSchemeSkuList.Contains(ps.SkuId)) + .GroupBy(ps => ps.SkuId) + .ToList(g => new + { + SkuId = g.Key, + Count = g.Count() + }); + var skuCountList = dbSkuSchemeCountList.Select(x => new + { + x.SkuId, + Count = x.Count + batchCURDSchemeRequest.AddPurchaseSchemeList.Count(ps => ps.SkuId == x.SkuId) + }).ToList(); + + var over3CountList = skuCountList.Where(x => x.Count > 3).ToList(); + if (over3CountList.Count() > 0) + throw new BusinessException($"sku在同一个议价组内不能超过3个采购方案 [{string.Join(",", over3CountList.Select(x => x.SkuId))}]"); + } + } + #endregion + } + #endregion List addPurchaseSchemeList = new List(); @@ -1445,7 +1501,9 @@ namespace BBWYB.Server.Business /// 批量修改采购配件实际单价 /// /// - public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request) + /// + /// + public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, string userId) { if (request.ItemList == null || request.ItemList.Count() == 0) throw new BusinessException("缺少参数"); @@ -1520,7 +1578,7 @@ namespace BBWYB.Server.Business }).ToList() }).ToList() }).ToList() - }); + }, userId); } } diff --git a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs index fb27cd6..ccbf601 100644 --- a/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs +++ b/BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs @@ -16,28 +16,16 @@ namespace BBWYB.Server.Business private FreeSqlMultiDBManager fsqlManager; private VenderBusiness venderBusiness; private TimeLimitRules timeLimitRules; + private UserBusiness userBusiness; - public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator) + public SkuOptimizationBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules, UserBusiness userBusiness) : base(fsql, nLogManager, idGenerator) { this.fsqlManager = fsqlManager; this.venderBusiness = venderBusiness; this.timeLimitRules = timeLimitRules; + this.userBusiness = userBusiness; } - private (User user, Userdepartment department) GetYiJiaDepartmentByUserId(string userId) - { - var user = fsqlManager.MDSfsql.Select(userId).ToOne(); - if (user == null) - throw new BusinessException("用户不存在"); - if (string.IsNullOrEmpty(user.DepartmentId)) - throw new BusinessException("该用户没有归属部门"); - var department = fsqlManager.MDSfsql.Select(user.DepartmentId).ToOne(); - if (department == null) - throw new BusinessException("部门不存在"); - if (department.ParentDepartmentId != "1760971468360912896") - throw new BusinessException("该用户所在部门不属于议价组"); - return (user, department); - } public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s) { @@ -236,7 +224,7 @@ namespace BBWYB.Server.Business #endregion #region 获取用户和部门信息 - var uInfo = GetYiJiaDepartmentByUserId(userId); + var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); #endregion #region 验证待议价子任务 @@ -311,7 +299,7 @@ namespace BBWYB.Server.Business public ListResponse GetNoCompletionSkuOptimizationTask(PageRequest request, string userId) { - var uInfo = GetYiJiaDepartmentByUserId(userId); + var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true); var taskList = fsql.Select() .InnerJoin((t, tt) => t.Id == tt.TaskId) .Where((t, tt) => t.IsOptimizationCompleted == false) diff --git a/BBWYB.Server.Business/Users/userBusiness.cs b/BBWYB.Server.Business/Users/userBusiness.cs new file mode 100644 index 0000000..2c2ff64 --- /dev/null +++ b/BBWYB.Server.Business/Users/userBusiness.cs @@ -0,0 +1,37 @@ +using BBWYB.Common.Models; +using BBWYB.Server.Model.Db; + +namespace BBWYB.Server.Business +{ + public class UserBusiness : IDenpendency + { + private FreeSqlMultiDBManager fsqlManager; + + public UserBusiness(FreeSqlMultiDBManager fsqlManager) + { + this.fsqlManager = fsqlManager; + } + + /// + /// 获取指定用户的议价组信息 + /// + /// + /// 当用户不属于议价组团队是否抛出错误 + /// + /// + public (User user, Userdepartment department, bool isBargainTeam) GetisBargainTeamByUserId(string userId, bool throwExWhenUserNotBelongYJ = false) + { + var user = fsqlManager.MDSfsql.Select(userId).ToOne(); + if (user == null) + throw new BusinessException("用户不存在"); + if (string.IsNullOrEmpty(user.DepartmentId)) + throw new BusinessException("该用户没有归属部门"); + var department = fsqlManager.MDSfsql.Select(user.DepartmentId).ToOne(); + if (department == null) + throw new BusinessException("部门不存在"); + if (throwExWhenUserNotBelongYJ && department.ParentDepartmentId != "1760971468360912896") + throw new BusinessException("该用户所在部门不属于议价组"); + return (user, department, department.ParentDepartmentId == "1760971468360912896"); + } + } +} diff --git a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs index a655694..7fc66b4 100644 --- a/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs +++ b/BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs @@ -110,6 +110,36 @@ namespace BBWYB.Server.Model /// 采购件数 /// public int? PurchasedItemCount { get; set; } = 0; + + /// + /// 归属议价组Id + /// + [Column(StringLength = 50)] + public string BelongBargainTeamId { get; set; } + + /// + /// 归属议价组名称 + /// + [Column(StringLength = 50)] + public string BelongBargainTeamName { get; set; } + + /// + /// 更新人Id + /// + [Column(StringLength = 50)] + public string UpdateUserId { get; set; } + + /// + /// 更新人团队Id + /// + [Column(StringLength = 50)] + public string UpdateTeamId { get; set; } + + /// + /// 是否为议价组更新 + /// + [Column(DbType = "bit")] + public bool? IsBargainTeamUpdate { get; set; } = false; } } diff --git a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs index 07509c7..7d14bf6 100644 --- a/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs +++ b/BBWYB.Server.Model/Db/Purchaser/Purchaser.cs @@ -113,6 +113,24 @@ namespace BBWYB.Server.Model.Db /// [Column(DbType = "decimal(18,2)")] public decimal? Recent90dPurchasedCount { get; set; } = 0.00M; + + /// + /// 归属议价组Id + /// + [Column(StringLength = 50)] + public string BelongBargainTeamId { get; set; } + + /// + /// 归属议价组名称 + /// + [Column(StringLength = 50)] + public string BelongBargainTeamName { get; set; } + + /// + /// 临时=0, 永久=1 + /// + [Column(MapType = typeof(int?))] + public Enums.PurchaserBelongType? BelongType { get; set; } } } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index 04e9a1e..736bbb9 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -355,5 +355,13 @@ { 大于 = 0, 小于 = 1, 等于 = 2, 介于 = 3 } + + /// + /// 采购商归属类型 临时 = 0, 永久 = 1 + /// + public enum PurchaserBelongType + { + 临时 = 0, 永久 = 1 + } } }