From 0cd718b3d40b6dbe0eaadbe93e72afd533cffaab Mon Sep 17 00:00:00 2001 From: lvzb <35200379@qq.com> Date: Tue, 7 May 2024 18:06:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=A8=E9=87=8F=E8=A1=A5=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=AE=A2=E6=88=B7=E9=9B=B6=E4=BB=B6?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BA=93=E4=BD=8D=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Qtyrfe/IQtyrfeManager.cs | 11 ++ .../Qtyrfe/IQtyrfeRepository.cs | 7 + .../Qtyrfe/Qtyrfe.cs | 50 +++++++ .../Qtyrfe/QtyrfeManager.cs | 45 ++++++ ...xchangeDbContextModelCreatingExtensions.cs | 1 + ...ExchangeEntityFrameworkCoreFawtygModule.cs | 2 + .../IMesDbContext.cs | 3 + .../MesDbContext.cs | 3 + .../QtyrfeDbContextModelCreatingExtensions.cs | 30 ++++ .../Qtyrfe/QtyrfeEfCoreRepository.cs | 13 ++ ...ange.EntityFrameworkCore.Fawtyg.Mes.csproj | 2 +- .../FawtygAutoMapperProfile.cs | 42 ++++++ .../Incoming/MesIncomingBackgroundWorker.cs | 49 ++++-- .../Incoming/MesOutConverter.cs | 14 +- .../Incoming/MesOutReader.cs | 78 +++++++++- .../Incoming/QtyrfeConverter.cs | 140 ++++++++++++++++++ .../Incoming/QtyrfeReader.cs | 117 +++++++++++++++ .../appsettings.json | 14 +- .../AgentModule.cs | 2 +- .../IncomingToWmsExtensions.cs | 20 ++- .../IncomingToWmsWorker.cs | 5 +- .../appsettings.json | 16 +- .../TransferNoteDetailExchangeDto.cs | 13 ++ .../TransferNote/TransferNoteExchangeDto.cs | 10 ++ ...Wms.DataExchange.Application.Contracts.xml | 20 +++ .../Enums/EnumIncomingDataType.cs | 4 + .../CustomerItems/DTOs/CustomerItemDTO.cs | 7 + .../CustomerItems/ICustomerItemAppService.cs | 1 + .../Inputs/CustomerItemEditInput.cs | 7 + .../Inputs/CustomerItemImportInput.cs | 10 ++ .../Bases/SfsBaseDataAppServiceBase.cs | 9 +- .../CustomerItems/CustomerItemAppService.cs | 17 +++ .../CustomerItems/CustomerItem.cs | 6 + ...merItemDbContextModelCreatingExtensions.cs | 2 +- .../TransferNotes/TransferNoteAppService.cs | 2 +- 35 files changed, 723 insertions(+), 49 deletions(-) create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeManager.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeRepository.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/Qtyrfe.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/QtyrfeManager.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeDbContextModelCreatingExtensions.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeEfCoreRepository.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeConverter.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeReader.cs diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeManager.cs new file mode 100644 index 000000000..474e56296 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeManager.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; +public interface IQtyrfeManager : IDomainService +{ + Task> GetToBeProcessedListAsync(); + Task UpdateProcessedListAsync(List entities); + Task UpdateProcesseErrordListAsync(List entities); +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeRepository.cs new file mode 100644 index 000000000..8535022a2 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeRepository.cs @@ -0,0 +1,7 @@ +using Volo.Abp.Domain.Repositories; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; +public interface IQtyrfeRepository : IRepository +{ + +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/Qtyrfe.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/Qtyrfe.cs new file mode 100644 index 000000000..b2110b82f --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/Qtyrfe.cs @@ -0,0 +1,50 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Domain.Entities; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; +public class Qtyrfe : Entity +{ + /// + /// 序号 + /// + [Key] + public string mesout_qtyrfe_id { get; set; } + /// + /// 物料 + /// + public string mesout_qtyrfe_part { get; set; } + /// + /// 调出储位 + /// + public string mesout_qtyrfe_loc_from { get; set; } + /// + /// 调入储位 + /// + public string mesout_qtyrfe_loc_to { get; set; } + /// + /// 数量 + /// + public decimal mesout_qtyrfe_num { get; set; } + /// + /// 调拨用户 + /// + public string mesout_qtyrfe_user { get; set; } + /// + /// 写入时间 + /// + public string mesout_qtyrfe_wt { get; set; } + /// + /// 类型(1为质量补) + /// + public string mesout_qtyrfe_type { get; set; } + + public override object[] GetKeys() + { + return new object[] { mesout_qtyrfe_id }; + } + + /// + /// 是否读取(0,1) + /// + public long Yl1 { get; set; } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/QtyrfeManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/QtyrfeManager.cs new file mode 100644 index 000000000..9b1147dcb --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/QtyrfeManager.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; +public class QtyrfeManager : DomainService, IQtyrfeManager +{ + private readonly IQtyrfeRepository _repository; + + public QtyrfeManager(IQtyrfeRepository repository) + { + _repository = repository; + } + public virtual async Task> GetToBeProcessedListAsync() + { + var plans = await _repository.GetListAsync(p => p.Yl1 == 0).ConfigureAwait(false); + return plans; + + } + public virtual async Task UpdateProcesseErrordListAsync(List entities) + { + var ids = entities.Select(p => p.mesout_qtyrfe_id); + var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_qtyrfe_id)).ConfigureAwait(false); + plans.ForEach(p => + { + p.Yl1 = 2; + // p.WmsDate = Clock.Now; + }); + await _repository.UpdateManyAsync(plans).ConfigureAwait(false); + } + public virtual async Task UpdateProcessedListAsync(List entities) + { + var ids = entities.Select(p => p.mesout_qtyrfe_id); + var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_qtyrfe_id)).ConfigureAwait(false); + plans.ForEach(p => + { + p.Yl1 = 1; + + // p.WmsDate = Clock.Now; + }); + await _repository.UpdateManyAsync(plans).ConfigureAwait(false); + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs index 3d5d56d79..d932677bf 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs @@ -27,5 +27,6 @@ public static class DataExchangeDbContextModelCreatingExtensions builder.ConfigureScrap(options); builder.ConfigurePck(options); builder.ConfigureBackflu(options); + builder.ConfigureQtyrfe(options); } } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs index ea5d271be..c71c18adb 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs @@ -6,6 +6,7 @@ using Volo.Abp.Modularity; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; @@ -32,5 +33,6 @@ public class DataExchangeEntityFrameworkCoreFawtygModule : AbpModule context.Services.AddTransient(); context.Services.AddTransient(); context.Services.AddTransient(); + context.Services.AddTransient(); } } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs index 60810373f..1859f7690 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs @@ -4,6 +4,7 @@ using Volo.Abp.EntityFrameworkCore; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; @@ -20,4 +21,6 @@ public interface IMesDbContext : IEfCoreDbContext DbSet MesOuts { get; } DbSet PullTasks { get; } DbSet Backflu { get; } + + DbSet Qtyrfe { get; } } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs index 775047674..104f8a1d3 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs @@ -4,6 +4,7 @@ using Volo.Abp.EntityFrameworkCore; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; @@ -22,6 +23,8 @@ public class MesDbContext : public virtual DbSet Issue { get; } public virtual DbSet Backflu { get; } + public virtual DbSet Qtyrfe { get; } + public MesDbContext(DbContextOptions options) : base(options) { diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeDbContextModelCreatingExtensions.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeDbContextModelCreatingExtensions.cs new file mode 100644 index 000000000..1950bfa30 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeDbContextModelCreatingExtensions.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.Modeling; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; + +namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; +public static class QtyrfeDbContextModelCreatingExtensions +{ + public static void ConfigureQtyrfe(this ModelBuilder builder, MesModelBuilderConfigurationOptions options) + { + builder.Entity(b => + { + //Configure table & schema Name + b.ToTable(options.TablePrefix + "mesout_qtyrfe", options.Schema); + //Configure ABP properties + b.ConfigureByConvention(); + + //Properties + b.Property(q => q.mesout_qtyrfe_id).HasMaxLength(20); + b.Property(q => q.mesout_qtyrfe_part).HasMaxLength(20); + b.Property(q => q.mesout_qtyrfe_loc_from).HasMaxLength(10); + b.Property(q => q.mesout_qtyrfe_loc_to).HasMaxLength(10); + b.Property(q => q.mesout_qtyrfe_num).HasPrecision(10, 2); + b.Property(q => q.mesout_qtyrfe_user).HasMaxLength(20); + b.Property(q => q.mesout_qtyrfe_wt).HasMaxLength(20); + b.Property(q => q.mesout_qtyrfe_type).HasMaxLength(2); + b.Property(q => q.Yl1); + }); + + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeEfCoreRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeEfCoreRepository.cs new file mode 100644 index 000000000..81886dcaa --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeEfCoreRepository.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; + +namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; + +public class QtyrfeEfCoreRepository : EfCoreRepository, IQtyrfeRepository +{ + public QtyrfeEfCoreRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes.csproj b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes.csproj index 89ae346ea..4f26ffa5b 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes.csproj +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes.csproj @@ -1,4 +1,4 @@ - + net6.0 diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs index 0f32b55f7..7dc28eaa9 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs @@ -7,6 +7,7 @@ using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest; using Win_in.Sfs.Wms.DataExchange.WMS.PCK; using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote; using Win_in.Sfs.Wms.DataExchange.WMS.ScrapNote; +using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote; using Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent; @@ -177,5 +178,46 @@ public class FawtygAutoMapperProfile : Profile .Ignore(x => x.Uom) .Ignore(x => x.StdPackQty) ; + + CreateMap() + .Ignore(x => x.Details) + .Ignore(x => x.ExtraProperties) + .Ignore(x => x.RequestNumber) + .Ignore(x => x.JobNumber) + .Ignore(x => x.CallRequestNumber) + .Ignore(x => x.CallJobNumber) + .Ignore(x => x.CallBusinessType) + .Ignore(x => x.CallServerName) + .Ignore(x => x.UseOnTheWayLocation) + .Ignore(x => x.Confirmed) + .Ignore(x => x.ConfirmTime) + .Ignore(x => x.Details) + .Ignore(x => x.ExtraProperties); + ; + CreateMap() + .Ignore(x => x.ItemName) + .Ignore(x => x.ItemDesc1) + .Ignore(x => x.ItemDesc2) + .Ignore(x => x.FromLocationCode) + .Ignore(x => x.FromLocationArea) + .Ignore(x => x.FromLocationGroup) + .Ignore(x => x.FromContainerCode) + .Ignore(x => x.FromWarehouseCode) + .Ignore(x => x.FromLot) + .Ignore(x => x.FromPackingCode) + .Ignore(x => x.ToPackingCode) + .Ignore(x => x.ToContainerCode) + .Ignore(x => x.ToLocationCode) + .Ignore(x => x.ToLocationArea) + .Ignore(x => x.ToLocationGroup) + .Ignore(x => x.ToWarehouseCode) + .Ignore(x => x.ToLot) + .Ignore(x => x.SupplierBatch) + .Ignore(x => x.ArriveDate) + .Ignore(x => x.ProduceDate) + .Ignore(x => x.ExpireDate) + .Ignore(x => x.Uom) + .Ignore(x => x.StdPackQty) + ; } } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs index 87b487f78..f54234061 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -6,6 +7,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.BackgroundWorkers; using Volo.Abp.Threading; using Volo.Abp.Uow; +using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent; @@ -46,10 +48,18 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase Logger.LogInformation($"Read MesOut");//缴库 var mesOutReader = workerContext.ServiceProvider.GetRequiredService(); var mesOutConverter = workerContext.ServiceProvider.GetRequiredService(); - //读取并保存MesOut + var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService(); + //读取mes缴库 var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false); - //转换MesOut - await mesOutConverter.ConvertAsync(mesOutsFromExternalList).ConfigureAwait(false); + var mesOutsFromExternalList_ProductReceipt = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.ProductReceipt.ToString()).ToList(); + var mesOutsFromExternalList_TransferNote = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.TransferNote.ToString()).ToList(); + //转换缴库数据(如果有质量补得数据直接生产移库数据移到客户库位) + await mesOutConverter.ConvertAsync(mesOutsFromExternalList_ProductReceipt).ConfigureAwait(false); + if (mesOutsFromExternalList_TransferNote.Count > 0) + { + await TransferNoteConverter.ConvertAsync(mesOutsFromExternalList_TransferNote).ConfigureAwait(false); + } + //上海和安徽无此接口 //Logger.LogInformation($"Read PullTask");//拉动任务 @@ -59,14 +69,14 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase //var pullTaskFromExternalList = await pullTaskReader.ReadAsync().ConfigureAwait(false); ////转换PullTask //await pullTaskConverter.ConvertAsync(pullTaskFromExternalList).ConfigureAwait(false); - Logger.LogInformation($"Read Scrap"); + //Logger.LogInformation($"Read Scrap"); - var scrapReader = workerContext.ServiceProvider.GetRequiredService(); - var scrapConverter = workerContext.ServiceProvider.GetRequiredService(); - //读取并保存Scrap - var scrapsFromExternalList = await scrapReader.ReadAsync().ConfigureAwait(false); - //转换Scrap - await scrapConverter.ConvertAsync(scrapsFromExternalList).ConfigureAwait(false); + //var scrapReader = workerContext.ServiceProvider.GetRequiredService(); + //var scrapConverter = workerContext.ServiceProvider.GetRequiredService(); + ////读取并保存Scrap + //var scrapsFromExternalList = await scrapReader.ReadAsync().ConfigureAwait(false); + ////转换Scrap + //await scrapConverter.ConvertAsync(scrapsFromExternalList).ConfigureAwait(false); //上海和安徽无此接口 //Logger.LogInformation($"Read Issue"); @@ -77,13 +87,22 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase ////转换Pck //await pckConverter.ConvertAsync(pcksFromExternalList).ConfigureAwait(false); - Logger.LogInformation($"Read BackFlush");//耗用单 - var BackFlushReader = workerContext.ServiceProvider.GetRequiredService(); - var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService(); + //Logger.LogInformation($"Read BackFlush");//耗用单 + //var BackFlushReader = workerContext.ServiceProvider.GetRequiredService(); + //var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService(); + ////读取并保存BackFlush + //var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false); + ////转换BackFlush + //await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false); + + + Logger.LogInformation($"Read TransferNote");//储位调拨 + var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService(); + // var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService(); //读取并保存BackFlush - var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false); + var transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false); //转换BackFlush - await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false); + await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false); Logger.LogInformation($"Completed: Handling {Incoming}"); } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs index 941cc6cb4..5ede235e6 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs @@ -89,7 +89,7 @@ public class MesOutConverter : IIncomingConverter var productReceiptNote = JsonSerializer.Deserialize(incomingFromExternal.DestinationDataContent); var wmsProductReceiptNoteDetail = _objectMapper.Map(productReceiptNote.Detail); - var oldNoteDetail = wmsProductReceiptNote.Details.FirstOrDefault(r => r.ItemCode == wmsProductReceiptNoteDetail.ItemCode && r.LocationErpCode == wmsProductReceiptNoteDetail.LocationErpCode && (first.TableType != EnumExchangeTableType.MainTable ? true : r.ReturnQty != 0)); + var oldNoteDetail = wmsProductReceiptNote.Details.FirstOrDefault(r =>r.MesQuality== wmsProductReceiptNoteDetail.MesQuality&& r.ItemCode == wmsProductReceiptNoteDetail.ItemCode && r.LocationErpCode == wmsProductReceiptNoteDetail.LocationErpCode && (first.TableType != EnumExchangeTableType.MainTable ? true : r.ReturnQty != 0)); sumdetail.itemCode = wmsProductReceiptNoteDetail.ItemCode; sumdetail.locationCode = wmsProductReceiptNoteDetail.LocationErpCode; @@ -111,6 +111,11 @@ public class MesOutConverter : IIncomingConverter wmsProductReceiptNoteDetail.WarehouseCode = "T8"; wmsProductReceiptNoteDetail.LocationArea = ""; wmsProductReceiptNoteDetail.LocationGroup = ""; + if (wmsProductReceiptNoteDetail.MesQuality=="1")//质量补 + { + wmsProductReceiptNoteDetail.Lot = "RFE"; //质量补排序批次 + wmsProductReceiptNoteDetail.PackingCode = "RFE";//质量补箱标签 + } var loc = await _locationAppService.GetListByTypesAndErpCodeAsync(types, wmsProductReceiptNoteDetail.LocationErpCode, wmsProductReceiptNoteDetail.LocationErpCode).ConfigureAwait(false); if (loc != null) { @@ -123,13 +128,16 @@ public class MesOutConverter : IIncomingConverter wmsProductReceiptNoteDetail.HandledToLocationArea = loc[0].AreaCode; wmsProductReceiptNoteDetail.HandledToLocationGroup = loc[0].LocationGroupCode; wmsProductReceiptNoteDetail.HandledToLocationErpCode = loc[0].ErpLocationCode; + wmsProductReceiptNoteDetail.HandledPackingCode = wmsProductReceiptNoteDetail.PackingCode; + wmsProductReceiptNoteDetail.HandledLot = wmsProductReceiptNoteDetail.Lot; wmsProductReceiptNoteDetail.RecommendToLocationCode = loc[0].Code; wmsProductReceiptNoteDetail.RecommendToLocationArea = loc[0].AreaCode; wmsProductReceiptNoteDetail.RecommendToLocationGroup = loc[0].LocationGroupCode; wmsProductReceiptNoteDetail.RecommendToLocationErpCode = loc[0].ErpLocationCode; + wmsProductReceiptNoteDetail.RecommendPackingCode = wmsProductReceiptNoteDetail.PackingCode; + wmsProductReceiptNoteDetail.RecommendLot = wmsProductReceiptNoteDetail.Lot; } - var item = await _itemBasicAppService.GetByCodeAsync(wmsProductReceiptNoteDetail.ItemCode).ConfigureAwait(false); if (item != null) { @@ -137,7 +145,7 @@ public class MesOutConverter : IIncomingConverter wmsProductReceiptNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : ""; wmsProductReceiptNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : ""; wmsProductReceiptNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : ""; - + wmsProductReceiptNoteDetail.StdPackQty = item.StdPackQty; wmsProductReceiptNoteDetail.ProduceDate = incomingFromExternal.EffectiveDate; wmsProductReceiptNoteDetail.ArriveDate = incomingFromExternal.EffectiveDate; wmsProductReceiptNoteDetail.ExpireDate = wmsProductReceiptNoteDetail.ProduceDate.AddDays(item.GetValidateDays()); diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs index f0171be9c..958d8eeba 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs @@ -8,8 +8,10 @@ using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote; +using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent; @@ -19,17 +21,20 @@ public class MesOutReader : IReader private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly ILogger _logger; private readonly ILocationAppService _locationAppService; + private readonly ICustomerItemAppService _customerItemAppService; public MesOutReader( IMesOutManager mesOutManager , IIncomingFromExternalManager incomingFromExternalManager , ILogger logger , ILocationAppService locationAppService + , ICustomerItemAppService customerItemAppService ) { _mesOutManager = mesOutManager; _incomingFromExternalManager = incomingFromExternalManager; _logger = logger; _locationAppService = locationAppService; + _customerItemAppService = customerItemAppService; } public virtual async Task> ReadAsync() @@ -51,7 +56,7 @@ public class MesOutReader : IReader await _mesOutManager.UpdateProcesseErrordListAsync(toBeProcessedEroMwsOuts).ConfigureAwait(false); } //MesOut逐一转换为ProductReceiptNote - var incomingDataList = BuildIncomingFromExternalFromShipAsync(toBeProcessedMwsOuts); + var incomingDataList =await BuildIncomingFromExternalFromShipAsync(toBeProcessedMwsOuts).ConfigureAwait(false); await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); //更新MES数据状态 await _mesOutManager.UpdateProcessedListAsync(toBeProcessedMwsOuts).ConfigureAwait(false); @@ -59,13 +64,12 @@ public class MesOutReader : IReader return incomingDataList; } - private static List BuildIncomingFromExternalFromShipAsync(List toBeProcessedMesOuts) + private async Task> BuildIncomingFromExternalFromShipAsync(List toBeProcessedMesOuts) { var incomingDataList = new List(); foreach (var mesOut in toBeProcessedMesOuts) { var incomingData = BuildIncomingFromExternal(mesOut); - incomingData.SetEffectiveDate(DateTime.ParseExact(mesOut.Mesout_date, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture)); incomingData.SetSuccess(); try @@ -79,7 +83,29 @@ public class MesOutReader : IReader } incomingDataList.Add(incomingData); + if (mesOut.Mesout_quality == "1") + { + //查询零件对应的客户库位 + string locationCode = await _customerItemAppService.GetFirstLocationCodeByItemCode(mesOut.Mesout_part).ConfigureAwait(false); + if (!string.IsNullOrEmpty(locationCode)) + { + var incomingData_TransferNote = BuildIncomingFromExternal_TransferNote(mesOut); + incomingData_TransferNote.SetEffectiveDate(DateTime.ParseExact(mesOut.Mesout_date, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture)); + incomingData_TransferNote.SetSuccess(); + try + { + + var transferNote = BuildTransferNoteCreateInput(mesOut, locationCode); + incomingData_TransferNote.DestinationDataContent = JsonSerializer.Serialize(transferNote); + } + catch (Exception ex) + { + incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); + } + incomingDataList.Add(incomingData_TransferNote); + } + } } return incomingDataList; @@ -126,7 +152,6 @@ public class MesOutReader : IReader } return incomingData; } - private static ProductReceiptNoteExchangeDto BuildProductReceiptNoteCreateInput(MesOut mesOut) { var productReceiptNote = new ProductReceiptNoteExchangeDto() @@ -141,10 +166,53 @@ public class MesOutReader : IReader Qty = mesOut.Mesout_move, LocationErpCode = mesOut.Mesout_loc, Remark = mesOut.memo, - ReturnQty = mesOut.Mesout_bad + ReturnQty = mesOut.Mesout_bad, + MesBarCode = mesOut.Mesout_barcode, + MesQuality = mesOut.Mesout_quality + }; productReceiptNote.Detail = productReceiptNoteDetail; return productReceiptNote; } + private static IncomingFromExternal BuildIncomingFromExternal_TransferNote(MesOut mesOut) + { + var incomingData = new IncomingFromExternal() + { + DataType = EnumIncomingDataType.TransferNote.ToString(), + DataAction = EnumExchangeDataAction.Add, + SourceSystem = EnumSystemType.MES.ToString(), + SourceDataId = mesOut.Mesout_ref_nbr.ToString(), + SourceDataGroupCode = mesOut.Mesout_ref_nbr, + SourceDataDetailCode = mesOut.Mesout_part, + SourceDataContent = JsonSerializer.Serialize(mesOut), + WriteTime = DateTime.Now, + Writer = nameof(MesIncomingBackgroundWorker), + + DestinationSystem = EnumSystemType.WMS.ToString(), + }; + return incomingData; + } + + private static TransferNoteExchangeDto BuildTransferNoteCreateInput(MesOut mesOut,string toLocationCode) + { + var transferNote = new TransferNoteExchangeDto() + { + Worker = "MesJK", + Remark="质量补移库" + }; + var transferNoteDetail = new TransferNoteDetailExchangeDto() + { + ItemCode = mesOut.Mesout_part, + Qty = mesOut.Mesout_move, + ToLocationErpCode = toLocationCode, + FromLocationErpCode = mesOut.Mesout_loc, + PackingCode="RFE", + Lot = "RFE", + }; + transferNote.Detail = transferNoteDetail; + return transferNote; + } + + } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeConverter.cs new file mode 100644 index 000000000..91f9e3f6c --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeConverter.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Shared.Domain.Shared; +using Win_in.Sfs.Wms.DataExchange.Domain; +using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote; +using Win_in.Sfs.Wms.Store.Application.Contracts; +using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Wms.Store.Domain; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; +public class QtyrfeConverter : IIncomingConverter +{ + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + private readonly IIncomingToWmsManager _incomingToWmsManager; + private readonly IObjectMapper _objectMapper; + private readonly IItemBasicAppService _itemBasicAppService; + private readonly ILocationAppService _locationAppService; + private readonly ILogger _logger; + + public QtyrfeConverter( + IIncomingToWmsManager incomingToWmsManager + , IObjectMapper objectMapper + , IItemBasicAppService itemBasicAppService + , ILogger logger, + ILocationAppService locationAppService, + IIncomingFromExternalManager incomingFromExternalManager) + { + _incomingToWmsManager = incomingToWmsManager; + _objectMapper = objectMapper; + _itemBasicAppService = itemBasicAppService; + _logger = logger; + _locationAppService = locationAppService; + _incomingFromExternalManager = incomingFromExternalManager; + } + + public virtual async Task ConvertAsync(List incomingFromExternalList) + { + if (!incomingFromExternalList.Any()) + { + _logger.LogInformation("no Qtyrfes"); + return; + } + + //按Number合并TransferNote单据 + var transferNoteList = await BuildIncomingToWmsOfTransferNoteAsync(incomingFromExternalList).ConfigureAwait(false); + await _incomingToWmsManager.CreateManyAsync(transferNoteList).ConfigureAwait(false); + //归档 + await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false); + } + + private async Task> BuildIncomingToWmsOfTransferNoteAsync(List incomingDataList) + { + var incomingToWmsList = new List(); + var groups = incomingDataList.GroupBy(p => p.SourceDataGroupCode); + foreach (var group in groups) + { + var first = group.First(); + var incomingToWms = new IncomingToWms() + { + DataType = first.DataType, + DataAction = first.DataAction, + SourceSystem = first.SourceSystem, + DataIdentityCode = first.SourceDataGroupCode, + }; + incomingToWms.SetEffectiveDate(first.EffectiveDate); + var exchangeTransferNote = JsonSerializer.Deserialize(first.DestinationDataContent); + var wmsTransferNote = _objectMapper.Map(exchangeTransferNote); + wmsTransferNote.Type = EnumTransSubType.Transfer_Area.ToString();//客户储位调拨 + wmsTransferNote.Details = new List(); + foreach (var incomingFromExternal in group.ToList()) + { + var transferNote = JsonSerializer.Deserialize(incomingFromExternal.DestinationDataContent); + var wmsTransferNoteDetail = _objectMapper.Map(transferNote.Detail); + var item = await _itemBasicAppService.GetByCodeAsync(wmsTransferNoteDetail.ItemCode).ConfigureAwait(false); + var tolocation=await _locationAppService.GetByCodeAsync(wmsTransferNoteDetail.ToLocationErpCode).ConfigureAwait(false); + var fromlocation = await _locationAppService.GetByCodeAsync(wmsTransferNoteDetail.FromLocationErpCode).ConfigureAwait(false); + try + { + wmsTransferNoteDetail.FromPackingCode = ""; + wmsTransferNoteDetail.ToPackingCode = ""; + wmsTransferNoteDetail.FromLot = ""; + wmsTransferNoteDetail.ToLot = ""; + wmsTransferNoteDetail.FromStatus = EnumInventoryStatus.OK; + wmsTransferNoteDetail.ToStatus = EnumInventoryStatus.OK; + if (transferNote.Remark.Contains("质量补移库"))//质量补 + { + wmsTransferNoteDetail.FromPackingCode = "RFE"; //质量补排序批次 + wmsTransferNoteDetail.FromLot = "RFE";//质量补箱标签 + wmsTransferNoteDetail.ToPackingCode = "RFE"; //质量补排序批次 + wmsTransferNoteDetail.ToLot = "RFE";//质量补箱标签 + } + if (item != null) + { + wmsTransferNoteDetail.ItemName = item.Name; + wmsTransferNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : ""; + wmsTransferNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : ""; + wmsTransferNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : ""; + wmsTransferNoteDetail.StdPackQty = item.StdPackQty; + } + if (tolocation != null) + { + wmsTransferNoteDetail.ToLocationCode = tolocation.Code; + wmsTransferNoteDetail.ToLocationArea = tolocation.AreaCode; + wmsTransferNoteDetail.ToLocationGroup = tolocation.LocationGroupCode; + wmsTransferNoteDetail.ToWarehouseCode = tolocation.WarehouseCode; + if (tolocation.Type== EnumLocationType.CUST) + { + wmsTransferNote.Type = EnumTransSubType.Transfer_Customer.ToString();//客户储位调拨 + } + } + if (fromlocation!=null) + { + wmsTransferNoteDetail.FromLocationCode = fromlocation.Code; + wmsTransferNoteDetail.FromLocationArea = fromlocation.AreaCode; + wmsTransferNoteDetail.FromLocationGroup = fromlocation.LocationGroupCode; + wmsTransferNoteDetail.FromWarehouseCode = fromlocation.WarehouseCode; + } + } + catch (Exception) + { + wmsTransferNoteDetail.ItemName = ""; + wmsTransferNoteDetail.ItemDesc1 = ""; + wmsTransferNoteDetail.ItemDesc2 = ""; + wmsTransferNoteDetail.Uom = ""; + } + + wmsTransferNote.Details.Add(wmsTransferNoteDetail); + } + incomingToWms.DataContent = JsonSerializer.Serialize(wmsTransferNote); + incomingToWmsList.Add(incomingToWms); + } + return incomingToWmsList; + } + +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeReader.cs new file mode 100644 index 000000000..a2e2e22d9 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeReader.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe; +using Win_in.Sfs.Wms.DataExchange.Domain.Shared; +using Win_in.Sfs.Wms.DataExchange.Domain; +using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest; +using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; +public class QtyrfeReader : IReader +{ + private readonly IQtyrfeManager _QtyrfeManager; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + private readonly ILogger _logger; + + public QtyrfeReader( + IQtyrfeManager pillTaskManager + , IIncomingFromExternalManager incomingFromExternalManager + , ILogger logger + ) + { + _QtyrfeManager = pillTaskManager; + _incomingFromExternalManager = incomingFromExternalManager; + _logger = logger; + } + + public virtual async Task> ReadAsync() + + { + //从MES读取待处理Qtyrfe + var toBeProcessedPillTasks = await _QtyrfeManager.GetToBeProcessedListAsync().ConfigureAwait(false); + if (!toBeProcessedPillTasks.Any()) + { + _logger.LogInformation("no Qtyrfes"); + return new List(); + } + //Qtyrfe逐一转换为MaterialRequest + var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks); + await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); + //更新MES数据状态 + await _QtyrfeManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false); + + return incomingDataList; + } + + private static List BuildIncomingFromExternalFromPillTaskAsync(List toBeProcessedQtyrfes) + { + var incomingDataList = new List(); + foreach (var Qtyrfe in toBeProcessedQtyrfes) + { + var incomingData = BuildIncomingFromExternal(Qtyrfe); + + incomingData.SetEffectiveDate(DateTime.Now); + incomingData.SetSuccess(); + try + { + var MaterialRequest = BuildTransferNoteCreateInput(Qtyrfe); + incomingData.DestinationDataContent = JsonSerializer.Serialize(MaterialRequest); + } + catch (Exception ex) + { + incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); + } + + incomingDataList.Add(incomingData); + + } + + return incomingDataList; + } + + private static IncomingFromExternal BuildIncomingFromExternal(Qtyrfe Qtyrfe) + { + var incomingData = new IncomingFromExternal() + { + DataType = EnumIncomingDataType.TransferNote.ToString(), + DataAction = EnumExchangeDataAction.Add, + SourceSystem = EnumSystemType.MES.ToString(), + SourceDataId = Qtyrfe.mesout_qtyrfe_id.ToString(), + SourceDataGroupCode = Qtyrfe.mesout_qtyrfe_id, + SourceDataDetailCode = Qtyrfe.mesout_qtyrfe_part, + SourceDataContent = JsonSerializer.Serialize(Qtyrfe), + WriteTime = DateTime.Now, + Writer = nameof(MesIncomingBackgroundWorker), + + DestinationSystem = EnumSystemType.WMS.ToString(), + }; + return incomingData; + } + + private static TransferNoteExchangeDto BuildTransferNoteCreateInput(Qtyrfe Qtyrfe) + { + var transferNote = new TransferNoteExchangeDto() + { + Worker = Qtyrfe.mesout_qtyrfe_user, + Remark = "" + }; + if (Qtyrfe.mesout_qtyrfe_type == "1") + { + transferNote.Remark = "质量补移库"; + } + var transferNoteDetail = new TransferNoteDetailExchangeDto() + { + ItemCode = Qtyrfe.mesout_qtyrfe_part, + Qty =Qtyrfe.mesout_qtyrfe_num, + ToLocationErpCode = Qtyrfe.mesout_qtyrfe_loc_to, + FromLocationErpCode = Qtyrfe.mesout_qtyrfe_loc_from, + }; + transferNote.Detail = transferNoteDetail; + return transferNote; + } + +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json index a5a6cb1d9..b3b640492 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json @@ -1,12 +1,12 @@ { "ConnectionStrings": { - "Default": "Server=10.164.113.32,1818\\SHDB;Database=Wms_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True;Encrypt=false", - "DataExchange": "Server=10.164.113.32,1818\\SHDB;Database=Wms_DataExchange_Main_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True;Encrypt=false", - "MES": "Server=10.164.113.32,1818\\SHDB;Database=MES_SH;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True;Encrypt=false" + "Default": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false", + "DataExchange": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false", + "MES": "Server=dev.ccwin-in.com,13319;Database=MES_SH;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false" }, "AuthServer": { - "Authority": "http://10.164.113.31:60083/", + "Authority": "http://dev.ccwin-in.com:60083/", "RequireHttpsMetadata": "false", "SwaggerClientId": "admin", "SwaggerClientSecret": "1q2w3E*", @@ -24,13 +24,13 @@ "RemoteServices": { "BaseData": { - "BaseUrl": "http://10.164.113.31:60084/" + "BaseUrl": "http://dev.ccwin-in.com:60084/" }, "Store": { - "BaseUrl": "http://10.164.113.31:60085/" + "BaseUrl": "http://dev.ccwin-in.com:60085/" }, "Label": { - "BaseUrl": "http://10.164.113.31:60082/" + "BaseUrl": "http://dev.ccwin-in.com:60082/" } }, diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs index 28aa02cc5..59cf323ef 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs @@ -150,6 +150,6 @@ public class AgentModule : AbpModule ApplicationInitializationContext context) { context.AddBackgroundWorkerAsync(); - context.AddBackgroundWorkerAsync(); + // context.AddBackgroundWorkerAsync(); } } diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs index 3b181f817..90be492d5 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs @@ -171,10 +171,15 @@ public static class IncomingToWmsExtensions public static async Task HandleProductReceiptsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) { - var productReceipt = JsonSerializer.Deserialize(incomingConverted.DataContent); - var productReceiptAppService = workerContext.ServiceProvider.GetRequiredService(); - - await productReceiptAppService.CreateAsync(productReceipt).ConfigureAwait(false); + //var productReceipt = JsonSerializer.Deserialize(incomingConverted.DataContent); + //var productReceiptAppService = workerContext.ServiceProvider.GetRequiredService(); + + //await productReceiptAppService.CreateAsync(productReceipt).ConfigureAwait(false); + var productReceipt = JsonSerializer.Deserialize(incomingConverted.DataContent); + var productReceiptAppService = workerContext.ServiceProvider.GetRequiredService(); + List list = new List(); + list.Add(productReceipt); + await productReceiptAppService.CreateManyAsync(list).ConfigureAwait(false); } public static async Task HandleMaterialRequestsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) @@ -183,7 +188,12 @@ public static class IncomingToWmsExtensions var materialRequestAppService = workerContext.ServiceProvider.GetRequiredService(); await materialRequestAppService.CreateAndHandleByAPIAsync(materialRequest).ConfigureAwait(false); } - + public static async Task HandleTransferNoteAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) + { + var transferNote = JsonSerializer.Deserialize(incomingConverted.DataContent); + var transferNoteAppService = workerContext.ServiceProvider.GetRequiredService(); + await transferNoteAppService.CreateAsync(transferNote).ConfigureAwait(false); + } public static async Task HandleScrapsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) { var scrap = JsonSerializer.Deserialize(incomingConverted.DataContent); diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs index 6a6071789..c54b9ed90 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs @@ -68,7 +68,7 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase //Do the work var incomingToWmsList = await incomingToWmsManager.GetToBeProcessedListAsync().ConfigureAwait(false); - foreach (var incomingToWms in incomingToWmsList) + foreach (var incomingToWms in incomingToWmsList.OrderBy(r=>r.CreationTime)) { try { @@ -187,6 +187,9 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase // await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false); await SendBackFlush(workerContext, incomingToWms).ConfigureAwait(false); break; + case EnumIncomingDataType.TransferNote: + await incomingToWms.HandleTransferNoteAsync(workerContext).ConfigureAwait(false); + break; case EnumIncomingDataType.None: default: throw new ArgumentOutOfRangeException(); diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json index 156e965e2..7b848b1b8 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json @@ -1,13 +1,13 @@ { "ConnectionStrings": { - "Default": "Server=10.164.113.32,1818\\SHDB;Database=Wms_DataExchange_Main_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True", - "DataExchange": "Server=10.164.113.32,1818\\SHDB;Database=Wms_DataExchange_Main_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True" + "Default": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True", + "DataExchange": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True" }, "AuthServer": { - "Authority": "http://10.164.113.31:60083/", + "Authority": "http://dev.ccwin-in.com:60083/", "RequireHttpsMetadata": "false", "SwaggerClientId": "admin", "SwaggerClientSecret": "1q2w3E*", @@ -26,16 +26,16 @@ "RemoteServices": { "BaseData": { - "BaseUrl": "http://10.164.113.31:60084/" + "BaseUrl": "http://dev.ccwin-in.com:60084/" }, "Store": { - "BaseUrl": "http://10.164.113.31:60085/" + "BaseUrl": "http://localhost:59095/" }, "Label": { - "BaseUrl": "http://10.164.113.31:60082/" + "BaseUrl": "http://dev.ccwin-in.com:60082/" }, "Auth": { - "BaseUrl": "http://10.164.113.31:60083/" + "BaseUrl": "http://dev.ccwin-in.com:60083/" } }, "DataExchangeOptions": { @@ -44,7 +44,7 @@ "PeriodSeconds": 10, "RetryTimes": 1, "BatchSize": 100, - "apiUrl": "http://10.164.113.31:60085/" + "apiUrl": "http://dev.ccwin-in.com:60085/" }, "OutgoingOptions": { "Active": false, diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteDetailExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteDetailExchangeDto.cs index 1ea1ca327..b50be31b2 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteDetailExchangeDto.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteDetailExchangeDto.cs @@ -32,4 +32,17 @@ public class TransferNoteDetailExchangeDto /// [Display(Name = "数量")] public decimal Qty { get; set; } + + + /// + /// 批次 + /// + [Display(Name = "批次")] + public string Lot { get; set; } = ""; + + /// + /// 箱码 + /// + [Display(Name = "箱码")] + public string PackingCode { get; set; } = ""; } diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteExchangeDto.cs index 2b84dcc42..65c93c570 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteExchangeDto.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteExchangeDto.cs @@ -29,4 +29,14 @@ public class TransferNoteExchangeDto [Display(Name = "调拨类型")] public string Type { get; set; } + /// + /// 备注 + /// + [Display(Name = "备注")] + public string Remark { get; set; } + /// + /// 明细列表 + /// + [Display(Name = "明细列表")] + public TransferNoteDetailExchangeDto Detail { get; set; } = new(); } diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml index e614f4317..9fda24075 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml @@ -1731,6 +1731,16 @@ 数量 + + + 批次 + + + + + 箱码 + + 上架单号 @@ -1751,6 +1761,16 @@ 调拨类型 + + + 备注 + + + + + 明细列表 + + 单据号 diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs index 4042cb1de..a20feb7dc 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs @@ -114,4 +114,8 @@ public enum EnumIncomingDataType /// Erp库位零件(开账) /// ErpLocationItem = 27, + /// + /// 储位调拨 + /// + TransferNote=28 } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/DTOs/CustomerItemDTO.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/DTOs/CustomerItemDTO.cs index 946e15d81..a9b783f32 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/DTOs/CustomerItemDTO.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/DTOs/CustomerItemDTO.cs @@ -61,4 +61,11 @@ public class CustomerItemDTO : SfsBaseDataDTOBase [Display(Name = "结束时间")] public DateTime? EndTime { get; set; } + /// + /// 客户零件库位 + /// + [Display(Name = "客户零件库位")] + public string LocationCode { get; set; } + + } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/ICustomerItemAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/ICustomerItemAppService.cs index ef35579a0..8e721681c 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/ICustomerItemAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/ICustomerItemAppService.cs @@ -10,5 +10,6 @@ public interface ICustomerItemAppService , ISfsUpsertAppService { + Task GetFirstLocationCodeByItemCode(string itemCode); Task> GetListByPartsAsync(List inputs); } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemEditInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemEditInput.cs index 8ed4c0988..f6719dd70 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemEditInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemEditInput.cs @@ -45,6 +45,13 @@ public class CustomerItemEditInput : SfsBaseDataCreateOrUpdateInputBase /// [Display(Name = "结束时间")] public DateTime? EndTime { get; set; } + + /// + /// 客户零件库位 + /// + [Display(Name = "客户零件库位")] + public string LocationCode { get; set; } + #endregion #region Create diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemImportInput.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemImportInput.cs index 4b0880904..bb1f2b228 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemImportInput.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemImportInput.cs @@ -56,6 +56,14 @@ public class CustomerItemImportInput : SfsBaseDataImportInputBase [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] public string Version { get; set; } + /// + /// 客户零件库位 + /// + [Display(Name = "客户零件库位")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string LocationCode { get; set; } + + /// /// 开始时间 /// @@ -80,4 +88,6 @@ public class CustomerItemImportInput : SfsBaseDataImportInputBase [Display(Name = "备注")] [StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")] public string Remark { get; set; } + + } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Bases/SfsBaseDataAppServiceBase.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Bases/SfsBaseDataAppServiceBase.cs index e7183a1a2..89812ac99 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Bases/SfsBaseDataAppServiceBase.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Bases/SfsBaseDataAppServiceBase.cs @@ -178,7 +178,14 @@ public abstract class SfsBaseDataAppServiceBase validationRresult) + { + var item = await LocationAppService.GetByCodeAsync(defaultLocationCode).ConfigureAwait(false); + if (item == null&& item.Type != type) + { + validationRresult.Add(new ValidationResult($"库位代码{defaultLocationCode}库位类型{type.ToString()}不存在", new string[] { "默认库位代码" })); + } + } protected async Task CheckLocationGroupCodeAsync(string locationGroupCode, List validationRresult) { var item = await LocationGroupAppService.GetByCodeAsync(locationGroupCode).ConfigureAwait(false); diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/CustomerItems/CustomerItemAppService.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/CustomerItems/CustomerItemAppService.cs index ce6566077..3f1400a4e 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/CustomerItems/CustomerItemAppService.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/CustomerItems/CustomerItemAppService.cs @@ -10,6 +10,8 @@ using Volo.Abp.Caching; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Basedata.Domain.Shared; +using Win_in.Sfs.Basedata.tests; +using Win_in.Sfs.Shared.Domain.Shared; namespace Win_in.Sfs.Basedata.Application; @@ -49,6 +51,10 @@ public class CustomerItemAppService : SfsBaseDataAppServiceBase> GetListByPartsAsync(List inputs) @@ -56,6 +62,17 @@ public class CustomerItemAppService : SfsBaseDataAppServiceBase inputs.Contains(p.ItemCode)).ToListAsync().ConfigureAwait(false); } + [HttpPost("get-first-location-code-by-item-code")] + public virtual async Task GetFirstLocationCodeByItemCode(string itemCode) + { + string code = ""; + var customerItems = await _repository.GetListAsync(p => p.ItemCode == itemCode).ConfigureAwait(false); + if (customerItems.Count > 0) + { + code = customerItems.First(r=>!string.IsNullOrEmpty(r.LocationCode)).LocationCode; + } + return code; + } } diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/CustomerItems/CustomerItem.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/CustomerItems/CustomerItem.cs index f8fd1657e..d4745c9fb 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/CustomerItems/CustomerItem.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/CustomerItems/CustomerItem.cs @@ -56,6 +56,12 @@ public class CustomerItem : SfsBaseDataAggregateRootBase, IHasTimeRange /// 结束时间 /// public DateTime? EndTime { get; set; } + + /// + /// 客户零件库位 + /// + public string LocationCode { get; set; } + } ///// ///// 客户零件 diff --git a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/CustomerItems/CustomerItemDbContextModelCreatingExtensions.cs b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/CustomerItems/CustomerItemDbContextModelCreatingExtensions.cs index acc82761a..39e474079 100644 --- a/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/CustomerItems/CustomerItemDbContextModelCreatingExtensions.cs +++ b/be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/CustomerItems/CustomerItemDbContextModelCreatingExtensions.cs @@ -25,7 +25,7 @@ public static class CustomerItemDbContextModelCreatingExtensions b.Property(q => q.ItemCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.CustomerItemCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.Version).HasMaxLength(SfsPropertyConst.DescLength); - + b.Property(q => q.LocationCode).HasMaxLength(SfsPropertyConst.CodeLength); //Relations //None diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs index 0e2505fc9..9451fe2e9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs @@ -360,7 +360,7 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase /// [HttpPost("")] public override async Task CreateAsync(TransferNoteEditInput input) - { + { var entity = ObjectMapper.Map(input); entity=await _transferNoteManager.CreateAsync(entity).ConfigureAwait(false);