using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; using Win_in.Sfs.Wms.Dashboard.Host.Models; using Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers; using System.Diagnostics.Metrics; using System.Linq; using Win_in.Sfs.Basedata.Application.Contracts; [ApiController] [Route($"{PdaHostConst.ROOT_ROUTE}asn-time-window")] public class AsnTimeWindowController : AbpController { private readonly ISupplierAsnAppService _supplierAsnApp; private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteApp; private readonly ISupplierAppService _supplierApp; public AsnTimeWindowController(ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteApp, ISupplierAppService supplierApp) { _supplierAsnApp = supplierAsnApp; _purchaseReceiptNoteApp = purchaseReceiptNoteApp; _supplierApp = supplierApp; } [HttpGet("asn-time-window")] public virtual async Task> GetAsnTimeWindowsAsync() { return await GetAsnTimeWindowDashboardsAsync(); } private async Task> GetAsnTimeWindowDashboardsAsync() { var supplierAsns = await this.GetSupplierAsnsAsync(); var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); var suppliers = await GetSuppliersAsync(supplierCodes); var asnNumbers = supplierAsns.Select(t => t.Number); var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers); return this.ConvertToAsnTimeWindowDashboards( supplierAsns, suppliers, purchaseReceiptNotes); } private List ConvertToAsnTimeWindowDashboards( List supplierAsns, List suppliers, List purchaseReceiptNotes) { var dtos = new List(); for (var i = 0; i <= 23; i++) { var timeSpan = $"{i}:00"; foreach (var supplierAsn in supplierAsns) { if (supplierAsn.PlanArriveDate.Hour == i) { var supplierShortName = string.Empty; var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); if (supplier == null) continue; supplierShortName = supplier.ShortName; if (dtos.Exists(t => t.TimeSpan == timeSpan && t.SupplierShortName == supplierShortName)) continue; var purchaseReceiptNote = purchaseReceiptNotes.FirstOrDefault(t => t.AsnNumber == supplierAsn.Number); var dto = new AsnTimeWindowDashboardDto(); dto.SupplierShortName = supplierShortName; dto.TimeSpan = timeSpan; dto.PlanArriveDate = supplierAsn.PlanArriveDate; dto.ReceiptTime = purchaseReceiptNote?.ReceiveTime ?? DateTime.MinValue; dtos.Add(dto); } } } return dtos; } private async Task> GetSupplierAsnsAsync() { var startTime = DateTime.Today.AddHours(DashboardConst.AsnReceiptTimeLimitHour); var endTime = startTime.AddDays(1).AddSeconds(-1); if (DateTime.Now.Hour < DashboardConst.AsnReceiptTimeLimitHour) { startTime.AddDays(-1); endTime.AddDays(-1); } return await this._supplierAsnApp.GetByStartTimeEndTimeAsync(startTime, endTime); } private async Task> GetSuppliersAsync(IEnumerable codes) { return await this._supplierApp.GetByCodesAsync(codes); } private async Task> GetPurchaseReceiptNotesAsync(IEnumerable asnNumbers) { return await this._purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers); } /// /// /// /// [HttpGet("get-server-date-time")] public virtual async Task GetServerDate() { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } }