4 changed files with 221 additions and 1 deletions
@ -0,0 +1,142 @@ |
|||||
|
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.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.PCK; |
||||
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing; |
||||
|
|
||||
|
public class AssembleIssueNoteConverter : IOutgoingConverter |
||||
|
{ |
||||
|
private readonly string billtype = "4026"; |
||||
|
private readonly IOutgoingFromWmsManager _outgoingFromWmsManager; |
||||
|
private readonly IOutgoingToExternalManager _outgoingToExternalManager; |
||||
|
private readonly IObjectMapper _objectMapper; |
||||
|
|
||||
|
public AssembleIssueNoteConverter( |
||||
|
IOutgoingFromWmsManager outgoingFromWmsManager |
||||
|
, IOutgoingToExternalManager outgoingToExternalManager |
||||
|
, IObjectMapper objectMapper |
||||
|
) |
||||
|
{ |
||||
|
_outgoingFromWmsManager = outgoingFromWmsManager; |
||||
|
_outgoingToExternalManager = outgoingToExternalManager; |
||||
|
_objectMapper = objectMapper; |
||||
|
} |
||||
|
|
||||
|
public virtual async Task<List<OutgoingToExternal>> ConvertAsync() |
||||
|
{ |
||||
|
var outgoingToExternalList = new List<OutgoingToExternal>(); |
||||
|
//获取要同步得数据
|
||||
|
var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.AssembleIssue, EnumSystemType.ERP).ConfigureAwait(false); |
||||
|
foreach (var outgoingFromWms in outgoingFromWmsList) |
||||
|
{ |
||||
|
string tyrpNumber = outgoingFromWms.TyrpNumber; |
||||
|
#region 主表
|
||||
|
var wmsReceipt = JsonSerializer.Deserialize<AssembleIssueNoteDTO>(outgoingFromWms.DataContent); |
||||
|
var exchangeReceipt = _objectMapper.Map<AssembleIssueNoteDTO, AssembleIssueNoteExchangeDto>(wmsReceipt); |
||||
|
var putawayNote = BuildDataInterface(exchangeReceipt); |
||||
|
var outgoingToExternal = new OutgoingToExternal() |
||||
|
{ |
||||
|
DataType = EnumOutgoingDataType.Issue.ToString(), |
||||
|
TableType = EnumExchangeTableType.MainTable, |
||||
|
DataAction = outgoingFromWms.DataAction, |
||||
|
SerialNumber = tyrpNumber, |
||||
|
SourceSystem = EnumSystemType.WMS.ToString(), |
||||
|
SourceDataId = wmsReceipt.Id.ToString(), |
||||
|
SourceDataGroupCode = wmsReceipt.Number, |
||||
|
SourceDataDetailCode = wmsReceipt.Number, |
||||
|
Writer = nameof(TyrpOutgoingBackgroundWorker), |
||||
|
DestinationSystem = EnumSystemType.ERP.ToString(), |
||||
|
DestinationDataId = "", |
||||
|
}; |
||||
|
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate); |
||||
|
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceipt); |
||||
|
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNote); |
||||
|
outgoingToExternalList.Add(outgoingToExternal); |
||||
|
#endregion
|
||||
|
var sumDetails = wmsReceipt.Details.GroupBy(r => new { r.ItemCode, r.HandledFromLocationErpCode, r.HandledToLocationErpCode }).Select(p => new AssembleIssueNoteDetailDTO { ItemCode = p.Key.ItemCode, HandledFromLocationErpCode = p.Key.HandledFromLocationErpCode, HandledToLocationErpCode = p.Key.HandledToLocationErpCode, HandledToQty = p.Sum(x => x.HandledToQty) }).ToList(); |
||||
|
#region 明细
|
||||
|
foreach (var detail in sumDetails) |
||||
|
{ |
||||
|
var outgoingDetailToExternal = new OutgoingToExternal() |
||||
|
{ |
||||
|
DataType = EnumOutgoingDataType.Issue.ToString(), |
||||
|
TableType = EnumExchangeTableType.DetailTable, |
||||
|
DataAction = outgoingFromWms.DataAction, |
||||
|
SerialNumber = tyrpNumber, |
||||
|
SourceSystem = EnumSystemType.WMS.ToString(), |
||||
|
SourceDataId = detail.Id.ToString(), |
||||
|
SourceDataGroupCode = wmsReceipt.Number, |
||||
|
SourceDataDetailCode = detail.ItemCode, |
||||
|
Writer = nameof(TyrpOutgoingBackgroundWorker), |
||||
|
DestinationSystem = EnumSystemType.ERP.ToString(), |
||||
|
DestinationDataId = "", |
||||
|
}; |
||||
|
outgoingDetailToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate); |
||||
|
var exchangeReceiptDetail = _objectMapper.Map<AssembleIssueNoteDetailDTO, AssembleIssueNoteDetailExchangeDto>(detail); |
||||
|
outgoingDetailToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceiptDetail); |
||||
|
var putawayNoteDetail = BuildDataInterfaceDetail(exchangeReceipt, exchangeReceiptDetail, putawayNote.scontrol_dt_w); |
||||
|
outgoingDetailToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNoteDetail); |
||||
|
outgoingToExternalList.Add(outgoingDetailToExternal); |
||||
|
} |
||||
|
#endregion
|
||||
|
} |
||||
|
//插入到中间表OutgoingToExternal
|
||||
|
await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false); |
||||
|
//将outgoingFromWms数据归档
|
||||
|
await _outgoingFromWmsManager.ArchiveManyAsync(outgoingFromWmsList).ConfigureAwait(false); |
||||
|
|
||||
|
return outgoingToExternalList; |
||||
|
} |
||||
|
/// <summary>
|
||||
|
/// 构建主表
|
||||
|
/// </summary>
|
||||
|
/// <param name="exchangeOrder"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private Scontrol BuildDataInterface(AssembleIssueNoteExchangeDto exchangeOrder) |
||||
|
{ |
||||
|
var ret = new Scontrol() |
||||
|
{ |
||||
|
scontrol_nbr = exchangeOrder.Number, |
||||
|
scontrol_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"), |
||||
|
scontrol_stat = "Y", |
||||
|
scontrol_dt_k = "", |
||||
|
scontrol_type = billtype, |
||||
|
scontrol_id = 0,//明细中最大scmsend_id
|
||||
|
}; |
||||
|
return ret; |
||||
|
} |
||||
|
/// <summary>
|
||||
|
/// 构建明细
|
||||
|
/// </summary>
|
||||
|
/// <param name="exchangeOrder"></param>
|
||||
|
/// <param name="exchangeDetailOrder"></param>
|
||||
|
/// <returns></returns>
|
||||
|
private Scmsend BuildDataInterfaceDetail(AssembleIssueNoteExchangeDto exchangeOrder, AssembleIssueNoteDetailExchangeDto exchangeDetailOrder, string dt_w) |
||||
|
{ |
||||
|
var ret = new Scmsend() |
||||
|
{ |
||||
|
scmsend_type = billtype, |
||||
|
scmsend_dt_w = dt_w, |
||||
|
scmsend_nbr = exchangeOrder.Number, |
||||
|
scmsend_stat1 = "1", |
||||
|
scmsend_part = exchangeDetailOrder.ItemCode, |
||||
|
scmsend_delv_date = "", |
||||
|
scmsend_orderno = "", |
||||
|
scmsend_loc = exchangeDetailOrder.FromLocationErpCode, |
||||
|
//scmsend_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"),
|
||||
|
scmsend_date = DateTime.Now.ToString("yyyyMMdd"), |
||||
|
scmsend_qty = exchangeDetailOrder.Qty, |
||||
|
scmsend_wipd_loc = exchangeDetailOrder.ToLocationErpCode, |
||||
|
scmsend_userid = "WMS" |
||||
|
}; |
||||
|
return ret; |
||||
|
} |
||||
|
} |
@ -0,0 +1,36 @@ |
|||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using Win_in.Sfs.Shared.Domain; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.DataExchange.WMS.PCK; |
||||
|
|
||||
|
public class AssembleIssueNoteDetailExchangeDto |
||||
|
|
||||
|
{ |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 目标ERP库位
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "目标ERP库位")] |
||||
|
public string ToLocationErpCode { get; set; } |
||||
|
|
||||
|
public string FromPackingCode { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 来源ERP库位
|
||||
|
/// </summary>
|
||||
|
public string FromLocationErpCode { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 数量
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "数量")] |
||||
|
public decimal Qty { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 物品代码
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "物品代码")] |
||||
|
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] |
||||
|
[Required(ErrorMessage = "{0}是必填项")] |
||||
|
public string ItemCode { get; set; } |
||||
|
|
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
|
||||
|
namespace Win_in.Sfs.Wms.DataExchange.WMS.PCK; |
||||
|
|
||||
|
public class AssembleIssueNoteExchangeDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 发料记录号
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "发料记录号")] |
||||
|
public string Number { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 生效日期
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "生效日期")] |
||||
|
public DateTime ActiveDate { get; set; } = DateTime.Now.Date; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 操作员
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "操作员")] |
||||
|
public string Worker { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 明细
|
||||
|
/// </summary>
|
||||
|
[Display(Name = "明细")] |
||||
|
public AssembleIssueNoteDetailExchangeDto Detail { get; set; } = new(); |
||||
|
} |
Loading…
Reference in new issue