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);
}