diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs index ab4a124cc..9f8ae9759 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs @@ -8,6 +8,7 @@ using Polly.Caching; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Domain.Repositories; using Win_in.Sfs.Auth.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain; @@ -181,6 +182,17 @@ public class ThirdLocationJobController : AbpController await _thirdLocationJobAppService.CancelAcceptAsync(id).ConfigureAwait(false); } + /// + /// 关闭任务 + /// + /// + /// + [HttpPost("close-job/{id}")] + public virtual async Task CloseJobAsync(Guid id) + { + await _thirdLocationJobAppService.CloseJobAsync(id).ConfigureAwait(false); + } + /// /// 执行任务 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs index ee8aff47d..809f36e13 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDetailDTO.cs @@ -55,12 +55,12 @@ public class ThirdLocationJobDetailDTO : SfsJobRecommendFromDetailDTOBase, IHasT /// [Display(Name = "在途库库位")] public string OnTheWayLocationCode { get; set; } - + /// - /// 生产线 + /// 收货单件码 /// - [Display(Name = "生产线")] - public string ProdLine { get; set; } + [Display(Name = "收货单件码")] + public string SingleCodeJob { get; set; } /// /// 工作中心 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/IThirdLocationJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/IThirdLocationJobAppService.cs index 8bb1eef89..6f8a4fa50 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/IThirdLocationJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/IThirdLocationJobAppService.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -16,6 +17,7 @@ public interface IThirdLocationJobAppService bool includeDetails = false, CancellationToken cancellationToken = default); Task> GetByRequestNumberAsync(string requestNumber); + Task CloseJobAsync(Guid id); /// /// 保存拆箱时涉及的明细修改 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs index d57e227fd..1dccfbc08 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/Inputs/ThirdLocationJobDetailInput.cs @@ -67,11 +67,11 @@ public class ThirdLocationJobDetailInput : SfsJobRecommendFromDetailInputBase, I public string OnTheWayLocationCode { get; set; } /// - /// 生产线 + /// 收货单件码 /// - [Display(Name = "生产线")] + [Display(Name = "收货单件码")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string ProdLine { get; set; } + public string SingleCodeJob { get; set; } /// /// 工作中心 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDetailDTO.cs index 7b205cdaa..714896f0a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDetailDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDetailDTO.cs @@ -26,6 +26,12 @@ public class ThirdLocationRequestDetailDTO : SfsStoreDetailWithQtyDTOBase [Display(Name = "来源库位")] public string FromLocationCode { get; set; } + /// + /// 申请单件码 + /// + [Display(Name = "申请单件码")] + public string SingleCodeRequest { get; set; } + /// /// 来源库区 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestDetailInput.cs index aec149364..f4c6af449 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestDetailInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestDetailInput.cs @@ -29,11 +29,11 @@ public class ThirdLocationRequestDetailInput : SfsStoreDetailWithQtyInputBase public string FromLocationArea { get; set; } /// - /// 生产线 + /// 申请单件码 /// - [Display(Name = "生产线")] + [Display(Name = "申请单件码")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] - public string ProdLine { get; set; } + public string SingleCodeRequest { get; set; } /// /// 工作中心 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestImportInput.cs index ab15491c1..42f12ab08 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/Inputs/ThirdLocationRequestImportInput.cs @@ -8,13 +8,10 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts; public class ThirdLocationRequestImportInput : SfsStoreImportInputBase { /// - /// 叫料类型 + /// 类型 /// - [Display(Name = "叫料类型")] - [Required(ErrorMessage = "{0}是必填项")] - [ImporterHeader(Name = "叫料类型")] - [ExporterHeader(DisplayName = "叫料类型")] - [ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)] + [Display(Name = "类型")] + [Required(ErrorMessage = "{0}是必填项")] public string Type { get; set; } /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ThirdLocationJobs/ThirdLocationJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ThirdLocationJobs/ThirdLocationJobAppService.cs index 55281ef5f..1709eb245 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ThirdLocationJobs/ThirdLocationJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ThirdLocationJobs/ThirdLocationJobAppService.cs @@ -52,18 +52,21 @@ public class ThirdLocationJobAppService } if(dto.Details.Count==0) { - throw new UserFriendlyException($"任务错误:编号为【{job.Number} 的任务未包含明细"); + throw new UserFriendlyException($"任务错误:编号为【{dto.Number} 的任务未包含明细"); } else { - if (dto.Details[0].HandledQty > job.Details[0].RecommendQty) + var jobDetail= job.Details.FirstOrDefault(p => p.ItemCode == dto.Details[0].ItemCode); + + if (jobDetail.HandledQty + dto.Details[0].HandledQty > jobDetail.RecommendQty) { - throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际数量【{dto.Details[0].HandledQty}】不能大于申请数量【{dto.Details[0].RecommendQty}】"); + throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际数量【{jobDetail.HandledQty + dto.Details[0].HandledQty}】不能大于申请数量【{dto.Details[0].RecommendQty}】"); } - if(dto.Details[0].ToLocationCode != job.Details[0].ToLocationCode) + if (jobDetail.ToLocationCode != dto.Details[0].ToLocationCode) { - throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际目标库位【{dto.Details[0].ToLocationCode}】与申请目标库位【{job.Details[0].ToLocationCode}】不一致"); - } + throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际目标库位【{dto.Details[0].ToLocationCode}】与申请目标库位【{jobDetail.ToLocationCode}】不一致"); + } + } @@ -77,6 +80,18 @@ public class ThirdLocationJobAppService return handleDto; } + [HttpPost("close-job/{id}")] + public virtual async Task CloseJobAsync(Guid id) + { + var thirdLocationJob = await _repository.GetAsync(id).ConfigureAwait(false); + if (thirdLocationJob == null) + { + throw new UserFriendlyException($"未找到ID为 {id} 的任务"); + } + + await _thirdLocationJobManager.CloseAsync(thirdLocationJob).ConfigureAwait(false); + } + /// /// 根据物品和库位 检查是否存在发料任务 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs index 7cbf1dcaf..3f1d823c1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs @@ -73,7 +73,7 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase x.ToLocationArea) .Ignore(x => x.ToLocationGroup) .Ignore(x => x.ItemName).Ignore(x => x.ItemDesc1).Ignore(x => x.ItemDesc2) - .Ignore(x => x.ProdLine) + .Ignore(x => x.SingleCodeRequest) .Ignore(x => x.WorkStation) .Ignore(x => x.ExpiredTime) .Ignore(x => x.IssuedQty) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs index ab2930675..6f00ffed2 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs @@ -47,9 +47,9 @@ public class ThirdLocationJobDetail : SfsJobRecommendFromDetailEntityBase, IHasT public string OnTheWayLocationCode { get; set; } /// - /// 生产线 + /// 收货单件码 /// - public string ProdLine { get; set; } + public string SingleCodeJob { get; set; } /// /// 工作中心 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobManager.cs index f9b8dc84a..fa2a182ba 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobManager.cs @@ -20,7 +20,7 @@ public class ThirdLocationJobManager : SfsJobManagerBase - /// 执行任务 发料任务 + /// 执行三方库任务 /// /// /// @@ -32,7 +32,7 @@ public class ThirdLocationJobManager : SfsJobManagerBase p.ItemCode == entity.Details[0].ItemCode); + if (jobDetail.RecommendQty == jobDetail.HandledQty + input.Details[0].HandledQty) + { + jobDetail.HandledQty += input.Details[0].HandledQty; + isDone = true; + } + else + { + jobDetail.HandledQty = input.Details[0].HandledQty; + isDone = false; + } + + foreach (var item in entity.Details.FindAll(p => p.ItemCode != entity.Details[0].ItemCode)) + { + if (item.RecommendQty == item.HandledQty) + { + isDone = true; + } + else + { + isDone = false; + } + } + + if (isDone) + { + return await base.CompleteAsync(entity, user).ConfigureAwait(false); + } + else + { + entity.JobStatus = EnumJobStatus.Partial; + await PublishCompletedAsync(input).ConfigureAwait(false); + return await Repository.UpdateAsync(entity).ConfigureAwait(false); + } } public override void CheckDetails(ThirdLocationJob entity, AbpValidationResult result) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs index dbea45ed9..f63e5298b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs @@ -53,9 +53,9 @@ public class ThirdLocationRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasT public string OnTheWayLocationCode { get; set; } /// - /// 生产线 + /// 申请单件码 /// - public string ProdLine { get; set; } + public string SingleCodeRequest { get; set; } /// /// 工作中心 diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs index b4c3b9ac4..48bb34baa 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs @@ -50,7 +50,7 @@ public static class ThirdLocationJobDbContextModelCreatingExtensions b.Property(q => q.ToLocationGroup).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.FromLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.FromLocationArea).HasMaxLength(SfsPropertyConst.CodeLength); - b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.SingleCodeJob).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.WorkStation).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.Operation).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.DistributionType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion(); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs index a3c84d51e..48f48e92e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs @@ -50,7 +50,7 @@ public static class ThirdLocationRequestDbContextModelCreatingExtensions b.Property(q => q.FromLocationArea).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.OnTheWayLocationCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ExpiredTime).IsRequired(); - b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.SingleCodeRequest).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.WorkStation).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.IssuedQty).HasPrecision(18, 6); b.Property(q => q.ReceivedQty).HasPrecision(18, 6); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ThirdLocationJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ThirdLocationJobAutoMapperProfile.cs index 308e7c130..1d8d5fe6e 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ThirdLocationJobAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ThirdLocationJobAutoMapperProfile.cs @@ -44,6 +44,7 @@ public partial class StoreEventAutoMapperProfile : Profile .ForMember(x => x.FromWarehouseCode, y => y.MapFrom(d => d.HandledFromWarehouseCode)) .ForMember(x => x.ToLocationCode, y => y.MapFrom(d => d.ToLocationCode)) .Ignore(x => x.ToLocationArea) + .Ignore(x => x.ProdLine) .Ignore(x => x.ToLocationGroup) .Ignore(x => x.ToLocationErpCode) ; @@ -87,6 +88,7 @@ public partial class StoreEventAutoMapperProfile : Profile .ForMember(x => x.FromWarehouseCode, y => y.MapFrom(d => d.HandledFromWarehouseCode)) .ForMember(x => x.FromStatus, y => y.MapFrom(d => d.Status)) .ForMember(x => x.ToStatus, y => y.MapFrom(d => d.Status)) + .Ignore(x => x.ProdLine) ; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs index 5c9c76f3b..91b8bbbee 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/ThirdLocationRequestAutoMapperProfile.cs @@ -61,6 +61,7 @@ public partial class StoreEventAutoMapperProfile : Profile CreateMap() .ForMember(x => x.FromLocationCode, y => y.MapFrom(d => d.FromLocationCode)) + .Ignore(x => x.SingleCodeJob) .Ignore(x => x.RecommendFromLocationArea) .Ignore(x => x.RecommendFromLocationGroup) .Ignore(x => x.HandledFromLocationArea) @@ -126,7 +127,7 @@ public partial class StoreEventAutoMapperProfile : Profile .Ignore(x => x.HandledFromWarehouseCode) .Ignore(x => x.FromLocationCode) .Ignore(x => x.ToLocationCode) - .Ignore(x => x.ProdLine) + .Ignore(x => x.SingleCodeJob) .Ignore(x => x.WorkStation) .Ignore(x => x.HandledContainerCode) .Ignore(x => x.HandledExpireDate) @@ -150,7 +151,7 @@ public partial class StoreEventAutoMapperProfile : Profile .Ignore(x => x.DeliveryQty) .Ignore(x => x.FromLocationCode) .Ignore(x => x.ToLocationCode) - .Ignore(x => x.ProdLine) + .Ignore(x => x.SingleCodeJob) .Ignore(x => x.WorkStation) .Ignore(x => x.PositionCode) .Ignore(x => x.RecommendType) diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ThirdLocationJobEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ThirdLocationJobEventHandler.cs index 18d70ef66..b22884a92 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ThirdLocationJobEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ThirdLocationJobEventHandler.cs @@ -7,6 +7,7 @@ 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.Domain.Shared; @@ -15,17 +16,21 @@ namespace Win_in.Sfs.Wms.Store.Event.BusinessJob; public class ThirdLocationJobEventHandler : StoreEventHandlerBase - , ILocalEventHandler>,ILocalEventHandler> + , ILocalEventHandler>,ILocalEventHandler>, ILocalEventHandler> { private const EnumTransType TransType = EnumTransType.Issue; private readonly IThirdLocationNoteAppService _thirdLocationNoteAppService; private readonly ILocationAppService _locationAppService; + private readonly IThirdLocationRequestManager _thirdLocationRequestManager; + private readonly ITransferLogAppService _transferLogAppService; - public ThirdLocationJobEventHandler(IThirdLocationNoteAppService thirdLocationNoteAppService, ILocationAppService locationAppService) + public ThirdLocationJobEventHandler(IThirdLocationNoteAppService thirdLocationNoteAppService, ITransferLogAppService transferLogAppService, IThirdLocationRequestManager thirdLocationRequestManager, ILocationAppService locationAppService) { _thirdLocationNoteAppService = thirdLocationNoteAppService; _locationAppService = locationAppService; + _thirdLocationRequestManager = thirdLocationRequestManager; + _transferLogAppService = transferLogAppService; } /// @@ -104,6 +109,75 @@ public class ThirdLocationJobEventHandler : } + /// + /// 关闭任务后 + /// + /// + /// + [UnitOfWork] + public virtual async Task HandleEventAsync(SfsClosedEntityEventData eventData) + { + var entity = eventData.Entity; + + if (!string.IsNullOrEmpty(entity.RequestNumber)) + { + var thirdLocationRequest = await _thirdLocationRequestManager.GetByNumberAsync(entity.RequestNumber).ConfigureAwait(false); + + + var transferLogs = new List(); + transferLogs.AddRange(await BuildCancelTransferLogsAsync(thirdLocationRequest).ConfigureAwait(false)); + + await _transferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); + + thirdLocationRequest.RequestStatus = EnumRequestStatus.Abort; + await _thirdLocationRequestManager.UpdateAsync(thirdLocationRequest).ConfigureAwait(false); + + } + + } + + private async Task> BuildCancelTransferLogsAsync(ThirdLocationRequest thirdLocationRequest) + { + var transferLogs = new List(); + foreach (var detail in thirdLocationRequest.Details.Where(detail => detail.IssuedQty-detail.ReceivedQty != 0)) + { + var transferLog = ObjectMapper.Map(detail); + + LocationDTO fromLocationDTO = null; + LocationDTO toLocationDTO = null; + + fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false); + toLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false); + + transferLog.FromLocationCode = fromLocationDTO.Code; + transferLog.FromLocationArea = fromLocationDTO.AreaCode; + transferLog.FromLocationErpCode = fromLocationDTO.ErpLocationCode; + transferLog.FromLocationGroup = fromLocationDTO.LocationGroupCode; + transferLog.FromWarehouseCode = fromLocationDTO.WarehouseCode; + + transferLog.ToLocationCode = toLocationDTO.Code; + transferLog.ToLocationArea = toLocationDTO.AreaCode; + transferLog.ToLocationErpCode = toLocationDTO.ErpLocationCode; + transferLog.ToLocationGroup = toLocationDTO.LocationGroupCode; + transferLog.ToWarehouseCode = toLocationDTO.WarehouseCode; + transferLog.TransSubType = Enum.Parse(thirdLocationRequest.Type); + transferLog.TransType = TransType; + transferLog.DocNumber = thirdLocationRequest.Number; + transferLog.JobNumber = ""; + transferLog.Qty = detail.IssuedQty - detail.ReceivedQty; + + transferLog.FromPackingCode = ""; + transferLog.FromLot = ""; + transferLog.ToPackingCode = ""; + transferLog.ToLot = ""; + transferLog.FromStatus = EnumInventoryStatus.OK; + transferLog.ToStatus = EnumInventoryStatus.OK; + transferLogs.Add(transferLog); + } + + return transferLogs; + } + /// /// 去除箱码 托码 批次 /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs index 43b5d8fa0..1144fe96c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs @@ -381,9 +381,7 @@ public class ThirdLocationRequestEventHandler private async Task BuildThirdLocationJobDetailAsync(ThirdLocationRequestDetail thirdLocationRequestDetail, BalanceDTO balance, string toLocationGroupCode) { - - //ProductionLineDTO prodLine = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationGroupCode).ConfigureAwait(false); - + var detail = ObjectMapper.Map(balance); detail.WorkStation = thirdLocationRequestDetail.WorkStation; @@ -427,12 +425,9 @@ public class ThirdLocationRequestEventHandler else { throw new UserFriendlyException($"未获取到在途库代码"); - } - - - - //detail.ProdLine = prodLine == null ? toLocationGroupCode : prodLine.Code; - detail.ProdLine = toLocationGroupCode; + } + + await Task.CompletedTask.ConfigureAwait(false); return detail; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ThirdLocationNoteEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ThirdLocationNoteEventHandler.cs index 8f4df6c85..5f9a819e3 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ThirdLocationNoteEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ThirdLocationNoteEventHandler.cs @@ -51,27 +51,39 @@ public class ThirdLocationNoteEventHandler { //var thirdLocationRequest = await _thirdLocationRequestManager.GetByNumberAsync(entity.RequestNumber).ConfigureAwait(false); - var entities = await _ThirdLocationRequestRepository.GetListAsync(p => p.Number == entity.RequestNumber, "Number", true).ConfigureAwait(false); - if(entities.Count>0) + var requestEntities = await _ThirdLocationRequestRepository.GetListAsync(p => p.Number == entity.RequestNumber, "Number", true).ConfigureAwait(false); + if(requestEntities.Count>0 && entity.Details.Count>0) { - foreach (var item in entities[0].Details) + bool isDone = false; + var requestDetail = requestEntities[0].Details.FirstOrDefault(p => p.ItemCode == entity.Details[0].ItemCode); + if(requestDetail != null) { - //item.IssuedQty = entity.Details[0].RecommendQty; - item.ReceivedQty = entity.Details[0].HandledQty; - } - foreach(var item in entity.Details) + requestDetail.ReceivedQty += entity.Details[0].HandledQty; + if(requestDetail.IssuedQty == requestDetail.ReceivedQty) + { + isDone = true; + } + } + + foreach(var item in requestEntities[0].Details.FindAll(p=>p.ItemCode!= entity.Details[0].ItemCode)) { - if(item.Qty == item.HandledQty) + if(item.IssuedQty == item.ReceivedQty) { - await _thirdLocationRequestManager.CompleteAsync(entities[0]).ConfigureAwait(false); + isDone = true; } else { - await _thirdLocationRequestManager.UpdateAsync(entities[0]).ConfigureAwait(false); + isDone = false; } } - - + if (isDone) + { + await _thirdLocationRequestManager.CompleteAsync(requestEntities[0]).ConfigureAwait(false); + } + else + { + await _thirdLocationRequestManager.UpdateAsync(requestEntities[0]).ConfigureAwait(false); + } }