using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; 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; /// /// /// [ApiController] [Route($"{PdaHostConst.ROOT_ROUTE}job/count")] public class JobController : AbpController { private readonly IUserWorkGroupAppService _userWorkGroupAppService; private readonly ICountJobAppService _countJobAppService; private readonly IDeliverJobAppService _deliverJobAppService; private readonly IInspectJobAppService _inspectJobAppService; private readonly IIssueJobAppService _issueJobAppService; private readonly IProductReceiveJobAppService _productReceiveJobAppService; private readonly IPurchaseReceiptJobAppService _purchaseReceiptJobAppService; private readonly IPurchaseReturnJobAppService _purchaseReturnJobAppService; private readonly IPutawayJobAppService _putawayJobAppService; private readonly IProductionReturnJobAppService _productionReturnJobAppService; /// /// /// /// /// /// /// /// /// /// /// /// /// public JobController(IUserWorkGroupAppService userWorkGroupAppService, ICountJobAppService countJobAppService, IDeliverJobAppService deliverJobAppService, IInspectJobAppService inspectJobAppService, IIssueJobAppService issueJobAppService, IProductReceiveJobAppService productReceiveJobAppService, IPurchaseReceiptJobAppService purchaseReceiptJobAppService, IPurchaseReturnJobAppService purchaseReturnJobAppService, IPutawayJobAppService putawayJobAppService, IProductionReturnJobAppService productionReturnJobAppService) { _userWorkGroupAppService = userWorkGroupAppService; _countJobAppService = countJobAppService; _deliverJobAppService = deliverJobAppService; _inspectJobAppService = inspectJobAppService; _issueJobAppService = issueJobAppService; _productReceiveJobAppService = productReceiveJobAppService; _purchaseReceiptJobAppService = purchaseReceiptJobAppService; _purchaseReturnJobAppService = purchaseReturnJobAppService; _putawayJobAppService = putawayJobAppService; _productionReturnJobAppService = productionReturnJobAppService; } /// /// 获取全部任务数量统计 /// /// [HttpGet("get-job-count/{isToday}")] public virtual async Task> CountAsync(Guid userId ,bool isToday) { var wlgCodes = await _userWorkGroupAppService.GetUserWorkGroupAsync(userId).ConfigureAwait(false); var jsonCodes = JsonSerializer.Serialize(wlgCodes.Select(p=>p.WorkGroupCode)); var status = new List() { EnumJobStatus.Open,EnumJobStatus.Doing }; var jsonStatus = JsonSerializer.Serialize(status); var list = new List(); var countJobs = await _countJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase { Condition = new Condition { Filters = new List { new(nameof(CountJobDTO.WorkGroupCode),jsonCodes,"In"), new(nameof(CountJobDTO.JobStatus),jsonStatus,"In") } } }).ConfigureAwait(false); list.Add(new JobCountDto { JobType = EnumJobType.CountJob, Count = countJobs }); var deliverJobs = await _deliverJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase { Condition = new Condition { Filters = new List { new(nameof(DeliverJobDTO.WorkGroupCode),jsonCodes,"In"), new(nameof(DeliverJobDTO.JobStatus),jsonStatus,"In") } } }).ConfigureAwait(false); list.Add(new JobCountDto { JobType = EnumJobType.DeliverJob, Count = deliverJobs }); var inspectJobs = await _inspectJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase { Condition = new Condition { Filters = new List { new(nameof(InspectJobDTO.WorkGroupCode),jsonCodes,"In"), new(nameof(InspectJobDTO.JobStatus),jsonStatus,"In") } } }).ConfigureAwait(false); list.Add(new JobCountDto { JobType = EnumJobType.InspectJob, Count = inspectJobs }); var issueJobs = await _issueJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase { Condition = new Condition { Filters = new List { new(nameof(IssueJobDTO.WorkGroupCode),jsonCodes,"In"), new(nameof(IssueJobDTO.JobStatus),jsonStatus,"In") } } }).ConfigureAwait(false); list.Add(new JobCountDto { JobType = EnumJobType.IssueJob, Count = issueJobs }); var productReceiveJobs = await _productReceiveJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase { Condition = new Condition { Filters = new List { new(nameof(ProductReceiveJobDTO.WorkGroupCode),jsonCodes,"In"), new(nameof(ProductReceiveJobDTO.JobStatus),jsonStatus,"In") } } }).ConfigureAwait(false); list.Add(new JobCountDto { JobType = EnumJobType.ProductReceiveJob, Count = productReceiveJobs }); var purchaseReceiptJobRequest = new SfsJobRequestInputBase { Condition = new Condition { Filters = new List { new(nameof(PurchaseReceiptJobDTO.WorkGroupCode),jsonCodes,"In"), new(nameof(PurchaseReceiptJobDTO.JobStatus),jsonStatus,"In") } } }; if (isToday)//只看当日 { purchaseReceiptJobRequest.Condition.Filters.Add(new Filter(nameof(PurchaseReceiptJobDTO.PlanArriveDate), Clock.Now.ToString("yyyy-MM-dd"), ">=", "And")); purchaseReceiptJobRequest.Condition.Filters.Add(new Filter(nameof(PurchaseReceiptJobDTO.PlanArriveDate), Clock.Now.AddDays(1).ToString("yyyy-MM-dd"), "<=", "And")); } var purchaseReceiptJobs = await _purchaseReceiptJobAppService.GetCountByFilterAsync(purchaseReceiptJobRequest).ConfigureAwait(false); list.Add(new JobCountDto { JobType = EnumJobType.PurchaseReceiptJob, Count = purchaseReceiptJobs }); var purchaseReturnJobs = await _purchaseReturnJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase { Condition = new Condition { Filters = new List { new(nameof(PurchaseReturnJobDTO.WorkGroupCode),jsonCodes,"In"), new(nameof(PurchaseReturnJobDTO.JobStatus),jsonStatus,"In") } } }).ConfigureAwait(false); list.Add(new JobCountDto { JobType = EnumJobType.PurchaseReturnJob, Count = purchaseReturnJobs }); var putawayJobs = await _putawayJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase { Condition = new Condition { Filters = new List { new(nameof(PutawayJobDTO.WorkGroupCode),jsonCodes,"In"), new(nameof(PutawayJobDTO.JobStatus),jsonStatus,"In") } } }).ConfigureAwait(false); list.Add(new JobCountDto { JobType = EnumJobType.PutawayJob, Count = putawayJobs }); var productionReturnJobs = await _productionReturnJobAppService.GetCountByFilterAsync(new SfsJobRequestInputBase { Condition = new Condition { Filters = new List { new(nameof(ProductionReturnJobDTO.WorkGroupCode),jsonCodes,"In"), new(nameof(ProductionReturnJobDTO.JobStatus),jsonStatus,"In") } } }).ConfigureAwait(false); list.Add(new JobCountDto { JobType = EnumJobType.ProductionReturnJob, Count = productionReturnJobs }); return new ListResultDto(list); } }