Browse Source

成品发运mes对接

dev_DY_CC
lvzb 12 months ago
parent
commit
5bc0d94b32
  1. 66
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/Delivery.cs
  2. 45
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/DeliveryManager.cs
  3. 10
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryManager.cs
  4. 8
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryRepository.cs
  5. 1
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs
  6. 3
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs
  7. 35
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryDbContextModelCreatingExtensions.cs
  8. 18
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryEfCoreRepository.cs
  9. 3
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs
  10. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs
  11. 24
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs
  12. 106
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryConverter.cs
  13. 120
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryReader.cs
  14. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs
  15. 40
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs
  16. 6
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs
  17. 7
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs
  18. 15
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverNote/DeliverNoteDetailExchangeDto.cs
  19. 43
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestDetailExchangeDto.cs
  20. 43
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestExchangeDto.cs
  21. 85
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml
  22. 6
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs
  23. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/DTOs/DeliverNoteDetailDTO.cs
  24. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/Inputs/DeliverNoteDetailInput.cs
  25. 16
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/DTOs/DeliverRequestDetailDTO.cs
  26. 15
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestDetailInput.cs
  27. 16
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestImportInput.cs
  28. 63
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs
  29. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAutoMapperProfile.cs
  30. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs
  31. 17
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs
  32. 17
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs
  33. 12
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/DeliverNotes/DeliverNoteDetail.cs
  34. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequest.cs
  35. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestDetail.cs
  36. 22
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestManager.cs
  37. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/IDeliverRequestManager.cs
  38. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/DeliverNotes/DeliverNoteDbContextModelCreatingExtensions.cs
  39. 4
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/DeliverRequests/DeliverRequestDbContextModelCreatingExtensions.cs
  40. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/DeliverJobAutoMapperProfile.cs
  41. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/DeliverRequestMapperProfile.cs
  42. 147
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/DeliverRequestEventHandler.cs

66
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/Delivery.cs

@ -0,0 +1,66 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery;
public class Delivery : Entity
{
/// <summary>
/// 序号
/// </summary>
[Key]
public string mesout_delivery_id { get; set; }
/// <summary>
/// 类型
/// </summary>
public string mesout_delivery_type { get; set; }
/// <summary>
/// 物料
/// </summary>
public string mesout_delivery_part { get; set; }
/// <summary>
/// 底盘号
/// </summary>
public string mesout_delivery_identity_no { get; set; }
/// <summary>
/// 发红储位
/// </summary>
public string mesout_delivery_loc { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal mesout_delivery_num { get; set; }
/// <summary>
/// 客户代码
/// </summary>
public string mesout_delivery_customer { get; set; }
/// <summary>
/// 车牌号
/// </summary>
public string mesout_delivery_carno { get; set; }
/// <summary>
/// 写入时间
/// </summary>
public string mesout_delivery_wt { get; set; }
/// <summary>
/// 发货单号
/// </summary>
public string mesout_delivery_no { get; set; }
/// <summary>
/// 器具号
/// </summary>
public string mesout_delivery_container { get; set; }
/// <summary>
/// 发货计划号
/// </summary>
public string mesout_delivery_plan { get; set; }
/// <summary>
/// 是否读取(0,1)
/// </summary>
public long Yl1 { get; set; }
public override object[] GetKeys()
{
return new object[] { mesout_delivery_id };
}
}

45
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/DeliveryManager.cs

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

10
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryManager.cs

@ -0,0 +1,10 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery;
public interface IDeliveryManager
{
Task<List<Delivery>> GetToBeProcessedListAsync();
Task UpdateProcessedListAsync(List<Delivery> entities);
Task UpdateProcesseErrordListAsync(List<Delivery> entities);
}

8
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryRepository.cs

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

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

@ -29,5 +29,6 @@ public static class DataExchangeDbContextModelCreatingExtensions
builder.ConfigureBackflu(options);
builder.ConfigureQtyrfe(options);
builder.ConfigureFrozen(options);
builder.ConfigureDelivery(options);
}
}

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

@ -3,6 +3,7 @@ using Volo.Abp.BackgroundJobs.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.MySQL;
using Volo.Abp.Modularity;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
@ -36,5 +37,7 @@ public class DataExchangeEntityFrameworkCoreFawtygModule : AbpModule
context.Services.AddTransient<IBackfluRepository, BackfluEfCoreRepository>();
context.Services.AddTransient<IQtyrfeRepository, QtyrfeEfCoreRepository>();
context.Services.AddTransient<IFrozenRepository, FrozenEfCoreRepository>();
context.Services.AddTransient<IDeliveryRepository, DeliveryEfCoreRepository>();
}
}

35
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryDbContextModelCreatingExtensions.cs

