diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/InjectionJobController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/InjectionJobController.cs new file mode 100644 index 000000000..150bfd5f9 --- /dev/null +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/InjectionJobController.cs @@ -0,0 +1,195 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Polly.Caching; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc; +using Win_in.Sfs.Auth.Application.Contracts; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.Inventory.Application.Contracts; +using Win_in.Sfs.Wms.Store.Application.Contracts; + +namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs; + +/// +/// 注塑叫料任务 +/// +[ApiController] +[Route($"{PdaHostConst.ROOT_ROUTE}job/injection")] +public class InjectionJobController : AbpController +{ + private readonly IInjectionJobAppService _injectionJobAppService; + + private readonly IUserWorkGroupAppService _userWorkGroupAppService; + + private readonly IDictAppService _dictApp; + + /// + /// + /// + /// + /// + public InjectionJobController( + IInjectionJobAppService injectionJobAppService, + IDictAppService dictApp + , IUserWorkGroupAppService userWorkGroupAppService) + { + _userWorkGroupAppService = userWorkGroupAppService; + _injectionJobAppService = injectionJobAppService; + _dictApp = dictApp; + } + + /// + /// 获取任务详情 + /// + /// + /// + [HttpGet("{id}")] + + public virtual async Task> GetAsync(Guid id) + { + var result = await _injectionJobAppService.GetAsync(id).ConfigureAwait(false); + return Ok(result); + } + + /// + /// 获取列表 筛选 + /// + /// + /// + [HttpPost("list")] + public virtual async Task> GetListAsync(SfsJobRequestInputBase sfsRequestDTO) + { + var list = await _injectionJobAppService.GetPagedListByFilterAsync(sfsRequestDTO, true).ConfigureAwait(false); + return list; + } + + /// + /// 获取列表 + /// + /// + /// + /// + [HttpGet("list")] + public virtual async Task> GetListAsync(int pageSize, int pageIndex) + { + var status = new List() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing }; + var jsonStatus = JsonSerializer.Serialize(status); + + var request = new SfsJobRequestInputBase + { + MaxResultCount = pageSize, + SkipCount = (pageIndex - 1) * pageSize, + Sorting = $"{nameof(InjectionJobDTO.CreationTime)} ASC", + Condition = new Condition + { + Filters = new List + { + new(nameof(IssueJobDTO.JobStatus),jsonStatus,"In") + } + } + + }; + + var list = await _injectionJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false); + + + return list; + } + + /// + /// 根据Job Number 获取任务列表 + /// + /// + /// + [HttpGet("by-number/{jobNumber}")] + public virtual async Task> GetByNumberAsync(string jobNumber) + { + var jobDto = await _injectionJobAppService.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; + } + + /// + /// 获取任务数量 + /// + /// + [HttpGet("count")] + public virtual async Task> CountAsync() + { + var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false); + var jsonCodes = JsonSerializer.Serialize(wlgCodes); + + var status = new List() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing }; + var jsonStatus = JsonSerializer.Serialize(status); + + var request = new SfsJobRequestInputBase + { + Sorting = $"{nameof(InjectionJobDTO.Priority)} ASC", + Condition = new Condition + { + Filters = new List + { + new(nameof(InjectionJobDTO.WorkGroupCode),jsonCodes,"In"), + new(nameof(InjectionJobDTO.JobStatus),jsonStatus,"In") + } + } + }; + + var count = await _injectionJobAppService.GetCountByFilterAsync(request).ConfigureAwait(false); + + return Ok(count); + } + + /// + /// 承接任务 + /// + /// + /// + [HttpPost("take/{id}")] + public virtual async Task TakeAsync(Guid id) + { + await _injectionJobAppService.AcceptAsync(id).ConfigureAwait(false); + } + + /// + /// 取消承接任务 + /// + /// + /// + [HttpPost("cancel-take/{id}")] + public virtual async Task CancelTakeAsync(Guid id) + { + await _injectionJobAppService.CancelAcceptAsync(id).ConfigureAwait(false); + } + + /// + /// 执行任务 + /// + /// + /// + /// + [HttpPost("finish/{id}")] + public virtual async Task FinishAsync(Guid id, [FromBody] InjectionJobDTO dto) + { + await _injectionJobAppService.CompleteAsync(id, dto).ConfigureAwait(false); + } +} diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionNoteController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionNoteController.cs new file mode 100644 index 000000000..9039a343f --- /dev/null +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionNoteController.cs @@ -0,0 +1,38 @@ +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; + +/// +/// 注塑叫料记录 +/// +[ApiController] +[Route($"{PdaHostConst.ROOT_ROUTE}store/injection-note")] + +public class InjectionNoteController : AbpController +{ + private readonly IInjectionNoteAppService _injectionNoteAppService; + + /// + /// + /// + /// + public InjectionNoteController(IInjectionNoteAppService injectionNoteAppService) + { + _injectionNoteAppService = injectionNoteAppService; + } + + /// + /// 创建注塑叫料记录 + /// + /// CreateInput + /// + [HttpPost("")] + public virtual async Task CreateAsync(InjectionNoteEditInput input) + { + await _injectionNoteAppService.CreateAsync(input).ConfigureAwait(false); + } + +} diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionRequestController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionRequestController.cs new file mode 100644 index 000000000..e3ddeda50 --- /dev/null +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/InjectionRequestController.cs @@ -0,0 +1,51 @@ +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; + +/// +/// 注塑叫料请求 +/// +[ApiController] +[Route($"{PdaHostConst.ROOT_ROUTE}store/injection-request")] + +public class InjectionRequestController : AbpController +{ + private readonly IInjectionRequestAppService _injectionRequestAppService; + + /// + /// + /// + /// + public InjectionRequestController(IInjectionRequestAppService InjectionRequestAppService) + { + _injectionRequestAppService = InjectionRequestAppService; + } + + /// + /// 注塑叫料申请 + /// + /// + /// + [HttpPost("")] + public virtual async Task CreateAsync(InjectionRequestEditInput input) + { + _ = await _injectionRequestAppService.CreateAsync(input).ConfigureAwait(false); + } + + /// + /// 根据number获取注塑叫料申请详情 + /// + /// + /// + [HttpGet("{number}")] + + public virtual async Task> GetAsync(string number) + { + var result = await _injectionRequestAppService.GetByNumberAsync(number).ConfigureAwait(false); + return Ok(result); + } + +} diff --git a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs index 9006c134d..0e6e03ead 100644 --- a/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs +++ b/be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs @@ -25,7 +25,7 @@ public class ThirdLocationNoteController : AbpController } /// - /// 创建器具转移记录 + /// 创建三方库转移记录 /// /// CreateInput /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/InjectionRequests/InjectionRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/InjectionRequests/InjectionRequestAppService.cs index b65620308..4286f8906 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/InjectionRequests/InjectionRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/InjectionRequests/InjectionRequestAppService.cs @@ -15,6 +15,7 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories; using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Basedata.Application; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared; @@ -39,7 +40,8 @@ public class InjectionRequestAppService : SfsStoreRequestAppServiceBase(input); var result = await _injectionRequestManager.CreateByNumberAsync(entity).ConfigureAwait(false); @@ -116,6 +115,22 @@ public class InjectionRequestAppService : SfsStoreRequestAppServiceBase + /// 赋值Request业务属性 + /// + /// + /// + private async Task SetRequestAutoPropertiesAsync(InjectionRequestEditInput entity) + { + var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false); + Check.NotNull(tranType, "事务类型", "事务类型不存在"); + entity.AutoSubmit = tranType.AutoSubmitRequest; + entity.AutoAgree = tranType.AutoAgreeRequest; + entity.AutoHandle = tranType.AutoHandleRequest; + entity.AutoCompleteJob = tranType.AutoCompleteJob; + entity.DirectCreateNote = tranType.DirectCreateNote; + } + [HttpPost("create-and-handle")] public async Task CreateAndHandleAsync(InjectionRequestEditInput input) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/InjectionRequestDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/InjectionRequestDetail.cs index 2f4759c3a..220f3254c 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/InjectionRequestDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/InjectionRequestDetail.cs @@ -45,11 +45,7 @@ public class InjectionRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLoc public string ToWarehouseCode { get; set; } #endregion - - // /// - // /// 在途库库位 - // /// - // public string OnTheWayLocationCode { get; set; } + /// /// 生产线