diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs index 9c5a29854..529776dbb 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs @@ -109,4 +109,17 @@ public class ThirdLocationRequestController : AbpController return Ok(result); } + /// + /// 完成三方库请求 + /// + /// + /// + [HttpPost("complete/{id}")] + public virtual async Task> CompleteAsync(Guid id) + { + var result = await _thirdLocationRequestAppService.CompleteAsync(id).ConfigureAwait(false); + return Ok(result); + } + + } 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 9707f05ec..23af60ffa 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 @@ -59,25 +59,29 @@ public class ThirdLocationJobAppService } else { - var jobDetail= job.Details.FirstOrDefault(p => p.ItemCode == dto.Details[0].ItemCode); - - if(jobDetail==null) - { - throw new UserFriendlyException($"任务错误:未找到物品【{dto.Details[0].ItemCode} 的明细信息"); - } - else + foreach(var item in dto.Details) { - if (dto.Details[0].HandledQty > jobDetail.RecommendQty) + var jobDetail = job.Details.FirstOrDefault(p => p.ItemCode == item.ItemCode); + + if (jobDetail == null) { - throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际数量【{dto.Details[0].HandledQty}】不能大于推荐数量【{dto.Details[0].RecommendQty}】"); + throw new UserFriendlyException($"任务错误:未找到物品【{item.ItemCode} 的明细信息"); } - if (jobDetail.ToLocationCode != dto.Details[0].ToLocationCode) + else { - throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际目标库位【{dto.Details[0].ToLocationCode}】与申请目标库位【{jobDetail.ToLocationCode}】不一致"); + if (item.HandledQty > jobDetail.RecommendQty) + { + throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际数量【{item.HandledQty}】不能大于推荐数量【{item.RecommendQty}】"); + } + if (jobDetail.ToLocationCode != item.ToLocationCode) + { + throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际目标库位【{item.ToLocationCode}】与申请目标库位【{jobDetail.ToLocationCode}】不一致"); + } } - } - + } + + } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs index deeaa16ae..b3075b3ac 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs @@ -49,10 +49,12 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase(request); } + /// + /// 用来重写 完成请求 + /// + /// + /// + public override async Task CompleteAsync(Guid id) + { + var request = await _repository.GetAsync(id).ConfigureAwait(false); + + if (request.RequestStatus == EnumRequestStatus.Partial) + { + request.RequestStatus = EnumRequestStatus.Completed; + await Task.CompletedTask.ConfigureAwait(false); + //await LocalEventBus.PublishAsync(new SfsCompletedEntityEventData(request), false).ConfigureAwait(false); + await _repository.UpdateAsync(request).ConfigureAwait(false); + + } + else + { + throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消"); + } + var entitys = await _thirdLocationJobRepository.GetListAsync(p => p.RequestNumber == request.Number, "", true).ConfigureAwait(false); + + if (entitys.Any()) + { + foreach (var thirdLocationJob in entitys) + { + if (thirdLocationJob.JobStatus == EnumJobStatus.Partial) + { + thirdLocationJob.JobStatus = EnumJobStatus.Done; + await Task.CompletedTask.ConfigureAwait(false); + await LocalEventBus.PublishAsync(new SfsClosedEntityEventData(thirdLocationJob), false).ConfigureAwait(false); + await _thirdLocationJobRepository.UpdateAsync(thirdLocationJob).ConfigureAwait(false); + } + else if (thirdLocationJob.JobStatus == EnumJobStatus.Open) + { + thirdLocationJob.JobStatus = EnumJobStatus.Closed; + await Task.CompletedTask.ConfigureAwait(false); + await LocalEventBus.PublishAsync(new SfsClosedEntityEventData(thirdLocationJob), false).ConfigureAwait(false); + await _thirdLocationJobRepository.UpdateAsync(thirdLocationJob).ConfigureAwait(false); + } + else + { + + } + } + } + + return ObjectMapper.Map(request); + } + + /// /// 赋值Request业务属性 /// 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 aa86d7425..1556e7251 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 @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.AspNetCore.Routing.Matching; using Volo.Abp.EventBus; using Volo.Abp.Uow; using Win_in.Sfs.Basedata.Application.Contracts; @@ -24,13 +25,15 @@ public class ThirdLocationJobEventHandler : private readonly ILocationAppService _locationAppService; private readonly IThirdLocationRequestManager _thirdLocationRequestManager; private readonly ITransferLogAppService _transferLogAppService; + private readonly IThirdLocationJobRepository _thirdLocationJobRepository; - public ThirdLocationJobEventHandler(IThirdLocationNoteAppService thirdLocationNoteAppService, ITransferLogAppService transferLogAppService, IThirdLocationRequestManager thirdLocationRequestManager, ILocationAppService locationAppService) + public ThirdLocationJobEventHandler(IThirdLocationNoteAppService thirdLocationNoteAppService, IThirdLocationJobRepository thirdLocationJobRepository, ITransferLogAppService transferLogAppService, IThirdLocationRequestManager thirdLocationRequestManager, ILocationAppService locationAppService) { _thirdLocationNoteAppService = thirdLocationNoteAppService; _locationAppService = locationAppService; _thirdLocationRequestManager = thirdLocationRequestManager; _transferLogAppService = transferLogAppService; + _thirdLocationJobRepository = thirdLocationJobRepository; } /// @@ -119,21 +122,39 @@ public class ThirdLocationJobEventHandler : var transferLogs = new List(); - transferLogs.AddRange(await BuildCancelTransferLogsAsync(thirdLocationRequest).ConfigureAwait(false)); + transferLogs.AddRange(await BuildCancelTransferLogsAsync(thirdLocationRequest, entity.Details[0].ItemCode).ConfigureAwait(false)); await _transferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); - thirdLocationRequest.RequestStatus = EnumRequestStatus.Completed; - await _thirdLocationRequestManager.UpdateAsync(thirdLocationRequest).ConfigureAwait(false); + var jobEntities = await _thirdLocationJobRepository.GetListAsync(p => p.RequestNumber == entity.RequestNumber, "Number", true).ConfigureAwait(false); + bool isDone = false; + foreach (var job in jobEntities.Where(p=>p.Number!= entity.Number)) + { + if(job.JobStatus == EnumJobStatus.Done) + { + isDone = true; + } + else + { + isDone = false; + } + + } + if(isDone) + { + thirdLocationRequest.RequestStatus = EnumRequestStatus.Completed; + await _thirdLocationRequestManager.UpdateAsync(thirdLocationRequest).ConfigureAwait(false); + } + } } - private async Task> BuildCancelTransferLogsAsync(ThirdLocationRequest thirdLocationRequest) + private async Task> BuildCancelTransferLogsAsync(ThirdLocationRequest thirdLocationRequest,string itemCode) { var transferLogs = new List(); - foreach (var detail in thirdLocationRequest.Details.Where(detail => detail.IssuedQty-detail.ReceivedQty != 0)) + foreach (var detail in thirdLocationRequest.Details.Where(detail => detail.IssuedQty-detail.ReceivedQty != 0 && detail.ItemCode== itemCode)) { var transferLog = ObjectMapper.Map(detail); 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 783808a45..0eab56632 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 @@ -306,13 +306,18 @@ public class ThirdLocationRequestEventHandler } var fromLocation = await _locationAppService.GetByCodeAsync(thirdLocationRequestDetail.FromLocationCode).ConfigureAwait(false); - var job = jobs.FirstOrDefault(p => p.WorkGroupCode == fromLocation?.WorkGroupCode); - if (job == null || job.Details.Any(p => p.ToLocationCode != thirdLocationRequestDetail.ToLocationCode)) - { - job = BuildThirdLocationJobCreateInput(thirdLocationRequest, fromLocation); - jobs.Add(job); - } + + var job = BuildThirdLocationJobCreateInput(thirdLocationRequest, fromLocation); job.Details.AddRange(jobDetails); + jobs.Add(job); + + //var job = jobs.FirstOrDefault(p => p.WorkGroupCode == fromLocation?.WorkGroupCode); + //if (job == null || job.Details.Any(p => p.ToLocationCode != thirdLocationRequestDetail.ToLocationCode)) + //{ + // job = BuildThirdLocationJobCreateInput(thirdLocationRequest, fromLocation); + // jobs.Add(job); + //} + //job.Details.AddRange(jobDetails); }