using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Wms.Dashboard.Host.Models; namespace Win_in.Sfs.Wms.Dashboard.Host.Controllers { using System; using System.Linq; using Volo.Abp; using Win_in.Sfs.Label.Application.Contracts; using Win_in.Sfs.Label.Domain; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts; [ApiController] [Route($"{PdaHostConst.ROOT_ROUTE}purchase-receipt")] public class PurchaseReceiptController : AbpController { private readonly IBalanceAppService _balanceApp; private readonly IInventoryLabelAppService _labelService; private readonly ISupplierAppService _supplierApp; private readonly ISupplierAsnAppService _supplierAsnApp; private readonly IPurchaseReceiptNoteAppService _purchaseReceiptNoteAppService; private readonly IInspectNoteAppService _inspectNoteAppService; public PurchaseReceiptController(IBalanceAppService balanceApp, IInventoryLabelAppService labelService, ISupplierAppService supplierApp, ISupplierAsnAppService supplierAsnApp, IPurchaseReceiptNoteAppService purchaseReceiptNoteAppService, IInspectNoteAppService inspectNoteAppService) { this._balanceApp = balanceApp; this._labelService = labelService; this._supplierApp = supplierApp; this._supplierAsnApp = supplierAsnApp; _purchaseReceiptNoteAppService = purchaseReceiptNoteAppService; _inspectNoteAppService = inspectNoteAppService; } /// /// 未上架数量 /// /// [HttpGet("no-put-away-sum-qty")] public virtual async Task GetNoPutAwaySumQtyAsync() { var dto = new PurchaseReceiptSumQtyDashboardDto(); var items = await GetPurchaseReceiptItemDashboardAsync(); dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) }; return dto; } /// /// 未上架汇总 /// /// [HttpGet("no-put-away-by-supplier")] public virtual async Task> GetNoPutAwayBySupplierAsync() { var items = await GetPurchaseReceiptItemDashboardAsync(); var dtos = items.GroupBy(t => t.SupplierShortName) .Select( t => new PurchaseReceiptCountBySupplierDashboardDto { SupplierShortName = t.Key, Qty = t.Sum(t1 => t1.Qty) }).OrderBy(t => t.SupplierShortName).ToList(); return dtos; } /// /// 未上架明细 /// /// [HttpGet("no-put-away-item-list")] public virtual async Task> GetReceiptItemListAsync() { return await GetPurchaseReceiptItemDashboardAsync(); } [HttpGet("un-receipt-sum-qty")] public virtual async Task GetUnReceiptSumQtyAsync() { var dto = new PurchaseReceiptSumQtyDashboardDto(); var items = await this.GetUnPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); dto = new PurchaseReceiptSumQtyDashboardDto() { Qty = items.Sum(t => t.Qty) }; return dto; } [HttpGet("un-receipt-count-by-supplier")] public virtual async Task> GetUnReceiptCountBySupplierQtyAsync() { var items = await GetUnPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); var dtos = items.GroupBy(t => t.SupplierShortName) .Select( t => new PurchaseReceiptCountBySupplierDashboardDto { SupplierShortName = t.Key, Qty = t.Sum(t1 => t1.Qty) }).OrderBy(t => t.SupplierShortName).ToList(); return dtos; } [HttpGet("un-receipt-item-list")] public virtual async Task> GetUnReceiptItemListAsync() { return await this.GetUnPurchaseReceiptItemDashboardAsync().ConfigureAwait(false); } private async Task> GetPurchaseReceiptItemDashboardAsync() { var inspectNoteDetailDto = await _inspectNoteAppService.GetInspectNoteDetailByDayTaskAsync(7).ConfigureAwait(false);//7天数据 var packingCodeList = inspectNoteDetailDto.Where(p => p.Status == EnumInventoryStatus.OK|| p.Status == EnumInventoryStatus.INSP).Select(p => p.PackingCode).ToList(); var balances = await _balanceApp.GetListByPackingCodesAsync(packingCodeList); balances = balances.Where(p => p.LocationCode == "INSPECT").ToList(); //var balances = await GetBalancesAsync("INSPECT", EnumInventoryStatus.OK); var packingcodes = balances.Select(t => t.PackingCode).Distinct(); var labels = await GetLabelsAsync(packingcodes); var supplierCodes = labels.Select(t => t.SupplierCode).Distinct(); var suppliers = await GetSuppliersAsync(supplierCodes); return ConvertToPurchaseReceiptItemDashboard(balances, labels, suppliers); } private List ConvertToPurchaseReceiptItemDashboard( List balances, List labels, List suppliers) { var dtos = new List(); foreach (var balance in balances) { var supplierShortName = string.Empty; var label = labels.FirstOrDefault(t => t.Code == balance.PackingCode); if (label == null) continue; var supplier = suppliers.FirstOrDefault(t => t != null && t.Code == label.SupplierCode); if (supplier == null) continue; supplierShortName = supplier.ShortName; var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == balance.ItemCode); if (dto == null) { dto = new PurchaseReceiptItemDashboardDto(); dto.SupplierShortName = supplierShortName; dto.ItemCode = balance.ItemCode; dto.ItemDesc1 = balance.ItemDesc1; dto.Qty = 0; dtos.Add(dto); } dto.Qty += balance.Qty; } return dtos.OrderBy(t => t.SupplierShortName).ToList(); } private async Task> GetBalancesAsync(string locationCode, EnumInventoryStatus status) { return await this._balanceApp.GetListByLocationCodeAndStatusAsync(locationCode, status); } private async Task> GetLabelsAsync(IEnumerable codes) { return await this._labelService.GetByCodesAsync(codes); } private async Task> GetSuppliersAsync(IEnumerable codes) { return await this._supplierApp.GetByCodesAsync(codes); } private async Task> GetSupplierAsnsAsync(int day) { return await this._supplierAsnApp.GeUnReceivedByDayListAsync(day); } private List ConvertToUnPurchaseReceiptItemDashboard( List supplierAsns, List suppliers) { var dtos = new List(); foreach (var supplierAsn in supplierAsns) { var supplierShortName = string.Empty; var supplier = suppliers.FirstOrDefault(t => t.Code == supplierAsn.SupplierCode); if (supplier == null) continue; supplierShortName = supplier.ShortName; foreach (var detail in supplierAsn.Details) { var dto = dtos.Find(t => t.SupplierShortName == supplierShortName && t.ItemCode == detail.ItemCode); if (dto == null) { dto = new PurchaseReceiptItemDashboardDto(); dto.SupplierShortName = supplierShortName; dto.ItemCode = detail.ItemCode; dto.ItemDesc1 = detail.ItemDesc1; dto.Qty = 0; dtos.Add(dto); } dto.Qty += detail.Qty; } } return dtos.OrderBy(t => t.SupplierShortName).ToList(); } private async Task> GetUnPurchaseReceiptItemDashboardAsync() { var dtos = new List(); var supplierAsns = await this.GetSupplierAsnsAsync(7).ConfigureAwait(false);//七天数据 var supplierCodes = supplierAsns.Select(t => t.SupplierCode).Distinct(); var suppliers = await GetSuppliersAsync(supplierCodes); return this.ConvertToUnPurchaseReceiptItemDashboard(supplierAsns, suppliers); } } }