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.
 
 
 
 
 
 

120 lines
5.5 KiB

using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Auth.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.WMS.ScrapNote;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing;
public class ScrapNoteConverter : IOutgoingConverter
{
private readonly IOutgoingFromWmsManager _outgoingFromWmsManager;
private readonly IOutgoingToExternalManager _outgoingToExternalManager;
private readonly ISupplierAsnAppService _supplierAsnAppService;
private readonly IDepartmentAppService _departmentAppService;
private readonly IObjectMapper _objectMapper;
public ScrapNoteConverter(
IOutgoingFromWmsManager outgoingFromWmsManager
, IOutgoingToExternalManager outgoingToExternalManager
, ISupplierAsnAppService supplierAsnAppService
, IDepartmentAppService departmentAppService
, IObjectMapper objectMapper
)
{
_outgoingFromWmsManager = outgoingFromWmsManager;
_outgoingToExternalManager = outgoingToExternalManager;
_supplierAsnAppService = supplierAsnAppService;
_departmentAppService = departmentAppService;
_objectMapper = objectMapper;
}
public virtual async Task<List<OutgoingToExternal>> ConvertAsync()
{
var outgoingToExternalList = new List<OutgoingToExternal>();
var outgoingFromWmsList =
await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.UnplannedIssue, EnumSystemType.ERP).ConfigureAwait(false);
foreach (var outgoingFromWms in outgoingFromWmsList)
{
var wmsCountAdjust = JsonSerializer.Deserialize<ScrapNoteDTO>(outgoingFromWms.DataContent);
var department = await _departmentAppService.GetByUsernameAsync(wmsCountAdjust.Worker).ConfigureAwait(false);
var departmentCode = department == null ? "" : department.Code;
foreach (var detail in wmsCountAdjust.Details)
{
var outgoingToExternal = new OutgoingToExternal()
{
DataType = outgoingFromWms.DataType,
DataAction = outgoingFromWms.DataAction,
SourceSystem = EnumSystemType.WMS.ToString(),
SourceDataId = detail.Id.ToString(),
SourceDataGroupCode = wmsCountAdjust.Number,
SourceDataDetailCode = "",
Writer = nameof(TyrpOutgoingBackgroundWorker),
DestinationSystem = EnumSystemType.ERP.ToString(),
DestinationDataId = "",
};
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
var exchangeScrap = await BuildPurchaseReceiptExchangeDtoAsync(wmsCountAdjust, detail).ConfigureAwait(false);
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeScrap);
var scrap = BuildIssue(exchangeScrap, departmentCode);
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(scrap);
outgoingToExternalList.Add(outgoingToExternal);
}
}
await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false);
return outgoingToExternalList;
}
private static CountAdjust BuildIssue(ScrapNoteExchangeDto exchangeScrap, string departmentCode)
{
var detail = exchangeScrap.Detail;
string time = DateTime.Now.ToLongTimeString();
string time1 = DateTime.Now.ToShortDateString().Replace("/", "").Trim();
//string date = time1 + " " + time;
string date = string.Format("{0} {1}", time, time1);
string asdtype = "";
if (Enum.Parse<EnumTransSubType>(exchangeScrap.Type) == EnumTransSubType.CountAdjust_WIP)
{
asdtype = "4042";
}
else if (Enum.Parse<EnumTransSubType>(exchangeScrap.Type) == EnumTransSubType.CountAdjust_Warehouse)
{
asdtype = "4004";
}
var counta = new CountAdjust()
{
mesout_asd_refc = departmentCode,
mesout_asd_dt_w = date,
mesout_asd_type = asdtype,
mesout_asd_part = detail.ItemCode,
mesout_asd_date = exchangeScrap.ActiveDate.ToShortDateString().Replace("/", "").Trim(),
mesout_asd_loc = "",//字段不明确
mesout_asd_code = detail.ReasonCode,
mesout_asd_qty = detail.Qty,
mesout_asd_user = exchangeScrap.Worker,
mesout_asd_k = string.Empty,
mesout_asd_stat = "Y"
};
return counta;
}
private async Task<ScrapNoteExchangeDto> BuildPurchaseReceiptExchangeDtoAsync(ScrapNoteDTO wmsScrap, ScrapNoteDetailDTO wmsScrapDetail)
{
await Task.CompletedTask.ConfigureAwait(false);
var exchangeScrap = _objectMapper.Map<ScrapNoteDTO, ScrapNoteExchangeDto>(wmsScrap);
var exchangeScrapDetail = _objectMapper.Map<ScrapNoteDetailDTO, ScrapNoteDetailExchangeDto>(wmsScrapDetail);
//var userdep = await _supplierAsnAppService.GetByNumberAsync(exchangeCountAdjust.Worker);
//exchangeCountAdjust.DepartmentCode = userdep.DepartmentCode;
exchangeScrap.Detail = exchangeScrapDetail;
return exchangeScrap;
}
}