lvzb 2 years ago
parent
commit
466e0d73bb
  1. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Scraps/Scrap.cs
  2. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesOut/MesOutDbContextModelCreatingExtensions.cs
  3. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Scrap/ScrapDbContextModelCreatingExtensions.cs
  4. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs
  5. 15
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/BackFluConverter.cs
  6. 7
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/BackFluReader.cs
  7. 14
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs
  8. 13
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs
  9. 9
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapConverter.cs
  10. 10
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json
  11. 2
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/AgentModule.cs
  12. 41
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs
  13. 38
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs
  14. 79
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs
  15. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs
  16. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Bases/StoreDataExchangeEventHandlerBase.cs
  17. 25
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Orders/PurchaseOrderEventHandler.cs
  18. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/BackFlushNoteEventHandler.cs

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Scraps/Scrap.cs

@ -13,7 +13,7 @@ public class Scrap : Entity
/// <summary> /// <summary>
/// ERP接收时间 /// ERP接收时间
/// </summary> /// </summary>
public decimal mesout_asd_dt_w { get; set; } public string mesout_asd_dt_w { get; set; }
/// <summary> /// <summary>
/// 类型 /// 类型
/// </summary> /// </summary>
@ -64,10 +64,8 @@ public class Scrap : Entity
/// </summary> /// </summary>
public long Yl1 { get; set; } public long Yl1 { get; set; }
public string Mes_Barcode { get; set; }
public override object[] GetKeys() public override object[] GetKeys()
{ {
return new object[] { mesout_asd_id }; return new object[] { mesout_asd_id };
} }
} }

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesOut/MesOutDbContextModelCreatingExtensions.cs

@ -11,12 +11,12 @@ public static class MesOutDbContextModelCreatingExtensions
builder.Entity<MesOut>(b => builder.Entity<MesOut>(b =>
{ {
//Configure table & schema Name //Configure table & schema Name
b.ToTable(options.TablePrefix + "mesout_wms", options.Schema); b.ToTable(options.TablePrefix + "mesout", options.Schema);
//Configure ABP properties //Configure ABP properties
b.ConfigureByConvention(); b.ConfigureByConvention();
//Properties //Properties
b.Property(q => q.Mesout_ref_nbr).HasMaxLength(20); b.Property(q => q.Mesout_ref_nbr).HasMaxLength(36);
b.Property(q => q.Mesout_id).HasMaxLength(1); b.Property(q => q.Mesout_id).HasMaxLength(1);
b.Property(q => q.Mesout_part).HasMaxLength(20); b.Property(q => q.Mesout_part).HasMaxLength(20);
b.Property(q => q.Mesout_date).HasMaxLength(8); b.Property(q => q.Mesout_date).HasMaxLength(8);

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

@ -30,7 +30,6 @@ public static class ScrapDbContextModelCreatingExtensions
b.Property(q => q.mesout_asd_stat).HasMaxLength(1); b.Property(q => q.mesout_asd_stat).HasMaxLength(1);
b.Property(q => q.SCN).HasMaxLength(45); b.Property(q => q.SCN).HasMaxLength(45);
b.Property(q => q.Yl1); b.Property(q => q.Yl1);
b.Property(q => q.Mes_Barcode).HasMaxLength(50);
}); });
} }

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

@ -2,6 +2,7 @@ using AutoMapper;
using Volo.Abp.AutoMapper; using Volo.Abp.AutoMapper;
using Win_in.Sfs.Shared.Application; using Win_in.Sfs.Shared.Application;
using Win_in.Sfs.Wms.DataExchange.Domain; 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.MaterialRequest;
using Win_in.Sfs.Wms.DataExchange.WMS.PCK; using Win_in.Sfs.Wms.DataExchange.WMS.PCK;
using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote; using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote;
@ -18,7 +19,8 @@ public class FawtygAutoMapperProfile : Profile
CreateMap<IncomingFromExternal, ArchivedIncomingFromExternal>(); CreateMap<IncomingFromExternal, ArchivedIncomingFromExternal>();
CreateMap<OutgoingFromWms, ArchivedOutgoingFromWms>(); CreateMap<OutgoingFromWms, ArchivedOutgoingFromWms>();
CreateMap<OutgoingToExternal, ArchivedOutgoingToExternal>(); CreateMap<OutgoingToExternal, ArchivedOutgoingToExternal>();
CreateMap<BackFlushNoteExchangeDto, BackFlushNoteEditInput>();
CreateMap<BackFlushNoteDetailExchangeDto, BackFlushNoteDetailInput>();
CreateMap<ProductReceiptNoteExchangeDto, ProductReceiptNoteEditInput>() CreateMap<ProductReceiptNoteExchangeDto, ProductReceiptNoteEditInput>()
.Ignore(x => x.Number) .Ignore(x => x.Number)

15
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/BackFluConverter.cs

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.Json; using System.Text.Json;
@ -10,6 +11,7 @@ using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.WMS.BackFlushNote; using Win_in.Sfs.Wms.DataExchange.WMS.BackFlushNote;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
@ -71,6 +73,7 @@ public class BackFluConverter : IIncomingConverter
var exchangeBack = JsonSerializer.Deserialize<BackFlushNoteExchangeDto>(first.DestinationDataContent); var exchangeBack = JsonSerializer.Deserialize<BackFlushNoteExchangeDto>(first.DestinationDataContent);
var wmsBack = _objectMapper.Map<BackFlushNoteExchangeDto, BackFlushNoteEditInput>(exchangeBack); var wmsBack = _objectMapper.Map<BackFlushNoteExchangeDto, BackFlushNoteEditInput>(exchangeBack);
var item1 = await _itemBasicAppService.GetByCodeAsync(wmsBack.ItemCode).ConfigureAwait(false); var item1 = await _itemBasicAppService.GetByCodeAsync(wmsBack.ItemCode).ConfigureAwait(false);
wmsBack.ProductReceiptNumber = DateTime.Now.ToShortDateString().Replace("/","").Trim();
if (item1 != null) if (item1 != null)
{ {
wmsBack.ItemName = item1.Name; wmsBack.ItemName = item1.Name;
@ -81,6 +84,17 @@ public class BackFluConverter : IIncomingConverter
wmsBack.ItemName = ""; wmsBack.ItemName = "";
wmsBack.Uom = ""; wmsBack.Uom = "";
} }
wmsBack.PackingCode = "jiekou";
wmsBack.LocationCode = "jiekou";
wmsBack.LocationArea = "jiekou";
wmsBack.LocationGroup = "jiekou";
wmsBack.LocationErpCode = "jiekou";
wmsBack.ProductionPlanNumber = "jiekou";
wmsBack.Workshop = "jiekou";
wmsBack.ProdLine = "jiekou";
wmsBack.WarehouseCode = "jiekou";
wmsBack.Lot = "jiekou";
wmsBack.Details = new List<BackFlushNoteDetailInput>(); wmsBack.Details = new List<BackFlushNoteDetailInput>();
foreach (var incomingFromExternal in group.ToList()) foreach (var incomingFromExternal in group.ToList())
{ {
@ -105,6 +119,7 @@ public class BackFluConverter : IIncomingConverter
wmsBackDetail.WarehouseCode = loctioncode.WarehouseCode; wmsBackDetail.WarehouseCode = loctioncode.WarehouseCode;
wmsBackDetail.LocationArea = loctioncode.AreaCode; wmsBackDetail.LocationArea = loctioncode.AreaCode;
wmsBackDetail.LocationGroup = loctioncode.LocationGroupCode; wmsBackDetail.LocationGroup = loctioncode.LocationGroupCode;
wmsBackDetail.PackingCode = "jiekou";
wmsBack.Details.Add(wmsBackDetail); wmsBack.Details.Add(wmsBackDetail);
} }
incomingToWms.DataContent = JsonSerializer.Serialize(wmsBack); incomingToWms.DataContent = JsonSerializer.Serialize(wmsBack);

7
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/BackFluReader.cs

