diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/DTOs/BalanceSerialDto.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/DTOs/BalanceSerialDto.cs new file mode 100644 index 000000000..cead0d4df --- /dev/null +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/DTOs/BalanceSerialDto.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.Inventory.Application.Contracts; + +namespace Win_in.Sfs.Wms.Inventory.Balances; + +public class ReportItemSerialDto +{ + public string ItemCode { get; set; } + + public string ItemName { get; set; } + + public string ItemDesc1 { get; set; } + + public string ItemDesc2 { get; set; } + + public string Configuration { get; set; } + + public List ReportErpLocationSerialDtos { get; set; } = new(); +} + +public class ReportErpLocationSerialDto +{ + public string ErpLocatioCode { get; set; } + + /// + /// 期初库存 小于开始时间 + /// + public decimal FirstQty { get; set; } + + public decimal SumInQty { get; set; } + + public decimal SumOutQty { get; set; } + + /// + /// 此时此刻的库存 + /// + public decimal NowQty { get; set; } + + /// + /// 期末库存 期初+入库-出库 + /// + public decimal LastQty { get; set; } + + public List ReportLocationSerialDtos { get; set; } = new(); +} + +public class ReportLocationSerialDto +{ + public string LocatioCode { get; set; } + + /// + /// 期初库存 小于开始时间 + /// + public decimal FirstQty { get; set; } + + public decimal SumInQty { get; set; } + + public decimal SumOutQty { get; set; } + + /// + /// 此时此刻的库存 + /// + public decimal NowQty { get; set; } + + /// + /// 期末库存 期初+入库-出库 + /// + public decimal LastQty { get; set; } + + public List ReportTransactionSerialDtos { get; set; } = new(); +} + +public class ReportTransactionSerialDto +{ + public string LocatioCode { get; set; } + public decimal InQty { get; set; } + + public decimal OutQty { get; set; } + + public string Number { get; set; } + + public DateTime CreateDateTime { get; set; } + + public string DocNumber { get; set; } + + public EnumTransType EnumTransType { get; set; } + + public EnumTransSubType EnumTransSubType { get; set; } + + public string InterFaceName { get; set; } + + public TransactionDTO TransactionDto { get; set; } +} diff --git a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Transactions/TransactionAppService.cs b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Transactions/TransactionAppService.cs index 47722c190..be185de5b 100644 --- a/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Transactions/TransactionAppService.cs +++ b/be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Transactions/TransactionAppService.cs @@ -1,12 +1,19 @@ +using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.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.Inventory.Balances; using Win_in.Sfs.Wms.Inventory.Domain; using Win_in.Sfs.Wms.Inventory.Domain.Acl; +using Win_in.Sfs.Wms.Inventory.Domain.Acl.ItemBasic; using Win_in.Sfs.Wms.Inventory.Domain.Shared; namespace Win_in.Sfs.Wms.Inventory.Application; @@ -23,15 +30,20 @@ public class TransactionAppService { private readonly ITransactionManager _transactionManager; private readonly IInterfaceCalendarAclService _interfaceCalendarAclService; + private readonly IItemBasicAppService _itemBasicAppService; + private readonly IBalanceAppService _balanceAppService; + private readonly ILocationAppService _locationAppService; public TransactionAppService( ITransactionRepository repository , ITransactionManager transactionManager - , IInterfaceCalendarAclService interfaceCalendarAclService - ) : base(repository) + , IInterfaceCalendarAclService interfaceCalendarAclService, IItemBasicAppService itemBasicAppService, IBalanceAppService balanceAppService, ILocationAppService locationAppService) : base(repository) { _transactionManager = transactionManager; _interfaceCalendarAclService = interfaceCalendarAclService; + _itemBasicAppService = itemBasicAppService; + _balanceAppService = balanceAppService; + _locationAppService = locationAppService; } [HttpPost("add")] @@ -108,4 +120,113 @@ public class TransactionAppService var entities = await _repository.GetListAsync(p => p.LocationCode == locationCode).ConfigureAwait(false); return ObjectMapper.Map, List>(entities); } + + /// + /// 报表使用 + /// + /// + /// + /// + /// + [HttpGet("item-serial-list")] + public virtual async Task> GetItemSerialList(List itemCodes,DateTime startDateTime,DateTime endDateTime) + { + var itemSerialDtos = new List(); + foreach (var itemCode in itemCodes) + { + var itemSerialDto = new ReportItemSerialDto(); + + var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(itemCode).ConfigureAwait(false); + itemSerialDto.ItemCode = itemBasicDto.Code; + itemSerialDto.ItemDesc1 = itemBasicDto.Desc1; + itemSerialDto.ItemDesc2 = itemBasicDto.Desc2; + itemSerialDto.Configuration = itemBasicDto.Configuration; + itemSerialDto.ItemName = itemBasicDto.Name; + + //所有这个零件的事务 + var transactions=await _repository.GetListAsync(p => p.ItemCode == itemCode).ConfigureAwait(false); + var locationDtos=await _locationAppService.GetAllAsync().ConfigureAwait(false); + + var groupKey= locationDtos.GroupBy(p => p.ErpLocationCode); + + foreach (var keyGroup in groupKey) + { + var reportErpLocationSerialDto = new ReportErpLocationSerialDto(); + reportErpLocationSerialDto.ErpLocatioCode = keyGroup.Key; + + foreach (var locationDto in keyGroup) + { + var reportLocationSerialDto=new ReportLocationSerialDto(); + + //当前库位下 这个物品的所有库存事务 + var locationCodeTransactions = transactions.Where(p => p.LocationCode == locationDto.Code&&p.CreationTimestartDateTime); + foreach (var locationCodeTransaction in locationCodeTransactions) + { + var reportTransactionSerialDto = new ReportTransactionSerialDto(); + + #region 赋值库存事务 + reportTransactionSerialDto.LocatioCode = locationCodeTransaction.LocationCode; + switch (locationCodeTransaction.TransInOut) + { + case EnumTransInOut.In: + reportTransactionSerialDto.InQty = locationCodeTransaction.Qty; + break; + case EnumTransInOut.Out: + reportTransactionSerialDto.OutQty = locationCodeTransaction.Qty; + break; + } + reportTransactionSerialDto.DocNumber= locationCodeTransaction.DocNumber; + reportTransactionSerialDto.CreateDateTime = locationCodeTransaction.CreationTime; + reportTransactionSerialDto.EnumTransSubType = locationCodeTransaction.TransSubType; + reportTransactionSerialDto.EnumTransType= locationCodeTransaction.TransType; + reportTransactionSerialDto.Number = locationCodeTransaction.TransNumber; + reportTransactionSerialDto.TransactionDto = ObjectMapper.Map(locationCodeTransaction); + #endregion + + reportLocationSerialDto.ReportTransactionSerialDtos.Add(reportTransactionSerialDto); + } + + #region 赋值库位的汇总 + + //期初库存 + var tempFirstSum = transactions.Where(p => p.LocationCode == locationDto.Code && p.CreationTimep.Qty); + //当前库存 + var balanceDtos= await _balanceAppService.GetListByLocationCodeAndItemCodeAsync(locationDto.Code, itemSerialDto.ItemCode).ConfigureAwait(false); + var tempNowSum = balanceDtos.Sum(p => p.Qty); + //期末库存 + var tempLastSum = transactions.Where(p => p.LocationCode == locationDto.Code && p.CreationTime < endDateTime).Sum(p => p.Qty); + + reportLocationSerialDto.SumInQty = + reportLocationSerialDto.ReportTransactionSerialDtos.Sum(p => p.InQty); + reportLocationSerialDto.SumOutQty = + reportLocationSerialDto.ReportTransactionSerialDtos.Sum(p => p.OutQty); + reportLocationSerialDto.FirstQty = tempFirstSum; + reportLocationSerialDto.NowQty = tempNowSum; + reportLocationSerialDto.LastQty = tempLastSum; + #endregion + + reportErpLocationSerialDto.ReportLocationSerialDtos.Add(reportLocationSerialDto); + } + + #region 赋值Erp + + reportErpLocationSerialDto.SumOutQty = + reportErpLocationSerialDto.ReportLocationSerialDtos.Sum(p => p.SumOutQty); + reportErpLocationSerialDto.SumInQty = + reportErpLocationSerialDto.ReportLocationSerialDtos.Sum(p => p.SumInQty); + reportErpLocationSerialDto.FirstQty= reportErpLocationSerialDto.ReportLocationSerialDtos.Sum(p => p.FirstQty); + reportErpLocationSerialDto.NowQty = reportErpLocationSerialDto.ReportLocationSerialDtos.Sum(p => p.NowQty); + reportErpLocationSerialDto.LastQty = reportErpLocationSerialDto.ReportLocationSerialDtos.Sum(p => p.LastQty); + + #endregion + + itemSerialDto.ReportErpLocationSerialDtos.Add(reportErpLocationSerialDto); + } + + itemSerialDtos.Add(itemSerialDto); + } + + return itemSerialDtos; + } } +