Browse Source

质量补接口修改,客户零件添加库位字段

dev_DY_CC
lvzb 1 year ago
parent
commit
0cd718b3d4
  1. 11
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeManager.cs
  2. 7
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeRepository.cs
  3. 50
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/Qtyrfe.cs
  4. 45
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/QtyrfeManager.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. 3
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs
  8. 3
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs
  9. 30
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeDbContextModelCreatingExtensions.cs
  10. 13
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeEfCoreRepository.cs
  11. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes.csproj
  12. 42
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs
  13. 49
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs
  14. 14
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs
  15. 78
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs
  16. 140
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeConverter.cs
  17. 117
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeReader.cs
  18. 14
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json
  19. 2
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs
  20. 18
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs
  21. 5
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs
  22. 16
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json
  23. 13
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteDetailExchangeDto.cs
  24. 10
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteExchangeDto.cs
  25. 20
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml
  26. 4
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs
  27. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/DTOs/CustomerItemDTO.cs
  28. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/ICustomerItemAppService.cs
  29. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemEditInput.cs
  30. 10
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemImportInput.cs
  31. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Bases/SfsBaseDataAppServiceBase.cs
  32. 17
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/CustomerItems/CustomerItemAppService.cs
  33. 6
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/CustomerItems/CustomerItem.cs
  34. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/CustomerItems/CustomerItemDbContextModelCreatingExtensions.cs
  35. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs

11
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeManager.cs

@ -0,0 +1,11 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
public interface IQtyrfeManager : IDomainService
{
Task<List<Qtyrfe>> GetToBeProcessedListAsync();
Task UpdateProcessedListAsync(List<Qtyrfe> entities);
Task UpdateProcesseErrordListAsync(List<Qtyrfe> entities);
}

7
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeRepository.cs

@ -0,0 +1,7 @@
using Volo.Abp.Domain.Repositories;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
public interface IQtyrfeRepository : IRepository<Qtyrfe>
{
}

50
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/Qtyrfe.cs

@ -0,0 +1,50 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
public class Qtyrfe : Entity
{
/// <summary>
/// 序号
/// </summary>
[Key]
public string mesout_qtyrfe_id { get; set; }
/// <summary>
/// 物料
/// </summary>
public string mesout_qtyrfe_part { get; set; }
/// <summary>
/// 调出储位
/// </summary>
public string mesout_qtyrfe_loc_from { get; set; }
/// <summary>
/// 调入储位
/// </summary>
public string mesout_qtyrfe_loc_to { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal mesout_qtyrfe_num { get; set; }
/// <summary>
/// 调拨用户
/// </summary>
public string mesout_qtyrfe_user { get; set; }
/// <summary>
/// 写入时间
/// </summary>
public string mesout_qtyrfe_wt { get; set; }
/// <summary>
/// 类型(1为质量补)
/// </summary>
public string mesout_qtyrfe_type { get; set; }
public override object[] GetKeys()
{
return new object[] { mesout_qtyrfe_id };
}
/// <summary>
/// 是否读取(0,1)
/// </summary>
public long Yl1 { get; set; }
}

45
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/QtyrfeManager.cs

@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
public class QtyrfeManager : DomainService, IQtyrfeManager
{
private readonly IQtyrfeRepository _repository;
public QtyrfeManager(IQtyrfeRepository repository)
{
_repository = repository;
}
public virtual async Task<List<Qtyrfe>> GetToBeProcessedListAsync()
{
var plans = await _repository.GetListAsync(p => p.Yl1 == 0).ConfigureAwait(false);
return plans;
}
public virtual async Task UpdateProcesseErrordListAsync(List<Qtyrfe> entities)
{
var ids = entities.Select(p => p.mesout_qtyrfe_id);
var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_qtyrfe_id)).ConfigureAwait(false);
plans.ForEach(p =>
{
p.Yl1 = 2;
// p.WmsDate = Clock.Now;
});
await _repository.UpdateManyAsync(plans).ConfigureAwait(false);
}
public virtual async Task UpdateProcessedListAsync(List<Qtyrfe> entities)
{
var ids = entities.Select(p => p.mesout_qtyrfe_id);
var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_qtyrfe_id)).ConfigureAwait(false);
plans.ForEach(p =>
{
p.Yl1 = 1;
// p.WmsDate = Clock.Now;
});
await _repository.UpdateManyAsync(plans).ConfigureAwait(false);
}
}

1
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs

@ -27,5 +27,6 @@ public static class DataExchangeDbContextModelCreatingExtensions
builder.ConfigureScrap(options);
builder.ConfigurePck(options);
builder.ConfigureBackflu(options);
builder.ConfigureQtyrfe(options);
}
}

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs

@ -6,6 +6,7 @@ using Volo.Abp.Modularity;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
@ -32,5 +33,6 @@ public class DataExchangeEntityFrameworkCoreFawtygModule : AbpModule
context.Services.AddTransient<IScrapRepository, ScrapEfCoreRepository>();
context.Services.AddTransient<IIssueRepository, IssueEfCoreRepository>();
context.Services.AddTransient<IBackfluRepository, BackfluEfCoreRepository>();
context.Services.AddTransient<IQtyrfeRepository, QtyrfeEfCoreRepository>();
}
}

3
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs

@ -4,6 +4,7 @@ using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
@ -20,4 +21,6 @@ public interface IMesDbContext : IEfCoreDbContext
DbSet<MesOut> MesOuts { get; }
DbSet<PullTask> PullTasks { get; }
DbSet<Backflu> Backflu { get; }
DbSet<Qtyrfe> Qtyrfe { get; }
}

3
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs

@ -4,6 +4,7 @@ using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
@ -22,6 +23,8 @@ public class MesDbContext :
public virtual DbSet<IssueNote> Issue { get; }
public virtual DbSet<Backflu> Backflu { get; }
public virtual DbSet<Qtyrfe> Qtyrfe { get; }
public MesDbContext(DbContextOptions<MesDbContext> options)
: base(options)
{

30
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeDbContextModelCreatingExtensions.cs

@ -0,0 +1,30 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
public static class QtyrfeDbContextModelCreatingExtensions
{
public static void ConfigureQtyrfe(this ModelBuilder builder, MesModelBuilderConfigurationOptions options)
{
builder.Entity<Qtyrfe>(b =>
{
//Configure table & schema Name
b.ToTable(options.TablePrefix + "mesout_qtyrfe", options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Properties
b.Property(q => q.mesout_qtyrfe_id).HasMaxLength(20);
b.Property(q => q.mesout_qtyrfe_part).HasMaxLength(20);
b.Property(q => q.mesout_qtyrfe_loc_from).HasMaxLength(10);
b.Property(q => q.mesout_qtyrfe_loc_to).HasMaxLength(10);
b.Property(q => q.mesout_qtyrfe_num).HasPrecision(10, 2);
b.Property(q => q.mesout_qtyrfe_user).HasMaxLength(20);
b.Property(q => q.mesout_qtyrfe_wt).HasMaxLength(20);
b.Property(q => q.mesout_qtyrfe_type).HasMaxLength(2);
b.Property(q => q.Yl1);
});
}
}

13
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeEfCoreRepository.cs

@ -0,0 +1,13 @@
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
public class QtyrfeEfCoreRepository : EfCoreRepository<MesDbContext, Qtyrfe>, IQtyrfeRepository
{
public QtyrfeEfCoreRepository(IDbContextProvider<MesDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
}

2
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes.csproj

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>

42
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs

@ -7,6 +7,7 @@ using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest;
using Win_in.Sfs.Wms.DataExchange.WMS.PCK;
using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote;
using Win_in.Sfs.Wms.DataExchange.WMS.ScrapNote;
using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent;
@ -177,5 +178,46 @@ public class FawtygAutoMapperProfile : Profile
.Ignore(x => x.Uom)
.Ignore(x => x.StdPackQty)
;
CreateMap<TransferNoteExchangeDto, TransferNoteEditInput>()
.Ignore(x => x.Details)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.RequestNumber)
.Ignore(x => x.JobNumber)
.Ignore(x => x.CallRequestNumber)
.Ignore(x => x.CallJobNumber)
.Ignore(x => x.CallBusinessType)
.Ignore(x => x.CallServerName)
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Confirmed)
.Ignore(x => x.ConfirmTime)
.Ignore(x => x.Details)
.Ignore(x => x.ExtraProperties);
;
CreateMap<TransferNoteDetailExchangeDto, TransferNoteDetailInput>()
.Ignore(x => x.ItemName)
.Ignore(x => x.ItemDesc1)
.Ignore(x => x.ItemDesc2)
.Ignore(x => x.FromLocationCode)
.Ignore(x => x.FromLocationArea)
.Ignore(x => x.FromLocationGroup)
.Ignore(x => x.FromContainerCode)
.Ignore(x => x.FromWarehouseCode)
.Ignore(x => x.FromLot)
.Ignore(x => x.FromPackingCode)
.Ignore(x => x.ToPackingCode)
.Ignore(x => x.ToContainerCode)
.Ignore(x => x.ToLocationCode)
.Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ToWarehouseCode)
.Ignore(x => x.ToLot)
.Ignore(x => x.SupplierBatch)
.Ignore(x => x.ArriveDate)
.Ignore(x => x.ProduceDate)
.Ignore(x => x.ExpireDate)
.Ignore(x => x.Uom)
.Ignore(x => x.StdPackQty)
;
}
}

49
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs

@ -1,4 +1,5 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
@ -6,6 +7,7 @@ using Microsoft.Extensions.Options;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Threading;
using Volo.Abp.Uow;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent;
@ -46,10 +48,18 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
Logger.LogInformation($"Read MesOut");//缴库
var mesOutReader = workerContext.ServiceProvider.GetRequiredService<MesOutReader>();
var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>();
//读取并保存MesOut
var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
//读取mes缴库
var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false);
//转换MesOut
await mesOutConverter.ConvertAsync(mesOutsFromExternalList).ConfigureAwait(false);
var mesOutsFromExternalList_ProductReceipt = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.ProductReceipt.ToString()).ToList();
var mesOutsFromExternalList_TransferNote = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.TransferNote.ToString()).ToList();
//转换缴库数据(如果有质量补得数据直接生产移库数据移到客户库位)
await mesOutConverter.ConvertAsync(mesOutsFromExternalList_ProductReceipt).ConfigureAwait(false);
if (mesOutsFromExternalList_TransferNote.Count > 0)
{
await TransferNoteConverter.ConvertAsync(mesOutsFromExternalList_TransferNote).ConfigureAwait(false);
}
//上海和安徽无此接口
//Logger.LogInformation($"Read PullTask");//拉动任务
@ -59,14 +69,14 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
//var pullTaskFromExternalList = await pullTaskReader.ReadAsync().ConfigureAwait(false);
////转换PullTask
//await pullTaskConverter.ConvertAsync(pullTaskFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read Scrap");
//Logger.LogInformation($"Read Scrap");
var scrapReader = workerContext.ServiceProvider.GetRequiredService<ScrapReader>();
var scrapConverter = workerContext.ServiceProvider.GetRequiredService<ScrapConverter>();
//读取并保存Scrap
var scrapsFromExternalList = await scrapReader.ReadAsync().ConfigureAwait(false);
//转换Scrap
await scrapConverter.ConvertAsync(scrapsFromExternalList).ConfigureAwait(false);
//var scrapReader = workerContext.ServiceProvider.GetRequiredService<ScrapReader>();
//var scrapConverter = workerContext.ServiceProvider.GetRequiredService<ScrapConverter>();
////读取并保存Scrap
//var scrapsFromExternalList = await scrapReader.ReadAsync().ConfigureAwait(false);
////转换Scrap
//await scrapConverter.ConvertAsync(scrapsFromExternalList).ConfigureAwait(false);
//上海和安徽无此接口
//Logger.LogInformation($"Read Issue");
@ -77,13 +87,22 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
////转换Pck
//await pckConverter.ConvertAsync(pcksFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read BackFlush");//耗用单
var BackFlushReader = workerContext.ServiceProvider.GetRequiredService<BackFluReader>();
var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService<BackFluConverter>();
//Logger.LogInformation($"Read BackFlush");//耗用单
//var BackFlushReader = workerContext.ServiceProvider.GetRequiredService<BackFluReader>();
//var BackFlushConverter = workerContext.ServiceProvider.GetRequiredService<BackFluConverter>();
////读取并保存BackFlush
//var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false);
////转换BackFlush
//await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read TransferNote");//储位调拨
var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService<QtyrfeReader>();
// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
//读取并保存BackFlush
var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false);
var transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false);
//转换BackFlush
await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false);
await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Completed: Handling {Incoming}");
}

14
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs

@ -89,7 +89,7 @@ public class MesOutConverter : IIncomingConverter
var productReceiptNote = JsonSerializer.Deserialize<ProductReceiptNoteExchangeDto>(incomingFromExternal.DestinationDataContent);
var wmsProductReceiptNoteDetail = _objectMapper.Map<ProductReceiptNoteDetailExchangeDto, ProductReceiptNoteDetailInput>(productReceiptNote.Detail);
var oldNoteDetail = wmsProductReceiptNote.Details.FirstOrDefault(r => r.ItemCode == wmsProductReceiptNoteDetail.ItemCode && r.LocationErpCode == wmsProductReceiptNoteDetail.LocationErpCode && (first.TableType != EnumExchangeTableType.MainTable ? true : r.ReturnQty != 0));
var oldNoteDetail = wmsProductReceiptNote.Details.FirstOrDefault(r =>r.MesQuality== wmsProductReceiptNoteDetail.MesQuality&& r.ItemCode == wmsProductReceiptNoteDetail.ItemCode && r.LocationErpCode == wmsProductReceiptNoteDetail.LocationErpCode && (first.TableType != EnumExchangeTableType.MainTable ? true : r.ReturnQty != 0));
sumdetail.itemCode = wmsProductReceiptNoteDetail.ItemCode;
sumdetail.locationCode = wmsProductReceiptNoteDetail.LocationErpCode;
@ -111,6 +111,11 @@ public class MesOutConverter : IIncomingConverter
wmsProductReceiptNoteDetail.WarehouseCode = "T8";
wmsProductReceiptNoteDetail.LocationArea = "";
wmsProductReceiptNoteDetail.LocationGroup = "";
if (wmsProductReceiptNoteDetail.MesQuality=="1")//质量补
{
wmsProductReceiptNoteDetail.Lot = "RFE"; //质量补排序批次
wmsProductReceiptNoteDetail.PackingCode = "RFE";//质量补箱标签
}
var loc = await _locationAppService.GetListByTypesAndErpCodeAsync(types, wmsProductReceiptNoteDetail.LocationErpCode, wmsProductReceiptNoteDetail.LocationErpCode).ConfigureAwait(false);
if (loc != null)
{
@ -123,13 +128,16 @@ public class MesOutConverter : IIncomingConverter
wmsProductReceiptNoteDetail.HandledToLocationArea = loc[0].AreaCode;
wmsProductReceiptNoteDetail.HandledToLocationGroup = loc[0].LocationGroupCode;
wmsProductReceiptNoteDetail.HandledToLocationErpCode = loc[0].ErpLocationCode;
wmsProductReceiptNoteDetail.HandledPackingCode = wmsProductReceiptNoteDetail.PackingCode;
wmsProductReceiptNoteDetail.HandledLot = wmsProductReceiptNoteDetail.Lot;
wmsProductReceiptNoteDetail.RecommendToLocationCode = loc[0].Code;
wmsProductReceiptNoteDetail.RecommendToLocationArea = loc[0].AreaCode;
wmsProductReceiptNoteDetail.RecommendToLocationGroup = loc[0].LocationGroupCode;
wmsProductReceiptNoteDetail.RecommendToLocationErpCode = loc[0].ErpLocationCode;
wmsProductReceiptNoteDetail.RecommendPackingCode = wmsProductReceiptNoteDetail.PackingCode;
wmsProductReceiptNoteDetail.RecommendLot = wmsProductReceiptNoteDetail.Lot;
}
var item = await _itemBasicAppService.GetByCodeAsync(wmsProductReceiptNoteDetail.ItemCode).ConfigureAwait(false);
if (item != null)
{
@ -137,7 +145,7 @@ public class MesOutConverter : IIncomingConverter
wmsProductReceiptNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsProductReceiptNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsProductReceiptNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
wmsProductReceiptNoteDetail.StdPackQty = item.StdPackQty;
wmsProductReceiptNoteDetail.ProduceDate = incomingFromExternal.EffectiveDate;
wmsProductReceiptNoteDetail.ArriveDate = incomingFromExternal.EffectiveDate;
wmsProductReceiptNoteDetail.ExpireDate = wmsProductReceiptNoteDetail.ProduceDate.AddDays(item.GetValidateDays());

78
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs

@ -8,8 +8,10 @@ using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote;
using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent;
@ -19,17 +21,20 @@ public class MesOutReader : IReader
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<MesOutReader> _logger;
private readonly ILocationAppService _locationAppService;
private readonly ICustomerItemAppService _customerItemAppService;
public MesOutReader(
IMesOutManager mesOutManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<MesOutReader> logger
, ILocationAppService locationAppService
, ICustomerItemAppService customerItemAppService
)
{
_mesOutManager = mesOutManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
_locationAppService = locationAppService;
_customerItemAppService = customerItemAppService;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
@ -51,7 +56,7 @@ public class MesOutReader : IReader
await _mesOutManager.UpdateProcesseErrordListAsync(toBeProcessedEroMwsOuts).ConfigureAwait(false);
}
//MesOut逐一转换为ProductReceiptNote
var incomingDataList = BuildIncomingFromExternalFromShipAsync(toBeProcessedMwsOuts);
var incomingDataList =await BuildIncomingFromExternalFromShipAsync(toBeProcessedMwsOuts).ConfigureAwait(false);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
//更新MES数据状态
await _mesOutManager.UpdateProcessedListAsync(toBeProcessedMwsOuts).ConfigureAwait(false);
@ -59,13 +64,12 @@ public class MesOutReader : IReader
return incomingDataList;
}
private static List<IncomingFromExternal> BuildIncomingFromExternalFromShipAsync(List<MesOut> toBeProcessedMesOuts)
private async Task<List<IncomingFromExternal>> BuildIncomingFromExternalFromShipAsync(List<MesOut> toBeProcessedMesOuts)
{
var incomingDataList = new List<IncomingFromExternal>();
foreach (var mesOut in toBeProcessedMesOuts)
{
var incomingData = BuildIncomingFromExternal(mesOut);
incomingData.SetEffectiveDate(DateTime.ParseExact(mesOut.Mesout_date, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture));
incomingData.SetSuccess();
try
@ -79,7 +83,29 @@ public class MesOutReader : IReader
}
incomingDataList.Add(incomingData);
if (mesOut.Mesout_quality == "1")
{
//查询零件对应的客户库位
string locationCode = await _customerItemAppService.GetFirstLocationCodeByItemCode(mesOut.Mesout_part).ConfigureAwait(false);
if (!string.IsNullOrEmpty(locationCode))
{
var incomingData_TransferNote = BuildIncomingFromExternal_TransferNote(mesOut);
incomingData_TransferNote.SetEffectiveDate(DateTime.ParseExact(mesOut.Mesout_date, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture));
incomingData_TransferNote.SetSuccess();
try
{
var transferNote = BuildTransferNoteCreateInput(mesOut, locationCode);
incomingData_TransferNote.DestinationDataContent = JsonSerializer.Serialize(transferNote);
}
catch (Exception ex)
{
incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString());
}
incomingDataList.Add(incomingData_TransferNote);
}
}
}
return incomingDataList;
@ -126,7 +152,6 @@ public class MesOutReader : IReader
}
return incomingData;
}
private static ProductReceiptNoteExchangeDto BuildProductReceiptNoteCreateInput(MesOut mesOut)
{
var productReceiptNote = new ProductReceiptNoteExchangeDto()
@ -141,10 +166,53 @@ public class MesOutReader : IReader
Qty = mesOut.Mesout_move,
LocationErpCode = mesOut.Mesout_loc,
Remark = mesOut.memo,
ReturnQty = mesOut.Mesout_bad
ReturnQty = mesOut.Mesout_bad,
MesBarCode = mesOut.Mesout_barcode,
MesQuality = mesOut.Mesout_quality
};
productReceiptNote.Detail = productReceiptNoteDetail;
return productReceiptNote;
}
private static IncomingFromExternal BuildIncomingFromExternal_TransferNote(MesOut mesOut)
{
var incomingData = new IncomingFromExternal()
{
DataType = EnumIncomingDataType.TransferNote.ToString(),
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.MES.ToString(),
SourceDataId = mesOut.Mesout_ref_nbr.ToString(),
SourceDataGroupCode = mesOut.Mesout_ref_nbr,
SourceDataDetailCode = mesOut.Mesout_part,
SourceDataContent = JsonSerializer.Serialize(mesOut),
WriteTime = DateTime.Now,
Writer = nameof(MesIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.WMS.ToString(),
};
return incomingData;
}
private static TransferNoteExchangeDto BuildTransferNoteCreateInput(MesOut mesOut,string toLocationCode)
{
var transferNote = new TransferNoteExchangeDto()
{
Worker = "MesJK",
Remark="质量补移库"
};
var transferNoteDetail = new TransferNoteDetailExchangeDto()
{
ItemCode = mesOut.Mesout_part,
Qty = mesOut.Mesout_move,
ToLocationErpCode = toLocationCode,
FromLocationErpCode = mesOut.Mesout_loc,
PackingCode="RFE",
Lot = "RFE",
};
transferNote.Detail = transferNoteDetail;
return transferNote;
}
}