@ -76,14 +76,14 @@ public class BackFluReader : IReader
{ {
DataType = EnumIncomingDataType.BackFlush.ToString(), DataType = EnumIncomingDataType.BackFlush.ToString(),
DataAction = EnumExchangeDataAction.Add, DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.ERP.ToString(), SourceSystem = EnumSystemType.MES.ToString(),
SourceDataId = backflu.scmout_type, SourceDataId = backflu.scmout_type,
SourceDataGroupCode = backflu.scmout_nbr, SourceDataGroupCode = backflu.scmout_nbr,
SourceDataDetailCode = backflu.scmout_part, SourceDataDetailCode = backflu.scmout_part,
SourceDataContent = JsonSerializer.Serialize(backflu), SourceDataContent = JsonSerializer.Serialize(backflu),
WriteTime = DateTime.Now, WriteTime = DateTime.Now,
Writer = nameof(MesIncomingBackgroundWorker), Writer = nameof(MesIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.ERP.ToString(), DestinationSystem = EnumSystemType.MES.ToString(),
}; };
return incomingData; return incomingData;
} }
@ -94,7 +94,8 @@ public class BackFluReader : IReader
var back = new BackFlushNoteExchangeDto() var back = new BackFlushNoteExchangeDto()
{ {
ActiveDate = DateTime.ParseExact(backflu.scmout_dt_w, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture), // ActiveDate = DateTime.ParseExact(backflu.scmout_dt_w, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
ActiveDate = Convert.ToDateTime(backflu.scmout_dt_w.Substring(0, 4) + "-" + backflu.scmout_dt_w.Substring(4, 2) + "-" + backflu.scmout_dt_w.Substring(6, 2)),
ItemCode = backflu.scmout_part, ItemCode = backflu.scmout_part,
Number = backflu.scmout_nbr Number = backflu.scmout_nbr
}; };

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

@ -49,14 +49,14 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
//var pullTaskFromExternalList = await pullTaskReader.ReadAsync().ConfigureAwait(false); //var pullTaskFromExternalList = await pullTaskReader.ReadAsync().ConfigureAwait(false);
////转换PullTask ////转换PullTask
//await pullTaskConverter.ConvertAsync(pullTaskFromExternalList).ConfigureAwait(false); //await pullTaskConverter.ConvertAsync(pullTaskFromExternalList).ConfigureAwait(false);
//Logger.LogInformation($"Read Scrap"); Logger.LogInformation($"Read Scrap");
//var scrapReader = workerContext.ServiceProvider.GetRequiredService<ScrapReader>(); var scrapReader = workerContext.ServiceProvider.GetRequiredService<ScrapReader>();
//var scrapConverter = workerContext.ServiceProvider.GetRequiredService<ScrapConverter>(); var scrapConverter = workerContext.ServiceProvider.GetRequiredService<ScrapConverter>();
////读取并保存Scrap //读取并保存Scrap
//var scrapsFromExternalList = await scrapReader.ReadAsync().ConfigureAwait(false); var scrapsFromExternalList = await scrapReader.ReadAsync().ConfigureAwait(false);
////转换Scrap //转换Scrap
//await scrapConverter.ConvertAsync(scrapsFromExternalList).ConfigureAwait(false); await scrapConverter.ConvertAsync(scrapsFromExternalList).ConfigureAwait(false);
//Logger.LogInformation($"Read Issue"); //Logger.LogInformation($"Read Issue");
//var pckHandleService = workerContext.ServiceProvider.GetRequiredService<IssueReader>(); //var pckHandleService = workerContext.ServiceProvider.GetRequiredService<IssueReader>();

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

@ -87,7 +87,7 @@ public class MesOutConverter : IIncomingConverter
wmsProductReceiptNoteDetail.Lot = ""; //排序批次 wmsProductReceiptNoteDetail.Lot = ""; //排序批次
wmsProductReceiptNoteDetail.PackingCode = "";//箱标签 wmsProductReceiptNoteDetail.PackingCode = "";//箱标签
wmsProductReceiptNoteDetail.Status = EnumInventoryStatus.OK; wmsProductReceiptNoteDetail.Status = EnumInventoryStatus.OK;
wmsProductReceiptNoteDetail.WarehouseCode = ""; wmsProductReceiptNoteDetail.WarehouseCode = "T8";
wmsProductReceiptNoteDetail.LocationArea = ""; wmsProductReceiptNoteDetail.LocationArea = "";
wmsProductReceiptNoteDetail.LocationGroup = ""; wmsProductReceiptNoteDetail.LocationGroup = "";
var loc = await _locationAppService.GetListByTypesAndErpCodeAsync(types, wmsProductReceiptNoteDetail.LocationErpCode).ConfigureAwait(false); var loc = await _locationAppService.GetListByTypesAndErpCodeAsync(types, wmsProductReceiptNoteDetail.LocationErpCode).ConfigureAwait(false);
@ -95,25 +95,22 @@ public class MesOutConverter : IIncomingConverter
{ {
wmsProductReceiptNoteDetail.LocationCode = loc[0].Code; wmsProductReceiptNoteDetail.LocationCode = loc[0].Code;
} }
try
{
var item = await _itemBasicAppService.GetByCodeAsync(wmsProductReceiptNoteDetail.ItemCode).ConfigureAwait(false); var item = await _itemBasicAppService.GetByCodeAsync(wmsProductReceiptNoteDetail.ItemCode).ConfigureAwait(false);
if (item != null) if (item != null)
{ {
wmsProductReceiptNoteDetail.ItemName = item.Name; wmsProductReceiptNoteDetail.ItemName = !string.IsNullOrEmpty(item.Name) ? item.Name : "";
wmsProductReceiptNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : ""; wmsProductReceiptNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsProductReceiptNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : ""; wmsProductReceiptNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsProductReceiptNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : ""; wmsProductReceiptNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
}
} }
catch (Exception) else
{ {
wmsProductReceiptNoteDetail.ItemName = ""; wmsProductReceiptNoteDetail.ItemName = "";
wmsProductReceiptNoteDetail.ItemDesc1 = ""; wmsProductReceiptNoteDetail.ItemDesc1 = "";
wmsProductReceiptNoteDetail.ItemDesc2 = ""; wmsProductReceiptNoteDetail.ItemDesc2 = "";
wmsProductReceiptNoteDetail.Uom = ""; wmsProductReceiptNoteDetail.Uom = "";
} }
wmsProductReceiptNote.Details.Add(wmsProductReceiptNoteDetail); wmsProductReceiptNote.Details.Add(wmsProductReceiptNoteDetail);
} }

9
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/ScrapConverter.cs

@ -91,11 +91,18 @@ public class ScrapConverter : IIncomingConverter
var item = await _itemBasicAppService.GetByCodeAsync(wmsScrapDetail.ItemCode).ConfigureAwait(false); var item = await _itemBasicAppService.GetByCodeAsync(wmsScrapDetail.ItemCode).ConfigureAwait(false);
if (item != null) if (item != null)
{ {
wmsScrapDetail.ItemName = item.Name; wmsScrapDetail.ItemName =!string.IsNullOrEmpty(item.Name) ? item.Name : "";
wmsScrapDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : ""; wmsScrapDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsScrapDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : ""; wmsScrapDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsScrapDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : ""; wmsScrapDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
} }
else
{
wmsScrapDetail.ItemName = "";
wmsScrapDetail.ItemDesc1 = "";
wmsScrapDetail.ItemDesc2 = "";
wmsScrapDetail.Uom ="";
}
wmsScarp.Details.Add(wmsScrapDetail); wmsScarp.Details.Add(wmsScrapDetail);
} }

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

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

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

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

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

@ -155,44 +155,9 @@ public static class IncomingToWmsExtensions
public static async Task HandleBackFlushsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext) public static async Task HandleBackFlushsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{ {
var backFlush = JsonSerializer.Deserialize<BackFlushNoteEditInput>(incomingConverted.DataContent); var backFlush = JsonSerializer.Deserialize<BackFlushNoteEditInput>(incomingConverted.DataContent);
var balanceAppService = workerContext.ServiceProvider.GetRequiredService<IBalanceAppService>();
var balanceDtos = await balanceAppService.GetRecommendBalancesAsync(new RecommendBalanceRequestInput()
{
Qty = backFlush.Qty,
ItemCode = backFlush.ItemCode,
LocationAreas = new List<string>() { backFlush.LocationArea },
LocationTypes = new List<EnumLocationType>()
{
EnumLocationType.WIP,
},
Statuses = new List<EnumInventoryStatus>()
{
EnumInventoryStatus.OK,
}
}).ConfigureAwait(false);
foreach (var balanceDto in balanceDtos)
{
backFlush.Details.Add(new BackFlushNoteDetailInput()
{
Qty = balanceDto.Qty,
ItemCode = balanceDto.ItemCode,
ArriveDate = balanceDto.ArriveDate,
BomVersion = string.Empty,
ContainerCode = string.Empty,
ExpireDate = balanceDto.ExpireDate,
Lot = balanceDto.Lot,
LocationCode = balanceDto.LocationCode,
LocationErpCode = balanceDto.LocationErpCode,
LocationArea = balanceDto.LocationArea,
LocationGroup = balanceDto.LocationGroup
});
}
var backFlushAppService = workerContext.ServiceProvider.GetRequiredService<IBackFlushNoteAppService>(); var backFlushAppService = workerContext.ServiceProvider.GetRequiredService<IBackFlushNoteAppService>();
// await backFlushAppService.CreateAsync(backFlush); List<BackFlushNoteEditInput> back = new List<BackFlushNoteEditInput>();
back.Add(backFlush);
await backFlushAppService.CreateManyAsync(back).ConfigureAwait(false);
} }
} }

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

@ -79,67 +79,67 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
switch (dataType) switch (dataType)
{ {
case EnumIncomingDataType.Department: case EnumIncomingDataType.Department:
await incomingToWms.HandleDepartmentsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleDepartmentsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.User: case EnumIncomingDataType.User:
await incomingToWms.HandleUsersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleUsersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Item: case EnumIncomingDataType.Item:
await incomingToWms.HandleItemsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleItemsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Location: case EnumIncomingDataType.Location:
await incomingToWms.HandleErpLocationsAsync(workerContext).ConfigureAwait(false); /* await incomingToWms.HandleErpLocationsAsync(workerContext).ConfigureAwait(false)*/;
break; break;
case EnumIncomingDataType.Bom: case EnumIncomingDataType.Bom:
await incomingToWms.HandleBomsAsync(workerContext).ConfigureAwait(false); await incomingToWms.HandleBomsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Dict: case EnumIncomingDataType.Dict:
await incomingToWms.HandleDictsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleDictsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Supplier: case EnumIncomingDataType.Supplier:
await incomingToWms.HandleSuppliersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleSuppliersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.SupplierItem: case EnumIncomingDataType.SupplierItem:
await incomingToWms.HandleSupplierItemsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleSupplierItemsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.ItemPack: case EnumIncomingDataType.ItemPack:
await incomingToWms.HandleItemPacksAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleItemPacksAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Customer: case EnumIncomingDataType.Customer:
await incomingToWms.HandleCustomersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleCustomersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.CustomerItem: case EnumIncomingDataType.CustomerItem:
await incomingToWms.HandleCustomerItemsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleCustomerItemsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.InterfaceCalendar: case EnumIncomingDataType.InterfaceCalendar:
await incomingToWms.HandleInterfaceCalendarsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleInterfaceCalendarsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.PurchaseOrder: case EnumIncomingDataType.PurchaseOrder:
await incomingToWms.HandlePurchaseOrdersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandlePurchaseOrdersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.SaleOrder: case EnumIncomingDataType.SaleOrder:
await incomingToWms.HandleSaleOrdersAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleSaleOrdersAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.SupplierAsn: case EnumIncomingDataType.SupplierAsn:
await incomingToWms.HandleAsnsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleAsnsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.ProductReceipt: case EnumIncomingDataType.ProductReceipt:
await incomingToWms.HandleProductReceiptsAsync(workerContext).ConfigureAwait(false); await incomingToWms.HandleProductReceiptsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.MaterialRequest: case EnumIncomingDataType.MaterialRequest:
await incomingToWms.HandleMaterialRequestsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleMaterialRequestsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.Scrap: case EnumIncomingDataType.Scrap:
await incomingToWms.HandleScrapsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleScrapsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.IssueConfirm: case EnumIncomingDataType.IssueConfirm:
await incomingToWms.HandleIssueNoteConfirmAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleIssueNoteConfirmAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.PurchaseLabel: case EnumIncomingDataType.PurchaseLabel:
await incomingToWms.HandleInventoryLabelsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleInventoryLabelsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.BackFlush: case EnumIncomingDataType.BackFlush:
await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false); //await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.None: case EnumIncomingDataType.None:
default: default:

79
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Orders/PurchaseOrders/PurchaseOrderAppService.cs

@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Domain.Entities;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
@ -53,34 +54,50 @@ public class PurchaseOrderAppService :
protected override async Task<Dictionary<PurchaseOrder, EntityState>> ImportProcessingEntityAsync( protected override async Task<Dictionary<PurchaseOrder, EntityState>> ImportProcessingEntityAsync(
Dictionary<PurchaseOrder, EntityState> dictionary) Dictionary<PurchaseOrder, EntityState> dictionary)
{ {
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); var ImportData = dictionary.Select(p => p.Key);
foreach (var purchaseOrder in addList) var supplierDtos = new List<SupplierDTO>();
#region 校验供应商
var allSupplierCode = ImportData.Select(p => p.SupplierCode).ToList();//所有供应商编号
supplierDtos = await CheckSupplierCodeAsync(allSupplierCode).ConfigureAwait(false);
#endregion
var itemBasicDtos = new List<ItemBasicDTO>();
#region 校验物品
var allTempItemCode = ImportData.Select(p => p.Details.Select(p => p.ItemCode).ToList()).ToList();
var allItemCode = new List<string>();
allTempItemCode.ForEach(p => { allItemCode.AddRange(p); });
itemBasicDtos = await CheckItemCodeAsync(allItemCode).ConfigureAwait(false);
#endregion
foreach (var purchaseOrder in ImportData)
{ {
purchaseOrder.CreatorId = CurrentUser.Id; purchaseOrder.CreatorId = CurrentUser.Id;
purchaseOrder.Worker = CurrentUser.GetName(); purchaseOrder.Worker = CurrentUser.GetName();
var supplierDto = var supplierDto = supplierDtos.First(p => p.Code == purchaseOrder.SupplierCode);
await _supplierAppService.GetByCodeAsync(purchaseOrder.SupplierCode).ConfigureAwait(false);
purchaseOrder.SupplierCode = supplierDto.Code; purchaseOrder.SupplierCode = supplierDto.Code;
purchaseOrder.SupplierAddress = supplierDto.Address; purchaseOrder.SupplierAddress = supplierDto.Address;
purchaseOrder.SupplierName = supplierDto.Name; purchaseOrder.SupplierName = supplierDto.Name;
foreach (var detail in purchaseOrder.Details) foreach (var detail in purchaseOrder.Details)
{ {
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false); var itemBasicDto = itemBasicDtos.First(p => p.Code == detail.ItemCode);
detail.ItemName = itemBasicDto.Name; detail.ItemName = itemBasicDto.Name;
detail.ItemDesc1 = itemBasicDto.Desc1; detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2; detail.ItemDesc2 = itemBasicDto.Desc2;
detail.StdPackQty=itemBasicDto.StdPackQty;
} }
} }
return dictionary; return dictionary;
} }
#endregion
/// <summary> /// <summary>
/// 【创建】采购订单 /// 【创建】采购订单
/// </summary> /// </summary>
@ -102,6 +119,48 @@ public class PurchaseOrderAppService :
return ObjectMapper.Map<PurchaseOrder, PurchaseOrderDTO>(entity); return ObjectMapper.Map<PurchaseOrder, PurchaseOrderDTO>(entity);
} }
#region 校验
/// <summary>
/// 校验所有供应商是否存在
/// </summary>
/// <returns></returns>
private async Task<List<SupplierDTO>> CheckSupplierCodeAsync(List<string> supplierCodes)
{
supplierCodes = supplierCodes.Distinct().ToList();
var result = await _supplierAppService.GetByCodesAsync(supplierCodes).ConfigureAwait(false);
foreach (var supplierCode in supplierCodes)
{
if (result.All(p => p.Code != supplierCode))
{
throw new UserFriendlyException($"供应商代码【{supplierCode}】不存在");
}
}
return result;
}
private async Task<List<ItemBasicDTO>> CheckItemCodeAsync(List<string> itemCodes)
{
itemCodes = itemCodes.Distinct().ToList();
var result = await _itemBasicAppService.GetByCodesAsync(itemCodes).ConfigureAwait(false);
foreach (var itemCode in itemCodes)
{
if (result.All(p => p.Code != itemCode))
{
throw new UserFriendlyException($"供应商代码【{itemCode}】不存在");
}
}
return result;
}
#endregion
#endregion
/// <summary> /// <summary>
/// 【批量创建】采购订单 /// 【批量创建】采购订单
/// </summary> /// </summary>
@ -237,12 +296,12 @@ public class PurchaseOrderAppService :
[HttpGet("get-list-by-supplier-code-and-item-code")] [HttpGet("get-list-by-supplier-code-and-item-code")]
public virtual async Task<List<PurchaseOrderDTO>> GetListBySupplierCodeAsync(string supplierCode, string itemCode) public virtual async Task<List<PurchaseOrderDTO>> GetListBySupplierCodeAsync(string supplierCode, string itemCode)
{ {
var entitys = await _repository.GetListAsync(p => p.Details.Any(y => y.ItemCode == itemCode) && p.SupplierCode == supplierCode).ConfigureAwait(false); var entitys = await _repository
.GetListAsync(p => p.Details.Any(y => y.ItemCode == itemCode) && p.SupplierCode == supplierCode)
.ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<PurchaseOrder>, List<PurchaseOrderDTO>>(entitys); var dtos = ObjectMapper.Map<List<PurchaseOrder>, List<PurchaseOrderDTO>>(entitys);
return dtos; return dtos;
} }
} }

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Orders/PurchaseOrders/PurchaseOrderManager.cs