@ -0,0 +1,35 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
public static class DeliveryDbContextModelCreatingExtensions
{
public static void ConfigureDelivery(this ModelBuilder builder, MesModelBuilderConfigurationOptions options)
{
builder.Entity<Delivery>(b =>
{
//Configure table & schema Name
b.ToTable(options.TablePrefix + "mesout_delivery", options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Properties
b.Property(q => q.mesout_delivery_id).HasMaxLength(20);
b.Property(q => q.mesout_delivery_type).HasMaxLength(1);
b.Property(q => q.mesout_delivery_part).HasMaxLength(20);
b.Property(q => q.mesout_delivery_identity_no).HasMaxLength(20);
b.Property(q => q.mesout_delivery_loc).HasMaxLength(10);
b.Property(q => q.mesout_delivery_num).HasPrecision(10, 2);
b.Property(q => q.mesout_delivery_customer).HasMaxLength(10);
b.Property(q => q.mesout_delivery_carno).HasMaxLength(10);
b.Property(q => q.mesout_delivery_wt).HasMaxLength(20);
b.Property(q => q.mesout_delivery_no).HasMaxLength(20);
b.Property(q => q.mesout_delivery_container).HasMaxLength(20);
b.Property(q => q.mesout_delivery_plan).HasMaxLength(20);
b.Property(q => q.Yl1);
});
}
}

18
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryEfCoreRepository.cs

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
public class DeliveryEfCoreRepository : EfCoreRepository<MesDbContext, Delivery>,IDeliveryRepository
{
public DeliveryEfCoreRepository(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.Delivery;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
@ -26,4 +27,6 @@ public interface IMesDbContext : IEfCoreDbContext
DbSet<Qtyrfe> Qtyrfe { get; }
DbSet<Frozen> Frozen { get; }
DbSet<Delivery> Delivery { get; }
}

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

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
@ -28,6 +29,7 @@ public class MesDbContext :
public virtual DbSet<Frozen> Frozen { get; }
public virtual DbSet<Delivery> Delivery { get; }
public MesDbContext(DbContextOptions<MesDbContext> options)
: base(options)
{

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

@ -3,6 +3,8 @@ using Volo.Abp.AutoMapper;
using Win_in.Sfs.Shared.Application;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.WMS.BackFlushNote;
using Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote;
using Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest;
using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest;
using Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
using Win_in.Sfs.Wms.DataExchange.WMS.PCK;
@ -222,7 +224,6 @@ public class FawtygAutoMapperProfile : Profile
;
CreateMap<MesNoteExchangeDto, MesNoteEditInput>()
.Ignore(x => x.Details)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.JobNumber)
.Ignore(x => x.Details)
@ -253,5 +254,26 @@ public class FawtygAutoMapperProfile : Profile
.Ignore(x => x.Uom)
.Ignore(x => x.StdPackQty)
;
CreateMap<DeliverRequestExchangeDto, DeliverRequestEditInput>()
.Ignore(x => x.DeliverPlanNumber)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.Details)
.Ignore(x=>x.CustomerAddressCode)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.AutoSubmit)
.Ignore(x => x.AutoAgree)
.Ignore(x => x.AutoHandle)
.Ignore(x => x.AutoCompleteJob)
.Ignore(x => x.DirectCreateNote)
;
CreateMap<DeliverRequestDetailExchangeDto, DeliverRequestDetailInput>()
.Ignore(x => x.Uom)
.Ignore(x => x.StdPackQty)
.Ignore(x => x.Remark)
.Ignore(x => x.ItemName)
.Ignore(x => x.ItemDesc1)
.Ignore(x => x.ItemDesc2);
;
}
}

106
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryConverter.cs

@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class DeliveryConverter : IIncomingConverter
{
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly IIncomingToWmsManager _incomingToWmsManager;
private readonly IObjectMapper _objectMapper;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly ICustomerAppService _customerAppService;
private readonly ILogger<DeliveryConverter> _logger;
public DeliveryConverter(
IIncomingToWmsManager incomingToWmsManager
, IObjectMapper objectMapper
, IItemBasicAppService itemBasicAppService
, ILogger<DeliveryConverter> logger,
ICustomerAppService customerAppService,
IIncomingFromExternalManager incomingFromExternalManager)
{
_incomingToWmsManager = incomingToWmsManager;
_objectMapper = objectMapper;
_itemBasicAppService = itemBasicAppService;
_logger = logger;
_customerAppService = customerAppService;
_incomingFromExternalManager = incomingFromExternalManager;
}
public virtual async Task ConvertAsync(List<IncomingFromExternal> incomingFromExternalList)
{
if (!incomingFromExternalList.Any())
{
_logger.LogInformation("no Deliverys");
return;
}
//按Number合并DeliveryRequest单据
var transferRequestList = await BuildIncomingToWmsOfDeliveryRequestAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateManyAsync(transferRequestList).ConfigureAwait(false);
//归档
await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false);
}
private async Task<List<IncomingToWms>> BuildIncomingToWmsOfDeliveryRequestAsync(List<IncomingFromExternal> incomingDataList)
{
var incomingToWmsList = new List<IncomingToWms>();
var groups = incomingDataList.GroupBy(p => new { p.SourceDataGroupCode ,p.SourceDataDetailCode});
foreach (var group in groups)
{
var first = group.First();
var incomingToWms = new IncomingToWms()
{
DataType = first.DataType,
DataAction = first.DataAction,
SourceSystem = first.SourceSystem,
DataIdentityCode = first.SourceDataGroupCode,
};
incomingToWms.SetEffectiveDate(first.EffectiveDate);
var exchangeDeliveryRequest = JsonSerializer.Deserialize<DeliverRequestExchangeDto>(first.DestinationDataContent);
var wmsDeliveryRequest = _objectMapper.Map<DeliverRequestExchangeDto, DeliverRequestEditInput>(exchangeDeliveryRequest);
wmsDeliveryRequest.Details = new List<DeliverRequestDetailInput>();
var cust= await _customerAppService.GetByCodeAsync(wmsDeliveryRequest.CustomerCode).ConfigureAwait(false);
wmsDeliveryRequest.CustomerAddressCode = String.IsNullOrEmpty( cust?.Address)?"无": cust.Address;
foreach (var incomingFromExternal in group.ToList())
{
var transferRequest = JsonSerializer.Deserialize<DeliverRequestExchangeDto>(incomingFromExternal.DestinationDataContent);
var wmsDeliveryRequestDetail = _objectMapper.Map<DeliverRequestDetailExchangeDto, DeliverRequestDetailInput>(transferRequest.Detail);
var item = await _itemBasicAppService.GetByCodeAsync(wmsDeliveryRequestDetail.ItemCode).ConfigureAwait(false);
try
{
if (item != null)
{
wmsDeliveryRequestDetail.ItemName = item.Name;
wmsDeliveryRequestDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsDeliveryRequestDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsDeliveryRequestDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
wmsDeliveryRequestDetail.StdPackQty = item.StdPackQty;
}
}
catch (Exception)
{
wmsDeliveryRequestDetail.ItemName = "";
wmsDeliveryRequestDetail.ItemDesc1 = "";
wmsDeliveryRequestDetail.ItemDesc2 = "";
wmsDeliveryRequestDetail.Uom = "";
}
wmsDeliveryRequest.Details.Add(wmsDeliveryRequestDetail);
}
incomingToWms.DataContent = JsonSerializer.Serialize(wmsDeliveryRequest);
incomingToWmsList.Add(incomingToWms);
}
return incomingToWmsList;
}
}

120
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryReader.cs

@ -0,0 +1,120 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Delivery;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using System.Text.Json;
using Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class DeliveryReader : IReader
{
private readonly IDeliveryManager _DeliveryManager;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<DeliveryReader> _logger;
public DeliveryReader(
IDeliveryManager pillTaskManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<DeliveryReader> logger
)
{
_DeliveryManager = pillTaskManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从MES读取待处理Delivery
var toBeProcessedPillTasks = await _DeliveryManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedPillTasks.Any())
{
_logger.LogInformation("no Deliverys");
return new List<IncomingFromExternal>();
}
//Delivery逐一转换为MaterialRequest
var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
//更新MES数据状态
await _DeliveryManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false);
return incomingDataList;
}
private static List<IncomingFromExternal> BuildIncomingFromExternalFromPillTaskAsync(List<Delivery> toBeProcessedDeliverys)
{
var incomingDataList = new List<IncomingFromExternal>();
foreach (var Delivery in toBeProcessedDeliverys)
{
var incomingData = BuildIncomingFromExternal(Delivery);
incomingData.SetEffectiveDate(DateTime.Now);
incomingData.SetSuccess();
try
{
var DetilveryRequest = BuildDeliverRequestCreateInput(Delivery);
incomingData.DestinationDataContent = JsonSerializer.Serialize(DetilveryRequest);
}
catch (Exception ex)
{
incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString());
}
incomingDataList.Add(incomingData);
}
return incomingDataList;
}
private static IncomingFromExternal BuildIncomingFromExternal(Delivery Delivery)
{
var incomingData = new IncomingFromExternal()
{
DataType = EnumIncomingDataType.Delivery.ToString(),
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.MES.ToString(),
SourceDataId = Delivery.mesout_delivery_id.ToString(),
SourceDataGroupCode =Delivery.mesout_delivery_type=="0"? Delivery.mesout_delivery_no : Delivery.mesout_delivery_plan,
SourceDataDetailCode = Delivery.mesout_delivery_customer,
SourceDataContent = JsonSerializer.Serialize(Delivery),
WriteTime = DateTime.Now,
Writer = nameof(MesIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.WMS.ToString(),
};
return incomingData;
}
private static DeliverRequestExchangeDto BuildDeliverRequestCreateInput(Delivery Delivery)
{
var mesRequest = new DeliverRequestExchangeDto()
{
DeliverRequestType = Delivery.mesout_delivery_type == "0" ? EnumDeliverRequestType.FIS : EnumDeliverRequestType.Normal,
CustomerCode = Delivery.mesout_delivery_customer,
Number = Delivery.mesout_delivery_no,
Worker = "MESFY",
ActiveDate = DateTime.TryParse(Delivery.mesout_delivery_wt, out DateTime dateTime) ? dateTime : DateTime.Now,
DeliverTime = DateTime.TryParse(Delivery.mesout_delivery_wt, out DateTime dateTime1) ? dateTime1 : DateTime.Now
};
var mesRequestDetail = new DeliverRequestDetailExchangeDto()
{
ItemCode = Delivery.mesout_delivery_part,
Qty = Delivery.mesout_delivery_num,
AreaCode = Delivery.mesout_delivery_loc,
MesDeliveryNo=Delivery.mesout_delivery_no,
MesDeliveryPlan = Delivery.mesout_delivery_plan,
IdentityNo =Delivery.mesout_delivery_identity_no
};
mesRequest.Detail = mesRequestDetail;
return mesRequest;
}
}

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs

@ -63,7 +63,7 @@ public class FrozenReader : IReader
incomingData.SetSuccess();
try
{
var MaterialRequest = BuildTransferNoteCreateInput(Frozen, holdLocationCode);
var MaterialRequest = BuildMesNoteCreateInput(Frozen, holdLocationCode);
incomingData.DestinationDataContent = JsonSerializer.Serialize(MaterialRequest);
}
catch (Exception ex)
@ -97,7 +97,7 @@ public class FrozenReader : IReader
return incomingData;
}
private static MesNoteExchangeDto BuildTransferNoteCreateInput(Frozen Frozen, string holdLocationCode)
private static MesNoteExchangeDto BuildMesNoteCreateInput(Frozen Frozen, string holdLocationCode)
{
var mesNote = new MesNoteExchangeDto()
{

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

@ -96,22 +96,30 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
//await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false);
// Logger.LogInformation($"Read TransferNote");//储位调拨
// var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService<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 mesNoteFromExternalList = await FrozenReader.ReadAsync().ConfigureAwait(false);
//转换BackFlush
await FrozenConverter.ConvertAsync(mesNoteFromExternalList).ConfigureAwait(false);
// Logger.LogInformation($"Read TransferNote");//储位调拨
// var TransferNoteReader = workerContext.ServiceProvider.GetRequiredService<QtyrfeReader>();
//// var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
// //读取并保存TransferNote
// var transferNoteFromExternalList = await TransferNoteReader.ReadAsync().ConfigureAwait(false);
// //转换TransferNote
// await TransferNoteConverter.ConvertAsync(transferNoteFromExternalList).ConfigureAwait(false);
//Logger.LogInformation($"Read Frozen");//冻结解冻
//var FrozenReader = workerContext.ServiceProvider.GetRequiredService<FrozenReader>();
// var FrozenConverter = workerContext.ServiceProvider.GetRequiredService<FrozenConverter>();
////读取并保存Frozen
//var mesNoteFromExternalList = await FrozenReader.ReadAsync().ConfigureAwait(false);
////转换Frozen
//await FrozenConverter.ConvertAsync(mesNoteFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Read Delivery");//成品发运
var DeliveryReader = workerContext.ServiceProvider.GetRequiredService<DeliveryReader>();
var DeliveryConverter = workerContext.ServiceProvider.GetRequiredService<DeliveryConverter>();
//读取并保存Delivery
var deliveryNoteFromExternalList = await DeliveryReader.ReadAsync().ConfigureAwait(false);
//转换Delivery
await DeliveryConverter.ConvertAsync(deliveryNoteFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Completed: Handling {Incoming}");
}

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

@ -200,6 +200,12 @@ public static class IncomingToWmsExtensions
var mesNoteAppService = workerContext.ServiceProvider.GetRequiredService<IMesNoteAppService>();
await mesNoteAppService.CreateAsync(mesNote).ConfigureAwait(false);
}
public static async Task HandleDeliveryRequestAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{
var deliverRequest = JsonSerializer.Deserialize<DeliverRequestEditInput>(incomingConverted.DataContent);
var deliverRequestAppService = workerContext.ServiceProvider.GetRequiredService<IDeliverRequestAppService>();
await deliverRequestAppService.CreateAsync(deliverRequest).ConfigureAwait(false);
}
public static async Task HandleScrapsAsync(this IncomingToWms incomingConverted, PeriodicBackgroundWorkerContext workerContext)
{

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

@ -184,8 +184,8 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
await incomingToWms.HandleInventoryLabelsAsync(workerContext).ConfigureAwait(false);
break;
case EnumIncomingDataType.BackFlush:
// await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false);
await SendBackFlush(workerContext, incomingToWms).ConfigureAwait(false);
await incomingToWms.HandleBackFlushsAsync(workerContext).ConfigureAwait(false);
// await SendBackFlush(workerContext, incomingToWms).ConfigureAwait(false);
break;
case EnumIncomingDataType.TransferNote:
await incomingToWms.HandleTransferNoteAsync(workerContext).ConfigureAwait(false);
@ -193,6 +193,9 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
case EnumIncomingDataType.MesNote:
await incomingToWms.HandleMesNoteAsync(workerContext).ConfigureAwait(false);
break;
case EnumIncomingDataType.Delivery:
await incomingToWms.HandleDeliveryRequestAsync(workerContext).ConfigureAwait(false);
break;
case EnumIncomingDataType.None:
default:
throw new ArgumentOutOfRangeException();

15
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverNote/DeliverNoteDetailExchangeDto.cs

@ -26,4 +26,19 @@ public class DeliverNoteDetailExchangeDto
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// Mes发货单号
/// </summary>
[Display(Name = "Mes发货单号")]
public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
[Display(Name = "Mes发货计划号")]
public string MesDeliveryPlan { get; set; }
/// <summary>
/// 底盘号
/// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
}

43
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestDetailExchangeDto.cs

@ -0,0 +1,43 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest;
public class DeliverRequestDetailExchangeDto
{
/// <summary>
/// 单据号
/// </summary>
[Display(Name = "单据号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Number { get; set; }
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
public string ItemCode { get; set; }
/// <summary>
/// 来源库区
/// </summary>
[Display(Name = "来源库区")]
public string AreaCode { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// Mes发货单号
/// </summary>
[Display(Name = "Mes发货单号")]
public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
[Display(Name = "Mes发货计划号")]
public string MesDeliveryPlan { get; set; }
/// <summary>
/// 底盘号
/// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
}

43
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestExchangeDto.cs

@ -0,0 +1,43 @@
using System;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest;
public class DeliverRequestExchangeDto
{
/// <summary>
/// 单据号
/// </summary>
public string Number { get; set; }
/// <summary>
/// 操作员
/// </summary>
public string Worker { get; set; }
/// <summary>
/// 生效日期
/// </summary>
public DateTime ActiveDate { get; set; } = DateTime.Now.Date;
/// <summary>
/// 发货时间
/// </summary>
public DateTime DeliverTime { get; set; } = DateTime.Now.Date;
/// <summary>
/// 发货类型
/// </summary>
public EnumDeliverRequestType DeliverRequestType { get; set; }
/// <summary>
/// 客户
/// </summary>
[Display(Name = "客户")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string CustomerCode { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public DeliverRequestDetailExchangeDto Detail { get; set; } = new();
}

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

@ -531,6 +531,21 @@
数量
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote.DeliverNoteDetailExchangeDto.MesDeliveryNo">
<summary>
Mes发货单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote.DeliverNoteDetailExchangeDto.MesDeliveryPlan">
<summary>
Mes发货计划号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote.DeliverNoteDetailExchangeDto.IdentityNo">
<summary>
底盘号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote.DeliverNoteExchangeDto.Number">
<summary>
单据号
@ -551,6 +566,76 @@
客户
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.Number">
<summary>
单据号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.ItemCode">
<summary>
物品代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.AreaCode">
<summary>
来源库区
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.Qty">
<summary>
数量
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.MesDeliveryNo">
<summary>
Mes发货单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.MesDeliveryPlan">
<summary>
Mes发货计划号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestDetailExchangeDto.IdentityNo">
<summary>
底盘号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.Number">
<summary>
单据号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.Worker">
<summary>
操作员
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.ActiveDate">
<summary>
生效日期
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.DeliverTime">
<summary>
发货时间
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.DeliverRequestType">
<summary>
发货类型
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.CustomerCode">
<summary>
客户
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest.DeliverRequestExchangeDto.Detail">
<summary>
明细列表
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.Deparment.DepartmentExchangerDto.Code">
<summary>
代码

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

@ -121,5 +121,9 @@ public enum EnumIncomingDataType
/// <summary>
/// 储位调拨
/// </summary>
MesNote = 29
MesNote = 29,
/// <summary>
/// 发货单
/// </summary>
Delivery=30,
}

15
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/DTOs/DeliverNoteDetailDTO.cs

@ -10,4 +10,19 @@ public class DeliverNoteDetailDTO : SfsStoreRecommendFromDetailWithFromToDTOBase
/// </summary>
[Display(Name = "扩展属性")]
public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary();
/// <summary>
/// Mes发货单号
/// </summary>
[Display(Name = "Mes发货单号")]
public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
[Display(Name = "Mes发货计划号")]
public string MesDeliveryPlan { get; set; }
/// <summary>
/// 底盘号
/// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
}

15
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/DeliverNotes/Inputs/DeliverNoteDetailInput.cs

@ -10,4 +10,19 @@ public class DeliverNoteDetailInput : SfsStoreRecommendFromDetailWithFromToInput
/// </summary>
[Display(Name = "扩展属性")]
public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary();
/// <summary>
/// Mes发货单号
/// </summary>
[Display(Name = "Mes发货单号")]
public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
[Display(Name = "Mes发货计划号")]
public string MesDeliveryPlan { get; set; }
/// <summary>
/// 底盘号
/// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
}

16
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/DTOs/DeliverRequestDetailDTO.cs

@ -17,4 +17,20 @@ public class DeliverRequestDetailDTO : SfsStoreDetailWithQtyDTOBase, IHasExtraPr
[Display(Name = "扩展属性")]
public ExtraPropertyDictionary ExtraProperties { set; get; } = new ExtraPropertyDictionary();
/// <summary>
/// Mes发货单号
/// </summary>
[Display(Name = "Mes发货单号")]
public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
[Display(Name = "Mes发货计划号")]
public string MesDeliveryPlan { get; set; }
/// <summary>
/// 底盘号
/// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
}

15
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestDetailInput.cs

@ -16,4 +16,19 @@ public class DeliverRequestDetailInput : SfsStoreDetailWithQtyInputBase, IHasExt
/// </summary>
[Display(Name = "扩展属性")]
public ExtraPropertyDictionary ExtraProperties { set; get; }
/// <summary>
/// Mes发货单号
/// </summary>
[Display(Name = "Mes发货单号")]
public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
[Display(Name = "Mes发货计划号")]
public string MesDeliveryPlan { get; set; }
/// <summary>
/// 底盘号
/// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
}

16
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/DeliverRequests/Inputs/DeliverRequestImportInput.cs

@ -40,6 +40,22 @@ public class DeliverRequestImportInput : SfsStoreImportInputBase
[Display(Name = "发货库区")]
[Required]
public string AreaCode { get; set; }
/// <summary>
/// Mes发货单号
/// </summary>
[Display(Name = "Mes发货单号")]
public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
[Display(Name = "Mes发货计划号")]
public string MesDeliveryPlan { get; set; }
/// <summary>
/// 底盘号
/// </summary>
[Display(Name = "底盘号")]
public string IdentityNo { get; set; }
}
[Display(Name = "FIS发货申请")]

