From 5bc0d94b3228fcc14c477cd84c499bf847060384 Mon Sep 17 00:00:00 2001 From: lvzb <35200379@qq.com> Date: Thu, 9 May 2024 17:22:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=90=E5=93=81=E5=8F=91=E8=BF=90mes?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Delivery/Delivery.cs | 66 ++++++++ .../Delivery/DeliveryManager.cs | 45 ++++++ .../Delivery/IDeliveryManager.cs | 10 ++ .../Delivery/IDeliveryRepository.cs | 8 + ...xchangeDbContextModelCreatingExtensions.cs | 1 + ...ExchangeEntityFrameworkCoreFawtygModule.cs | 3 + ...eliveryDbContextModelCreatingExtensions.cs | 35 ++++ .../Delivery/DeliveryEfCoreRepository.cs | 18 +++ .../IMesDbContext.cs | 3 + .../MesDbContext.cs | 2 + .../FawtygAutoMapperProfile.cs | 24 ++- .../Incoming/DeliveryConverter.cs | 106 +++++++++++++ .../Incoming/DeliveryReader.cs | 120 ++++++++++++++ .../Incoming/FrozenReader.cs | 4 +- .../Incoming/MesIncomingBackgroundWorker.cs | 40 +++-- .../IncomingToWmsExtensions.cs | 6 + .../IncomingToWmsWorker.cs | 7 +- .../DeliverNoteDetailExchangeDto.cs | 15 ++ .../DeliverRequestDetailExchangeDto.cs | 43 +++++ .../DeliverRequestExchangeDto.cs | 43 +++++ ...Wms.DataExchange.Application.Contracts.xml | 85 ++++++++++ .../Enums/EnumIncomingDataType.cs | 6 +- .../DeliverNotes/DTOs/DeliverNoteDetailDTO.cs | 15 ++ .../Inputs/DeliverNoteDetailInput.cs | 15 ++ .../DTOs/DeliverRequestDetailDTO.cs | 16 ++ .../Inputs/DeliverRequestDetailInput.cs | 15 ++ .../Inputs/DeliverRequestImportInput.cs | 16 ++ .../DeliverRequestAppService.cs | 63 +++++--- .../DeliverRequestAutoMapperProfile.cs | 3 + .../DeliverRequestFisAppService.cs | 2 +- ...lannedIssueRequestForDongyangAppService.cs | 17 +- ...nnedReceiptRequestForDongyangAppService.cs | 17 +- .../Notes/DeliverNotes/DeliverNoteDetail.cs | 12 ++ .../DeliverRequests/DeliverRequest.cs | 1 - .../DeliverRequests/DeliverRequestDetail.cs | 13 +- .../DeliverRequests/DeliverRequestManager.cs | 22 +++ .../DeliverRequests/IDeliverRequestManager.cs | 2 + ...verNoteDbContextModelCreatingExtensions.cs | 4 +- ...RequestDbContextModelCreatingExtensions.cs | 4 +- .../Jobs/DeliverJobAutoMapperProfile.cs | 3 + .../Requests/DeliverRequestMapperProfile.cs | 3 + .../Requests/DeliverRequestEventHandler.cs | 149 +++++++++++++++--- 42 files changed, 997 insertions(+), 85 deletions(-) create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/Delivery.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/DeliveryManager.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryManager.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryRepository.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryDbContextModelCreatingExtensions.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryEfCoreRepository.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryConverter.cs create mode 100644 be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryReader.cs create mode 100644 be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestDetailExchangeDto.cs create mode 100644 be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestExchangeDto.cs diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/Delivery.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/Delivery.cs new file mode 100644 index 000000000..85f87fca3 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/Delivery.cs @@ -0,0 +1,66 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Domain.Entities; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; +public class Delivery : Entity +{ + /// + /// 序号 + /// + [Key] + public string mesout_delivery_id { get; set; } + /// + /// 类型 + /// + public string mesout_delivery_type { get; set; } + /// + /// 物料 + /// + public string mesout_delivery_part { get; set; } + /// + /// 底盘号 + /// + public string mesout_delivery_identity_no { get; set; } + /// + /// 发红储位 + /// + public string mesout_delivery_loc { get; set; } + /// + /// 数量 + /// + public decimal mesout_delivery_num { get; set; } + /// + /// 客户代码 + /// + public string mesout_delivery_customer { get; set; } + + /// + /// 车牌号 + /// + public string mesout_delivery_carno { get; set; } + /// + /// 写入时间 + /// + public string mesout_delivery_wt { get; set; } + /// + /// 发货单号 + /// + public string mesout_delivery_no { get; set; } + /// + /// 器具号 + /// + public string mesout_delivery_container { get; set; } + /// + /// 发货计划号 + /// + public string mesout_delivery_plan { get; set; } + /// + /// 是否读取(0,1) + /// + public long Yl1 { get; set; } + + public override object[] GetKeys() + { + return new object[] { mesout_delivery_id }; + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/DeliveryManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/DeliveryManager.cs new file mode 100644 index 000000000..c5788df2c --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/DeliveryManager.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.Delivery; +public class DeliveryManager : DomainService, IDeliveryManager +{ + private readonly IDeliveryRepository _repository; + + public DeliveryManager(IDeliveryRepository 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_delivery_id); + var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_delivery_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_delivery_id); + var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_delivery_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.Domain.Fawtyg.Mes/Delivery/IDeliveryManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryManager.cs new file mode 100644 index 000000000..222614bc1 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryManager.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; +public interface IDeliveryManager +{ + Task> GetToBeProcessedListAsync(); + Task UpdateProcessedListAsync(List entities); + Task UpdateProcesseErrordListAsync(List entities); +} \ No newline at end of file diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryRepository.cs new file mode 100644 index 000000000..77310f439 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryRepository.cs @@ -0,0 +1,8 @@ +using Volo.Abp.Domain.Repositories; + +namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; + +public interface IDeliveryRepository : IRepository +{ + +} 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 8b8e53a60..517204043 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 @@ -29,5 +29,6 @@ public static class DataExchangeDbContextModelCreatingExtensions builder.ConfigureBackflu(options); builder.ConfigureQtyrfe(options); builder.ConfigureFrozen(options); + builder.ConfigureDelivery(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 e1cf9d642..22322c164 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 @@ -3,6 +3,7 @@ using Volo.Abp.BackgroundJobs.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.Modularity; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; @@ -36,5 +37,7 @@ 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/Delivery/DeliveryDbContextModelCreatingExtensions.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryDbContextModelCreatingExtensions.cs new file mode 100644 index 000000000..4ae9db369 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryDbContextModelCreatingExtensions.cs @@ -0,0 +1,35 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.Modeling; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; + +namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; + +public static class DeliveryDbContextModelCreatingExtensions +{ + public static void ConfigureDelivery(this ModelBuilder builder, MesModelBuilderConfigurationOptions options) + { + builder.Entity(b => + { + //Configure table & schema Name + b.ToTable(options.TablePrefix + "mesout_delivery", options.Schema); + //Configure ABP properties + b.ConfigureByConvention(); + + //Properties + b.Property(q => q.mesout_delivery_id).HasMaxLength(20); + b.Property(q => q.mesout_delivery_type).HasMaxLength(1); + b.Property(q => q.mesout_delivery_part).HasMaxLength(20); + b.Property(q => q.mesout_delivery_identity_no).HasMaxLength(20); + b.Property(q => q.mesout_delivery_loc).HasMaxLength(10); + b.Property(q => q.mesout_delivery_num).HasPrecision(10, 2); + b.Property(q => q.mesout_delivery_customer).HasMaxLength(10); + b.Property(q => q.mesout_delivery_carno).HasMaxLength(10); + b.Property(q => q.mesout_delivery_wt).HasMaxLength(20); + b.Property(q => q.mesout_delivery_no).HasMaxLength(20); + b.Property(q => q.mesout_delivery_container).HasMaxLength(20); + b.Property(q => q.mesout_delivery_plan).HasMaxLength(20); + b.Property(q => q.Yl1); + }); + + } +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryEfCoreRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryEfCoreRepository.cs new file mode 100644 index 000000000..ef2c6e155 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryEfCoreRepository.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; + +namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; + +public class DeliveryEfCoreRepository : EfCoreRepository,IDeliveryRepository +{ + public DeliveryEfCoreRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } +} 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 0e6ea26bb..98a384453 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 @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; @@ -26,4 +27,6 @@ public interface IMesDbContext : IEfCoreDbContext DbSet Qtyrfe { get; } DbSet Frozen { get; } + + DbSet Delivery { 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 cdead9f76..66350a6c2 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 @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; @@ -28,6 +29,7 @@ public class MesDbContext : public virtual DbSet Frozen { get; } + public virtual DbSet Delivery { get; } public MesDbContext(DbContextOptions options) : base(options) { 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 591ccdce7..124c9f0a2 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 @@ -3,6 +3,8 @@ using Volo.Abp.AutoMapper; using Win_in.Sfs.Shared.Application; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.WMS.BackFlushNote; +using Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote; +using Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest; using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest; using Win_in.Sfs.Wms.DataExchange.WMS.MesNote; using Win_in.Sfs.Wms.DataExchange.WMS.PCK; @@ -222,7 +224,6 @@ public class FawtygAutoMapperProfile : Profile ; CreateMap() - .Ignore(x => x.Details) .Ignore(x => x.ExtraProperties) .Ignore(x => x.JobNumber) .Ignore(x => x.Details) @@ -253,5 +254,26 @@ public class FawtygAutoMapperProfile : Profile .Ignore(x => x.Uom) .Ignore(x => x.StdPackQty) ; + + CreateMap() + .Ignore(x => x.DeliverPlanNumber) + .Ignore(x => x.ExtraProperties) + .Ignore(x => x.Details) + .Ignore(x=>x.CustomerAddressCode) + .Ignore(x => x.ExtraProperties) + .Ignore(x => x.AutoSubmit) + .Ignore(x => x.AutoAgree) + .Ignore(x => x.AutoHandle) + .Ignore(x => x.AutoCompleteJob) + .Ignore(x => x.DirectCreateNote) + ; + CreateMap() + .Ignore(x => x.Uom) + .Ignore(x => x.StdPackQty) + .Ignore(x => x.Remark) + .Ignore(x => x.ItemName) + .Ignore(x => x.ItemDesc1) + .Ignore(x => x.ItemDesc2); + ; } } diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryConverter.cs new file mode 100644 index 000000000..2f321ce47 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryConverter.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Volo.Abp.ObjectMapping; +using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Wms.DataExchange.Domain; +using Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest; +using Win_in.Sfs.Wms.Store.Application.Contracts; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; +public class DeliveryConverter : IIncomingConverter +{ + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + private readonly IIncomingToWmsManager _incomingToWmsManager; + private readonly IObjectMapper _objectMapper; + private readonly IItemBasicAppService _itemBasicAppService; + private readonly ICustomerAppService _customerAppService; + private readonly ILogger _logger; + + public DeliveryConverter( + IIncomingToWmsManager incomingToWmsManager + , IObjectMapper objectMapper + , IItemBasicAppService itemBasicAppService + , ILogger logger, + ICustomerAppService customerAppService, + IIncomingFromExternalManager incomingFromExternalManager) + { + _incomingToWmsManager = incomingToWmsManager; + _objectMapper = objectMapper; + _itemBasicAppService = itemBasicAppService; + _logger = logger; + _customerAppService = customerAppService; + _incomingFromExternalManager = incomingFromExternalManager; + } + + public virtual async Task ConvertAsync(List incomingFromExternalList) + { + if (!incomingFromExternalList.Any()) + { + _logger.LogInformation("no Deliverys"); + return; + } + + //按Number合并DeliveryRequest单据 + var transferRequestList = await BuildIncomingToWmsOfDeliveryRequestAsync(incomingFromExternalList).ConfigureAwait(false); + await _incomingToWmsManager.CreateManyAsync(transferRequestList).ConfigureAwait(false); + //归档 + await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false); + } + + private async Task> BuildIncomingToWmsOfDeliveryRequestAsync(List incomingDataList) + { + var incomingToWmsList = new List(); + var groups = incomingDataList.GroupBy(p => new { p.SourceDataGroupCode ,p.SourceDataDetailCode}); + 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 exchangeDeliveryRequest = JsonSerializer.Deserialize(first.DestinationDataContent); + var wmsDeliveryRequest = _objectMapper.Map(exchangeDeliveryRequest); + wmsDeliveryRequest.Details = new List(); + var cust= await _customerAppService.GetByCodeAsync(wmsDeliveryRequest.CustomerCode).ConfigureAwait(false); + wmsDeliveryRequest.CustomerAddressCode = String.IsNullOrEmpty( cust?.Address)?"无": cust.Address; + foreach (var incomingFromExternal in group.ToList()) + { + var transferRequest = JsonSerializer.Deserialize(incomingFromExternal.DestinationDataContent); + var wmsDeliveryRequestDetail = _objectMapper.Map(transferRequest.Detail); + var item = await _itemBasicAppService.GetByCodeAsync(wmsDeliveryRequestDetail.ItemCode).ConfigureAwait(false); + try + { + if (item != null) + { + wmsDeliveryRequestDetail.ItemName = item.Name; + wmsDeliveryRequestDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : ""; + wmsDeliveryRequestDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : ""; + wmsDeliveryRequestDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : ""; + wmsDeliveryRequestDetail.StdPackQty = item.StdPackQty; + } + } + catch (Exception) + { + wmsDeliveryRequestDetail.ItemName = ""; + wmsDeliveryRequestDetail.ItemDesc1 = ""; + wmsDeliveryRequestDetail.ItemDesc2 = ""; + wmsDeliveryRequestDetail.Uom = ""; + } + + wmsDeliveryRequest.Details.Add(wmsDeliveryRequestDetail); + } + incomingToWms.DataContent = JsonSerializer.Serialize(wmsDeliveryRequest); + incomingToWmsList.Add(incomingToWms); + } + return incomingToWmsList; + } + +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryReader.cs new file mode 100644 index 000000000..6a5238413 --- /dev/null +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryReader.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery; +using Win_in.Sfs.Wms.DataExchange.Domain.Shared; +using Win_in.Sfs.Wms.DataExchange.Domain; +using System.Text.Json; +using Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest; +using Win_in.Sfs.Shared.Domain.Shared; + +namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; + +public class DeliveryReader : IReader +{ + private readonly IDeliveryManager _DeliveryManager; + private readonly IIncomingFromExternalManager _incomingFromExternalManager; + private readonly ILogger _logger; + + public DeliveryReader( + IDeliveryManager pillTaskManager + , IIncomingFromExternalManager incomingFromExternalManager + , ILogger logger + ) + { + _DeliveryManager = pillTaskManager; + _incomingFromExternalManager = incomingFromExternalManager; + _logger = logger; + } + + public virtual async Task> ReadAsync() + + { + //从MES读取待处理Delivery + var toBeProcessedPillTasks = await _DeliveryManager.GetToBeProcessedListAsync().ConfigureAwait(false); + if (!toBeProcessedPillTasks.Any()) + { + _logger.LogInformation("no Deliverys"); + return new List(); + } + //Delivery逐一转换为MaterialRequest + var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks); + await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false); + //更新MES数据状态 + await _DeliveryManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false); + + return incomingDataList; + } + + private static List BuildIncomingFromExternalFromPillTaskAsync(List toBeProcessedDeliverys) + { + var incomingDataList = new List(); + foreach (var Delivery in toBeProcessedDeliverys) + { + var incomingData = BuildIncomingFromExternal(Delivery); + + incomingData.SetEffectiveDate(DateTime.Now); + incomingData.SetSuccess(); + try + { + var DetilveryRequest = BuildDeliverRequestCreateInput(Delivery); + incomingData.DestinationDataContent = JsonSerializer.Serialize(DetilveryRequest); + } + catch (Exception ex) + { + incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); + } + + incomingDataList.Add(incomingData); + + } + + return incomingDataList; + } + + private static IncomingFromExternal BuildIncomingFromExternal(Delivery Delivery) + { + var incomingData = new IncomingFromExternal() + { + DataType = EnumIncomingDataType.Delivery.ToString(), + DataAction = EnumExchangeDataAction.Add, + SourceSystem = EnumSystemType.MES.ToString(), + SourceDataId = Delivery.mesout_delivery_id.ToString(), + SourceDataGroupCode =Delivery.mesout_delivery_type=="0"? Delivery.mesout_delivery_no : Delivery.mesout_delivery_plan, + SourceDataDetailCode = Delivery.mesout_delivery_customer, + SourceDataContent = JsonSerializer.Serialize(Delivery), + WriteTime = DateTime.Now, + Writer = nameof(MesIncomingBackgroundWorker), + + DestinationSystem = EnumSystemType.WMS.ToString(), + }; + return incomingData; + } + + private static DeliverRequestExchangeDto BuildDeliverRequestCreateInput(Delivery Delivery) + { + var mesRequest = new DeliverRequestExchangeDto() + { + DeliverRequestType = Delivery.mesout_delivery_type == "0" ? EnumDeliverRequestType.FIS : EnumDeliverRequestType.Normal, + CustomerCode = Delivery.mesout_delivery_customer, + Number = Delivery.mesout_delivery_no, + Worker = "MESFY", + ActiveDate = DateTime.TryParse(Delivery.mesout_delivery_wt, out DateTime dateTime) ? dateTime : DateTime.Now, + DeliverTime = DateTime.TryParse(Delivery.mesout_delivery_wt, out DateTime dateTime1) ? dateTime1 : DateTime.Now + }; + var mesRequestDetail = new DeliverRequestDetailExchangeDto() + { + ItemCode = Delivery.mesout_delivery_part, + Qty = Delivery.mesout_delivery_num, + AreaCode = Delivery.mesout_delivery_loc, + MesDeliveryNo=Delivery.mesout_delivery_no, + MesDeliveryPlan = Delivery.mesout_delivery_plan, + IdentityNo =Delivery.mesout_delivery_identity_no + }; + mesRequest.Detail = mesRequestDetail; + return mesRequest; + } + +} diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs index 4a2626cb3..75b4f9ba5 100644 --- a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs +++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs @@ -63,7 +63,7 @@ public class FrozenReader : IReader incomingData.SetSuccess(); try { - var MaterialRequest = BuildTransferNoteCreateInput(Frozen, holdLocationCode); + var MaterialRequest = BuildMesNoteCreateInput(Frozen, holdLocationCode); incomingData.DestinationDataContent = JsonSerializer.Serialize(MaterialRequest); } catch (Exception ex) @@ -97,7 +97,7 @@ public class FrozenReader : IReader return incomingData; } - private static MesNoteExchangeDto BuildTransferNoteCreateInput(Frozen Frozen, string holdLocationCode) + private static MesNoteExchangeDto BuildMesNoteCreateInput(Frozen Frozen, string holdLocationCode) { var mesNote = new MesNoteExchangeDto() { 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 c9b2af73c..7ad3cf219 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 @@ -96,22 +96,30 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase //await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false); - // Logger.LogInformation($"Read TransferNote");//储位调拨 - // var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService(); - //// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService(); - // //读取并保存BackFlush - // var transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false); - // //转换BackFlush - // await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false); - // Logger.LogInformation($"Completed: Handling {Incoming}"); - - Logger.LogInformation($"Read Frozen");//冻结解冻 - var FrozenReader = workerContext.ServiceProvider.GetRequiredService(); - var FrozenConverter = workerContext.ServiceProvider.GetRequiredService(); - //读取并保存BackFlush - var mesNoteFromExternalList = await FrozenReader.ReadAsync().ConfigureAwait(false); - //转换BackFlush - await FrozenConverter.ConvertAsync(mesNoteFromExternalList).ConfigureAwait(false); + // Logger.LogInformation($"Read TransferNote");//储位调拨 + // var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService(); + //// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService(); + // //读取并保存TransferNote + // var transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false); + // //转换TransferNote + // await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false); + + //Logger.LogInformation($"Read Frozen");//冻结解冻 + //var FrozenReader = workerContext.ServiceProvider.GetRequiredService(); + // var FrozenConverter = workerContext.ServiceProvider.GetRequiredService(); + ////读取并保存Frozen + //var mesNoteFromExternalList = await FrozenReader.ReadAsync().ConfigureAwait(false); + ////转换Frozen + //await FrozenConverter.ConvertAsync(mesNoteFromExternalList).ConfigureAwait(false); + + + Logger.LogInformation($"Read Delivery");//成品发运 + var DeliveryReader = workerContext.ServiceProvider.GetRequiredService(); + var DeliveryConverter = workerContext.ServiceProvider.GetRequiredService(); + //读取并保存Delivery + var deliveryNoteFromExternalList = await DeliveryReader.ReadAsync().ConfigureAwait(false); + //转换Delivery + await DeliveryConverter.ConvertAsync(deliveryNoteFromExternalList).ConfigureAwait(false); Logger.LogInformation($"Completed: Handling {Incoming}"); } 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 9d87cae93..b36b62210 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 @@ -200,6 +200,12 @@ public static class IncomingToWmsExtensions var mesNoteAppService = workerContext.ServiceProvider.GetRequiredService(); await mesNoteAppService.CreateAsync(mesNote).ConfigureAwait(false); } + public static async Task HandleDeliveryRequestAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) + { + var deliverRequest = JsonSerializer.Deserialize(incomingConverted.DataContent); + var deliverRequestAppService = workerContext.ServiceProvider.GetRequiredService(); + await deliverRequestAppService.CreateAsync(deliverRequest).ConfigureAwait(false); + } public static async Task HandleScrapsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) { 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 44f37ee08..e9f81cc9e 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 @@ -184,8 +184,8 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase await incomingToWms.HandleInventoryLabelsAsync(workerContext).ConfigureAwait(false); break; case EnumIncomingDataType.BackFlush: - // await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false); - await SendBackFlush(workerContext, incomingToWms).ConfigureAwait(false); + await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false); + // await SendBackFlush(workerContext, incomingToWms).ConfigureAwait(false); break; case EnumIncomingDataType.TransferNote: await incomingToWms.HandleTransferNoteAsync(workerContext).ConfigureAwait(false); @@ -193,6 +193,9 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase case EnumIncomingDataType.MesNote: await incomingToWms.HandleMesNoteAsync(workerContext).ConfigureAwait(false); break; + case EnumIncomingDataType.Delivery: + await incomingToWms.HandleDeliveryRequestAsync(workerContext).ConfigureAwait(false); + break; case EnumIncomingDataType.None: default: throw new ArgumentOutOfRangeException(); diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverNote/DeliverNoteDetailExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverNote/DeliverNoteDetailExchangeDto.cs index 306172f7e..e0b3bb7d6 100644 --- a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverNote/DeliverNoteDetailExchangeDto.cs +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverNote/DeliverNoteDetailExchangeDto.cs @@ -26,4 +26,19 @@ public class DeliverNoteDetailExchangeDto /// [Display(Name = "数量")] public decimal Qty { get; set; } + /// + /// Mes发货单号 + /// + [Display(Name = "Mes发货单号")] + public string MesDeliveryNo { get; set; } + /// + /// Mes发货计划号 + /// + [Display(Name = "Mes发货计划号")] + public string MesDeliveryPlan { get; set; } + /// + /// 底盘号 + /// + [Display(Name = "底盘号")] + public string IdentityNo { get; set; } } diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestDetailExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestDetailExchangeDto.cs new file mode 100644 index 000000000..f46e0d787 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestDetailExchangeDto.cs @@ -0,0 +1,43 @@ +using System.ComponentModel.DataAnnotations; +using Win_in.Sfs.Shared.Domain; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest; +public class DeliverRequestDetailExchangeDto +{ + /// + /// 单据号 + /// + [Display(Name = "单据号")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string Number { get; set; } + /// + /// 物品代码 + /// + [Display(Name = "物品代码")] + public string ItemCode { get; set; } + /// + /// 来源库区 + /// + [Display(Name = "来源库区")] + public string AreaCode { get; set; } + /// + /// 数量 + /// + [Display(Name = "数量")] + public decimal Qty { get; set; } + /// + /// Mes发货单号 + /// + [Display(Name = "Mes发货单号")] + public string MesDeliveryNo { get; set; } + /// + /// Mes发货计划号 + /// + [Display(Name = "Mes发货计划号")] + public string MesDeliveryPlan { get; set; } + /// + /// 底盘号 + /// + [Display(Name = "底盘号")] + public string IdentityNo { get; set; } +} diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestExchangeDto.cs new file mode 100644 index 000000000..7273c7ce0 --- /dev/null +++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestExchangeDto.cs @@ -0,0 +1,43 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Win_in.Sfs.Shared.Domain; +using Win_in.Sfs.Shared.Domain.Shared; + +namespace Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest; +public class DeliverRequestExchangeDto +{ + /// + /// 单据号 + /// + public string Number { get; set; } + /// + /// 操作员 + /// + public string Worker { get; set; } + + /// + /// 生效日期 + /// + public DateTime ActiveDate { get; set; } = DateTime.Now.Date; + /// + /// 发货时间 + /// + public DateTime DeliverTime { get; set; } = DateTime.Now.Date; + /// + /// 发货类型 + /// + public EnumDeliverRequestType DeliverRequestType { get; set; } + + /// + /// 客户 + /// + [Display(Name = "客户")] + [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] + public string CustomerCode { get; set; } + + /// + /// 明细列表 + /// + [Display(Name = "明细列表")] + public DeliverRequestDetailExchangeDto 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 e17d7c47d..0f5dfff33 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 @@ -531,6 +531,21 @@ 数量 + + + Mes发货单号 + + + + + Mes发货计划号 + + + + + 底盘号 + + 单据号 @@ -551,6 +566,76 @@ 客户 + + + 单据号 + + + + + 物品代码 + + + + + 来源库区 + + + + + 数量 + + + + + Mes发货单号 + + + + + Mes发货计划号 + + + + + 底盘号 + + + + + 单据号 + + + + + 操作员 + + + + + 生效日期 + + + + + 发货时间 + + + + + 发货类型 + + + + + 客户 + + + + + 明细列表 + + 代码 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 c47ac2d27..172221fd0 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 @@ -121,5 +121,9 @@ public enum EnumIncomingDataType /// /// 储位调拨 /// - MesNote = 29 + MesNote = 29, + /// + /// 发货单 + /// + Delivery=30, } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/DTOs/DeliverNoteDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/DTOs/DeliverNoteDetailDTO.cs index 1f473504a..480978f89 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/DTOs/DeliverNoteDetailDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/DTOs/DeliverNoteDetailDTO.cs @@ -10,4 +10,19 @@ public class DeliverNoteDetailDTO : SfsStoreRecommendFromDetailWithFromToDTOBase /// [Display(Name = "扩展属性")] public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary(); + /// + /// Mes发货单号 + /// + [Display(Name = "Mes发货单号")] + public string MesDeliveryNo { get; set; } + /// + /// Mes发货计划号 + /// + [Display(Name = "Mes发货计划号")] + public string MesDeliveryPlan { get; set; } + /// + /// 底盘号 + /// + [Display(Name = "底盘号")] + public string IdentityNo { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/Inputs/DeliverNoteDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/Inputs/DeliverNoteDetailInput.cs index fb12f3ecf..e7957adc4 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/Inputs/DeliverNoteDetailInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/Inputs/DeliverNoteDetailInput.cs @@ -10,4 +10,19 @@ public class DeliverNoteDetailInput : SfsStoreRecommendFromDetailWithFromToInput /// [Display(Name = "扩展属性")] public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary(); + /// + /// Mes发货单号 + /// + [Display(Name = "Mes发货单号")] + public string MesDeliveryNo { get; set; } + /// + /// Mes发货计划号 + /// + [Display(Name = "Mes发货计划号")] + public string MesDeliveryPlan { get; set; } + /// + /// 底盘号 + /// + [Display(Name = "底盘号")] + public string IdentityNo { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/DTOs/DeliverRequestDetailDTO.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/DTOs/DeliverRequestDetailDTO.cs index 68b9e9482..48c2eb45f 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/DTOs/DeliverRequestDetailDTO.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/DTOs/DeliverRequestDetailDTO.cs @@ -17,4 +17,20 @@ public class DeliverRequestDetailDTO : SfsStoreDetailWithQtyDTOBase, IHasExtraPr [Display(Name = "扩展属性")] public ExtraPropertyDictionary ExtraProperties { set; get; } = new ExtraPropertyDictionary(); + + /// + /// Mes发货单号 + /// + [Display(Name = "Mes发货单号")] + public string MesDeliveryNo { get; set; } + /// + /// Mes发货计划号 + /// + [Display(Name = "Mes发货计划号")] + public string MesDeliveryPlan { get; set; } + /// + /// 底盘号 + /// + [Display(Name = "底盘号")] + public string IdentityNo { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestDetailInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestDetailInput.cs index ab103e943..c472abe02 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestDetailInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestDetailInput.cs @@ -16,4 +16,19 @@ public class DeliverRequestDetailInput : SfsStoreDetailWithQtyInputBase, IHasExt /// [Display(Name = "扩展属性")] public ExtraPropertyDictionary ExtraProperties { set; get; } + /// + /// Mes发货单号 + /// + [Display(Name = "Mes发货单号")] + public string MesDeliveryNo { get; set; } + /// + /// Mes发货计划号 + /// + [Display(Name = "Mes发货计划号")] + public string MesDeliveryPlan { get; set; } + /// + /// 底盘号 + /// + [Display(Name = "底盘号")] + public string IdentityNo { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestImportInput.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestImportInput.cs index 977870195..f70191045 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestImportInput.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestImportInput.cs @@ -40,6 +40,22 @@ public class DeliverRequestImportInput : SfsStoreImportInputBase [Display(Name = "发货库区")] [Required] public string AreaCode { get; set; } + + /// + /// Mes发货单号 + /// + [Display(Name = "Mes发货单号")] + public string MesDeliveryNo { get; set; } + /// + /// Mes发货计划号 + /// + [Display(Name = "Mes发货计划号")] + public string MesDeliveryPlan { get; set; } + /// + /// 底盘号 + /// + [Display(Name = "底盘号")] + public string IdentityNo { get; set; } } [Display(Name = "FIS发货申请")] diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs index 1ecfa8ea9..608c0382b 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs @@ -10,6 +10,8 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Domain.Entities.Events.Distributed; +using Volo.Abp.ObjectMapping; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain; @@ -32,7 +34,6 @@ public class DeliverRequestAppService : private readonly IAreaAppService _areaApp; private readonly ICustomerAppService _customerApp; private readonly ICustomerAddressAppService _customerAddressApp; - public DeliverRequestAppService( IDeliverRequestRepository repository , IDeliverRequestManager deliverRequestManager @@ -46,7 +47,21 @@ public class DeliverRequestAppService : _customerApp = customerApp; _customerAddressApp = customerAddressApp; } + /// + /// 处理请求 + /// + /// + /// + [HttpPost("handle-list")] + public virtual async Task> HandleListAsync(List ids) + { + var entitys = await _repository.GetListAsync(r=> ids.Contains(r.Id)).ConfigureAwait(false); + Check.NotNull(entitys, typeof(DeliverRequest).Name); + var result = await _deliverRequestManager.HandleListAsync(entitys).ConfigureAwait(false); + var dtos = ObjectMapper.Map, List>(entitys); + return dtos; + } [HttpPost("list")] public override Task> GetPagedListByFilterAsync( SfsStoreRequestInputBase sfsRequestInput, @@ -75,7 +90,30 @@ public class DeliverRequestAppService : var dto = ObjectMapper.Map(entity); return dto; } + private async Task SetRequestAutoPropertiesAsync(DeliverRequest entity) + { + //普通件 + var transType = EnumTransSubType.Deliver_Standard; + //jis件 + if (entity.DeliverRequestType == EnumDeliverRequestType.FIS) + { + transType = EnumTransSubType.Deliver_FIS; + } + else if (entity.DeliverRequestType == EnumDeliverRequestType.RAW) + { + transType = EnumTransSubType.Deliver_RAW; + } + var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Deliver, transType).ConfigureAwait(false); + Check.NotNull(tranType, "事务类型", "事务类型不存在"); + + entity.AutoCompleteJob = tranType.AutoCompleteJob; + entity.AutoSubmit = tranType.AutoSubmitRequest; + entity.AutoAgree = tranType.AutoAgreeRequest; + entity.AutoHandle = tranType.AutoHandleRequest; + entity.DirectCreateNote = tranType.DirectCreateNote; + entity.DeliverRequestType = entity.DeliverRequestType; + } #region import protected virtual async Task CheckImportInputBusinessAsync( DeliverRequestImportInput importInput @@ -246,30 +284,7 @@ public class DeliverRequestAppService : await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false); } - private async Task SetRequestAutoPropertiesAsync(DeliverRequest entity) - { - //普通件 - var transType = EnumTransSubType.Deliver_Standard; - //jis件 - if (entity.DeliverRequestType == EnumDeliverRequestType.FIS) - { - transType = EnumTransSubType.Deliver_FIS; - } - else if (entity.DeliverRequestType == EnumDeliverRequestType.RAW) - { - transType = EnumTransSubType.Deliver_RAW; - } - var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Deliver, transType).ConfigureAwait(false); - - Check.NotNull(tranType, "事务类型", "事务类型不存在"); - entity.AutoCompleteJob = tranType.AutoCompleteJob; - entity.AutoSubmit = tranType.AutoSubmitRequest; - entity.AutoAgree = tranType.AutoAgreeRequest; - entity.AutoHandle = tranType.AutoHandleRequest; - entity.DirectCreateNote = tranType.DirectCreateNote; - entity.DeliverRequestType = entity.DeliverRequestType; - } private static void CheckTransactionType(TransactionTypeDTO transactionType, ItemBasicDTO item) { diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAutoMapperProfile.cs index b88d2249a..6b40d01c6 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAutoMapperProfile.cs @@ -93,6 +93,9 @@ public partial class StoreApplicationAutoMapperProfile : Profile .Ignore(x => x.Id) .Ignore(x => x.ExtraProperties) .Ignore(x => x.Remark) + .Ignore(x => x.IdentityNo) + .Ignore(x => x.MesDeliveryNo) + .Ignore(x => x.MesDeliveryPlan) .AfterMap((x, y) => y.SetProperty(nameof(x.FromVinCode), x.FromVinCode)) //.AfterMap((x, y) => y.SetProperty(nameof(x.ToVinCode), x.ToVinCode)) ; diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs index 9e25e6475..2c872d3b5 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs @@ -171,7 +171,7 @@ public class DeliverRequestFisAppService : CancellationToken cancellationToken = default) { sfsRequestInput.Condition.Filters.Add( - new Filter(nameof(DeliverRequest.DeliverRequestType), "FIS")); + new Filter(nameof(DeliverRequest.DeliverRequestType), "Normal")); return base.GetPagedListByFilterAsync(sfsRequestInput, includeDetails, cancellationToken); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs index a4c20f257..e31231106 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs @@ -61,14 +61,15 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA entity.AutoSubmit = true; entity.AutoAgree = true; entity.AutoHandle = true; - if (entity.UnplannedIssueType == EnumUnplannedIssueType.Wip) - { - entity.DirectCreateNote = true; - } - else - { - entity.DirectCreateNote = false; - } + entity.DirectCreateNote = false; + //if (entity.UnplannedIssueType == EnumUnplannedIssueType.Wip) + //{ + // entity.DirectCreateNote = true; + //} + //else + //{ + + //} await _unplannedIssueRequestManager.CreateAsync(entity).ConfigureAwait(false); var dto = ObjectMapper.Map(entity); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs index eb193e7f8..6f4d40782 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs @@ -65,14 +65,15 @@ public class UnplannedReceiptRequestForDongyangAppService : UnplannedReceiptRequ entity.AutoSubmit = true; entity.AutoAgree = true; entity.AutoHandle = true; - if (entity.UnplannedReceiptType == EnumUnplannedReceiptType.Wip) - { - entity.DirectCreateNote = true; //线边直接生成记录 - } - else - { - entity.DirectCreateNote = false; //原料先生成任务、再生成记录 - } + entity.DirectCreateNote = false; + //if (entity.UnplannedReceiptType == EnumUnplannedReceiptType.Wip) + //{ + // entity.DirectCreateNote = true; //线边直接生成记录 + //} + //else + //{ + // entity.DirectCreateNote = false; //原料先生成任务、再生成记录 + //} var res = await _unplannedReceiptRequestManager.CreateAsync(entity).ConfigureAwait(false); var dto = ObjectMapper.Map(entity); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/DeliverNotes/DeliverNoteDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/DeliverNotes/DeliverNoteDetail.cs index fff0e8fea..ae672d219 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/DeliverNotes/DeliverNoteDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/DeliverNotes/DeliverNoteDetail.cs @@ -8,4 +8,16 @@ public class DeliverNoteDetail : SfsStoreRecommendFromDetailWithFromToEntityBase /// 扩展属性 /// public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary(); + /// + /// Mes发货单号 + /// + public string MesDeliveryNo { get; set; } + /// + /// Mes发货计划号 + /// + public string MesDeliveryPlan { get; set; } + /// + /// 底盘号 + /// + public string IdentityNo { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequest.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequest.cs index e8f647791..a7d5cd8d1 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequest.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequest.cs @@ -38,7 +38,6 @@ public class DeliverRequest : SfsStoreRequestAggregateRootBase /// 发货类型 /// - [IgnoreUpdate] public EnumDeliverRequestType DeliverRequestType { get; set; } /// diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestDetail.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestDetail.cs index 0d0890d61..4ef1869ee 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestDetail.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestDetail.cs @@ -16,5 +16,16 @@ public class DeliverRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasExtraPr /// 扩展属性 /// public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary(); - + /// + /// Mes发货单号 + /// + public string MesDeliveryNo { get; set; } + /// + /// Mes发货计划号 + /// + public string MesDeliveryPlan { get; set; } + /// + /// 底盘号 + /// + public string IdentityNo { get; set; } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestManager.cs index 01209e9f6..0457301bd 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestManager.cs @@ -1,7 +1,12 @@ using System.Collections.Generic; using System.Threading.Tasks; +using IdentityModel; using Volo.Abp; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Uow; using Win_in.Sfs.Basedata.Application.Contracts; +using Win_in.Sfs.Shared.Event; namespace Win_in.Sfs.Wms.Store.Domain; @@ -67,4 +72,21 @@ public class DeliverRequestManager : SfsStoreRequestManagerBase + /// 执行 + /// + /// + /// + [UnitOfWork] + public async Task> HandleListAsync(List entitys) + { + foreach (var entity in entitys) + { + entity.Handle(); + await AddOrUpdateAsync(entity).ConfigureAwait(false); + } + await LocalEventBus.PublishAsync(new SfsHandledEntityEventData>(entitys), false).ConfigureAwait(false); + return entitys; + } } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/IDeliverRequestManager.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/IDeliverRequestManager.cs index 49f0a28fa..0c5fc53c2 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/IDeliverRequestManager.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/IDeliverRequestManager.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Threading.Tasks; using Win_in.Sfs.Shared.Domain; @@ -7,4 +8,5 @@ public interface IDeliverRequestManager : ISfsStoreRequestManager { Task CompleteAsync(string number); + Task> HandleListAsync(List entitys); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/DeliverNotes/DeliverNoteDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/DeliverNotes/DeliverNoteDbContextModelCreatingExtensions.cs index 381ea2d2c..5d71253f9 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/DeliverNotes/DeliverNoteDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/DeliverNotes/DeliverNoteDbContextModelCreatingExtensions.cs @@ -50,7 +50,9 @@ public static class DeliverNoteDbContextModelCreatingExtensions b.Property(q => q.ToPackingCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.FromLot).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ToLot).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); - + b.Property(q => q.IdentityNo).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.MesDeliveryPlan).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.MesDeliveryNo).HasMaxLength(SfsPropertyConst.CodeLength); //Indexes b.HasIndex(q => new { q.Number, q.ItemCode, q.FromPackingCode, q.FromLot, q.FromLocationCode, q.ToLocationCode }).IsUnique(); }); diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/DeliverRequests/DeliverRequestDbContextModelCreatingExtensions.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/DeliverRequests/DeliverRequestDbContextModelCreatingExtensions.cs index 328fa0d71..b6530b9ff 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/DeliverRequests/DeliverRequestDbContextModelCreatingExtensions.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/DeliverRequests/DeliverRequestDbContextModelCreatingExtensions.cs @@ -42,7 +42,9 @@ public static class DeliverRequestDbContextModelCreatingExtensions b.ConfigureSfsStoreBase(); //Configure Sfs store detail properties b.ConfigureSfsStoreDetailBase(); - + b.Property(q => q.IdentityNo).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.MesDeliveryPlan).HasMaxLength(SfsPropertyConst.CodeLength); + b.Property(q => q.MesDeliveryNo).HasMaxLength(SfsPropertyConst.CodeLength); //Properties //Relations diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/DeliverJobAutoMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/DeliverJobAutoMapperProfile.cs index 065cc9c81..416b5fb1d 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/DeliverJobAutoMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/DeliverJobAutoMapperProfile.cs @@ -46,6 +46,9 @@ public partial class StoreEventAutoMapperProfile : Profile .Ignore(x => x.ToLocationArea) .Ignore(x => x.ToLocationGroup) .Ignore(x => x.ExtraProperties) + .Ignore(x => x.MesDeliveryNo) + .Ignore(x => x.IdentityNo) + .Ignore(x => x.MesDeliveryPlan) ; CreateMap() diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/DeliverRequestMapperProfile.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/DeliverRequestMapperProfile.cs index 5dbb2df1b..0d04d1a29 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/DeliverRequestMapperProfile.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/DeliverRequestMapperProfile.cs @@ -97,6 +97,9 @@ public partial class StoreEventAutoMapperProfile : Profile .ForMember(x => x.ToStatus, y => y.MapFrom(d => d.Status)) .ForMember(x => x.ToWarehouseCode, y => y.MapFrom(d => d.WarehouseCode)) .Ignore(t => t.StdPackQty) + .Ignore(t => t.MesDeliveryNo) + .Ignore(t => t.MesDeliveryPlan) + .Ignore(t => t.IdentityNo) .Ignore(x => x.ExtraProperties) .IgnoreIHasRecommendAndHandledFrom(); } diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/DeliverRequestEventHandler.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/DeliverRequestEventHandler.cs index 8ef9669ed..023e4b786 100644 --- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/DeliverRequestEventHandler.cs +++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/DeliverRequestEventHandler.cs @@ -3,7 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Volo.Abp; +using Volo.Abp.Domain.Entities; using Volo.Abp.EventBus; +using Volo.Abp.ObjectMapping; using Volo.Abp.Uow; using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared; @@ -17,6 +19,7 @@ namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; public class DeliverRequestEventHandler : StoreEventHandlerBase , ILocalEventHandler> + , ILocalEventHandler>> , ILocalEventHandler> , ILocalEventHandler> , ILocalEventHandler>> @@ -26,16 +29,19 @@ public class DeliverRequestEventHandler private readonly IDeliverJobAppService _deliverJobApp; private readonly ICustomerAddressAppService _customerAddressApp; private readonly IDeliverRequestManager _deliverRequestManager; - + private readonly IBalanceAppService _balanceAppService; + private readonly ILocationAppService _locationAppService; public DeliverRequestEventHandler( IDeliverJobAppService deliverJobApp , IDeliverNoteAppService deliverNoteApp - , ICustomerAddressAppService customerAddressApp, IDeliverRequestManager deliverRequestManager) + , ICustomerAddressAppService customerAddressApp, IDeliverRequestManager deliverRequestManager, IBalanceAppService balanceAppService, ILocationAppService locationAppService) { _deliverNoteApp = deliverNoteApp; _deliverJobApp = deliverJobApp; _customerAddressApp = customerAddressApp; _deliverRequestManager = deliverRequestManager; + _balanceAppService = balanceAppService; + _locationAppService = locationAppService; } @@ -47,10 +53,10 @@ public class DeliverRequestEventHandler public async Task HandleEventAsync(SfsCreatedEntityEventData eventData) { var entity = eventData.Entity; - if (entity.AutoSubmit) - { - await _deliverRequestManager.SubmitAsync(entity).ConfigureAwait(false); - } + //if (entity.AutoSubmit) + //{ + // await _deliverRequestManager.SubmitAsync(entity).ConfigureAwait(false); + //} } /// @@ -61,13 +67,13 @@ public class DeliverRequestEventHandler public async Task HandleEventAsync(SfsCreatedEntityEventData> eventData) { var entitys = eventData.Entity; - foreach (var entity in entitys) - { - if (entity.AutoSubmit) - { - await _deliverRequestManager.SubmitAsync(entity).ConfigureAwait(false); - } - } + //foreach (var entity in entitys) + //{ + // if (entity.AutoSubmit) + // { + // await _deliverRequestManager.SubmitAsync(entity).ConfigureAwait(false); + // } + //} } /// @@ -109,10 +115,110 @@ public class DeliverRequestEventHandler await _deliverJobApp.CreateManyAsync(deliverJobCreateInputs).ConfigureAwait(false); } } + /// + /// 执行后 + /// + /// + /// + [UnitOfWork] + public virtual async Task HandleEventAsync(SfsHandledEntityEventData> eventData) + { + var entitys = eventData.Entity; + //东阳特殊逻辑 + if (entitys.First().DirectCreateNote) + { + var noteCreateInput = await BuildDeliverNoteAsync(entitys).ConfigureAwait(false); + await _deliverNoteApp.CreateAsync(noteCreateInput).ConfigureAwait(false); + } + } #region 私有 + private async Task BuildDeliverNoteAsync(List requests) + { + var transactionType = await TransactionTypeAclService + .GetByTransTypeAsync(EnumTransType.Deliver, EnumTransSubType.None).ConfigureAwait(false); + + if (requests.First().DeliverRequestType == EnumDeliverRequestType.Normal) + { + transactionType = await TransactionTypeAclService.GetByTransTypeAsync( + EnumTransType.Deliver, + EnumTransSubType.Deliver_Standard).ConfigureAwait(false); + } + else if (requests.First().DeliverRequestType == EnumDeliverRequestType.FIS) + { + transactionType = await TransactionTypeAclService.GetByTransTypeAsync( + EnumTransType.Deliver, + EnumTransSubType.Deliver_FIS).ConfigureAwait(false); + } + + var createInput = ObjectMapper.Map(requests.First()); + + var customerAddress = + (await _customerAddressApp.GetByCustomerCodeAsync(createInput.CustomerCode).ConfigureAwait(false)) + .FirstOrDefault(); + + LocationDTO toLocation = null; + if (customerAddress != null && !string.IsNullOrEmpty(customerAddress.LocationCode)) + { + toLocation = await LocationAclService.GetByCodeAsync(customerAddress.LocationCode).ConfigureAwait(false); + + Check.NotNull(toLocation, $"客户库位 {customerAddress.LocationCode} 不存在"); + } + + createInput.Details = new List(); + + foreach (var detail in requests.SelectMany(r=>r.Details)) + { + var locations = await _locationAppService.GetListByTypesAndErpCodeAsync(transactionType.OutLocationTypes, detail.AreaCode).ConfigureAwait(false); + if (locations.Count <= 0) + { + throw new UserFriendlyException($"储位 {detail.AreaCode} 未找到对应的成品库和半成品库。"); + } + var balances = await _balanceAppService.GetRecommendBalancesByLocationsAsync( + new RecommendBalanceRequestInput + { + ItemCode = detail.ItemCode, + Qty = detail.Qty, + Locations = locations.Select(r => r.Code).ToList(), + Statuses = transactionType.OutInventoryStatuses + }).ConfigureAwait(false); + + var sumQty = balances.Sum(t => t.Qty); + + if (sumQty < detail.Qty) + { + throw new UserFriendlyException($"物料号 {detail.ItemCode} 库存余额 {sumQty} 小于 {detail.Qty}。"); + } + + foreach (var balance in balances) + { + var inputDetail = ObjectMapper.Map(balance); + + var item = await ItemBasicAclService.GetByCodeAsync(balance.ItemCode).ConfigureAwait(false); + + if (item != null) + { + inputDetail.StdPackQty = item.StdPackQty; + } + + if (toLocation != null) + { + inputDetail.ToLocationCode = toLocation.Code; + + inputDetail.ToLocationErpCode = toLocation.ErpLocationCode; + } + + inputDetail.ExtraProperties = detail.ExtraProperties; + inputDetail.MesDeliveryNo = detail.MesDeliveryNo; + inputDetail.IdentityNo = detail.IdentityNo; + inputDetail.MesDeliveryPlan = detail.MesDeliveryPlan; + createInput.Details.Add(inputDetail); + } + } + return createInput; + } private async Task BuildDeliverNoteAsync(DeliverRequest request) { var transactionType = await TransactionTypeAclService @@ -149,16 +255,21 @@ public class DeliverRequestEventHandler foreach (var detail in request.Details) { - var balances = await BalanceAclService.GetRecommendBalancesAsync( + var locations = await _locationAppService.GetListByTypesAndErpCodeAsync(transactionType.OutLocationTypes, detail.AreaCode).ConfigureAwait(false); + if (locations.Count<=0) + { + throw new UserFriendlyException($"储位 {detail.AreaCode} 未找到对应的成品库和半成品库。"); + } + + var balances = await _balanceAppService.GetRecommendBalancesByLocationsAsync( new RecommendBalanceRequestInput { ItemCode = detail.ItemCode, Qty = detail.Qty, - LocationTypes = transactionType.OutLocationTypes, - LocationAreas = new List { detail.AreaCode }, + Locations = locations.Select(r=>r.Code).ToList(), Statuses = transactionType.OutInventoryStatuses }).ConfigureAwait(false); - + var sumQty = balances.Sum(t => t.Qty); if (sumQty < detail.Qty) @@ -185,7 +296,9 @@ public class DeliverRequestEventHandler } inputDetail.ExtraProperties = detail.ExtraProperties; - + inputDetail.MesDeliveryNo = detail.MesDeliveryNo; + inputDetail.IdentityNo = detail.IdentityNo; + inputDetail.MesDeliveryPlan = detail.MesDeliveryPlan; createInput.Details.Add(inputDetail); } }