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.
125 lines
6.0 KiB
125 lines
6.0 KiB
2 years ago
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
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.CountAdjustNote;
|
||
|
using Win_in.Sfs.Wms.Store.Application.Contracts;
|
||
|
|
||
|
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing;
|
||
|
|
||
|
public class CountAdjustNoteConverter : IOutgoingConverter
|
||
|
{
|
||
|
private readonly IOutgoingFromWmsManager _outgoingFromWmsManager;
|
||
|
private readonly IOutgoingToExternalManager _outgoingToExternalManager;
|
||
|
private readonly ISupplierAsnAppService _supplierAsnAppService;
|
||
|
private readonly IDepartmentAppService _departmentAppService;
|
||
|
private readonly IObjectMapper _objectMapper;
|
||
|
|
||
|
public CountAdjustNoteConverter(
|
||
|
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.CountAdjust, EnumSystemType.ERP).ConfigureAwait(false);
|
||
|
foreach (var outgoingFromWms in outgoingFromWmsList)
|
||
|
{
|
||
|
var wmsCountAdjust = JsonSerializer.Deserialize<CountAdjustNoteDTO>(outgoingFromWms.DataContent);
|
||
|
var department = await _departmentAppService.GetByUsernameAsync(wmsCountAdjust.Worker).ConfigureAwait(false);
|
||
|
var departmentCode = department == null ? "" : department.Code;
|
||
|
|
||
|
var details = wmsCountAdjust.Details.GroupBy(r => new { r.ItemCode, r.LocationErpCode }).Select(p => new CountAdjustNoteDetailExchangeDto { CountQty = p.Sum(itm => itm.CountQty), ItemCode = p.Key.ItemCode, LocationErpCode = p.Key.LocationErpCode, ReasonCode = String.Join("、", p.Select(x => x.ReasonCode).ToArray()) });
|
||
|
foreach (var detail in details.Where(r => r.CountQty == 0))
|
||
|
{
|
||
|
var outgoingToExternal = new OutgoingToExternal()
|
||
|
{
|
||
|
DataType = outgoingFromWms.DataType,
|
||
|
DataAction = outgoingFromWms.DataAction,
|
||
|
SourceSystem = EnumSystemType.WMS.ToString(),
|
||
|
SourceDataId = wmsCountAdjust.Number,
|
||
|
SourceDataGroupCode = wmsCountAdjust.Number,
|
||
|
SourceDataDetailCode = detail.ItemCode,
|
||
|
Writer = nameof(TyrpOutgoingBackgroundWorker),
|
||
|
DestinationSystem = EnumSystemType.ERP.ToString(),
|
||
|
DestinationDataId = "",
|
||
|
};
|
||
|
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
|
||
|
|
||
|
var exchangeIssue = await BuildPurchaseReceiptExchangeDtoAsync(wmsCountAdjust, detail).ConfigureAwait(false);
|
||
|
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeIssue);
|
||
|
var arrive = BuildIssue(exchangeIssue, departmentCode);
|
||
|
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(arrive);
|
||
|
|
||
|
outgoingToExternalList.Add(outgoingToExternal);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false);
|
||
|
return outgoingToExternalList;
|
||
|
}
|
||
|
private static CountAdjust BuildIssue(CountAdjustNoteExchangeDto exchangeCountAdjust, string departmentCode)
|
||
|
{
|
||
|
var detail = exchangeCountAdjust.Detail;
|
||
|
string time = DateTime.Now.ToLongTimeString();
|
||
|
string time1 = DateTime.Now.ToShortDateString().Replace("/", "").Trim();
|
||
|
string date = time1 + "" + time;
|
||
|
string asdtype = "";
|
||
|
|
||
|
if (Enum.Parse<EnumTransSubType>(exchangeCountAdjust.Type) == EnumTransSubType.CountAdjust_WIP)
|
||
|
{
|
||
|
asdtype = "4041";
|
||
|
}
|
||
|
else if (Enum.Parse<EnumTransSubType>(exchangeCountAdjust.Type) == EnumTransSubType.CountAdjust_Warehouse)
|
||
|
{
|
||
|
asdtype = "4003";
|
||
|
}
|
||
|
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 = exchangeCountAdjust.ActiveDate.ToShortDateString().Replace("/", "").Trim(),
|
||
|
mesout_asd_loc = detail.LocationErpCode,
|
||
|
mesout_asd_code = detail.ReasonCode,
|
||
|
mesout_asd_qty = detail.CountQty,
|
||
|
mesout_asd_user = exchangeCountAdjust.Worker,
|
||
|
mesout_asd_k = string.Empty,
|
||
|
mesout_asd_stat = "Y"
|
||
|
};
|
||
|
return counta;
|
||
|
}
|
||
|
|
||
|
private async Task<CountAdjustNoteExchangeDto> BuildPurchaseReceiptExchangeDtoAsync(
|
||
|
CountAdjustNoteDTO wmsCountAdjust, CountAdjustNoteDetailExchangeDto wmsCountAdjustDetail)
|
||
|
{
|
||
|
await Task.CompletedTask.ConfigureAwait(false);
|
||
|
var exchangeCountAdjust = _objectMapper.Map<CountAdjustNoteDTO, CountAdjustNoteExchangeDto>(wmsCountAdjust);
|
||
|
//var exchangeCountAdjustDetail =
|
||
|
// _objectMapper.Map<CountAdjustNoteDetailDTO, CountAdjustNoteDetailExchangeDto>(wmsCountAdjustDetail);
|
||
|
//var userdep = await _supplierAsnAppService.GetByNumberAsync(exchangeCountAdjust.Worker);
|
||
|
//exchangeCountAdjust.DepartmentCode = userdep.DepartmentCode;
|
||
|
exchangeCountAdjust.Detail = wmsCountAdjustDetail;
|
||
|
return exchangeCountAdjust;
|
||
|
}
|
||
|
}
|