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(string datetime) { return await GetAsnTimeWindowDashboardsAsync(datetime).ConfigureAwait(false); } private async Task> GetAsnTimeWindowDashboardsAsync(string datetime) { var supplierAsns = await this.GetSupplierAsnsAsync(datetime).ConfigureAwait(false); var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); var suppliers = await GetSuppliersAsync(supplierCodes).ConfigureAwait(false); var asnNumbers = supplierAsns.Select(t => t.Number); var purchaseReceiptNotes = await GetPurchaseReceiptNotesAsync(asnNumbers).ConfigureAwait(false); 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 = string.IsNullOrEmpty(supplier.ShortName)?supplier.Name: 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(string datetime) { var time = Convert.ToDateTime(datetime); var startTime = time.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).ConfigureAwait(false); } private async Task> GetSuppliersAsync(IEnumerable codes) { return await this._supplierApp.GetByCodesAsync(codes).ConfigureAwait(false); } private async Task> GetPurchaseReceiptNotesAsync(IEnumerable asnNumbers) { return await this._purchaseReceiptNoteApp.GetListByAsnNumbers(asnNumbers).ConfigureAwait(false); } /// /// /// /// [HttpGet("get-server-date-time")] public virtual async Task GetServerDate() { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } }