Browse Source

mes冻结接口开发调试

dev_DY_CC
lvzb 1 year ago
parent
commit
e88f819fbc
  1. 49
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs
  2. 45
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/FrozenManager.cs
  3. 10
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenManager.cs
  4. 7
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenRepository.cs
  5. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs
  6. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs
  7. 30
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenDbContextModelCreatingExtensions.cs
  8. 12
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenEfCoreRepository.cs
  9. 3
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs
  10. 3
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs
  11. 34
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs
  12. 133
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenConverter.cs
  13. 123
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs
  14. 51
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs
  15. 7
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs
  16. 3
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs
  17. 48
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteDetailExchangeDto.cs
  18. 47
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteExchangeDto.cs
  19. 70
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml
  20. 6
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs
  21. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/MesNotes/MesNoteAppService.cs

49
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
{
/// <summary>
/// 序号
/// </summary>
[Key]
public string mesout_frozen_id { get; set; }
/// <summary>
/// 类型
/// </summary>
public string mesout_frozen_type { get; set; }
/// <summary>
/// 物料
/// </summary>
public string mesout_frozen_part { get; set; }
/// <summary>
/// 日期
/// </summary>
public string mesout_frozen_date { get; set; }
/// <summary>
/// 来源库位
/// </summary>
public string mesout_frozen_loc { get; set; }
/// <summary>
/// 冻结原因
/// </summary>
public string mesout_frozen_reason { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal mesout_frozen_num { get; set; }
/// <summary>
/// 冻结用户
/// </summary>
public string mesout_frozen_user { get; set; }
/// <summary>
/// 是否读取(0,1)
/// </summary>
public long Yl1 { get; set; }
public override object[] GetKeys()
{
return new object[] { mesout_frozen_id };
}
}

45
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<List<Frozen>> GetToBeProcessedListAsync()
{
var plans = await _repository.GetListAsync(p => p.Yl1 == 0).ConfigureAwait(false);
return plans;
}
public virtual async Task UpdateProcesseErrordListAsync(List<Frozen> 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<Frozen> 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);
}
}

10
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<List<Frozen>> GetToBeProcessedListAsync();
Task UpdateProcessedListAsync(List<Frozen> entities);
Task UpdateProcesseErrordListAsync(List<Frozen> entities);
}

7
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<Frozen>
{
}

1
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);
}
}

2
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<IIssueRepository, IssueEfCoreRepository>();
context.Services.AddTransient<IBackfluRepository, BackfluEfCoreRepository>();
context.Services.AddTransient<IQtyrfeRepository, QtyrfeEfCoreRepository>();
context.Services.AddTransient<IFrozenRepository, FrozenEfCoreRepository>();
}
}

30
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<Frozen>(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);
});
}
}

12
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<MesDbContext, Frozen>, IFrozenRepository
{
public FrozenEfCoreRepository(IDbContextProvider<MesDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
}

3
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> Backflu { get; }
DbSet<Qtyrfe> Qtyrfe { get; }
DbSet<Frozen> Frozen { get; }
}

3
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> Qtyrfe { get; }
public virtual DbSet<Frozen> Frozen { get; }
public MesDbContext(DbContextOptions<MesDbContext> options)
: base(options)
{

34
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<MesNoteExchangeDto, MesNoteEditInput>()
.Ignore(x => x.Details)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.JobNumber)
.Ignore(x => x.Details)
.Ignore(x => x.ExtraProperties);
;
CreateMap<MesNoteDetailExchangeDto, MesNoteDetailInput>()
.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)
;
}
}

133
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<FrozenConverter> _logger;
public FrozenConverter(
IIncomingToWmsManager incomingToWmsManager
, IObjectMapper objectMapper
, IItemBasicAppService itemBasicAppService
, ILogger<FrozenConverter> logger,
ILocationAppService locationAppService,
IIncomingFromExternalManager incomingFromExternalManager)
{
_incomingToWmsManager = incomingToWmsManager;
_objectMapper = objectMapper;
_itemBasicAppService = itemBasicAppService;
_logger = logger;
_locationAppService = locationAppService;
_incomingFromExternalManager = incomingFromExternalManager;
}
public virtual async Task ConvertAsync(List<IncomingFromExternal> 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<List<IncomingToWms>> BuildIncomingToWmsOfMesNoteAsync(List<IncomingFromExternal> incomingDataList)
{
var incomingToWmsList = new List<IncomingToWms>();
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<MesNoteExchangeDto>(incomingData.DestinationDataContent);
var wmsMesNoteDetail = _objectMapper.Map<MesNoteDetailExchangeDto, MesNoteDetailInput>(exchangeMesNote.Detail);
var wmsMesNote = _objectMapper.Map<MesNoteExchangeDto, MesNoteEditInput>(exchangeMesNote);
wmsMesNote.Details = new List<MesNoteDetailInput>();
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;
}
}

