You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

140 lines
7.1 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class QtyrfeConverter : IIncomingConverter
{
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly IIncomingToWmsManager _incomingToWmsManager;
private readonly IObjectMapper _objectMapper;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly ILocationAppService _locationAppService;
private readonly ILogger<QtyrfeConverter> _logger;
public QtyrfeConverter(
IIncomingToWmsManager incomingToWmsManager
, IObjectMapper objectMapper
, IItemBasicAppService itemBasicAppService
, ILogger<QtyrfeConverter> logger,
ILocationAppService locationAppService,
IIncomingFromExternalManager incomingFromExternalManager)
{
_incomingToWmsManager = incomingToWmsManager;
_objectMapper = objectMapper;
_itemBasicAppService = itemBasicAppService;
_logger = logger;
_locationAppService = locationAppService;
_incomingFromExternalManager = incomingFromExternalManager;
}
public virtual async Task ConvertAsync(List<IncomingFromExternal> incomingFromExternalList)
{
if (!incomingFromExternalList.Any())
{
_logger.LogInformation("no Qtyrfes");
return;
}
//按Number合并TransferNote单据
var transferNoteList = await BuildIncomingToWmsOfTransferNoteAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateManyAsync(transferNoteList).ConfigureAwait(false);
//归档
await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false);
}
private async Task<List<IncomingToWms>> BuildIncomingToWmsOfTransferNoteAsync(List<IncomingFromExternal> incomingDataList)
{
var incomingToWmsList = new List<IncomingToWms>();
var groups = incomingDataList.GroupBy(p => p.SourceDataGroupCode);
foreach (var group in groups)
{
var first = group.First();
var incomingToWms = new IncomingToWms()
{
DataType = first.DataType,
DataAction = first.DataAction,
SourceSystem = first.SourceSystem,
DataIdentityCode = first.SourceDataGroupCode,
};
incomingToWms.SetEffectiveDate(first.EffectiveDate);
var exchangeTransferNote = JsonSerializer.Deserialize<TransferNoteExchangeDto>(first.DestinationDataContent);
var wmsTransferNote = _objectMapper.Map<TransferNoteExchangeDto, TransferNoteEditInput>(exchangeTransferNote);
wmsTransferNote.Type = EnumTransSubType.Transfer_Area.ToString();//客户储位调拨
wmsTransferNote.Details = new List<TransferNoteDetailInput>();
foreach (var incomingFromExternal in group.ToList())
{
var transferNote = JsonSerializer.Deserialize<TransferNoteExchangeDto>(incomingFromExternal.DestinationDataContent);
var wmsTransferNoteDetail = _objectMapper.Map<TransferNoteDetailExchangeDto, TransferNoteDetailInput>(transferNote.Detail);
var item = await _itemBasicAppService.GetByCodeAsync(wmsTransferNoteDetail.ItemCode).ConfigureAwait(false);
var tolocation=await _locationAppService.GetByCodeAsync(wmsTransferNoteDetail.ToLocationErpCode).ConfigureAwait(false);
var fromlocation = await _locationAppService.GetByCodeAsync(wmsTransferNoteDetail.FromLocationErpCode).ConfigureAwait(false);
try
{
wmsTransferNoteDetail.FromPackingCode = "";
wmsTransferNoteDetail.ToPackingCode = "";
wmsTransferNoteDetail.FromLot = "";
wmsTransferNoteDetail.ToLot = "";
wmsTransferNoteDetail.FromStatus = EnumInventoryStatus.OK;
wmsTransferNoteDetail.ToStatus = EnumInventoryStatus.OK;
if (transferNote.Remark.Contains("质量补移库"))//质量补
{
wmsTransferNoteDetail.FromPackingCode = "RFE"; //质量补排序批次
wmsTransferNoteDetail.FromLot = "RFE";//质量补箱标签
wmsTransferNoteDetail.ToPackingCode = "RFE"; //质量补排序批次
wmsTransferNoteDetail.ToLot = "RFE";//质量补箱标签
}
if (item != null)
{
wmsTransferNoteDetail.ItemName = item.Name;
wmsTransferNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsTransferNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsTransferNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
wmsTransferNoteDetail.StdPackQty = item.StdPackQty;
}
if (tolocation != null)
{
wmsTransferNoteDetail.ToLocationCode = tolocation.Code;
wmsTransferNoteDetail.ToLocationArea = tolocation.AreaCode;
wmsTransferNoteDetail.ToLocationGroup = tolocation.LocationGroupCode;
wmsTransferNoteDetail.ToWarehouseCode = tolocation.WarehouseCode;
if (tolocation.Type== EnumLocationType.CUST)
{
wmsTransferNote.Type = EnumTransSubType.Transfer_Customer.ToString();//客户储位调拨
}
}
if (fromlocation!=null)
{
wmsTransferNoteDetail.FromLocationCode = fromlocation.Code;
wmsTransferNoteDetail.FromLocationArea = fromlocation.AreaCode;
wmsTransferNoteDetail.FromLocationGroup = fromlocation.LocationGroupCode;
wmsTransferNoteDetail.FromWarehouseCode = fromlocation.WarehouseCode;
}
}
catch (Exception)
{
wmsTransferNoteDetail.ItemName = "";
wmsTransferNoteDetail.ItemDesc1 = "";
wmsTransferNoteDetail.ItemDesc2 = "";
wmsTransferNoteDetail.Uom = "";
}
wmsTransferNote.Details.Add(wmsTransferNoteDetail);
}
incomingToWms.DataContent = JsonSerializer.Serialize(wmsTransferNote);
incomingToWmsList.Add(incomingToWms);
}
return incomingToWmsList;
}
}