63
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAppService.cs

@ -10,6 +10,8 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
@ -32,7 +34,6 @@ public class DeliverRequestAppService :
private readonly IAreaAppService _areaApp;
private readonly ICustomerAppService _customerApp;
private readonly ICustomerAddressAppService _customerAddressApp;
public DeliverRequestAppService(
IDeliverRequestRepository repository
, IDeliverRequestManager deliverRequestManager
@ -46,7 +47,21 @@ public class DeliverRequestAppService :
_customerApp = customerApp;
_customerAddressApp = customerAddressApp;
}
/// <summary>
/// 处理请求
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpPost("handle-list")]
public virtual async Task<List<DeliverRequestDTO>> HandleListAsync(List<Guid> ids)
{
var entitys = await _repository.GetListAsync(r=> ids.Contains(r.Id)).ConfigureAwait(false);
Check.NotNull(entitys, typeof(DeliverRequest).Name);
var result = await _deliverRequestManager.HandleListAsync(entitys).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<DeliverRequest>, List<DeliverRequestDTO>>(entitys);
return dtos;
}
[HttpPost("list")]
public override Task<PagedResultDto<DeliverRequestDTO>> GetPagedListByFilterAsync(
SfsStoreRequestInputBase sfsRequestInput,
@ -75,7 +90,30 @@ public class DeliverRequestAppService :
var dto = ObjectMapper.Map<DeliverRequest, DeliverRequestDTO>(entity);
return dto;
}
private async Task SetRequestAutoPropertiesAsync(DeliverRequest entity)
{
//普通件
var transType = EnumTransSubType.Deliver_Standard;
//jis件
if (entity.DeliverRequestType == EnumDeliverRequestType.FIS)
{
transType = EnumTransSubType.Deliver_FIS;
}
else if (entity.DeliverRequestType == EnumDeliverRequestType.RAW)
{
transType = EnumTransSubType.Deliver_RAW;
}
var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Deliver, transType).ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.DirectCreateNote = tranType.DirectCreateNote;
entity.DeliverRequestType = entity.DeliverRequestType;
}
#region import
protected virtual async Task CheckImportInputBusinessAsync(
DeliverRequestImportInput importInput
@ -246,30 +284,7 @@ public class DeliverRequestAppService :
await SetRequestAutoPropertiesAsync(entity).ConfigureAwait(false);
}
private async Task SetRequestAutoPropertiesAsync(DeliverRequest entity)
{
//普通件
var transType = EnumTransSubType.Deliver_Standard;
//jis件
if (entity.DeliverRequestType == EnumDeliverRequestType.FIS)
{
transType = EnumTransSubType.Deliver_FIS;
}
else if (entity.DeliverRequestType == EnumDeliverRequestType.RAW)
{
transType = EnumTransSubType.Deliver_RAW;
}
var tranType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.Deliver, transType).ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.DirectCreateNote = tranType.DirectCreateNote;
entity.DeliverRequestType = entity.DeliverRequestType;
}
private static void CheckTransactionType(TransactionTypeDTO transactionType, ItemBasicDTO item)
{

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestAutoMapperProfile.cs

@ -93,6 +93,9 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.Id)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.Remark)
.Ignore(x => x.IdentityNo)
.Ignore(x => x.MesDeliveryNo)
.Ignore(x => x.MesDeliveryPlan)
.AfterMap((x, y) => y.SetProperty(nameof(x.FromVinCode), x.FromVinCode))
//.AfterMap((x, y) => y.SetProperty(nameof(x.ToVinCode), x.ToVinCode))
;

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/DeliverRequests/DeliverRequestFisAppService.cs

