diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs
new file mode 100644
index 000000000..9ae130400
--- /dev/null
+++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs
@@ -0,0 +1,49 @@
+using System.ComponentModel.DataAnnotations;
+using Volo.Abp.Domain.Entities;
+
+namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
+public class Frozen : Entity
+{
+ ///
+ /// 序号
+ ///
+ [Key]
+ public string mesout_frozen_id { get; set; }
+ ///
+ /// 类型
+ ///
+ public string mesout_frozen_type { get; set; }
+ ///
+ /// 物料
+ ///
+ public string mesout_frozen_part { get; set; }
+ ///
+ /// 日期
+ ///
+ public string mesout_frozen_date { get; set; }
+ ///
+ /// 来源库位
+ ///
+ public string mesout_frozen_loc { get; set; }
+ ///
+ /// 冻结原因
+ ///
+ public string mesout_frozen_reason { get; set; }
+ ///
+ /// 数量
+ ///
+ public decimal mesout_frozen_num { get; set; }
+ ///
+ /// 冻结用户
+ ///
+ public string mesout_frozen_user { get; set; }
+ ///
+ /// 是否读取(0,1)
+ ///
+ public long Yl1 { get; set; }
+
+ public override object[] GetKeys()
+ {
+ return new object[] { mesout_frozen_id };
+ }
+}
diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/FrozenManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/FrozenManager.cs
new file mode 100644
index 000000000..e0f15b29c
--- /dev/null
+++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/FrozenManager.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.Frozen;
+public class FrozenManager : DomainService, IFrozenManager
+{
+ private readonly IFrozenRepository _repository;
+
+ public FrozenManager(IFrozenRepository 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_frozen_id);
+ var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_frozen_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_frozen_id);
+ var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_frozen_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/Frozen/IFrozenManager.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenManager.cs
new file mode 100644
index 000000000..ce90eb038
--- /dev/null
+++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenManager.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
+public interface IFrozenManager
+{
+ 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/Frozen/IFrozenRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenRepository.cs
new file mode 100644
index 000000000..0cde2a7a6
--- /dev/null
+++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenRepository.cs
@@ -0,0 +1,7 @@
+using Volo.Abp.Domain.Repositories;
+
+namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
+public interface IFrozenRepository : 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 d932677bf..8b8e53a60 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
@@ -28,5 +28,6 @@ public static class DataExchangeDbContextModelCreatingExtensions
builder.ConfigurePck(options);
builder.ConfigureBackflu(options);
builder.ConfigureQtyrfe(options);
+ builder.ConfigureFrozen(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 c71c18adb..e1cf9d642 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.Frozen;
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;
@@ -34,5 +35,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/Frozen/FrozenDbContextModelCreatingExtensions.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenDbContextModelCreatingExtensions.cs
new file mode 100644
index 000000000..35103288d
--- /dev/null
+++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenDbContextModelCreatingExtensions.cs
@@ -0,0 +1,30 @@
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore.Modeling;
+using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
+
+namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
+public static class FrozenDbContextModelCreatingExtensions
+{
+ public static void ConfigureFrozen(this ModelBuilder builder, MesModelBuilderConfigurationOptions options)
+ {
+ builder.Entity(b =>
+ {
+ //Configure table & schema Name
+ b.ToTable(options.TablePrefix + "mesout_frozen", options.Schema);
+ //Configure ABP properties
+ b.ConfigureByConvention();
+
+ //Properties
+ b.Property(q => q.mesout_frozen_id).HasMaxLength(20);
+ b.Property(q => q.mesout_frozen_type).HasMaxLength(1);
+ b.Property(q => q.mesout_frozen_part).HasMaxLength(20);
+ b.Property(q => q.mesout_frozen_date).HasMaxLength(20);
+ b.Property(q => q.mesout_frozen_loc).HasMaxLength(10);
+ b.Property(q => q.mesout_frozen_reason).HasMaxLength(500);
+ b.Property(q => q.mesout_frozen_num).HasPrecision(10, 2);
+ b.Property(q => q.mesout_frozen_user).HasMaxLength(20);
+ b.Property(q => q.Yl1);
+ });
+
+ }
+}
diff --git a/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenEfCoreRepository.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenEfCoreRepository.cs
new file mode 100644
index 000000000..e9dc87935
--- /dev/null
+++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenEfCoreRepository.cs
@@ -0,0 +1,12 @@
+using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
+
+namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
+public class FrozenEfCoreRepository : EfCoreRepository, IFrozenRepository
+{
+ public FrozenEfCoreRepository(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 1859f7690..0e6ea26bb 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.Frozen;
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;
@@ -23,4 +24,6 @@ public interface IMesDbContext : IEfCoreDbContext
DbSet Backflu { get; }
DbSet Qtyrfe { get; }
+
+ DbSet Frozen { 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 104f8a1d3..cdead9f76 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.Frozen;
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;
@@ -25,6 +26,8 @@ public class MesDbContext :
public virtual DbSet Qtyrfe { get; }
+ public virtual DbSet Frozen { 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 7dc28eaa9..591ccdce7 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
@@ -4,6 +4,7 @@ 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.MaterialRequest;
+using Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
using Win_in.Sfs.Wms.DataExchange.WMS.PCK;
using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote;
using Win_in.Sfs.Wms.DataExchange.WMS.ScrapNote;
@@ -219,5 +220,38 @@ public class FawtygAutoMapperProfile : Profile
.Ignore(x => x.Uom)
.Ignore(x => x.StdPackQty)
;
+
+ CreateMap()
+ .Ignore(x => x.Details)
+ .Ignore(x => x.ExtraProperties)
+ .Ignore(x => x.JobNumber)
+ .Ignore(x => x.Details)
+ .Ignore(x => x.ExtraProperties);
+ ;
+ CreateMap()
+ .ForMember(x=>x.FromLocationCode,y=>y.MapFrom(t=>t.FromLocationErpCode))
+ .ForMember(x => x.ToLocationCode, y => y.MapFrom(t => t.ToLocationErpCode))
+ .Ignore(x => x.ItemName)
+ .Ignore(x => x.ItemDesc1)
+ .Ignore(x => x.ItemDesc2)
+ .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.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/FrozenConverter.cs b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenConverter.cs
new file mode 100644
index 000000000..378067647
--- /dev/null
+++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenConverter.cs
@@ -0,0 +1,133 @@
+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.MesNote;
+using Win_in.Sfs.Wms.Store.Application.Contracts;
+using Volo.Abp.ObjectMapping;
+using Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
+
+namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
+
+public class FrozenConverter : 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 FrozenConverter(
+ 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 Frozens");
+ return;
+ }
+
+ //按Number合并MesNote单据
+ var transferNoteList = await BuildIncomingToWmsOfMesNoteAsync(incomingFromExternalList).ConfigureAwait(false);
+ await _incomingToWmsManager.CreateManyAsync(transferNoteList).ConfigureAwait(false);
+ //归档
+ await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false);
+ }
+
+ private async Task> BuildIncomingToWmsOfMesNoteAsync(List incomingDataList)
+ {
+ var incomingToWmsList = new List();
+ foreach (var incomingData in incomingDataList)
+ {
+ var incomingToWms = new IncomingToWms()
+ {
+ DataType = incomingData.DataType,
+ DataAction = incomingData.DataAction,
+ SourceSystem = incomingData.SourceSystem,
+ DataIdentityCode = incomingData.SourceDataGroupCode,
+ };
+ incomingToWms.SetEffectiveDate(incomingData.EffectiveDate);
+ var exchangeMesNote = JsonSerializer.Deserialize(incomingData.DestinationDataContent);
+ var wmsMesNoteDetail = _objectMapper.Map(exchangeMesNote.Detail);
+ var wmsMesNote = _objectMapper.Map(exchangeMesNote);
+ wmsMesNote.Details = new List();
+ var item = await _itemBasicAppService.GetByCodeAsync(wmsMesNoteDetail.ItemCode).ConfigureAwait(false);
+ try
+ {
+ wmsMesNoteDetail.FromPackingCode = "";
+ wmsMesNoteDetail.ToPackingCode = "";
+ wmsMesNoteDetail.FromLot = "";
+ wmsMesNoteDetail.ToLot = "";
+ wmsMesNoteDetail.FromWarehouseCode = "";
+ wmsMesNoteDetail.ToWarehouseCode = "";
+ //if (transferNote.Remark.Contains("质量补移库"))//质量补
+ //{
+ // wmsMesNoteDetail.FromPackingCode = "RFE"; //质量补排序批次
+ // wmsMesNoteDetail.FromLot = "RFE";//质量补箱标签
+ // wmsMesNoteDetail.ToPackingCode = "RFE"; //质量补排序批次
+ // wmsMesNoteDetail.ToLot = "RFE";//质量补箱标签
+ //}
+ if (item != null)
+ {
+ wmsMesNoteDetail.ItemName = item.Name;
+ wmsMesNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
+ wmsMesNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
+ wmsMesNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
+ wmsMesNoteDetail.StdPackQty = item.StdPackQty;
+ }
+ //if (tolocation != null)
+ //{
+ // wmsMesNoteDetail.ToLocationCode = tolocation.Code;
+ // wmsMesNoteDetail.ToLocationArea = tolocation.AreaCode;
+ // wmsMesNoteDetail.ToLocationGroup = tolocation.LocationGroupCode;
+ // wmsMesNoteDetail.ToWarehouseCode = tolocation.WarehouseCode;
+ // if (tolocation.Type == EnumLocationType.CUST)
+ // {
+ // wmsMesNote.Type = EnumTransSubType.Mes_Customer.ToString();//客户储位调拨
+ // }
+ //}
+ //if (fromlocation != null)
+ //{
+ // wmsMesNoteDetail.FromLocationCode = fromlocation.Code;
+ // wmsMesNoteDetail.FromLocationArea = fromlocation.AreaCode;
+ // wmsMesNoteDetail.FromLocationGroup = fromlocation.LocationGroupCode;
+ // wmsMesNoteDetail.FromWarehouseCode = fromlocation.WarehouseCode;
+ //}
+ }
+ catch (Exception)
+ {
+ wmsMesNoteDetail.ItemName = "";
+ wmsMesNoteDetail.ItemDesc1 = "";
+ wmsMesNoteDetail.ItemDesc2 = "";
+ wmsMesNoteDetail.Uom = "";
+ }
+
+ wmsMesNote.Details.Add(wmsMesNoteDetail);
+
+ incomingToWms.DataContent = JsonSerializer.Serialize(wmsMesNote);
+ incomingToWmsList.Add(incomingToWms);
+ }
+ return incomingToWmsList;
+ }
+
+}
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
new file mode 100644
index 000000000..4a2626cb3
--- /dev/null
+++ b/be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs
@@ -0,0 +1,123 @@
+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.Frozen;
+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.MesNote;
+using Win_in.Sfs.Basedata.Application.Contracts;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
+public class FrozenReader : IReader
+{
+ private readonly IFrozenManager _FrozenManager;
+ private readonly IIncomingFromExternalManager _incomingFromExternalManager;
+ private readonly ILogger _logger;
+ private readonly ILocationAppService _locationAppService;
+
+ public FrozenReader(
+ IFrozenManager pillTaskManager
+ , IIncomingFromExternalManager incomingFromExternalManager
+ , ILogger logger
+ , ILocationAppService locationAppService
+ )
+ {
+ _FrozenManager = pillTaskManager;
+ _incomingFromExternalManager = incomingFromExternalManager;
+ _logger = logger;
+ _locationAppService = locationAppService;
+ }
+
+ public virtual async Task> ReadAsync()
+
+ {
+ //从MES读取待处理Frozen
+ var toBeProcessedPillTasks = await _FrozenManager.GetToBeProcessedListAsync().ConfigureAwait(false);
+ if (!toBeProcessedPillTasks.Any())
+ {
+ _logger.LogInformation("no Frozens");
+ return new List();
+ }
+ //Frozen逐一转换为MaterialRequest
+ var holdLocation = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.HOLD).ConfigureAwait(false);
+ var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks, holdLocation==null?"": holdLocation.Code);
+ await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
+ //更新MES数据状态
+ await _FrozenManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false);
+
+ return incomingDataList;
+ }
+
+ private static List BuildIncomingFromExternalFromPillTaskAsync(List toBeProcessedFrozens,string holdLocationCode)
+ {
+ var incomingDataList = new List();
+ foreach (var Frozen in toBeProcessedFrozens)
+ {
+ var incomingData = BuildIncomingFromExternal(Frozen);
+
+ incomingData.SetEffectiveDate(DateTime.Now);
+ incomingData.SetSuccess();
+ try
+ {
+ var MaterialRequest = BuildTransferNoteCreateInput(Frozen, holdLocationCode);
+ 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(Frozen Frozen)
+ {
+ var incomingData = new IncomingFromExternal()
+ {
+ DataType = EnumIncomingDataType.MesNote.ToString(),
+ DataAction = EnumExchangeDataAction.Add,
+ SourceSystem = EnumSystemType.MES.ToString(),
+ SourceDataId = Frozen.mesout_frozen_id.ToString(),
+ SourceDataGroupCode = Frozen.mesout_frozen_id,
+ SourceDataDetailCode = Frozen.mesout_frozen_part,
+ SourceDataContent = JsonSerializer.Serialize(Frozen),
+ WriteTime = DateTime.Now,
+ Writer = nameof(MesIncomingBackgroundWorker),
+
+ DestinationSystem = EnumSystemType.WMS.ToString(),
+ };
+ return incomingData;
+ }
+
+ private static MesNoteExchangeDto BuildTransferNoteCreateInput(Frozen Frozen, string holdLocationCode)
+ {
+ var mesNote = new MesNoteExchangeDto()
+ {
+ MesRequestNumber=Frozen.mesout_frozen_id,
+ Worker = Frozen.mesout_frozen_user,
+ Remark = Frozen.mesout_frozen_reason,
+ Type = Frozen.mesout_frozen_type == "0" ? EnumTransType.MesFreezed.ToString() : EnumTransType.MesUnFreezed.ToString(),
+ ActiveDate = DateTime.TryParse(Frozen.mesout_frozen_date, out DateTime dateTime) ? dateTime : DateTime.Now
+ };
+ var mesNoteDetail = new MesNoteDetailExchangeDto()
+ {
+ ItemCode = Frozen.mesout_frozen_part,
+ Qty = Frozen.mesout_frozen_num,
+ ToLocationErpCode = Frozen.mesout_frozen_type == "0"? holdLocationCode : Frozen.mesout_frozen_loc,
+ FromLocationErpCode = Frozen.mesout_frozen_type != "0"? holdLocationCode:Frozen.mesout_frozen_loc,
+ ToStatus= Frozen.mesout_frozen_type == "0"? EnumInventoryStatus.HOLD: EnumInventoryStatus.OK,
+ FromStatus = Frozen.mesout_frozen_type != "0" ? EnumInventoryStatus.HOLD : EnumInventoryStatus.OK,
+ };
+ mesNote.Detail = mesNoteDetail;
+ return mesNote;
+ }
+
+}
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 f54234061..c9b2af73c 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
@@ -45,21 +45,21 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
return;
}
- Logger.LogInformation($"Read MesOut");//缴库
- var mesOutReader = workerContext.ServiceProvider.GetRequiredService();
- var mesOutConverter = workerContext.ServiceProvider.GetRequiredService();
- var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService();
- //读取mes缴库
- var mesOutsFromExternalList = await mesOutReader.ReadAsync().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 MesOut");//缴库
+ //var mesOutReader = workerContext.ServiceProvider.GetRequiredService();
+ //var mesOutConverter = workerContext.ServiceProvider.GetRequiredService();
+ //var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService();
+ ////读取mes缴库
+ //var mesOutsFromExternalList = await mesOutReader.ReadAsync().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");//拉动任务
@@ -69,7 +69,7 @@ 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();
@@ -96,13 +96,22 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
//await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false);
- Logger.LogInformation($"Read TransferNote");//储位调拨
- var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService();
- // var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService();
+ // 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 transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false);
+ var mesNoteFromExternalList = await FrozenReader.ReadAsync().ConfigureAwait(false);
//转换BackFlush
- await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false);
+ await FrozenConverter.ConvertAsync(mesNoteFromExternalList).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 90be492d5..9d87cae93 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
@@ -194,6 +194,13 @@ public static class IncomingToWmsExtensions
var transferNoteAppService = workerContext.ServiceProvider.GetRequiredService();
await transferNoteAppService.CreateAsync(transferNote).ConfigureAwait(false);
}
+ public static async Task HandleMesNoteAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
+ {
+ var mesNote = JsonSerializer.Deserialize(incomingConverted.DataContent);
+ var mesNoteAppService = workerContext.ServiceProvider.GetRequiredService();
+ await mesNoteAppService.CreateAsync(mesNote).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 c54b9ed90..44f37ee08 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
@@ -190,6 +190,9 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
case EnumIncomingDataType.TransferNote:
await incomingToWms.HandleTransferNoteAsync(workerContext).ConfigureAwait(false);
break;
+ case EnumIncomingDataType.MesNote:
+ await incomingToWms.HandleMesNoteAsync(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/MesNote/MesNoteDetailExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteDetailExchangeDto.cs
new file mode 100644
index 000000000..4283d490f
--- /dev/null
+++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteDetailExchangeDto.cs
@@ -0,0 +1,48 @@
+using System.ComponentModel.DataAnnotations;
+using Win_in.Sfs.Shared.Domain.Shared;
+
+namespace Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
+
+public class MesNoteDetailExchangeDto
+{
+ ///
+ /// 上架单号
+ ///
+ [Display(Name = "移库单号")]
+ public string Number { get; set; }
+ ///
+ /// 物品代码
+ ///
+ [Display(Name = "物品代码")]
+ public string ItemCode { get; set; }
+
+ ///
+ /// 目标ERP库位
+ ///
+ [Display(Name = "目标ERP库位")]
+ public string ToLocationErpCode { get; set; }
+
+ ///
+ /// 来源ERP库位
+ ///
+ [Display(Name = "来源ERP库位")]
+ public string FromLocationErpCode { get; set; }
+
+ ///
+ /// 目标ERP库位
+ ///
+ [Display(Name = "来源库位状态")]
+ public EnumInventoryStatus FromStatus { get; set; }
+
+ ///
+ /// 来源ERP库位
+ ///
+ [Display(Name = "目标库位状态")]
+ public EnumInventoryStatus ToStatus { get; set; }
+
+ ///
+ /// 数量
+ ///
+ [Display(Name = "数量")]
+ public decimal Qty { get; set; }
+}
diff --git a/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteExchangeDto.cs b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteExchangeDto.cs
new file mode 100644
index 000000000..3aa64c617
--- /dev/null
+++ b/be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteExchangeDto.cs
@@ -0,0 +1,47 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
+public class MesNoteExchangeDto
+{
+ ///
+ /// 上架单号
+ ///
+ [Display(Name = "移库单号")]
+ public string Number { get; set; }
+ ///
+ /// MES请求单号
+ ///
+ [Display(Name = "MES请求单号")]
+ public string MesRequestNumber { get; set; }
+
+
+ ///
+ /// 生效日期
+ ///
+ [Display(Name = "生效日期")]
+ public DateTime ActiveDate { get; set; } = DateTime.Now.Date;
+
+ ///
+ /// 操作员
+ ///
+ [Display(Name = "操作员")]
+ public string Worker { get; set; }
+
+ ///
+ /// 调拨类型
+ ///
+ [Display(Name = "调拨类型")]
+ public string Type { get; set; }
+
+ ///
+ /// 备注
+ ///
+ [Display(Name = "备注")]
+ public string Remark { get; set; }
+ ///
+ /// 明细列表
+ ///
+ [Display(Name = "明细列表")]
+ public MesNoteDetailExchangeDto 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 9fda24075..e17d7c47d 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
@@ -771,6 +771,76 @@
明细列表
+
+
+ 上架单号
+
+
+
+
+ 物品代码
+
+
+
+
+ 目标ERP库位
+
+
+
+
+ 来源ERP库位
+
+
+
+
+ 目标ERP库位
+
+
+
+
+ 来源ERP库位
+
+
+
+
+ 数量
+
+
+
+
+ 上架单号
+
+
+
+
+ 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 a20feb7dc..c47ac2d27 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
@@ -117,5 +117,9 @@ public enum EnumIncomingDataType
///
/// 储位调拨
///
- TransferNote=28
+ TransferNote=28,
+ ///
+ /// 储位调拨
+ ///
+ MesNote = 29
}
diff --git a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/MesNotes/MesNoteAppService.cs b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/MesNotes/MesNoteAppService.cs
index ab918a9ec..7da94b615 100644
--- a/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/MesNotes/MesNoteAppService.cs
+++ b/be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/MesNotes/MesNoteAppService.cs
@@ -63,7 +63,6 @@ public class MesNoteAppService :
{
var fromLocation=await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
var toLocation =await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
- var itemBasicDto =await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
if (fromLocation == null)
{
throw new UserFriendlyException($"来源库位为空");
@@ -81,9 +80,6 @@ public class MesNoteAppService :
detail.ToLocationErpCode = toLocation.ErpLocationCode;
detail.ToLocationGroup = toLocation.LocationGroupCode;
detail.ToWarehouseCode = toLocation.WarehouseCode;
- detail.ToStatus = detail.FromStatus;
- detail.Uom = itemBasicDto.BasicUom;
- detail.StdPackQty = itemBasicDto.StdPackQty;
#region 添加校验
@@ -91,7 +87,7 @@ public class MesNoteAppService :
rInput.ItemCode = detail.ItemCode;
rInput.Locations = new List() { detail.FromLocationCode };
rInput.Qty = detail.Qty;
- rInput.Statuses = new List { EnumInventoryStatus.OK };
+ rInput.Statuses = new List { detail.FromStatus };
var balanceLst = await _balanceAppService.GetRecommendBalancesByLocationsAsync(rInput).ConfigureAwait(false);
var first = balanceLst.FirstOrDefault();
if (first != null)