diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs new file mode 100644 index 000000000..3fbf6cd31 --- /dev/null +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections.Generic; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc; +using Win_in.Sfs.Auth.Application.Contracts; +using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.Store.Application.Contracts; + +namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs.IssueJobs; + +/// +/// +[ApiController] +[Route($"{PdaHostConst.ROOT_ROUTE}job/kitting-issue")] +public class KittingIssueJobsController : AbpController +{ + private readonly IKittingIssueJobAppService _kittingIssueJobAppService; + + private readonly IUserWorkGroupAppService _userWorkGroupAppService; + + public KittingIssueJobsController(IKittingIssueJobAppService kittingIssueJobAppService) + { + _kittingIssueJobAppService = kittingIssueJobAppService; + } + + /// + /// 获取列表 + /// + /// + /// + /// + /// + [HttpPost("list")] + public virtual async Task> GetListAsync(int pageSize, int pageIndex, + bool isFinished) + { + var status = new List(); + if (isFinished) + { + status.Add((int)EnumJobStatus.Done); + } + else + { + status.Add((int)EnumJobStatus.Open); + status.Add((int)EnumJobStatus.Wait); + status.Add((int)EnumJobStatus.Doing); + status.Add((int)EnumJobStatus.Partial); + } + + var jsonStatus = JsonSerializer.Serialize(status); + + var request = new SfsJobRequestInputBase + { + MaxResultCount = pageSize, + SkipCount = (pageIndex - 1) * pageSize, + Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC", + Condition = new Condition + { + Filters = new List { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") } + } + }; + + var list = await _kittingIssueJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false); + + return list; + } + + /// + /// 承接任务 + /// + /// + /// + [HttpPost("take/{id}")] + public virtual async Task TakeAsync(Guid id) + { + await _kittingIssueJobAppService.AcceptAsync(id).ConfigureAwait(false); + } + + /// + /// 取消承接任务 + /// + /// + /// + [HttpPost("cancel-take/{id}")] + public virtual async Task CancelTakeAsync(Guid id) + { + await _kittingIssueJobAppService.CancelAcceptAsync(id).ConfigureAwait(false); + } + + /// + /// 执行任务明细 + /// + /// + [HttpPost("ExecuteDetail/{masterId}")] + public async Task ExecuteDetailAsync(Guid masterId, Guid detailId, KittingIssueJobDetailDTO issueJobDetailDto) + { + await _kittingIssueJobAppService.ExecuteDetailAsync(masterId,detailId,issueJobDetailDto).ConfigureAwait(false); + } + + /// + /// 获取任务数量 + /// + /// + [HttpGet("count")] + public virtual async Task> CountAsync() + { + var status = new List + { + (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing, (int)EnumJobStatus.Partial, (int)EnumJobStatus.Wait + }; + var jsonStatus = JsonSerializer.Serialize(status); + + var request = new SfsJobRequestInputBase + { + Sorting = $"{nameof(InspectJobDTO.Priority)} ASC", + Condition = new Condition + { + Filters = new List + { + //new(nameof(InspectJobDTO.WorkGroupCode),jsonCodes,"In"), + new(nameof(InspectJobDTO.JobStatus), jsonStatus, "In") + } + } + }; + + var count = await _kittingIssueJobAppService.GetCountByFilterAsync(request).ConfigureAwait(false); + + return Ok(count); + } + + /// + /// 获取盘点任务详情 + /// + /// + /// + [HttpGet("{id}")] + public virtual async Task> GetAsync(Guid id) + { + var result = await _kittingIssueJobAppService.GetAsync(id).ConfigureAwait(false); + return Ok(result); + } + + /// + /// 根据Job Number 获取盘点任务列表 + /// + /// + /// + [HttpGet("by-number/{jobNumber}")] + public virtual async Task> GetByNumberAsync(string jobNumber) + { + var jobDto = await _kittingIssueJobAppService.GetByNumberAsync(jobNumber).ConfigureAwait(false); + if (jobDto == null) + { + throw new UserFriendlyException($"未找到编号为 {jobNumber} 的任务"); + } + + var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false); + if (!wlgCodes.Contains(jobDto.WorkGroupCode)) + { + return new NotFoundObjectResult($"任务属于工作组 {jobDto.WorkGroupCode}"); + } + + if (jobDto.JobStatus == EnumJobStatus.Doing && jobDto.AcceptUserId != CurrentUser.Id) + { + return new NotFoundObjectResult($"任务正在被 {jobDto.AcceptUserName} 处理"); + } + + return jobDto; + } +} diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs similarity index 99% rename from be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs rename to be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs index c8084e7d7..5caf96652 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs @@ -31,7 +31,7 @@ public class TransferLibJobController : AbpController } /// - /// 获取盘点任务详情 + /// /// /// /// diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/KittingRequestController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/KittingRequestController.cs new file mode 100644 index 000000000..5dd161872 --- /dev/null +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/KittingRequestController.cs @@ -0,0 +1,35 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Win_in.Sfs.Wms.Store.Application.Contracts; + +namespace Win_in.Sfs.Wms.Pda.Controllers.Stores; + +/// +/// Kitting叫料请求 +/// +[ApiController] +[Route($"{PdaHostConst.ROOT_ROUTE}store/kitting-request")] +public class KittingRequestController : AbpController +{ + private readonly IKittingIssueRequestAppService _kittingIssueRequestAppService; + + /// + /// + /// + public KittingRequestController(IKittingIssueRequestAppService kittingIssueRequestAppService) + { + _kittingIssueRequestAppService = kittingIssueRequestAppService; + } + + /// + /// Kitting叫料申请 + /// + /// + /// + [HttpPost("")] + public virtual async Task CreateAsync(KittingIssueRequestEditInput input) + { + await _kittingIssueRequestAppService.CreateAndHandleAsync(input).ConfigureAwait(false); + } +} diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs index f0e17a5b7..e5361fa7d 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs @@ -45,4 +45,6 @@ public interface IExpectOutAppService EnumInventoryStatus enumInventoryStatus, string lot, decimal qty); + + Task RemoveByNumberAsync(string number); } diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs index 252ff34cd..1f93d1907 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs @@ -64,15 +64,24 @@ public class ExpectOutAppService if (expectOut != null) { expectOut.Qty -= qty; + if (expectOut.Qty == 0) + { + await _repository.DeleteAsync(expectOut).ConfigureAwait(false); + } + else + { + await _repository.UpdateAsync(expectOut).ConfigureAwait(false); + } } + } - if (expectOut.Qty == 0) - { - await _repository.DeleteAsync(expectOut).ConfigureAwait(false); - } - else + [HttpPost("remove/job-number")] + public virtual async Task RemoveByNumberAsync(string number) + { + var expectOut = await _repository.GetListAsync(p => p.JobNumber == number).ConfigureAwait(false); + if (expectOut != null && expectOut.Any()) { - await _repository.UpdateAsync(expectOut).ConfigureAwait(false); + await _repository.DeleteManyAsync(expectOut).ConfigureAwait(false); } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs index 848f90ada..4ae42304a 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs @@ -278,6 +278,8 @@ public class KittingIssueJobAppService kittingIssueJobDetailDto.Status, kittingIssueJobDetailDto.HandledToLot, kittingIssueJobDetailDto.HandledToQty).ConfigureAwait(false); + await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false); + await KittingIssueRequestAppService.UpdateStatusCompletedAsync(kittingIssueJob.KittingRequestNumber) .ConfigureAwait(false);