@ -171,7 +171,7 @@ public class DeliverRequestFisAppService :
CancellationToken cancellationToken = default)
{
sfsRequestInput.Condition.Filters.Add(
new Filter(nameof(DeliverRequest.DeliverRequestType), "FIS"));
new Filter(nameof(DeliverRequest.DeliverRequestType), "Normal"));
return base.GetPagedListByFilterAsync(sfsRequestInput, includeDetails, cancellationToken);
}

17
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedIssueRequests/UnplannedIssueRequestForDongyangAppService.cs

@ -61,14 +61,15 @@ public class UnplannedIssueRequestForDongyangAppService : UnplannedIssueRequestA
entity.AutoSubmit = true;
entity.AutoAgree = true;
entity.AutoHandle = true;
if (entity.UnplannedIssueType == EnumUnplannedIssueType.Wip)
{
entity.DirectCreateNote = true;
}
else
{
entity.DirectCreateNote = false;
}
entity.DirectCreateNote = false;
//if (entity.UnplannedIssueType == EnumUnplannedIssueType.Wip)
//{
// entity.DirectCreateNote = true;
//}
//else
//{
//}
await _unplannedIssueRequestManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<UnplannedIssueRequest, UnplannedIssueRequestDTO>(entity);

17
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/UnplannedReceiptRequests/UnplannedReceiptRequestForDongyangAppService.cs

@ -65,14 +65,15 @@ public class UnplannedReceiptRequestForDongyangAppService : UnplannedReceiptRequ
entity.AutoSubmit = true;
entity.AutoAgree = true;
entity.AutoHandle = true;
if (entity.UnplannedReceiptType == EnumUnplannedReceiptType.Wip)
{
entity.DirectCreateNote = true; //线边直接生成记录
}
else
{
entity.DirectCreateNote = false; //原料先生成任务、再生成记录
}
entity.DirectCreateNote = false;
//if (entity.UnplannedReceiptType == EnumUnplannedReceiptType.Wip)
//{
// entity.DirectCreateNote = true; //线边直接生成记录
//}
//else
//{
// entity.DirectCreateNote = false; //原料先生成任务、再生成记录
//}
var res = await _unplannedReceiptRequestManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<UnplannedReceiptRequest, UnplannedReceiptRequestDTO>(entity);

12
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/DeliverNotes/DeliverNoteDetail.cs

@ -8,4 +8,16 @@ public class DeliverNoteDetail : SfsStoreRecommendFromDetailWithFromToEntityBase
/// 扩展属性
/// </summary>
public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary();
/// <summary>
/// Mes发货单号
/// </summary>
public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
public string MesDeliveryPlan { get; set; }
/// <summary>
/// 底盘号
/// </summary>
public string IdentityNo { get; set; }
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequest.cs

@ -38,7 +38,6 @@ public class DeliverRequest : SfsStoreRequestAggregateRootBase<DeliverRequestDet
/// <summary>
/// 发货类型
/// </summary>
[IgnoreUpdate]
public EnumDeliverRequestType DeliverRequestType { get; set; }
/// <summary>

13
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestDetail.cs

@ -16,5 +16,16 @@ public class DeliverRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasExtraPr
/// 扩展属性
/// </summary>
public ExtraPropertyDictionary ExtraProperties { get; set; } = new ExtraPropertyDictionary();
/// <summary>
/// Mes发货单号
/// </summary>
public string MesDeliveryNo { get; set; }
/// <summary>
/// Mes发货计划号
/// </summary>
public string MesDeliveryPlan { get; set; }
/// <summary>
/// 底盘号
/// </summary>
public string IdentityNo { get; set; }
}

22
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/DeliverRequestManager.cs