140
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeConverter.cs

@ -0,0 +1,140 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class QtyrfeConverter : IIncomingConverter
{
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly IIncomingToWmsManager _incomingToWmsManager;
private readonly IObjectMapper _objectMapper;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly ILocationAppService _locationAppService;
private readonly ILogger<QtyrfeConverter> _logger;
public QtyrfeConverter(
IIncomingToWmsManager incomingToWmsManager
, IObjectMapper objectMapper
, IItemBasicAppService itemBasicAppService
, ILogger<QtyrfeConverter> 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 Qtyrfes");
return;
}
//按Number合并TransferNote单据
var transferNoteList = await BuildIncomingToWmsOfTransferNoteAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateManyAsync(transferNoteList).ConfigureAwait(false);
//归档
await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false);
}
private async Task<List<IncomingToWms>> BuildIncomingToWmsOfTransferNoteAsync(List<IncomingFromExternal> incomingDataList)
{
var incomingToWmsList = new List<IncomingToWms>();
var groups = incomingDataList.GroupBy(p => p.SourceDataGroupCode);
foreach (var group in groups)
{
var first = group.First();
var incomingToWms = new IncomingToWms()
{
DataType = first.DataType,
DataAction = first.DataAction,
SourceSystem = first.SourceSystem,
DataIdentityCode = first.SourceDataGroupCode,
};
incomingToWms.SetEffectiveDate(first.EffectiveDate);
var exchangeTransferNote = JsonSerializer.Deserialize<TransferNoteExchangeDto>(first.DestinationDataContent);
var wmsTransferNote = _objectMapper.Map<TransferNoteExchangeDto, TransferNoteEditInput>(exchangeTransferNote);
wmsTransferNote.Type = EnumTransSubType.Transfer_Area.ToString();//客户储位调拨
wmsTransferNote.Details = new List<TransferNoteDetailInput>();
foreach (var incomingFromExternal in group.ToList())
{
var transferNote = JsonSerializer.Deserialize<TransferNoteExchangeDto>(incomingFromExternal.DestinationDataContent);
var wmsTransferNoteDetail = _objectMapper.Map<TransferNoteDetailExchangeDto, TransferNoteDetailInput>(transferNote.Detail);
var item = await _itemBasicAppService.GetByCodeAsync(wmsTransferNoteDetail.ItemCode).ConfigureAwait(false);
var tolocation=await _locationAppService.GetByCodeAsync(wmsTransferNoteDetail.ToLocationErpCode).ConfigureAwait(false);
var fromlocation = await _locationAppService.GetByCodeAsync(wmsTransferNoteDetail.FromLocationErpCode).ConfigureAwait(false);
try
{
wmsTransferNoteDetail.FromPackingCode = "";
wmsTransferNoteDetail.ToPackingCode = "";
wmsTransferNoteDetail.FromLot = "";
wmsTransferNoteDetail.ToLot = "";
wmsTransferNoteDetail.FromStatus = EnumInventoryStatus.OK;
wmsTransferNoteDetail.ToStatus = EnumInventoryStatus.OK;
if (transferNote.Remark.Contains("质量补移库"))//质量补
{
wmsTransferNoteDetail.FromPackingCode = "RFE"; //质量补排序批次
wmsTransferNoteDetail.FromLot = "RFE";//质量补箱标签
wmsTransferNoteDetail.ToPackingCode = "RFE"; //质量补排序批次
wmsTransferNoteDetail.ToLot = "RFE";//质量补箱标签
}
if (item != null)
{
wmsTransferNoteDetail.ItemName = item.Name;
wmsTransferNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsTransferNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsTransferNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
wmsTransferNoteDetail.StdPackQty = item.StdPackQty;
}
if (tolocation != null)
{
wmsTransferNoteDetail.ToLocationCode = tolocation.Code;
wmsTransferNoteDetail.ToLocationArea = tolocation.AreaCode;
wmsTransferNoteDetail.ToLocationGroup = tolocation.LocationGroupCode;
wmsTransferNoteDetail.ToWarehouseCode = tolocation.WarehouseCode;
if (tolocation.Type== EnumLocationType.CUST)
{
wmsTransferNote.Type = EnumTransSubType.Transfer_Customer.ToString();//客户储位调拨
}
}
if (fromlocation!=null)
{
wmsTransferNoteDetail.FromLocationCode = fromlocation.Code;
wmsTransferNoteDetail.FromLocationArea = fromlocation.AreaCode;
wmsTransferNoteDetail.FromLocationGroup = fromlocation.LocationGroupCode;
wmsTransferNoteDetail.FromWarehouseCode = fromlocation.WarehouseCode;
}
}
catch (Exception)
{
wmsTransferNoteDetail.ItemName = "";
wmsTransferNoteDetail.ItemDesc1 = "";
wmsTransferNoteDetail.ItemDesc2 = "";
wmsTransferNoteDetail.Uom = "";
}
wmsTransferNote.Details.Add(wmsTransferNoteDetail);
}
incomingToWms.DataContent = JsonSerializer.Serialize(wmsTransferNote);
incomingToWmsList.Add(incomingToWms);
}
return incomingToWmsList;
}
}

117
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeReader.cs

