diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/TransferLibJobs/TransferLibJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/TransferLibJobs/TransferLibJobManager.cs index c014779a9..3ec6a7975 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/TransferLibJobs/TransferLibJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/TransferLibJobs/TransferLibJobManager.cs @@ -47,6 +47,145 @@ public class TransferLibJobManager : SfsJobManagerBase CompleteAsync(TransferLibJob input, ICurrentUser user) { TransferLibJob entity = await Repository.FindAsync(input.Id).ConfigureAwait(false); + entity.RequestNumber = input.RequestNumber; + entity.JobNumber = input.JobNumber; + entity.Type = input.Type; + entity.UseOnTheWayLocation = input.UseOnTheWayLocation; + entity.ConfirmTime = input.ConfirmTime; + entity.CreationTime = input.CreationTime; + entity.CreatorId = input.CreatorId; + entity.LastModificationTime = input.LastModificationTime; + entity.LastModifierId = input.LastModifierId; + entity.Remark = input.Remark; + entity.Worker = input.Worker; + entity.Number = input.Number; + entity.UpStreamJobNumber = input.UpStreamJobNumber; + entity.JobDescription = input.JobDescription; + entity.JobType = input.JobType; + entity.JobStatus = input.JobStatus; + entity.Priority = input.Priority; + entity.PriorityIncrement = input.PriorityIncrement; + entity.WorkGroupCode = input.WorkGroupCode; + entity.IsAutoComplete = input.IsAutoComplete; + entity.AcceptUserId = input.AcceptUserId; + entity.AcceptUserName = input.AcceptUserName; + entity.AcceptTime = input.AcceptTime; + entity.CompleteUserId = input.CompleteUserId; + entity.CompleteUserName = input.CompleteUserName; + entity.CompleteTime = input.CompleteTime; + entity.WarehouseCode = input.WarehouseCode; + entity.Confirmed = input.Confirmed; + entity.CallBusinessType = input.CallBusinessType; + entity.CallJobNumber = input.CallJobNumber; + entity.CallRequestNumber = input.CallRequestNumber; + entity.CallServerName = input.CallServerName; + foreach (var entityDetail in entity.Details) + { + var inputDetail = input.Details.FirstOrDefault(itm => itm.Id == entityDetail.Id); + if (inputDetail != null) + { + entityDetail.OnTheWayLocationCode = inputDetail.OnTheWayLocationCode; + entityDetail.Reason = inputDetail.Reason; + entityDetail.JobStatus = inputDetail.JobStatus; + //entityDetail.CreationTime = inputDetail.CreationTime; + //entityDetail.CreatorId = inputDetail.CreatorId; + entityDetail.LastModificationTime = inputDetail.LastModificationTime; + entityDetail.LastModifierId = inputDetail.LastModifierId; + //entityDetail.MasterID = inputDetail.MasterID; + entityDetail.Number = inputDetail.Number; + entityDetail.Remark = inputDetail.Remark; + entityDetail.ItemName = inputDetail.ItemName; + entityDetail.ItemDesc1 = inputDetail.ItemDesc1; + entityDetail.ItemDesc2 = inputDetail.ItemDesc2; + entityDetail.ItemCode = inputDetail.ItemCode; + entityDetail.Uom = inputDetail.Uom; + entityDetail.StdPackQty = inputDetail.StdPackQty; + entityDetail.RequestLocationErpCode = inputDetail.RequestLocationErpCode; + entityDetail.HandledToArriveDate = inputDetail.HandledToArriveDate; + entityDetail.HandledToProduceDate = inputDetail.HandledToProduceDate; + entityDetail.HandledToExpireDate = inputDetail.HandledToExpireDate; + entityDetail.RequestLocationArea = inputDetail.RequestLocationArea; + entityDetail.RequestLocationCode = inputDetail.RequestLocationCode; + entityDetail.RecommendType = inputDetail.RecommendType; + entityDetail.RequestLocationGroup = inputDetail.RequestLocationGroup; + entityDetail.RequestWarehouseCode = inputDetail.RequestWarehouseCode; + entityDetail.Status = inputDetail.Status; + entityDetail.CallBusinessType = inputDetail.CallBusinessType; + entityDetail.CallJobNumber = inputDetail.CallJobNumber; + entityDetail.CallRequestNumber = inputDetail.CallRequestNumber; + entityDetail.CallServerName = inputDetail.CallServerName; + entityDetail.RecommendFromArriveDate = inputDetail.RecommendFromArriveDate; + entityDetail.RecommendFromContainerCode = inputDetail.RecommendFromContainerCode; + entityDetail.RecommendFromExpireDate = inputDetail.RecommendFromExpireDate; + entityDetail.RecommendFromLocationArea = inputDetail.RecommendFromLocationArea; + entityDetail.RecommendFromLocationCode = inputDetail.RecommendFromLocationCode; + entityDetail.RecommendFromLocationErpCode = inputDetail.RecommendFromLocationErpCode; + entityDetail.RecommendFromLocationGroup = inputDetail.RecommendFromLocationGroup; + entityDetail.RecommendFromLot = inputDetail.RecommendFromLot; + entityDetail.RecommendFromPackingCode = inputDetail.RecommendFromPackingCode; + entityDetail.RecommendFromProduceDate = inputDetail.RecommendFromProduceDate; + entityDetail.RecommendFromQty = inputDetail.RecommendFromQty; + entityDetail.RecommendFromSupplierBatch = inputDetail.RecommendFromSupplierBatch; + entityDetail.RecommendFromWarehouseCode = inputDetail.RecommendFromWarehouseCode; + entityDetail.RecommendToArriveDate = inputDetail.RecommendToArriveDate; + entityDetail.RecommendToContainerCode = inputDetail.RecommendToContainerCode; + entityDetail.RecommendToExpireDate = inputDetail.RecommendToExpireDate; + entityDetail.RecommendToLocationArea = inputDetail.RecommendToLocationArea; + entityDetail.RecommendToLocationCode = inputDetail.RecommendToLocationCode; + entityDetail.RecommendToLocationErpCode = inputDetail.RecommendToLocationErpCode; + entityDetail.RecommendToLocationGroup = inputDetail.RecommendToLocationGroup; + entityDetail.RecommendToLot = inputDetail.RecommendToLot; + entityDetail.RecommendToPackingCode = inputDetail.RecommendToPackingCode; + entityDetail.RecommendToProduceDate = inputDetail.RecommendToProduceDate; + entityDetail.RecommendToQty = inputDetail.RecommendToQty; + entityDetail.RecommendToSupplierBatch = inputDetail.RecommendToSupplierBatch; + entityDetail.RecommendToWarehouseCode = inputDetail.RecommendToWarehouseCode; + entityDetail.HandledFromArriveDate = inputDetail.HandledFromArriveDate; + entityDetail.HandledFromContainerCode = inputDetail.HandledFromContainerCode; + entityDetail.HandledFromExpireDate = inputDetail.HandledFromExpireDate; + entityDetail.HandledFromLocationArea = inputDetail.HandledFromLocationArea; + entityDetail.HandledFromLocationCode = inputDetail.HandledFromLocationCode; + entityDetail.HandledFromLocationErpCode = inputDetail.HandledFromLocationErpCode; + entityDetail.HandledFromLocationGroup = inputDetail.HandledFromLocationGroup; + entityDetail.HandledFromLot = inputDetail.HandledFromLot; + entityDetail.HandledFromPackingCode = inputDetail.HandledFromPackingCode; + entityDetail.HandledFromProduceDate = inputDetail.HandledFromProduceDate; + entityDetail.HandledFromQty = inputDetail.HandledFromQty; + entityDetail.HandledFromSupplierBatch = inputDetail.HandledFromSupplierBatch; + entityDetail.HandledFromWarehouseCode = inputDetail.HandledFromWarehouseCode; + entityDetail.HandledToContainerCode = inputDetail.HandledToContainerCode; + entityDetail.HandledToLocationArea = inputDetail.HandledToLocationArea; + entityDetail.HandledToLocationCode = inputDetail.HandledToLocationCode; + entityDetail.HandledToLocationErpCode = inputDetail.HandledToLocationErpCode; + entityDetail.HandledToLocationGroup = inputDetail.HandledToLocationGroup; + entityDetail.HandledToLot = inputDetail.HandledToLot; + entityDetail.HandledToPackingCode = inputDetail.HandledToPackingCode; + entityDetail.HandledToQty = inputDetail.HandledToQty; + entityDetail.HandledToSupplierBatch = inputDetail.HandledToSupplierBatch; + entityDetail.HandledToWarehouseCode = inputDetail.HandledToWarehouseCode; + entityDetail.IsItemCodeFrom = inputDetail.IsItemCodeFrom; + entityDetail.IsItemCodeTo = inputDetail.IsItemCodeTo; + entityDetail.IsLocationAreaFrom = inputDetail.IsLocationAreaFrom; + entityDetail.IsLocationAreaTo = inputDetail.IsLocationAreaTo; + entityDetail.IsLocationCodeFrom = inputDetail.IsLocationCodeFrom; + entityDetail.IsLocationCodeTo = inputDetail.IsLocationCodeTo; + entityDetail.IsLocationErpCodeFrom = inputDetail.IsLocationErpCodeFrom; + entityDetail.IsLocationErpCodeTo = inputDetail.IsLocationErpCodeTo; + entityDetail.IsLocationGroupFrom = inputDetail.IsLocationGroupFrom; + entityDetail.IsLocationGroupTo = inputDetail.IsLocationGroupTo; + entityDetail.IsLotFrom = inputDetail.IsLotFrom; + entityDetail.IsLotTo = inputDetail.IsLotTo; + entityDetail.IsPackingCodeFrom = inputDetail.IsPackingCodeFrom; + entityDetail.IsPackingCodeTo = inputDetail.IsPackingCodeTo; + entityDetail.IsQtyFrom = inputDetail.IsQtyFrom; + entityDetail.IsQtyTo = inputDetail.IsQtyTo; + entityDetail.IsStatusFrom = inputDetail.IsStatusFrom; + entityDetail.IsStatusTo = inputDetail.IsStatusTo; + entityDetail.PositionCode = inputDetail.PositionCode; + entityDetail.ProdLine = inputDetail.ProdLine; + entityDetail.RequestQty = inputDetail.RequestQty; + } + } return await base.CompleteAsync(entity, user).ConfigureAwait(false); } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/TransferLibNoteAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/TransferLibNoteAutoMapperProfile.cs index ce730668e..093c92acf 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/TransferLibNoteAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/TransferLibNoteAutoMapperProfile.cs @@ -11,24 +11,34 @@ public partial class StoreEventAutoMapperProfile : Profile { private void TransferLibNoteAutoMapperProfile() { - CreateMap() - - .MapNegativeQty() - .ForMember(dest => dest.DocNumber, opts => opts.MapFrom(src => src.Number)) + CreateMap(MemberList.None) + .Ignore(x => x.ExtraProperties) .Ignore(x => x.DocNumber) .Ignore(x => x.JobNumber) .Ignore(x => x.Worker) - .Ignore(x => x.ManageType) .Ignore(x => x.TransType) .Ignore(x => x.TransSubType) + .Ignore(x => x.PackingCode) + .Ignore(x => x.Lot) + .Ignore(x => x.Status) .Ignore(x => x.TransInOut) + .Ignore(x => x.LocationCode) + .Ignore(x => x.LocationGroup) + .Ignore(x => x.LocationErpCode) + .Ignore(x => x.LocationArea) + .Ignore(x => x.ContainerCode) + .Ignore(x => x.ManageType) + .Ignore(x => x.WarehouseCode) + ; + + CreateMap(MemberList.None) .Ignore(x => x.ExtraProperties) + .Ignore(x => x.DocNumber) + .Ignore(x => x.JobNumber) + .Ignore(x => x.Worker) + .Ignore(x => x.TransType) + .Ignore(x => x.TransSubType) ; - ; - CreateMap() - .ReverseMap(); - CreateMap() - .ReverseMap(); } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/TransferLibNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/TransferLibNoteEventHandler.cs new file mode 100644 index 000000000..dbe0024d7 --- /dev/null +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/TransferLibNoteEventHandler.cs @@ -0,0 +1,206 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.EventBus; +using Volo.Abp.Uow; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Shared.Event; +using Win_in.Sfs.Wms.Inventory.Application.Contracts; +using Win_in.Sfs.Wms.Store.Application.Contracts; +using Win_in.Sfs.Wms.Store.Domain; +using Win_in.Sfs.Wms.Store.Event.Transaction; + +namespace Win_in.Sfs.Wms.Store.Event.Transactions; + +public class TransferLibNoteEventHandler + : StoreInventoryEventHandlerBase + , ILocalEventHandler> + , ILocalEventHandler> + , ILocalEventHandler>> +{ + private const EnumTransType TransType = EnumTransType.TransferLib; + private readonly ILocationAppService _locationAppService; + private readonly ITransferLogAppService _transferLogAppService; + + public TransferLibNoteEventHandler(ILocationAppService locationAppService, ITransferLogAppService transferLogAppService) + { + _locationAppService = locationAppService; + _transferLogAppService = transferLogAppService; + } + + /// + /// 创建 后 + /// + /// + /// + [UnitOfWork] + public virtual async Task HandleEventAsync(SfsCreatedEntityEventData eventData) + { + var entity = eventData.Entity; + + var route = entity.UseOnTheWayLocation + ? EnumTransferRoute.SourceToOnTheWay + : EnumTransferRoute.SourceToDestination; + + var inputList = await BuildTransferLogsAsync(entity, route).ConfigureAwait(false); + await AddTransferLogsAsync(inputList).ConfigureAwait(false); + } + + /// + /// 批量创建 后 + /// + /// + /// + [UnitOfWork] + public virtual async Task HandleEventAsync(SfsCreatedEntityEventData> eventData) + { + foreach (var entity in eventData.Entity) + { + var route = entity.UseOnTheWayLocation + ? EnumTransferRoute.SourceToOnTheWay + : EnumTransferRoute.SourceToDestination; + + var inputList = await BuildTransferLogsAsync(entity, route).ConfigureAwait(false); + await AddTransferLogsAsync(inputList).ConfigureAwait(false); + } + } + + /// + /// 确认 后 + /// + /// + /// + [UnitOfWork] + public virtual async Task HandleEventAsync(SfsConfirmedEntityEventData eventData) + { + var entity = eventData.Entity; + + var inputList = await BuildTransferLogsAsync(entity, EnumTransferRoute.OnTheWayToDestination).ConfigureAwait(false); + await AddTransferLogsAsync(inputList).ConfigureAwait(false); + } + + private async Task AddTransferLogsAsync(List inputList) + { + var transferLogs = new List(); + + transferLogs.AddRange(inputList); + + await _transferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); + + } + + /// + /// 构建正常的input + /// + /// + /// + /// + private async Task> BuildTransferLogsAsync(TransferLibNote note, EnumTransferRoute route) + { + var transferLogs = new List(); + + foreach (var detail in note.Details) + { + //var transferLog = ObjectMapper.Map(detail); + //0416修改 + TransferLogEditInput transferLog = new TransferLogEditInput(); + //transferLog.TransferNumber = ""; + transferLog.FromPackingCode = detail.HandledFromPackingCode; + transferLog.ToPackingCode = detail.HandledToPackingCode; + transferLog.ItemName = detail.ItemName; + transferLog.ItemDesc1 = detail.ItemDesc1; + transferLog.ItemDesc2 = detail.ItemDesc2; + transferLog.ItemCode = detail.ItemCode; + transferLog.Uom = detail.Uom; + transferLog.Qty = detail.HandledToQty; + transferLog.StdPackQty = detail.StdPackQty; + //transferLog.FromTransNumber = detail.FromTransNumber; + transferLog.SupplierBatch = detail.HandledToSupplierBatch; + transferLog.ArriveDate = detail.HandledToArriveDate; + transferLog.ProduceDate = detail.HandledToProduceDate; + transferLog.ExpireDate = detail.HandledToExpireDate; + transferLog.FromLot = detail.HandledFromLot; + transferLog.FromStatus = detail.Status; + transferLog.FromWarehouseCode = detail.HandledFromWarehouseCode; + transferLog.FromLocationCode = detail.HandledFromLocationCode; + transferLog.FromLocationArea = detail.HandledFromLocationArea; + transferLog.FromLocationGroup = detail.HandledFromLocationGroup; + transferLog.FromLocationErpCode = detail.HandledFromLocationErpCode; + transferLog.FromContainerCode = detail.HandledFromContainerCode; + //transferLog.ToTransNumber = detail.ToTransNumber; + transferLog.ToLot = detail.HandledToLot; + transferLog.ToStatus = detail.Status; + transferLog.ToWarehouseCode = detail.HandledToWarehouseCode; + transferLog.ToLocationCode = detail.HandledToLocationCode; + transferLog.ToLocationArea = detail.HandledToLocationArea; + transferLog.ToLocationGroup = detail.HandledToLocationGroup; + transferLog.ToLocationErpCode = detail.HandledToLocationErpCode; + transferLog.ToContainerCode = detail.HandledToContainerCode; + transferLog.TransType = EnumTransType.TransferLib; + transferLog.TransSubType = EnumTransSubType.None; + //transferLog.ActiveDate = detail.ActiveDate; + //transferLog.TransferTime = detail.TransferTime; + transferLog.Worker = note.Worker; + transferLog.JobNumber = note.JobNumber; + transferLog.DocNumber = note.Number; + transferLog.TenantId = detail.TenantId; + transferLog.Remark = detail.Remark; + + var fromLocation = await _locationAppService.GetByCodeAsync(detail.HandledFromLocationCode).ConfigureAwait(false); + var toLocation = await _locationAppService.GetByCodeAsync(detail.HandledToLocationCode).ConfigureAwait(false); + var transferOnTheWay = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false); + + switch (route) + { + case EnumTransferRoute.SourceToOnTheWay: + transferLog.FromLocationCode = fromLocation.Code; + transferLog.FromLocationArea = fromLocation.AreaCode; + transferLog.FromLocationErpCode = fromLocation.ErpLocationCode; + transferLog.FromLocationGroup = fromLocation.LocationGroupCode; + + transferLog.ToLocationCode = transferOnTheWay.Code; + transferLog.ToLocationArea = transferOnTheWay.AreaCode; + transferLog.ToLocationErpCode = transferOnTheWay.ErpLocationCode; + transferLog.ToLocationGroup = transferOnTheWay.LocationGroupCode; + break; + case EnumTransferRoute.OnTheWayToDestination: + transferLog.FromLocationCode = transferOnTheWay.Code; + transferLog.FromLocationArea = transferOnTheWay.AreaCode; + transferLog.FromLocationErpCode = transferOnTheWay.ErpLocationCode; + transferLog.FromLocationGroup = transferOnTheWay.LocationGroupCode; + + transferLog.ToLocationCode = toLocation.Code; + transferLog.ToLocationArea = toLocation.AreaCode; + transferLog.ToLocationErpCode = toLocation.ErpLocationCode; + transferLog.ToLocationGroup = toLocation.LocationGroupCode; + break; + case EnumTransferRoute.SourceToDestination: + transferLog.FromLocationCode = fromLocation.Code; + transferLog.FromLocationArea = fromLocation.AreaCode; + transferLog.FromLocationErpCode = fromLocation.ErpLocationCode; + transferLog.FromLocationGroup = fromLocation.LocationGroupCode; + + transferLog.ToLocationCode = toLocation.Code; + transferLog.ToLocationArea = toLocation.AreaCode; + transferLog.ToLocationErpCode = toLocation.ErpLocationCode; + transferLog.ToLocationGroup = toLocation.LocationGroupCode; + break;; + default: + throw new ArgumentOutOfRangeException(nameof(route), route, null); + } + + transferLog.TransType = TransType; + transferLog.TransSubType = Enum.Parse(note.Type); + transferLog.Worker = note.Worker; + transferLog.DocNumber = note.Number; + transferLog.JobNumber = note.JobNumber; + + transferLogs.Add(transferLog); + } + + return transferLogs; + } +} + +