@ -1,7 +1,12 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using IdentityModel;
using Volo.Abp;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Event;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -67,4 +72,21 @@ public class DeliverRequestManager : SfsStoreRequestManagerBase<DeliverRequest,
}
}
/// <summary>
/// 执行
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[UnitOfWork]
public async Task<List<DeliverRequest>> HandleListAsync(List<DeliverRequest> entitys)
{
foreach (var entity in entitys)
{
entity.Handle();
await AddOrUpdateAsync(entity).ConfigureAwait(false);
}
await LocalEventBus.PublishAsync(new SfsHandledEntityEventData<List<DeliverRequest>>(entitys), false).ConfigureAwait(false);
return entitys;
}
}

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/DeliverRequests/IDeliverRequestManager.cs

@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain;
@ -7,4 +8,5 @@ public interface IDeliverRequestManager : ISfsStoreRequestManager<DeliverRequest
, IBulkImportService<DeliverRequest>
{
Task CompleteAsync(string number);
Task<List<DeliverRequest>> HandleListAsync(List<DeliverRequest> entitys);
}

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/DeliverNotes/DeliverNoteDbContextModelCreatingExtensions.cs

@ -50,7 +50,9 @@ public static class DeliverNoteDbContextModelCreatingExtensions
b.Property(q => q.ToPackingCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.FromLot).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ToLot).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.IdentityNo).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.MesDeliveryPlan).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.MesDeliveryNo).HasMaxLength(SfsPropertyConst.CodeLength);
//Indexes
b.HasIndex(q => new { q.Number, q.ItemCode, q.FromPackingCode, q.FromLot, q.FromLocationCode, q.ToLocationCode }).IsUnique();
});

4
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/DeliverRequests/DeliverRequestDbContextModelCreatingExtensions.cs

@ -42,7 +42,9 @@ public static class DeliverRequestDbContextModelCreatingExtensions
b.ConfigureSfsStoreBase();
//Configure Sfs store detail properties
b.ConfigureSfsStoreDetailBase();
b.Property(q => q.IdentityNo).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.MesDeliveryPlan).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.MesDeliveryNo).HasMaxLength(SfsPropertyConst.CodeLength);
//Properties
//Relations

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/DeliverJobAutoMapperProfile.cs

@ -46,6 +46,9 @@ public partial class StoreEventAutoMapperProfile : Profile
.Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.MesDeliveryNo)
.Ignore(x => x.IdentityNo)
.Ignore(x => x.MesDeliveryPlan)
;
CreateMap<DeliverJobDetail, ExpectOutEditInput>()

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/DeliverRequestMapperProfile.cs

@ -97,6 +97,9 @@ public partial class StoreEventAutoMapperProfile : Profile
.ForMember(x => x.ToStatus, y => y.MapFrom(d => d.Status))
.ForMember(x => x.ToWarehouseCode, y => y.MapFrom(d => d.WarehouseCode))
.Ignore(t => t.StdPackQty)
.Ignore(t => t.MesDeliveryNo)
.Ignore(t => t.MesDeliveryPlan)
.Ignore(t => t.IdentityNo)
.Ignore(x => x.ExtraProperties)
.IgnoreIHasRecommendAndHandledFrom();
}

147
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/DeliverRequestEventHandler.cs

