lvzb 2 years ago
parent
commit
8098005db3
  1. 95
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/Balances/DTOs/BalanceSerialDto.cs
  2. 125
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Transactions/TransactionAppService.cs
  3. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs

95
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<ReportErpLocationSerialDto> ReportErpLocationSerialDtos { get; set; } = new();
}
public class ReportErpLocationSerialDto
{
public string ErpLocatioCode { get; set; }
/// <summary>
/// 期初库存 小于开始时间
/// </summary>
public decimal FirstQty { get; set; }
public decimal SumInQty { get; set; }
public decimal SumOutQty { get; set; }
/// <summary>
/// 此时此刻的库存
/// </summary>
public decimal NowQty { get; set; }
/// <summary>
/// 期末库存 期初+入库-出库
/// </summary>
public decimal LastQty { get; set; }
public List<ReportLocationSerialDto> ReportLocationSerialDtos { get; set; } = new();
}
public class ReportLocationSerialDto
{
public string LocatioCode { get; set; }
/// <summary>
/// 期初库存 小于开始时间
/// </summary>
public decimal FirstQty { get; set; }
public decimal SumInQty { get; set; }
public decimal SumOutQty { get; set; }
/// <summary>
/// 此时此刻的库存
/// </summary>
public decimal NowQty { get; set; }
/// <summary>
/// 期末库存 期初+入库-出库
/// </summary>
public decimal LastQty { get; set; }
public List<ReportTransactionSerialDto> 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; }
}

125
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<Transaction>, List<TransactionDTO>>(entities);
}
/// <summary>
/// 报表使用
/// </summary>
/// <param name="itemCodes"></param>
/// <param name="startDateTime"></param>
/// <param name="endDateTime"></param>
/// <returns></returns>
[HttpGet("item-serial-list")]
public virtual async Task<List<ReportItemSerialDto>> GetItemSerialList(List<string> itemCodes,DateTime startDateTime,DateTime endDateTime)
{
var itemSerialDtos = new List<ReportItemSerialDto>();
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.CreationTime<endDateTime&&p.CreationTime>startDateTime);
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<Transaction, TransactionDTO>(locationCodeTransaction);
#endregion
reportLocationSerialDto.ReportTransactionSerialDtos.Add(reportTransactionSerialDto);
}
#region 赋值库位的汇总
//期初库存
var tempFirstSum = transactions.Where(p => p.LocationCode == locationDto.Code && p.CreationTime<startDateTime).Sum(p=>p.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;
}
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/MaterialRequestAppService.cs

@ -134,7 +134,7 @@ public class MaterialRequestAppService : SfsStoreRequestAppServiceBase<MaterialR
throw new UserFriendlyException($"库位代码为【{LocationCode}】不存在");
}
if (LocationDto.Type == EnumLocationType.WIP)
if (LocationDto.Type != EnumLocationType.WIP)
{
throw new UserFriendlyException($"库位代码【{LocationCode}】不是【{EnumLocationType.WIP.GetDisplayName()}】类型");
}

Loading…
Cancel
Save