@ -54,8 +54,8 @@ public class PurchaseOrderManager : SfsStoreManagerBase<PurchaseOrder, PurchaseO
purchaseOrder.SetIdAndNumberWithDetails(GuidGenerator, purchaseOrder.Number); purchaseOrder.SetIdAndNumberWithDetails(GuidGenerator, purchaseOrder.Number);
//await PublishCreatedAsync(purchaseOrder).ConfigureAwait(false); //await PublishCreatedAsync(purchaseOrder).ConfigureAwait(false);
//不要用base.create 要不会把number覆盖 //不要用base.create 要不会把number覆盖
await PublishCreatedAsync(purchaseOrder).ConfigureAwait(false);
return await Repository.InsertAsync(purchaseOrder).ConfigureAwait(false); return await Repository.InsertAsync(purchaseOrder).ConfigureAwait(false);
} }
/// <summary> /// <summary>

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Bases/StoreDataExchangeEventHandlerBase.cs

@ -24,8 +24,11 @@ public abstract class StoreDataExchangeEventHandlerBase<T> : StoreEventHandlerBa
protected async Task<DateTime> GetActiveDateAsync() protected async Task<DateTime> GetActiveDateAsync()
{ {
var activeDate = await InterfaceCalendarAppService.GetActiveDateAsync(Clock.Now).ConfigureAwait(false); //todo 报错
return activeDate; //var activeDate = await InterfaceCalendarAppService.GetActiveDateAsync(Clock.Now).ConfigureAwait(false);
//return activeDate;
return DateTime.Now;
} }
protected async Task<List<ExchangeData>> BuildExchangeDataAsync<TEntity>(string sourceSystem, protected async Task<List<ExchangeData>> BuildExchangeDataAsync<TEntity>(string sourceSystem,

25
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Orders/PurchaseOrderEventHandler.cs

@ -107,6 +107,10 @@ public class PurchaseOrderEventHandler
//供应商窗口 //供应商窗口
var supplierTimeWindowDtos = await _supplierTimeWindowAppService.GetListBySupplierCodeAsync(purchaseOrder.SupplierCode).ConfigureAwait(false); var supplierTimeWindowDtos = await _supplierTimeWindowAppService.GetListBySupplierCodeAsync(purchaseOrder.SupplierCode).ConfigureAwait(false);
if (!supplierTimeWindowDtos.Any())
{
throw new UserFriendlyException($"供应商窗口【{purchaseOrder.SupplierCode}】没设置");
}
//一次性返回所有物品信息 //一次性返回所有物品信息
var itemBasicDtos = await _itemBasicAppService.GetByCodesAsync(itemCodes).ConfigureAwait(false); var itemBasicDtos = await _itemBasicAppService.GetByCodesAsync(itemCodes).ConfigureAwait(false);
@ -173,13 +177,13 @@ public class PurchaseOrderEventHandler
//todo 一个物品多个包装?怎么取值 //todo 一个物品多个包装?怎么取值
//标包数 //标包数
var itemPackDto=ItemPacks.First(p => p.ItemCode == purchaseOrderDetaildetail.ItemCode); var itemPackDto = itemBasicDtos.First(p=>p.Code== purchaseOrderDetaildetail.ItemCode).StdPackQty;
//总箱数 //总箱数
var itemPackingCount = (int)(itemQty / itemPackDto.Qty); var itemPackingCount = (int)(itemQty / itemPackDto);
if (itemQty > itemPackDto.Qty) if (itemQty > itemPackDto)
{ {
if (itemQty % itemPackDto.Qty != 0) if (itemQty % itemPackDto != 0)
{ {
itemPackingCount++; itemPackingCount++;
} }
@ -214,7 +218,7 @@ public class PurchaseOrderEventHandler
supplierAsnDetailInput.ItemDesc2 = itemBasicDto.Desc2; supplierAsnDetailInput.ItemDesc2 = itemBasicDto.Desc2;
//标包 //标包
supplierAsnDetailInput.StdPackQty = itemPackDto.Qty; supplierAsnDetailInput.StdPackQty = itemPackDto;
supplierAsnDetailInput.SupplierPackQty = supplierItemDto.SupplierPackQty; supplierAsnDetailInput.SupplierPackQty = supplierItemDto.SupplierPackQty;
supplierAsnDetailInput.SupplierPackUom = supplierItemDto.SupplierPackUom; supplierAsnDetailInput.SupplierPackUom = supplierItemDto.SupplierPackUom;
@ -228,11 +232,11 @@ public class PurchaseOrderEventHandler
supplierAsnDetailInput.RecommendErpCode = purchaseOrderDetaildetail.LocationErpCode; supplierAsnDetailInput.RecommendErpCode = purchaseOrderDetaildetail.LocationErpCode;
supplierAsnDetailInput.PoNumber = purchaseOrder.Number; supplierAsnDetailInput.PoNumber = purchaseOrder.Number;
supplierAsnDetailInput.Qty = itemQty>itemPackDto.Qty ? itemPackDto.Qty : itemQty; supplierAsnDetailInput.Qty = itemQty>itemPackDto ? itemPackDto : itemQty;
itemQty-=itemPackDto.Qty; itemQty-=itemPackDto;
var InventoryLabelEditInput = await BuildInventoryLabelEditInputAsync(supplierAsnEditInput, supplierAsnDetailInput, supplierDto, itemBasicDto, supplierItemDto, itemPackDto).ConfigureAwait(false); var InventoryLabelEditInput = await BuildInventoryLabelEditInputAsync(supplierAsnEditInput, supplierAsnDetailInput, supplierDto, itemBasicDto, supplierItemDto).ConfigureAwait(false);
inventoryLabelEditInputs.Add(InventoryLabelEditInput); inventoryLabelEditInputs.Add(InventoryLabelEditInput);
supplierAsnEditInput.Details.Add(supplierAsnDetailInput); supplierAsnEditInput.Details.Add(supplierAsnDetailInput);
@ -260,8 +264,7 @@ public class PurchaseOrderEventHandler
SupplierAsnDetailInput supplierAsnDetail, SupplierAsnDetailInput supplierAsnDetail,
SupplierDTO supplierDto, SupplierDTO supplierDto,
ItemBasicDTO itemBasicDto, ItemBasicDTO itemBasicDto,
SupplierItemDTO supplierItemDto, SupplierItemDTO supplierItemDto)
ItemPackDTO itemPackDto)
{ {
if (itemBasicDto == null) if (itemBasicDto == null)
@ -308,7 +311,7 @@ public class PurchaseOrderEventHandler
inputLabel.LabelStatus = LabelStatus.Enable; inputLabel.LabelStatus = LabelStatus.Enable;
inputLabel.Specifications = itemBasicDto.Color; inputLabel.Specifications = itemBasicDto.Color;
inputLabel.StdPackQty = itemPackDto.Qty; inputLabel.StdPackQty = itemBasicDto.StdPackQty;
inputLabel.SupplierItemCode = supplierItemDto.SupplierItemCode; inputLabel.SupplierItemCode = supplierItemDto.SupplierItemCode;
inputLabel.SupplierItemName = supplierItemDto.ItemName; inputLabel.SupplierItemName = supplierItemDto.ItemName;

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/BackFlushNoteEventHandler.cs

@ -68,6 +68,11 @@ public class BackFlushNoteEventHandler
transaction.DocNumber = backFlushNote.Number; transaction.DocNumber = backFlushNote.Number;
transaction.JobNumber = backFlushNote.JobNumber; transaction.JobNumber = backFlushNote.JobNumber;
transaction.Status = detail.Status; transaction.Status = detail.Status;
transaction.LocationArea = detail.LocationArea;
transaction.LocationGroup=detail.LocationGroup;
transaction.LocationCode=detail.LocationCode;
transaction.LocationErpCode=detail.LocationErpCode;
transaction.WarehouseCode=detail.WarehouseCode;
transactions.Add(transaction); transactions.Add(transaction);
} }

Loading…
Cancel
Save