@ -0,0 +1,117 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest;
using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class QtyrfeReader : IReader
{
private readonly IQtyrfeManager _QtyrfeManager;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<QtyrfeReader> _logger;
public QtyrfeReader(
IQtyrfeManager pillTaskManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<QtyrfeReader> logger
)
{
_QtyrfeManager = pillTaskManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从MES读取待处理Qtyrfe
var toBeProcessedPillTasks = await _QtyrfeManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedPillTasks.Any())
{
_logger.LogInformation("no Qtyrfes");
return new List<IncomingFromExternal>();
}
//Qtyrfe逐一转换为MaterialRequest
var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
//更新MES数据状态
await _QtyrfeManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false);
return incomingDataList;
}
private static List<IncomingFromExternal> BuildIncomingFromExternalFromPillTaskAsync(List<Qtyrfe> toBeProcessedQtyrfes)
{
var incomingDataList = new List<IncomingFromExternal>();
foreach (var Qtyrfe in toBeProcessedQtyrfes)
{
var incomingData = BuildIncomingFromExternal(Qtyrfe);
incomingData.SetEffectiveDate(DateTime.Now);
incomingData.SetSuccess();
try
{
var MaterialRequest = BuildTransferNoteCreateInput(Qtyrfe);
incomingData.DestinationDataContent = JsonSerializer.Serialize(MaterialRequest);
}
catch (Exception ex)
{
incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString());
}
incomingDataList.Add(incomingData);
}
return incomingDataList;
}
private static IncomingFromExternal BuildIncomingFromExternal(Qtyrfe Qtyrfe)
{
var incomingData = new IncomingFromExternal()
{
DataType = EnumIncomingDataType.TransferNote.ToString(),
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.MES.ToString(),
SourceDataId = Qtyrfe.mesout_qtyrfe_id.ToString(),
SourceDataGroupCode = Qtyrfe.mesout_qtyrfe_id,
SourceDataDetailCode = Qtyrfe.mesout_qtyrfe_part,
SourceDataContent = JsonSerializer.Serialize(Qtyrfe),
WriteTime = DateTime.Now,
Writer = nameof(MesIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.WMS.ToString(),
};
return incomingData;
}
private static TransferNoteExchangeDto BuildTransferNoteCreateInput(Qtyrfe Qtyrfe)
{
var transferNote = new TransferNoteExchangeDto()
{
Worker = Qtyrfe.mesout_qtyrfe_user,
Remark = ""
};
if (Qtyrfe.mesout_qtyrfe_type == "1")
{
transferNote.Remark = "质量补移库";
}
var transferNoteDetail = new TransferNoteDetailExchangeDto()
{
ItemCode = Qtyrfe.mesout_qtyrfe_part,
Qty =Qtyrfe.mesout_qtyrfe_num,
ToLocationErpCode = Qtyrfe.mesout_qtyrfe_loc_to,
FromLocationErpCode = Qtyrfe.mesout_qtyrfe_loc_from,
};
transferNote.Detail = transferNoteDetail;
return transferNote;
}
}

14
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json

@ -1,12 +1,12 @@
{
"ConnectionStrings": {
"Default": "Server=10.164.113.32,1818\\SHDB;Database=Wms_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True;Encrypt=false",
"DataExchange": "Server=10.164.113.32,1818\\SHDB;Database=Wms_DataExchange_Main_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True;Encrypt=false",
"MES": "Server=10.164.113.32,1818\\SHDB;Database=MES_SH;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True;Encrypt=false"
"Default": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"DataExchange": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false",
"MES": "Server=dev.ccwin-in.com,13319;Database=MES_SH;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True;Encrypt=false"
},
"AuthServer": {
"Authority": "http://10.164.113.31:60083/",
"Authority": "http://dev.ccwin-in.com:60083/",
"RequireHttpsMetadata": "false",
"SwaggerClientId": "admin",
"SwaggerClientSecret": "1q2w3E*",
@ -24,13 +24,13 @@
"RemoteServices": {
"BaseData": {
"BaseUrl": "http://10.164.113.31:60084/"
"BaseUrl": "http://dev.ccwin-in.com:60084/"
},
"Store": {
"BaseUrl": "http://10.164.113.31:60085/"
"BaseUrl": "http://dev.ccwin-in.com:60085/"
},
"Label": {
"BaseUrl": "http://10.164.113.31:60082/"
"BaseUrl": "http://dev.ccwin-in.com:60082/"
}
},

2
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs

@ -150,6 +150,6 @@ public class AgentModule : AbpModule
ApplicationInitializationContext context)
{
context.AddBackgroundWorkerAsync<IncomingToWmsWorker>();
context.AddBackgroundWorkerAsync<OutgoingFromWmsWorker>();
// context.AddBackgroundWorkerAsync<OutgoingFromWmsWorker>();
}
}

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

