diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ProductionReturnNoteConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ProductionReturnNoteConverter.cs index 1aaa970a7..97af4196f 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ProductionReturnNoteConverter.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/ProductionReturnNoteConverter.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Volo.Abp.ObjectMapping; @@ -59,9 +60,9 @@ public class ProductionReturnNoteConverter : IOutgoingConverter outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNote); outgoingToExternalList.Add(outgoingToExternal); #endregion - + var sumDetails = wmsReceipt.Details.GroupBy(r => new { r.ItemCode, r.FromLocationErpCode, r.ToLocationErpCode }).Select(p => new ProductionReturnNoteDetailDTO { ItemCode = p.Key.ItemCode, FromLocationErpCode = p.Key.FromLocationErpCode, ToLocationErpCode = p.Key.ToLocationErpCode, Qty = p.Sum(x => x.Qty) }).ToList(); #region 明细 - foreach (var detail in wmsReceipt.Details) + foreach (var detail in sumDetails) { var outgoingDetailToExternal = new OutgoingToExternal() { diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs index 24f0af035..a8b6552dd 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/TyrpOutgoingBackgroundWorker.cs @@ -95,7 +95,7 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase #endregion #region 线边仓退料单 ProductionReturn scontrol - Logger.LogInformation($"Write ProductionReturnNote");//线边仓退料单 + Logger.LogInformation($"Write ProductionReturnNote");//线边仓退料单(汇总) var productionReturnNoteConvert = workerContext.ServiceProvider.GetRequiredService(); var productionReturnNoteList = await productionReturnNoteConvert.ConvertAsync().ConfigureAwait(false); await scontrolWriter.WriteAsync(productionReturnNoteList).ConfigureAwait(false); @@ -227,7 +227,7 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase #endregion #region 线边仓调整单 WIPAdjust mesout_asd - Logger.LogInformation($"Write WIPAdjusNote");//线边仓调整单 + Logger.LogInformation($"Write WIPAdjusNote");//线边仓调整单(汇总) var wipAdjustNoteConvert = workerContext.ServiceProvider.GetRequiredService(); var wipAdjustNoteList = await wipAdjustNoteConvert.ConvertAsync().ConfigureAwait(false); await countadjustWriter.WriteAsync(wipAdjustNoteList).ConfigureAwait(false); @@ -239,7 +239,7 @@ public class TyrpOutgoingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase #endregion #region 回收料调整单 Item_Transform mesout_asd - Logger.LogInformation($"Write ItemTransformNote");//回收料调整单 + Logger.LogInformation($"Write ItemTransformNote");//回收料调整单(汇总) var ItemTransformNoteConvert = workerContext.ServiceProvider.GetRequiredService(); var ItemTransformNoteList = await ItemTransformNoteConvert.ConvertAsync().ConfigureAwait(false); await countadjustWriter.WriteAsync(ItemTransformNoteList).ConfigureAwait(false); diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/Inputs/RecommendBalanceRequestInput.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/Inputs/RecommendBalanceRequestInput.cs index f6c401c70..be818e97f 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/Inputs/RecommendBalanceRequestInput.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/Inputs/RecommendBalanceRequestInput.cs @@ -38,6 +38,12 @@ public class RecommendBalanceRequestInput [Display(Name = "库存状态")] public List Statuses { get; set; } + /// + /// 是否必须有箱码 + /// + [Display(Name = "是否必须有箱码")] + public bool IsPackingCode { get; set; } = false; + public override string ToString() { var locationTypes = LocationTypes.Aggregate("", (current, locationType) => current + (locationType.GetDisplayName() + ",")); diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs index 608c7fb97..08efeb97e 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs +++ b/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); - 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>(balances); diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs index 98cbe245c..cf9b64ad2 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs @@ -450,7 +450,7 @@ public class BalanceManager : DomainService, IBalanceManager /// public virtual async Task> GetRecommendBalancesByLocationAsync(Guid traceId, string itemCode, decimal requestQty, List validLocations, - List validStatuses) + List validStatuses,bool ispackingcode) { var recommendBalances = new List();//返回可使用的推荐库存余额 @@ -465,11 +465,17 @@ public class BalanceManager : DomainService, IBalanceManager Expression> expression = p => p.ItemCode == itemCode; expression = expression.And(p => validStatuses.Contains(p.Status)); expression = expression.And(p => p.IsActive); + //如果物品的有效期不是无限的, 要过滤掉过期库存 if (item.ValidityUnit != EnumValidityUnit.Infinite) { expression = expression.And(p => p.ExpireDate > DateTime.Now); } + //排除无箱码库存 + if (ispackingcode) + { + expression = expression.And(p => !string.IsNullOrEmpty(p.PackingCode)); + } //筛选有效库区 2023-6-29 李智慧 王旭 袁静雯 确认不需要做区域校验 //if (validLocationAreas.Any()) //{ diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs index 17d16cb80..2b6f3d945 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/IBalanceManager.cs @@ -33,5 +33,5 @@ public interface IBalanceManager : IDomainService Task> GetItemCodesOfLocationAsync(string locationCode); Task ModifyAsync(Balance balance); Task> GetListByLocationTypeAndInventoryStatusAsync(string itemCode, EnumInventoryStatus enumInventoryStatus, List enumLocationTypes); - Task> GetRecommendBalancesByLocationAsync(Guid traceId, string itemCode, decimal requestQty, List validLocations, List validStatuses); + Task> GetRecommendBalancesByLocationAsync(Guid traceId, string itemCode, decimal requestQty, List validLocations, List validStatuses,bool ispackingcode); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedReceiptJobs/DTOs/UnplannedReceiptJobDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedReceiptJobs/DTOs/UnplannedReceiptJobDTO.cs index ae7d5bcd4..b45beb94e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedReceiptJobs/DTOs/UnplannedReceiptJobDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/UnplannedReceiptJobs/DTOs/UnplannedReceiptJobDTO.cs @@ -1,3 +1,4 @@ +using System; using System.ComponentModel.DataAnnotations; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; @@ -19,7 +20,26 @@ public class UnplannedReceiptJobDTO : SfsJobDTOBase + /// 部门代码 + /// + [Display(Name = "部门代码")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string DeptCode { get; set; } + + /// + /// 部门名称 + /// + [Display(Name = "部门名称")] + [StringLength(SfsEfCorePropertyConst.NameLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string DeptName { get; set; } + + /// + /// 建档日 + /// + [Display(Name = "建档日")] + public DateTime BuildDate { get; set; } /// /// OA单据号 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index 48db37e3f..a4c20f257 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -96,16 +96,20 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA List newDetails = new List(); foreach (var detail in unplannedIssueRequest.Details) { + //需要复制一个这个方法 去掉区域参数 换成库位参数 + RecommendBalanceRequestInput input = new RecommendBalanceRequestInput(); if (unplannedIssueRequest.UnplannedIssueType == EnumUnplannedIssueType.Raw) { 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}】库位类型错误," + $"不是{EnumLocationType.RAW.GetDisplayName()}" + - $"或{EnumLocationType.SEMI.GetDisplayName()}】"); + $"或{EnumLocationType.SEMI.GetDisplayName()}" + + $"或{EnumLocationType.FG.GetDisplayName()}】"); } unplannedIssueRequest.DirectCreateNote = false; + input.IsPackingCode = true;//只查询带箱码的推荐 } if (unplannedIssueRequest.UnplannedIssueType == EnumUnplannedIssueType.Wip) { @@ -116,8 +120,7 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA $"不是{EnumLocationType.WIP.GetDisplayName()}】"); } } - //需要复制一个这个方法 去掉区域参数 换成库位参数 - RecommendBalanceRequestInput input = new RecommendBalanceRequestInput(); + input.ItemCode = detail.ItemCode; input.Locations = new List() { detail.LocationCode }; input.Qty = detail.Qty; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs index 31f50bae5..eb193e7f8 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs +++ b/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) { 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}】库位类型错误," + $"不是{EnumLocationType.RAW.GetDisplayName()}" + - $"或{EnumLocationType.SEMI.GetDisplayName()}】"); + $"或{EnumLocationType.SEMI.GetDisplayName()}】" + + $"或{EnumLocationType.FG.GetDisplayName()}】"); } unplannedReceiptRequest.DirectCreateNote = false; //需要复制一个这个方法 去掉区域参数 换成库位参数