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> ConvertAsync() { var outgoingToExternalList = new List(); var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.UnplannedIssue, EnumSystemType.ERP).ConfigureAwait(false); foreach (var outgoingFromWms in outgoingFromWmsList) { var wmsCountAdjust = JsonSerializer.Deserialize(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(exchangeScrap.Type) == EnumTransSubType.CountAdjust_WIP) { asdtype = "4042"; } else if (Enum.Parse(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 BuildPurchaseReceiptExchangeDtoAsync(ScrapNoteDTO wmsScrap, ScrapNoteDetailDTO wmsScrapDetail) { await Task.CompletedTask.ConfigureAwait(false); var exchangeScrap = _objectMapper.Map(wmsScrap); var exchangeScrapDetail = _objectMapper.Map(wmsScrapDetail); //var userdep = await _supplierAsnAppService.GetByNumberAsync(exchangeCountAdjust.Worker); //exchangeCountAdjust.DepartmentCode = userdep.DepartmentCode; exchangeScrap.Detail = exchangeScrapDetail; return exchangeScrap; } }