@ -171,10 +171,15 @@ public static class IncomingToWmsExtensions
public static async Task HandleProductReceiptsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{
var productReceipt = JsonSerializer.Deserialize<ProductReceiptNoteEditInput>(incomingConverted.DataContent);
var productReceiptAppService = workerContext.ServiceProvider.GetRequiredService<IProductReceiptNoteAppService>();
//var productReceipt = JsonSerializer.Deserialize<ProductReceiptNoteEditInput>(incomingConverted.DataContent);
//var productReceiptAppService = workerContext.ServiceProvider.GetRequiredService<IProductReceiptNoteAppService>();
await productReceiptAppService.CreateAsync(productReceipt).ConfigureAwait(false);
//await productReceiptAppService.CreateAsync(productReceipt).ConfigureAwait(false);
var productReceipt = JsonSerializer.Deserialize<ProductReceiptNoteEditInput>(incomingConverted.DataContent);
var productReceiptAppService = workerContext.ServiceProvider.GetRequiredService<IProductReceiptNoteAppService>();
List<ProductReceiptNoteEditInput> list = new List<ProductReceiptNoteEditInput>();
list.Add(productReceipt);
await productReceiptAppService.CreateManyAsync(list).ConfigureAwait(false);
}
public static async Task HandleMaterialRequestsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
@ -183,7 +188,12 @@ public static class IncomingToWmsExtensions
var materialRequestAppService = workerContext.ServiceProvider.GetRequiredService<IMaterialRequestAppService>();
await materialRequestAppService.CreateAndHandleByAPIAsync(materialRequest).ConfigureAwait(false);
}
public static async Task HandleTransferNoteAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{
var transferNote = JsonSerializer.Deserialize<TransferNoteEditInput>(incomingConverted.DataContent);
var transferNoteAppService = workerContext.ServiceProvider.GetRequiredService<ITransferNoteAppService>();
await transferNoteAppService.CreateAsync(transferNote).ConfigureAwait(false);
}
public static async Task HandleScrapsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{
var scrap = JsonSerializer.Deserialize<ScrapNoteEditInput>(incomingConverted.DataContent);

5
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs

@ -68,7 +68,7 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
//Do the work
var incomingToWmsList = await incomingToWmsManager.GetToBeProcessedListAsync().ConfigureAwait(false);
foreach (var incomingToWms in incomingToWmsList)
foreach (var incomingToWms in incomingToWmsList.OrderBy(r=>r.CreationTime))
{
try
{
@ -187,6 +187,9 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
// await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false);
await SendBackFlush(workerContext, incomingToWms).ConfigureAwait(false);
break;
case EnumIncomingDataType.TransferNote:
await incomingToWms.HandleTransferNoteAsync(workerContext).ConfigureAwait(false);
break;
case EnumIncomingDataType.None:
default:
throw new ArgumentOutOfRangeException();

16
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json

@ -1,13 +1,13 @@
{
"ConnectionStrings": {
"Default": "Server=10.164.113.32,1818\\SHDB;Database=Wms_DataExchange_Main_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True",
"DataExchange": "Server=10.164.113.32,1818\\SHDB;Database=Wms_DataExchange_Main_Dy_ShangHai;uid=ShWmsUser;pwd=Faty@Wms_20230413#SH;TrustServerCertificate=True"
"Default": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_Main_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True",
"DataExchange": "Server=dev.ccwin-in.com,13319;Database=WMS_DongYang_DataExchange_CC;uid=ccwin-in;pwd=Microsoft@2022;TrustServerCertificate=True"
},
"AuthServer": {
"Authority": "http://10.164.113.31:60083/",
"Authority": "http://dev.ccwin-in.com:60083/",
"RequireHttpsMetadata": "false",
"SwaggerClientId": "admin",
"SwaggerClientSecret": "1q2w3E*",
@ -26,16 +26,16 @@
"RemoteServices": {
"BaseData": {
"BaseUrl": "http://10.164.113.31:60084/"
"BaseUrl": "http://dev.ccwin-in.com:60084/"
},
"Store": {
"BaseUrl": "http://10.164.113.31:60085/"
"BaseUrl": "http://localhost:59095/"
},
"Label": {
"BaseUrl": "http://10.164.113.31:60082/"
"BaseUrl": "http://dev.ccwin-in.com:60082/"
},
"Auth": {
"BaseUrl": "http://10.164.113.31:60083/"
"BaseUrl": "http://dev.ccwin-in.com:60083/"
}
},
"DataExchangeOptions": {
@ -44,7 +44,7 @@
"PeriodSeconds": 10,
"RetryTimes": 1,
"BatchSize": 100,
"apiUrl": "http://10.164.113.31:60085/"
"apiUrl": "http://dev.ccwin-in.com:60085/"
},
"OutgoingOptions": {
"Active": false,

13
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteDetailExchangeDto.cs

@ -32,4 +32,17 @@ public class TransferNoteDetailExchangeDto
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// 批次
/// </summary>
[Display(Name = "批次")]
public string Lot { get; set; } = "";
/// <summary>
/// 箱码
/// </summary>
[Display(Name = "箱码")]
public string PackingCode { get; set; } = "";
}

10
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteExchangeDto.cs

@ -29,4 +29,14 @@ public class TransferNoteExchangeDto
[Display(Name = "调拨类型")]
public string Type { get; set; }
/// <summary>
/// 备注
/// </summary>
[Display(Name = "备注")]
public string Remark { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public TransferNoteDetailExchangeDto Detail { get; set; } = new();
}

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

@ -1731,6 +1731,16 @@
数量
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteDetailExchangeDto.Lot">
<summary>
批次
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteDetailExchangeDto.PackingCode">
<summary>
箱码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteExchangeDto.Number">
<summary>
上架单号
@ -1751,6 +1761,16 @@
调拨类型
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteExchangeDto.Remark">
<summary>
备注
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteExchangeDto.Detail">
<summary>
明细列表
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.UnplannedIssueNote.UnplannedIssueNoteDetailExchangeDto.Number">
<summary>
单据号

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

@ -114,4 +114,8 @@ public enum EnumIncomingDataType
/// Erp库位零件(开账)
/// </summary>
ErpLocationItem = 27,
/// <summary>
/// 储位调拨
/// </summary>
TransferNote=28
}

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/DTOs/CustomerItemDTO.cs

@ -61,4 +61,11 @@ public class CustomerItemDTO : SfsBaseDataDTOBase
[Display(Name = "结束时间")]
public DateTime? EndTime { get; set; }
/// <summary>
/// 客户零件库位
/// </summary>
[Display(Name = "客户零件库位")]
public string LocationCode { get; set; }
}

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/ICustomerItemAppService.cs

@ -10,5 +10,6 @@ public interface ICustomerItemAppService
, ISfsUpsertAppService<CustomerItemEditInput>
{
Task<string> GetFirstLocationCodeByItemCode(string itemCode);
Task<List<CustomerItem>> GetListByPartsAsync(List<string> inputs);
}

7
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemEditInput.cs

@ -45,6 +45,13 @@ public class CustomerItemEditInput : SfsBaseDataCreateOrUpdateInputBase
/// </summary>
[Display(Name = "结束时间")]
public DateTime? EndTime { get; set; }
/// <summary>
/// 客户零件库位
/// </summary>
[Display(Name = "客户零件库位")]
public string LocationCode { get; set; }
#endregion
#region Create

10
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemImportInput.cs

@ -56,6 +56,14 @@ public class CustomerItemImportInput : SfsBaseDataImportInputBase
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Version { get; set; }
/// <summary>
/// 客户零件库位
/// </summary>
[Display(Name = "客户零件库位")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string LocationCode { get; set; }
/// <summary>
/// 开始时间
/// </summary>
@ -80,4 +88,6 @@ public class CustomerItemImportInput : SfsBaseDataImportInputBase
[Display(Name = "备注")]
[StringLength(SfsEfCorePropertyConst.RemarkLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Remark { get; set; }
}

9
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Bases/SfsBaseDataAppServiceBase.cs

@ -178,7 +178,14 @@ public abstract class SfsBaseDataAppServiceBase<TEntity, TEntityDto, TRequestInp
validationRresult.Add(new ValidationResult($"默认库位代码{defaultLocationCode}不存在", new string[] { "默认库位代码" }));
}
}
protected async Task CheckLocationDefaultLocationCodeByTypeAsync(string defaultLocationCode, EnumLocationType type, List<ValidationResult> validationRresult)
{
var item = await LocationAppService.GetByCodeAsync(defaultLocationCode).ConfigureAwait(false);
if (item == null&& item.Type != type)
{
validationRresult.Add(new ValidationResult($"库位代码{defaultLocationCode}库位类型{type.ToString()}不存在", new string[] { "默认库位代码" }));
}
}
protected async Task CheckLocationGroupCodeAsync(string locationGroupCode, List<ValidationResult> validationRresult)
{
var item = await LocationGroupAppService.GetByCodeAsync(locationGroupCode).ConfigureAwait(false);

17
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/CustomerItems/CustomerItemAppService.cs

@ -10,6 +10,8 @@ using Volo.Abp.Caching;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Basedata.tests;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Basedata.Application;
@ -49,6 +51,10 @@ public class CustomerItemAppService : SfsBaseDataAppServiceBase<CustomerItem, Cu
{
await base.CheckItemBasicItemCodeAsync(importInput.ItemCode, validationRresult).ConfigureAwait(false);
await base.CheckCustomerCodeAsync(importInput.CustomerCode, validationRresult).ConfigureAwait(false);
if (string.IsNullOrEmpty(importInput.LocationCode))
{
await base.CheckLocationDefaultLocationCodeByTypeAsync(importInput.LocationCode, EnumLocationType.CUST, validationRresult).ConfigureAwait(false);
}
}
[HttpPost("get-part-list")]
public virtual async Task<List<CustomerItem>> GetListByPartsAsync(List<string> inputs)
@ -56,6 +62,17 @@ public class CustomerItemAppService : SfsBaseDataAppServiceBase<CustomerItem, Cu
return await _repository.WithDetails().Where(p => inputs.Contains(p.ItemCode)).ToListAsync().ConfigureAwait(false);
}
[HttpPost("get-first-location-code-by-item-code")]
public virtual async Task<string> GetFirstLocationCodeByItemCode(string itemCode)
{
string code = "";
var customerItems = await _repository.GetListAsync(p => p.ItemCode == itemCode).ConfigureAwait(false);
if (customerItems.Count > 0)
{
code = customerItems.First(r=>!string.IsNullOrEmpty(r.LocationCode)).LocationCode;
}
return code;
}
}

6
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/CustomerItems/CustomerItem.cs

@ -56,6 +56,12 @@ public class CustomerItem : SfsBaseDataAggregateRootBase, IHasTimeRange
/// 结束时间
/// </summary>
public DateTime? EndTime { get; set; }
/// <summary>
/// 客户零件库位
/// </summary>
public string LocationCode { get; set; }
}
///// <summary>
///// 客户零件

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/CustomerItems/CustomerItemDbContextModelCreatingExtensions.cs

@ -25,7 +25,7 @@ public static class CustomerItemDbContextModelCreatingExtensions
b.Property(q => q.ItemCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.CustomerItemCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Version).HasMaxLength(SfsPropertyConst.DescLength);
b.Property(q => q.LocationCode).HasMaxLength(SfsPropertyConst.CodeLength);
//Relations
//None

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/TransferNotes/TransferNoteAppService.cs

@ -360,7 +360,7 @@ public class TransferNoteAppService : SfsStoreWithDetailsAppServiceBase
/// <returns></returns>
[HttpPost("")]
public override async Task<TransferNoteDTO> CreateAsync(TransferNoteEditInput input)
{
{
var entity = ObjectMapper.Map<TransferNoteEditInput, TransferNote>(input);
entity=await _transferNoteManager.CreateAsync(entity).ConfigureAwait(false);

Loading…
Cancel
Save