Browse Source

添加采购方案限制

liangku_skuoptimazation
shanji 1 year ago
parent
commit
6cf702e02f
  1. 4
      BBWYB.Server.API/Controllers/PurchaseSchemeController.cs
  2. 68
      BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
  3. 22
      BBWYB.Server.Business/SkuOptimization/SkuOptimizationBusiness.cs
  4. 37
      BBWYB.Server.Business/Users/userBusiness.cs
  5. 30
      BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs
  6. 18
      BBWYB.Server.Model/Db/Purchaser/Purchaser.cs
  7. 8
      BBWYB.Server.Model/Enums.cs

4
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());
}
/// <summary>
@ -206,7 +206,7 @@ namespace BBWYB.Server.API.Controllers
[HttpPost]
public void BatchEditPurchaseSkuActualPrice([FromBody] BatchEditPurchaseSkuActualPriceRequest request)
{
purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request);
purchaseSchemeBusiness.BatchEditPurchaseSkuActualPrice(request, GetUserId());
}
}
}

68
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<Enums.OrderState?> 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<T>(IList<T> purchaserSchemeList, IList<Purchaser> 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<PurchaseSchemeGroup> dbSchemeGroupList = null;
List<PurchaseScheme> 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<InputPurchaseSchemeRequest>()).Union(batchCURDSchemeRequest.EditPurchaseSchemeList ?? new List<EditPurchaseSchemeRequest>()).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<Purchaser>(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<PurchaseScheme>().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<PurchaseScheme> addPurchaseSchemeList = new List<PurchaseScheme>();
@ -1445,7 +1501,9 @@ namespace BBWYB.Server.Business
/// 批量修改采购配件实际单价
/// </summary>
/// <param name="request"></param>
public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request)
/// <param name="userId"></param>
/// <exception cref="BusinessException"></exception>
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);
}
}

22
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<User>(userId).ToOne();
if (user == null)
throw new BusinessException("用户不存在");
if (string.IsNullOrEmpty(user.DepartmentId))
throw new BusinessException("该用户没有归属部门");
var department = fsqlManager.MDSfsql.Select<Userdepartment>(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<SkuOptimizationTaskResponse> GetNoCompletionSkuOptimizationTask(PageRequest request, string userId)
{
var uInfo = GetYiJiaDepartmentByUserId(userId);
var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true);
var taskList = fsql.Select<SkuOptimizationTask, TimeLimitTask>()
.InnerJoin((t, tt) => t.Id == tt.TaskId)
.Where((t, tt) => t.IsOptimizationCompleted == false)

37
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;
}
/// <summary>
/// 获取指定用户的议价组信息
/// </summary>
/// <param name="userId"></param>
/// <param name="throwExWhenUserNotBelongYJ">当用户不属于议价组团队是否抛出错误</param>
/// <returns></returns>
/// <exception cref="BusinessException"></exception>
public (User user, Userdepartment department, bool isBargainTeam) GetisBargainTeamByUserId(string userId, bool throwExWhenUserNotBelongYJ = false)
{
var user = fsqlManager.MDSfsql.Select<User>(userId).ToOne();
if (user == null)
throw new BusinessException("用户不存在");
if (string.IsNullOrEmpty(user.DepartmentId))
throw new BusinessException("该用户没有归属部门");
var department = fsqlManager.MDSfsql.Select<Userdepartment>(user.DepartmentId).ToOne();
if (department == null)
throw new BusinessException("部门不存在");
if (throwExWhenUserNotBelongYJ && department.ParentDepartmentId != "1760971468360912896")
throw new BusinessException("该用户所在部门不属于议价组");
return (user, department, department.ParentDepartmentId == "1760971468360912896");
}
}
}

30
BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs

@ -110,6 +110,36 @@ namespace BBWYB.Server.Model
/// 采购件数
/// </summary>
public int? PurchasedItemCount { get; set; } = 0;
/// <summary>
/// 归属议价组Id
/// </summary>
[Column(StringLength = 50)]
public string BelongBargainTeamId { get; set; }
/// <summary>
/// 归属议价组名称
/// </summary>
[Column(StringLength = 50)]
public string BelongBargainTeamName { get; set; }
/// <summary>
/// 更新人Id
/// </summary>
[Column(StringLength = 50)]
public string UpdateUserId { get; set; }
/// <summary>
/// 更新人团队Id
/// </summary>
[Column(StringLength = 50)]
public string UpdateTeamId { get; set; }
/// <summary>
/// 是否为议价组更新
/// </summary>
[Column(DbType = "bit")]
public bool? IsBargainTeamUpdate { get; set; } = false;
}
}

18
BBWYB.Server.Model/Db/Purchaser/Purchaser.cs

@ -113,6 +113,24 @@ namespace BBWYB.Server.Model.Db
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? Recent90dPurchasedCount { get; set; } = 0.00M;
/// <summary>
/// 归属议价组Id
/// </summary>
[Column(StringLength = 50)]
public string BelongBargainTeamId { get; set; }
/// <summary>
/// 归属议价组名称
/// </summary>
[Column(StringLength = 50)]
public string BelongBargainTeamName { get; set; }
/// <summary>
/// 临时=0, 永久=1
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.PurchaserBelongType? BelongType { get; set; }
}
}

8
BBWYB.Server.Model/Enums.cs

@ -355,5 +355,13 @@
{
= 0, = 1, = 2, = 3
}
/// <summary>
/// 采购商归属类型 临时 = 0, 永久 = 1
/// </summary>
public enum PurchaserBelongType
{
= 0, = 1
}
}
}

Loading…
Cancel
Save