Browse Source

1.非生产领退料原来允许导入成品库数据

2.非生产领料原料库存推荐加参数控制是否不推荐无箱码库存
dev_DY_CC
lvzb 2 years ago
parent
commit
f2a48f8862
  1. 6
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/Inputs/RecommendBalanceRequestInput.cs
  2. 2
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs
  3. 8
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs
  4. 2
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs
  5. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs
  6. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs

6
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/Inputs/RecommendBalanceRequestInput.cs

@ -38,6 +38,12 @@ public class RecommendBalanceRequestInput
[Display(Name = "库存状态")] [Display(Name = "库存状态")]
public List<EnumInventoryStatus> Statuses { get; set; } public List<EnumInventoryStatus> Statuses { get; set; }
/// <summary>
/// 是否必须有箱码
/// </summary>
[Display(Name = "是否必须有箱码")]
public bool IsPackingCode { get; set; } = false;
public override string ToString() public override string ToString()
{ {
var locationTypes = LocationTypes.Aggregate("", (current, locationType) => current + (locationType.GetDisplayName() + ",")); var locationTypes = LocationTypes.Aggregate("", (current, locationType) => current + (locationType.GetDisplayName() + ","));

2
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs

@ -498,7 +498,7 @@ public class BalanceAppService
} }
Logger.LogDebug(traceId + "|Input:" + input); Logger.LogDebug(traceId + "|Input:" + input);
var balances = await _balanceManager.GetRecommendBalancesByLocationAsync(traceId, itemCode, qty, locations, statuses).ConfigureAwait(false); var balances = await _balanceManager.GetRecommendBalancesByLocationAsync(traceId, itemCode, qty, locations, statuses, input.IsPackingCode).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<Balance>, List<BalanceDTO>>(balances); var dtos = ObjectMapper.Map<List<Balance>, List<BalanceDTO>>(balances);

8
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs

@ -450,7 +450,7 @@ public class BalanceManager : DomainService, IBalanceManager
/// <exception cref="UserFriendlyException"></exception> /// <exception cref="UserFriendlyException"></exception>
public virtual async Task<List<Balance>> GetRecommendBalancesByLocationAsync(Guid traceId, string itemCode, public virtual async Task<List<Balance>> GetRecommendBalancesByLocationAsync(Guid traceId, string itemCode,
decimal requestQty, List<string> validLocations, decimal requestQty, List<string> validLocations,
List<EnumInventoryStatus> validStatuses) List<EnumInventoryStatus> validStatuses,bool ispackingcode)
{ {
var recommendBalances = new List<Balance>();//返回可使用的推荐库存余额 var recommendBalances = new List<Balance>();//返回可使用的推荐库存余额
@ -465,11 +465,17 @@ public class BalanceManager : DomainService, IBalanceManager
Expression<Func<Balance, bool>> expression = p => p.ItemCode == itemCode; Expression<Func<Balance, bool>> expression = p => p.ItemCode == itemCode;
expression = expression.And(p => validStatuses.Contains(p.Status)); expression = expression.And(p => validStatuses.Contains(p.Status));
expression = expression.And(p => p.IsActive); expression = expression.And(p => p.IsActive);
//如果物品的有效期不是无限的, 要过滤掉过期库存 //如果物品的有效期不是无限的, 要过滤掉过期库存
if (item.ValidityUnit != EnumValidityUnit.Infinite) if (item.ValidityUnit != EnumValidityUnit.Infinite)
{ {
expression = expression.And(p => p.ExpireDate > DateTime.Now); expression = expression.And(p => p.ExpireDate > DateTime.Now);
} }
//排除无箱码库存
if (ispackingcode)
{
expression = expression.And(p => !string.IsNullOrEmpty(p.PackingCode));
}
//筛选有效库区 2023-6-29 李智慧 王旭 袁静雯 确认不需要做区域校验 //筛选有效库区 2023-6-29 李智慧 王旭 袁静雯 确认不需要做区域校验
//if (validLocationAreas.Any()) //if (validLocationAreas.Any())
//{ //{

2
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs

@ -33,5 +33,5 @@ public interface IBalanceManager : IDomainService
Task<List<string>> GetItemCodesOfLocationAsync(string locationCode); Task<List<string>> GetItemCodesOfLocationAsync(string locationCode);
Task<Balance> ModifyAsync(Balance balance); Task<Balance> ModifyAsync(Balance balance);
Task<List<Balance>> GetListByLocationTypeAndInventoryStatusAsync(string itemCode, EnumInventoryStatus enumInventoryStatus, List<EnumLocationType> enumLocationTypes); Task<List<Balance>> GetListByLocationTypeAndInventoryStatusAsync(string itemCode, EnumInventoryStatus enumInventoryStatus, List<EnumLocationType> enumLocationTypes);
Task<List<Balance>> GetRecommendBalancesByLocationAsync(Guid traceId, string itemCode, decimal requestQty, List<string> validLocations, List<EnumInventoryStatus> validStatuses); Task<List<Balance>> GetRecommendBalancesByLocationAsync(Guid traceId, string itemCode, decimal requestQty, List<string> validLocations, List<EnumInventoryStatus> validStatuses,bool ispackingcode);
} }

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs

@ -96,16 +96,20 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
List<UnplannedIssueRequestDetail> newDetails = new List<UnplannedIssueRequestDetail>(); List<UnplannedIssueRequestDetail> newDetails = new List<UnplannedIssueRequestDetail>();
foreach (var detail in unplannedIssueRequest.Details) foreach (var detail in unplannedIssueRequest.Details)
{ {
//需要复制一个这个方法 去掉区域参数 换成库位参数
RecommendBalanceRequestInput input = new RecommendBalanceRequestInput();
if (unplannedIssueRequest.UnplannedIssueType == EnumUnplannedIssueType.Raw) if (unplannedIssueRequest.UnplannedIssueType == EnumUnplannedIssueType.Raw)
{ {
var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false); var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false);
if (locationDto.Type != EnumLocationType.RAW && locationDto.Type != EnumLocationType.SEMI) if (locationDto.Type != EnumLocationType.RAW && locationDto.Type != EnumLocationType.SEMI && locationDto.Type != EnumLocationType.FG)
{ {
throw new UserFriendlyException($"【{detail.LocationCode}】库位类型错误," + throw new UserFriendlyException($"【{detail.LocationCode}】库位类型错误," +
$"不是{EnumLocationType.RAW.GetDisplayName()}" + $"不是{EnumLocationType.RAW.GetDisplayName()}" +
$"或{EnumLocationType.SEMI.GetDisplayName()}】"); $"或{EnumLocationType.SEMI.GetDisplayName()}" +
$"或{EnumLocationType.FG.GetDisplayName()}】");
} }
unplannedIssueRequest.DirectCreateNote = false; unplannedIssueRequest.DirectCreateNote = false;
input.IsPackingCode = true;//只查询带箱码的推荐
} }
if (unplannedIssueRequest.UnplannedIssueType == EnumUnplannedIssueType.Wip) if (unplannedIssueRequest.UnplannedIssueType == EnumUnplannedIssueType.Wip)
{ {
@ -116,8 +120,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
$"不是{EnumLocationType.WIP.GetDisplayName()}】"); $"不是{EnumLocationType.WIP.GetDisplayName()}】");
} }
} }
//需要复制一个这个方法 去掉区域参数 换成库位参数
RecommendBalanceRequestInput input = new RecommendBalanceRequestInput();
input.ItemCode = detail.ItemCode; input.ItemCode = detail.ItemCode;
input.Locations = new List<string>() { detail.LocationCode }; input.Locations = new List<string>() { detail.LocationCode };
input.Qty = detail.Qty; input.Qty = detail.Qty;

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs

@ -103,11 +103,12 @@ public class UnplannedReceiptRequestForDongyangAppService : UnplannedReceiptRequ
if (unplannedReceiptRequest.UnplannedReceiptType == EnumUnplannedReceiptType.Raw) if (unplannedReceiptRequest.UnplannedReceiptType == EnumUnplannedReceiptType.Raw)
{ {
var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false); var locationDto = await _locationAppService.GetByCodeAsync(detail.LocationCode).ConfigureAwait(false);
if (locationDto.Type != EnumLocationType.RAW && locationDto.Type != EnumLocationType.SEMI) if (locationDto.Type != EnumLocationType.RAW && locationDto.Type != EnumLocationType.SEMI && locationDto.Type != EnumLocationType.FG)
{ {
throw new UserFriendlyException($"【{detail.LocationCode}】库位类型错误," + throw new UserFriendlyException($"【{detail.LocationCode}】库位类型错误," +
$"不是{EnumLocationType.RAW.GetDisplayName()}" + $"不是{EnumLocationType.RAW.GetDisplayName()}" +
$"或{EnumLocationType.SEMI.GetDisplayName()}】"); $"或{EnumLocationType.SEMI.GetDisplayName()}】" +
$"或{EnumLocationType.FG.GetDisplayName()}】");
} }
unplannedReceiptRequest.DirectCreateNote = false; unplannedReceiptRequest.DirectCreateNote = false;
//需要复制一个这个方法 去掉区域参数 换成库位参数 //需要复制一个这个方法 去掉区域参数 换成库位参数

Loading…
Cancel
Save