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.

258 lines
12 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;
6 months ago
using Win_in.Sfs.Basedata.Application.Contracts;
2 years ago
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;
2 years ago
using Win_in.Sfs.Wms.DataExchange.WMS.PurchaseReturn;
2 years ago
using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing;
public class TransferNoteConverter : IOutgoingConverter
{
private readonly string billtype_s = "4002";
private readonly string billtype_w = "4033";
private readonly IOutgoingFromWmsManager _outgoingFromWmsManager;
private readonly IOutgoingToExternalManager _outgoingToExternalManager;
private readonly IDepartmentAppService _departmentAppService;
private readonly IObjectMapper _objectMapper;
6 months ago
private readonly IErpLocationAppService _erpLocationAppService;
2 years ago
public TransferNoteConverter(
IOutgoingFromWmsManager outgoingFromWmsManager
, IOutgoingToExternalManager outgoingToExternalManager
, IDepartmentAppService departmentAppService
, IObjectMapper objectMapper
6 months ago
, IErpLocationAppService erpLocationAppService
2 years ago
)
{
_outgoingFromWmsManager = outgoingFromWmsManager;
_outgoingToExternalManager = outgoingToExternalManager;
_departmentAppService = departmentAppService;
_objectMapper = objectMapper;
6 months ago
_erpLocationAppService = erpLocationAppService;
2 years ago
}
2 years ago
2 years ago
public virtual async Task<List<OutgoingToExternal>> ConvertAsync()
{
var outgoingToExternalList = new List<OutgoingToExternal>();
List<OutgoingFromWms> archivelist = new List<OutgoingFromWms>();
//获取要同步得数据
var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.Transfer, EnumSystemType.ERP).ConfigureAwait(false);
foreach (var outgoingFromWms in outgoingFromWmsList)
{
var wmsReceipt = JsonSerializer.Deserialize<TransferNoteDTO>(outgoingFromWms.DataContent);
var exchangeReceipt = _objectMapper.Map<TransferNoteDTO, TransferNoteExchangeDto>(wmsReceipt);
var department = await _departmentAppService.GetByUsernameAsync(exchangeReceipt.Worker).ConfigureAwait(false);
var departmentCode = department == null ? "" : department.Code;
var details = wmsReceipt.Details.Where(r => r.FromLocationErpCode != r.ToLocationErpCode).ToList();
2 years ago
List<TransferNoteDetailExchangeDto> WipDetails = new List<TransferNoteDetailExchangeDto>();
2 years ago
if (details.Count > 0 && (wmsReceipt.Type != EnumTransSubType.Transfer_Inside.ToString()||wmsReceipt.Type!=EnumTransSubType.Transfer_SplitPacking.ToString()))
2 years ago
{
string tyrpNumber = outgoingFromWms.TyrpNumber;
2 years ago
#region 主表
var outgoingToExternal = new OutgoingToExternal()
{
// DataType = dataType,
TableType = EnumExchangeTableType.MainTable,
DataAction = outgoingFromWms.DataAction,
SerialNumber=tyrpNumber,
2 years ago
SourceSystem = EnumSystemType.WMS.ToString(),
SourceDataId = wmsReceipt.Id.ToString(),
SourceDataGroupCode = wmsReceipt.Number,
SourceDataDetailCode = wmsReceipt.Number,
Writer = nameof(TyrpOutgoingBackgroundWorker),
DestinationSystem = EnumSystemType.ERP.ToString(),
DestinationDataId = "",
};
6 months ago
var stat = "1";
2 years ago
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceipt);
2 years ago
string dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss");
2 years ago
if (exchangeReceipt.Type != EnumTransSubType.Transfer_Customer.ToString())
{
outgoingToExternal.DataType = EnumOutgoingDataType.TransferForErp.ToString();
var putawayNoteScontrol = BuildScontrolDataInterface(exchangeReceipt, dt_w);
2 years ago
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNoteScontrol);
2 years ago
WipDetails =details.GroupBy(r => new { r.Number, r.ItemCode, r.FromLocationErpCode , r.ToLocationErpCode }).Select(p => new TransferNoteDetailExchangeDto { Qty = p.Sum(itm => itm.Qty), Number = p.Key.Number, ItemCode = p.Key.ItemCode, FromLocationErpCode = p.Key.FromLocationErpCode, ToLocationErpCode=p.Key.ToLocationErpCode }).ToList();
2 years ago
}
else
{
outgoingToExternal.DataType = EnumOutgoingDataType.TransferForCustom.ToString();
6 months ago
var toLocationErpcode = details[0].ToLocationErpCode;
var erplocation = await _erpLocationAppService.GetByCodeAsync(toLocationErpcode).ConfigureAwait(false);
if (erplocation?.Type != "2")
{
stat = "2";
}
var location = stat == "1" ? details[0].ToLocationErpCode : details[0].FromLocationErpCode;
var putawayNoteWmsoutm = BuildWmsoutmDataInterface(exchangeReceipt, departmentCode, dt_w, tyrpNumber,location);
2 years ago
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNoteWmsoutm);
2 years ago
WipDetails = details.GroupBy(r => new { r.Number, r.ItemCode, r.FromLocationErpCode }).Select(p => new TransferNoteDetailExchangeDto { Qty = p.Sum(itm => itm.Qty), Number = p.Key.Number, ItemCode = p.Key.ItemCode, FromLocationErpCode = p.Key.FromLocationErpCode }).ToList();
2 years ago
}
outgoingToExternalList.Add(outgoingToExternal);
#endregion
#region 明细
2 years ago
foreach (var detail in WipDetails)
2 years ago
{
var outgoingDetailToExternal = new OutgoingToExternal()
{
DataType = outgoingToExternal.DataType,
TableType = EnumExchangeTableType.DetailTable,
DataAction = outgoingFromWms.DataAction,
SerialNumber=tyrpNumber,
2 years ago
SourceSystem = EnumSystemType.WMS.ToString(),
2 years ago
SourceDataId = detail.Number.ToString(),
2 years ago
SourceDataGroupCode = wmsReceipt.Number,
SourceDataDetailCode = detail.ItemCode,
Writer = nameof(TyrpOutgoingBackgroundWorker),
DestinationSystem = EnumSystemType.ERP.ToString(),
DestinationDataId = "",
};
outgoingDetailToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
2 years ago
// var exchangeReceiptDetail = _objectMapper.Map<TransferNoteDetailDTO, TransferNoteDetailExchangeDto>(detail);
outgoingDetailToExternal.SourceDataContent = JsonSerializer.Serialize(detail);
2 years ago
if (exchangeReceipt.Type != EnumTransSubType.Transfer_Customer.ToString())
{
var putawayNoteDetailScmsend = BuildScmsendDataInterfaceDetail(exchangeReceipt, detail, dt_w);
2 years ago
outgoingDetailToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNoteDetailScmsend);
}
else
{
var putawayNoteDetailWmsoutd = BuildWmsoutdDataInterfaceDetail(tyrpNumber, detail, wmsReceipt.Number);
2 years ago
outgoingDetailToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNoteDetailWmsoutd);
}
outgoingToExternalList.Add(outgoingDetailToExternal);
}
#endregion
}
archivelist.Add(outgoingFromWms);
}
//插入到中间表OutgoingToExternal
await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false);
//将outgoingFromWms数据归档
await _outgoingFromWmsManager.ArchiveManyAsync(archivelist).ConfigureAwait(false);
return outgoingToExternalList;
}
/// <summary>
/// 构建主表(Scontrol)
/// </summary>
/// <param name="exchangeOrder"></param>
/// <returns></returns>
private Scontrol BuildScontrolDataInterface(TransferNoteExchangeDto exchangeOrder, string dt_w)
2 years ago
{
var ret = new Scontrol()
{
scontrol_nbr = exchangeOrder.Number,
2 years ago
scontrol_dt_w = dt_w,
2 years ago
scontrol_stat = "Y",
scontrol_dt_k = "",
scontrol_type = billtype_s,
scontrol_id = 0,//明细中最大scmsend_id
};
return ret;
}
/// <summary>
/// 构建明细(Scmsend)
/// </summary>
/// <param name="exchangeOrder"></param>
/// <param name="exchangeDetailOrder"></param>
/// <returns></returns>
private Scmsend BuildScmsendDataInterfaceDetail(TransferNoteExchangeDto exchangeOrder, TransferNoteDetailExchangeDto exchangeDetailOrder, string dt_w)
2 years ago
{
var ret = new Scmsend()
{
scmsend_type = billtype_s,
2 years ago
scmsend_dt_w = dt_w,
scmsend_nbr = exchangeOrder.Number,
2 years ago
scmsend_stat1 = "0",
scmsend_part = exchangeDetailOrder.ItemCode,
scmsend_delv_date = "",
scmsend_orderno = "",
scmsend_loc = exchangeDetailOrder.FromLocationErpCode,
// scmsend_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"),
2 years ago
scmsend_date = DateTime.Now.ToString("yyyyMMdd"),
2 years ago
scmsend_qty = exchangeDetailOrder.Qty,
scmsend_wipd_loc = exchangeDetailOrder.ToLocationErpCode,
scmsend_userid = "WMS"
2 years ago
};
return ret;
}
/// <summary>
/// 构建主表(Wmsoutm)
/// </summary>
/// <param name="exchangeOrder"></param>
/// <returns></returns>
6 months ago
private Wmsoutm BuildWmsoutmDataInterface(TransferNoteExchangeDto exchangeOrder, string departmentCode, string dt_w,string tyrpNumber)
2 years ago
{
var ret = new Wmsoutm()
{
wmsoutm_mid = Convert.ToDecimal(tyrpNumber),
wmsoutm_nbr = number,
2 years ago
wmsoutm_type = billtype_w,
2 years ago
wmsoutm_dt_w = dt_w,
2 years ago
wmsoutm_stat = "Y",
wmsoutm_tyrp_dt = "",
2 years ago
wmsoutm_user = "WMS",
6 months ago
wmsoutm_dept = "450900",//根据Worker从UserDepartment中获取
2 years ago
wmsoutm_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"),
wmsoutm_cust = "",
wmsoutm_shm_nbr = "",
6 months ago
wmsoutm_cust_loc =location,
2 years ago
wmsoutm_stock_stat = "1",
2 years ago
wmsoutm_open_part = "",
wmsoutm_open_loc = "",
wmsoutm_open_hours = 0,
wmsoutm_tyrp_k = "",
wmsoutm_id = 0,//明细中最大scmsend_id
2 years ago
wmsoutm_open_qty = 0,
2 years ago
};
return ret;
}
/// <summary>
/// 构建明细(Wmsoutd)
/// </summary>
/// <param name="exchangeOrder"></param>
/// <param name="exchangeDetailOrder"></param>
/// <returns></returns>
private Wmsoutd BuildWmsoutdDataInterfaceDetail(string tyrpNumber, TransferNoteDetailExchangeDto exchangeDetailOrder,string number)
2 years ago
{
var ret = new Wmsoutd()
{
wmsoutd_mid = Convert.ToDecimal(tyrpNumber),
wmsoutd_nbr = number,
2 years ago
wmsoutd_part = exchangeDetailOrder.ItemCode,
wmsoutd_loc = exchangeDetailOrder.FromLocationErpCode,
wmsoutd_qty = exchangeDetailOrder.Qty,
wmsoutd_bcm_code = "",//有问题
wmsoutd_projt_id = "",//有问题
};
return ret;
}
}