Browse Source

三方库增加请求完成功能

dev_DY_CC
周红军 11 months ago
parent
commit
8cee51fdc6
  1. 13
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationRequestController.cs
  2. 30
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ThirdLocationJobs/ThirdLocationJobAppService.cs
  3. 55
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs
  4. 33
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ThirdLocationJobEventHandler.cs
  5. 17
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs

13
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); return Ok(result);
} }
/// <summary>
/// 完成三方库请求
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("complete/{id}")]
public virtual async Task<ActionResult<ThirdLocationRequestDTO>> CompleteAsync(Guid id)
{
var result = await _thirdLocationRequestAppService.CompleteAsync(id).ConfigureAwait(false);
return Ok(result);
}
} }

30
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ThirdLocationJobs/ThirdLocationJobAppService.cs

@ -59,25 +59,29 @@ public class ThirdLocationJobAppService
} }
else else
{ {
var jobDetail= job.Details.FirstOrDefault(p => p.ItemCode == dto.Details[0].ItemCode); foreach(var item in dto.Details)
if(jobDetail==null)
{
throw new UserFriendlyException($"任务错误:未找到物品【{dto.Details[0].ItemCode} 的明细信息");
}
else
{ {
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}】不一致");
}
} }
}
}
} }

55
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs

@ -49,10 +49,12 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
private readonly IExpectOutAppService _expectOutAppService; private readonly IExpectOutAppService _expectOutAppService;
private readonly IBalanceAppService _balanceAppService; private readonly IBalanceAppService _balanceAppService;
private readonly IThirdLocationJobAppService _thirdLocationJobAppService; private readonly IThirdLocationJobAppService _thirdLocationJobAppService;
private readonly IThirdLocationJobRepository _thirdLocationJobRepository;
public ThirdLocationRequestAppService( public ThirdLocationRequestAppService(
IThirdLocationRequestRepository repository, IThirdLocationRequestRepository repository,
IThirdLocationJobAppService thirdLocationJobAppService, IThirdLocationJobAppService thirdLocationJobAppService,
IThirdLocationJobRepository thirdLocationJobRepository,
IThirdLocationRequestManager thirdLocationRequestManager, IThirdLocationRequestManager thirdLocationRequestManager,
IPreparationPlanManager preparationPlanManager, IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp, IItemStoreRelationAppService itemStoreRelationApp,
@ -77,6 +79,7 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
_expectOutAppService= expectOutAppService; _expectOutAppService= expectOutAppService;
_balanceAppService= balanceAppService; _balanceAppService= balanceAppService;
_thirdLocationJobAppService= thirdLocationJobAppService; _thirdLocationJobAppService= thirdLocationJobAppService;
_thirdLocationJobRepository= thirdLocationJobRepository;
} }
@ -240,6 +243,58 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
return ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(request); return ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(request);
} }
/// <summary>
/// 用来重写 完成请求
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public override async Task<ThirdLocationRequestDTO> 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<ThirdLocationRequest>(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>(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>(thirdLocationJob), false).ConfigureAwait(false);
await _thirdLocationJobRepository.UpdateAsync(thirdLocationJob).ConfigureAwait(false);
}
else
{
}
}
}
return ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(request);
}
/// <summary> /// <summary>
/// 赋值Request业务属性 /// 赋值Request业务属性
/// </summary> /// </summary>

33
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.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Routing.Matching;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Volo.Abp.Uow; using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
@ -24,13 +25,15 @@ public class ThirdLocationJobEventHandler :
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly IThirdLocationRequestManager _thirdLocationRequestManager; private readonly IThirdLocationRequestManager _thirdLocationRequestManager;
private readonly ITransferLogAppService _transferLogAppService; 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; _thirdLocationNoteAppService = thirdLocationNoteAppService;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_thirdLocationRequestManager = thirdLocationRequestManager; _thirdLocationRequestManager = thirdLocationRequestManager;
_transferLogAppService = transferLogAppService; _transferLogAppService = transferLogAppService;
_thirdLocationJobRepository = thirdLocationJobRepository;
} }
/// <summary> /// <summary>
@ -119,21 +122,39 @@ public class ThirdLocationJobEventHandler :
var transferLogs = new List<TransferLogEditInput>(); var transferLogs = new List<TransferLogEditInput>();
transferLogs.AddRange(await BuildCancelTransferLogsAsync(thirdLocationRequest).ConfigureAwait(false)); transferLogs.AddRange(await BuildCancelTransferLogsAsync(thirdLocationRequest, entity.Details[0].ItemCode).ConfigureAwait(false));
await _transferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false); await _transferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
thirdLocationRequest.RequestStatus = EnumRequestStatus.Completed; var jobEntities = await _thirdLocationJobRepository.GetListAsync(p => p.RequestNumber == entity.RequestNumber, "Number", true).ConfigureAwait(false);
await _thirdLocationRequestManager.UpdateAsync(thirdLocationRequest).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<List<TransferLogEditInput>> BuildCancelTransferLogsAsync(ThirdLocationRequest thirdLocationRequest) private async Task<List<TransferLogEditInput>> BuildCancelTransferLogsAsync(ThirdLocationRequest thirdLocationRequest,string itemCode)
{ {
var transferLogs = new List<TransferLogEditInput>(); var transferLogs = new List<TransferLogEditInput>();
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<ThirdLocationRequestDetail, TransferLogEditInput>(detail); var transferLog = ObjectMapper.Map<ThirdLocationRequestDetail, TransferLogEditInput>(detail);

17
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 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)) var job = BuildThirdLocationJobCreateInput(thirdLocationRequest, fromLocation);
{
job = BuildThirdLocationJobCreateInput(thirdLocationRequest, fromLocation);
jobs.Add(job);
}
job.Details.AddRange(jobDetails); 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);
} }

Loading…
Cancel
Save