123
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<FrozenReader> _logger;
private readonly ILocationAppService _locationAppService;
public FrozenReader(
IFrozenManager pillTaskManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<FrozenReader> logger
, ILocationAppService locationAppService
)
{
_FrozenManager = pillTaskManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
_locationAppService = locationAppService;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从MES读取待处理Frozen
var toBeProcessedPillTasks = await _FrozenManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedPillTasks.Any())
{
_logger.LogInformation("no Frozens");
return new List<IncomingFromExternal>();
}
//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<IncomingFromExternal> BuildIncomingFromExternalFromPillTaskAsync(List<Frozen> toBeProcessedFrozens,string holdLocationCode)
{
var incomingDataList = new List<IncomingFromExternal>();
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;
}
}

51
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<MesOutReader>();
var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>();
var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
//读取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<MesOutReader>();
//var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>();
//var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
////读取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<ScrapReader>();
//var scrapConverter = workerContext.ServiceProvider.GetRequiredService<ScrapConverter>();
@ -96,13 +96,22 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
//await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read TransferNote");//储位调拨
var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService<QtyrfeReader>();
// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
// Logger.LogInformation($"Read TransferNote");//储位调拨
// var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService<QtyrfeReader>();
//// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
// //读取并保存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<FrozenReader>();
var FrozenConverter = workerContext.ServiceProvider.GetRequiredService<FrozenConverter>();
//读取并保存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}");
}

7
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs

@ -194,6 +194,13 @@ public static class IncomingToWmsExtensions
var transferNoteAppService = workerContext.ServiceProvider.GetRequiredService<ITransferNoteAppService>();
await transferNoteAppService.CreateAsync(transferNote).ConfigureAwait(false);
}
public static async Task HandleMesNoteAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{
var mesNote = JsonSerializer.Deserialize<MesNoteEditInput>(incomingConverted.DataContent);
var mesNoteAppService = workerContext.ServiceProvider.GetRequiredService<IMesNoteAppService>();
await mesNoteAppService.CreateAsync(mesNote).ConfigureAwait(false);
}
public static async Task HandleScrapsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{
var scrap = JsonSerializer.Deserialize<ScrapNoteEditInput>(incomingConverted.DataContent);

3
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();

48
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
{
/// <summary>
/// 上架单号
/// </summary>
[Display(Name = "移库单号")]
public string Number { get; set; }
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
public string ItemCode { get; set; }
/// <summary>
/// 目标ERP库位
/// </summary>
[Display(Name = "目标ERP库位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 来源ERP库位
/// </summary>
[Display(Name = "来源ERP库位")]
public string FromLocationErpCode { get; set; }
/// <summary>
/// 目标ERP库位
/// </summary>
[Display(Name = "来源库位状态")]
public EnumInventoryStatus FromStatus { get; set; }
/// <summary>
/// 来源ERP库位
/// </summary>
[Display(Name = "目标库位状态")]
public EnumInventoryStatus ToStatus { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
}

47
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
{
/// <summary>
/// 上架单号
/// </summary>
[Display(Name = "移库单号")]
public string Number { get; set; }
/// <summary>
/// MES请求单号
/// </summary>
[Display(Name = "MES请求单号")]
public string MesRequestNumber { get; set; }
/// <summary>
/// 生效日期
/// </summary>
[Display(Name = "生效日期")]
public DateTime ActiveDate { get; set; } = DateTime.Now.Date;
/// <summary>
/// 操作员
/// </summary>
[Display(Name = "操作员")]
public string Worker { get; set; }
/// <summary>
/// 调拨类型
/// </summary>
[Display(Name = "调拨类型")]
public string Type { get; set; }
/// <summary>
/// 备注
/// </summary>
[Display(Name = "备注")]
public string Remark { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public MesNoteDetailExchangeDto Detail { get; set; } = new();
}

70
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml

@ -771,6 +771,76 @@
明细列表
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.Number">
<summary>
上架单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.ItemCode">
<summary>
物品代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.ToLocationErpCode">
<summary>
目标ERP库位
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.FromLocationErpCode">
<summary>
来源ERP库位
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.FromStatus">
<summary>
目标ERP库位
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.ToStatus">
<summary>
来源ERP库位
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.Qty">
<summary>
数量
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Number">
<summary>
上架单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.MesRequestNumber">
<summary>
MES请求单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.ActiveDate">
<summary>
生效日期
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Worker">
<summary>
操作员
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Type">
<summary>
调拨类型
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Remark">
<summary>
备注
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Detail">
<summary>
明细列表
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ProductionReturnNote.ProductionReturnNoteDetailExchangeDto.Number">
<summary>
上架单号

6
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs

@ -117,5 +117,9 @@ public enum EnumIncomingDataType
/// <summary>
/// 储位调拨
/// </summary>
TransferNote=28
TransferNote=28,
/// <summary>
/// 储位调拨
/// </summary>
MesNote = 29
}

6
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<string>() { detail.FromLocationCode };
rInput.Qty = detail.Qty;
rInput.Statuses = new List<EnumInventoryStatus> { EnumInventoryStatus.OK };
rInput.Statuses = new List<EnumInventoryStatus> { detail.FromStatus };
var balanceLst = await _balanceAppService.GetRecommendBalancesByLocationsAsync(rInput).ConfigureAwait(false);
var first = balanceLst.FirstOrDefault();
if (first != null)

Loading…
Cancel
Save