@ -3,7 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Domain.Entities;
using Volo.Abp.EventBus;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
@ -17,6 +19,7 @@ namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest;
public class DeliverRequestEventHandler
: StoreEventHandlerBase
, ILocalEventHandler<SfsHandledEntityEventData<DeliverRequest>>
, ILocalEventHandler<SfsHandledEntityEventData<List<DeliverRequest>>>
, ILocalEventHandler<SfsAbortedEntityEventData<DeliverRequest>>
, ILocalEventHandler<SfsCreatedEntityEventData<DeliverRequest>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<DeliverRequest>>>
@ -26,16 +29,19 @@ public class DeliverRequestEventHandler
private readonly IDeliverJobAppService _deliverJobApp;
private readonly ICustomerAddressAppService _customerAddressApp;
private readonly IDeliverRequestManager _deliverRequestManager;
private readonly IBalanceAppService _balanceAppService;
private readonly ILocationAppService _locationAppService;
public DeliverRequestEventHandler(
IDeliverJobAppService deliverJobApp
, IDeliverNoteAppService deliverNoteApp
, ICustomerAddressAppService customerAddressApp, IDeliverRequestManager deliverRequestManager)
, ICustomerAddressAppService customerAddressApp, IDeliverRequestManager deliverRequestManager, IBalanceAppService balanceAppService, ILocationAppService locationAppService)
{
_deliverNoteApp = deliverNoteApp;
_deliverJobApp = deliverJobApp;
_customerAddressApp = customerAddressApp;
_deliverRequestManager = deliverRequestManager;
_balanceAppService = balanceAppService;
_locationAppService = locationAppService;
}
@ -47,10 +53,10 @@ public class DeliverRequestEventHandler
public async Task HandleEventAsync(SfsCreatedEntityEventData<DeliverRequest> eventData)
{
var entity = eventData.Entity;
if (entity.AutoSubmit)
{
await _deliverRequestManager.SubmitAsync(entity).ConfigureAwait(false);
}
//if (entity.AutoSubmit)
//{
// await _deliverRequestManager.SubmitAsync(entity).ConfigureAwait(false);
//}
}
/// <summary>
@ -61,13 +67,13 @@ public class DeliverRequestEventHandler
public async Task HandleEventAsync(SfsCreatedEntityEventData<List<DeliverRequest>> eventData)
{
var entitys = eventData.Entity;
foreach (var entity in entitys)
{
if (entity.AutoSubmit)
{
await _deliverRequestManager.SubmitAsync(entity).ConfigureAwait(false);
}
}
//foreach (var entity in entitys)
//{
// if (entity.AutoSubmit)
// {
// await _deliverRequestManager.SubmitAsync(entity).ConfigureAwait(false);
// }
//}
}
/// <summary>
@ -109,10 +115,110 @@ public class DeliverRequestEventHandler
await _deliverJobApp.CreateManyAsync(deliverJobCreateInputs).ConfigureAwait(false);
}
}
/// <summary>
/// 执行后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsHandledEntityEventData<List<DeliverRequest>> eventData)
{
var entitys = eventData.Entity;
//东阳特殊逻辑
if (entitys.First().DirectCreateNote)
{
var noteCreateInput = await BuildDeliverNoteAsync(entitys).ConfigureAwait(false);
await _deliverNoteApp.CreateAsync(noteCreateInput).ConfigureAwait(false);
}
}
#region 私有
private async Task<DeliverNoteEditInput> BuildDeliverNoteAsync(List<DeliverRequest> requests)
{
var transactionType = await TransactionTypeAclService
.GetByTransTypeAsync(EnumTransType.Deliver, EnumTransSubType.None).ConfigureAwait(false);
if (requests.First().DeliverRequestType == EnumDeliverRequestType.Normal)
{
transactionType = await TransactionTypeAclService.GetByTransTypeAsync(
EnumTransType.Deliver,
EnumTransSubType.Deliver_Standard).ConfigureAwait(false);
}
else if (requests.First().DeliverRequestType == EnumDeliverRequestType.FIS)
{
transactionType = await TransactionTypeAclService.GetByTransTypeAsync(
EnumTransType.Deliver,
EnumTransSubType.Deliver_FIS).ConfigureAwait(false);
}
var createInput = ObjectMapper.Map<DeliverRequest, DeliverNoteEditInput>(requests.First());
var customerAddress =
(await _customerAddressApp.GetByCustomerCodeAsync(createInput.CustomerCode).ConfigureAwait(false))
.FirstOrDefault();
LocationDTO toLocation = null;
if (customerAddress != null && !string.IsNullOrEmpty(customerAddress.LocationCode))
{
toLocation = await LocationAclService.GetByCodeAsync(customerAddress.LocationCode).ConfigureAwait(false);
Check.NotNull(toLocation, $"客户库位 {customerAddress.LocationCode} 不存在");
}
createInput.Details = new List<DeliverNoteDetailInput>();
foreach (var detail in requests.SelectMany(r=>r.Details))
{
var locations = await _locationAppService.GetListByTypesAndErpCodeAsync(transactionType.OutLocationTypes, detail.AreaCode).ConfigureAwait(false);
if (locations.Count <= 0)
{
throw new UserFriendlyException($"储位 {detail.AreaCode} 未找到对应的成品库和半成品库。");
}
var balances = await _balanceAppService.GetRecommendBalancesByLocationsAsync(
new RecommendBalanceRequestInput
{
ItemCode = detail.ItemCode,
Qty = detail.Qty,
Locations = locations.Select(r => r.Code).ToList(),
Statuses = transactionType.OutInventoryStatuses
}).ConfigureAwait(false);
var sumQty = balances.Sum(t => t.Qty);
if (sumQty < detail.Qty)
{
throw new UserFriendlyException($"物料号 {detail.ItemCode} 库存余额 {sumQty} 小于 {detail.Qty}。");
}
foreach (var balance in balances)
{
var inputDetail = ObjectMapper.Map<BalanceDTO, DeliverNoteDetailInput>(balance);
var item = await ItemBasicAclService.GetByCodeAsync(balance.ItemCode).ConfigureAwait(false);
if (item != null)
{
inputDetail.StdPackQty = item.StdPackQty;
}
if (toLocation != null)
{
inputDetail.ToLocationCode = toLocation.Code;
inputDetail.ToLocationErpCode = toLocation.ErpLocationCode;
}
inputDetail.ExtraProperties = detail.ExtraProperties;
inputDetail.MesDeliveryNo = detail.MesDeliveryNo;
inputDetail.IdentityNo = detail.IdentityNo;
inputDetail.MesDeliveryPlan = detail.MesDeliveryPlan;
createInput.Details.Add(inputDetail);
}
}
return createInput;
}
private async Task<DeliverNoteEditInput> BuildDeliverNoteAsync(DeliverRequest request)
{
var transactionType = await TransactionTypeAclService
@ -149,13 +255,18 @@ public class DeliverRequestEventHandler
foreach (var detail in request.Details)
{
var balances = await BalanceAclService.GetRecommendBalancesAsync(
var locations = await _locationAppService.GetListByTypesAndErpCodeAsync(transactionType.OutLocationTypes, detail.AreaCode).ConfigureAwait(false);
if (locations.Count<=0)
{
throw new UserFriendlyException($"储位 {detail.AreaCode} 未找到对应的成品库和半成品库。");
}
var balances = await _balanceAppService.GetRecommendBalancesByLocationsAsync(
new RecommendBalanceRequestInput
{
ItemCode = detail.ItemCode,
Qty = detail.Qty,
LocationTypes = transactionType.OutLocationTypes,
LocationAreas = new List<string> { detail.AreaCode },
Locations = locations.Select(r=>r.Code).ToList(),
Statuses = transactionType.OutInventoryStatuses
}).ConfigureAwait(false);
@ -185,7 +296,9 @@ public class DeliverRequestEventHandler
}
inputDetail.ExtraProperties = detail.ExtraProperties;
inputDetail.MesDeliveryNo = detail.MesDeliveryNo;
inputDetail.IdentityNo = detail.IdentityNo;
inputDetail.MesDeliveryPlan = detail.MesDeliveryPlan;
createInput.Details.Add(inputDetail);
}
}

Loading…
Cancel
Save