Browse Source

Merge branch 'dev_DY_CC' of http://dev.ccwin-in.com:3000/BoXu.Zheng/WZC2 into dev_DY_CC

dev_DY_CC
赵新宇 12 months ago
parent
commit
6f1d5ab3a4
  1. 39
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/CallMtl/CallMtl.cs
  2. 44
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/CallMtl/CallMtlManager.cs
  3. 10
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/CallMtl/ICallMtlManager.cs
  4. 7
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/CallMtl/ICallMtlRepository.cs
  5. 66
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/Delivery.cs
  6. 45
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/DeliveryManager.cs
  7. 10
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryManager.cs
  8. 8
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Delivery/IDeliveryRepository.cs
  9. 49
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs
  10. 45
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/FrozenManager.cs
  11. 10
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenManager.cs
  12. 7
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenRepository.cs
  13. 8
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/MesOut/MesOut.cs
  14. 11
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeManager.cs
  15. 7
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/IQtyrfeRepository.cs
  16. 50
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/Qtyrfe.cs
  17. 45
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Qtyrfe/QtyrfeManager.cs
  18. 27
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/CallMtl/CallMtlDbContextModelCreatingExtensions.cs
  19. 12
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/CallMtl/CallMtlEfCoreRepository.cs
  20. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeDbContextModelCreatingExtensions.cs
  21. 8
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/DataExchangeEntityFrameworkCoreFawtygModule.cs
  22. 35
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryDbContextModelCreatingExtensions.cs
  23. 18
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Delivery/DeliveryEfCoreRepository.cs
  24. 30
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenDbContextModelCreatingExtensions.cs
  25. 12
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenEfCoreRepository.cs
  26. 11
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/IMesDbContext.cs
  27. 11
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesDbContext.cs
  28. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/MesOut/MesOutDbContextModelCreatingExtensions.cs
  29. 30
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeDbContextModelCreatingExtensions.cs
  30. 13
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Qtyrfe/QtyrfeEfCoreRepository.cs
  31. 2
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes.csproj
  32. 6
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs
  33. 127
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/FawtygAutoMapperProfile.cs
  34. 101
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/CallMtlConverter.cs
  35. 121
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/CallMtlReader.cs
  36. 106
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryConverter.cs
  37. 120
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/DeliveryReader.cs
  38. 133
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenConverter.cs
  39. 123
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenReader.cs
  40. 54
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesIncomingBackgroundWorker.cs
  41. 14
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutConverter.cs
  42. 78
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/MesOutReader.cs
  43. 140
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeConverter.cs
  44. 117
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/QtyrfeReader.cs
  45. 14
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/appsettings.json
  46. 142
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/AssembleIssueNoteConverter.cs
  47. 6
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/CountAdjustNoteConverter.cs
  48. 17
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/UnplannedIssueNoteConverter.cs
  49. 17
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/UnplannedReceiptNoteConverter.cs
  50. 34
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsExtensions.cs
  51. 20
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/IncomingToWmsWorker.cs
  52. 16
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Agent/appsettings.json
  53. 15
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverNote/DeliverNoteDetailExchangeDto.cs
  54. 43
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestDetailExchangeDto.cs
  55. 43
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/DeliverRequest/DeliverRequestExchangeDto.cs
  56. 34
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/InjectionIssueRequest/InjectionIssueRequestDetailExchangeDto.cs
  57. 36
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/InjectionIssueRequest/InjectionIssueRequestExchangeDto.cs
  58. 36
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteDetailExchangeDto.cs
  59. 29
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteExchangeDto.cs
  60. 48
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteDetailExchangeDto.cs
  61. 47
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteExchangeDto.cs
  62. 11
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ProductReceiptNote/ProductReceiptNoteDetailExchangeDto.cs
  63. 13
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteDetailExchangeDto.cs
  64. 10
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/TransferNote/TransferNoteExchangeDto.cs
  65. 9
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/UnplannedIssueNote/UnplannedIssueNoteExchangeDto.cs
  66. 8
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/UnplannedReceiptNote/UnplannedReceiptNoteExchangeDto.cs
  67. 240
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/Win_in.Sfs.Wms.DataExchange.Application.Contracts.xml
  68. 16
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumIncomingDataType.cs
  69. 15
      be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs
  70. 33
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/BaseDatas/ItemContainerController.cs
  71. 176
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs
  72. 2
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs
  73. 125
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/KittingRequestController.cs
  74. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/DTOs/CustomerItemDTO.cs
  75. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/ICustomerItemAppService.cs
  76. 7
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemEditInput.cs
  77. 10
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/CustomerItems/Inputs/CustomerItemImportInput.cs
  78. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemBasics/IItemBasicAppService.cs
  79. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/IItemContainerAppService.cs
  80. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemStoreRelations/IItemStoreRelationAppService.cs
  81. 24
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/tests/ErpCodeRequest.cs
  82. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Bases/SfsBaseDataAppServiceBase.cs
  83. 17
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/CustomerItems/CustomerItemAppService.cs
  84. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs
  85. 14
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemStoreRelations/ItemStoreRelationAppService.cs
  86. 16
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Items/ItemBasicAppService.cs
  87. 12
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs
  88. 11
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLineItems/ProductionLineItemAppService.cs
  89. 9
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/CommonHelper.cs
  90. 8
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs
  91. 6
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/CustomerItems/CustomerItem.cs
  92. 1
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ProductionLineItems/ProductionLineItem.cs
  93. 2
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/CustomerItems/CustomerItemDbContextModelCreatingExtensions.cs
  94. 13
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ProductionLineItems/ProductionLineItemDbContextModelCreatingExtensions.cs
  95. 18
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs
  96. 3
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs
  97. 42
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs
  98. 1
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs
  99. 5
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumLocationType.cs
  100. 7
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumProductionLineType.cs

39
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/CallMtl/CallMtl.cs

@ -0,0 +1,39 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.CallMtl;
public class CallMtl : Entity
{
/// <summary>
/// 序号
/// </summary>
[Key]
public string mesout_callmtl_id { get; set; }
/// <summary>
/// 物料
/// </summary>
public string mesout_callmtl_erpno { get; set; }
/// <summary>
/// 库位
/// </summary>
public string mesout_callmtl_loc { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal mesout_callmtl_num { get; set; }
/// <summary>
/// 时间
/// </summary>
public string mesout_callmtl_wt { get; set; }
/// <summary>
/// 是否读取(0,1)
/// </summary>
public long Yl1 { get; set; }
public override object[] GetKeys()
{
return new object[] { mesout_callmtl_id };
}
}

44
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/CallMtl/CallMtlManager.cs

@ -0,0 +1,44 @@
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.CallMtl;
public class CallMtlManager : DomainService, ICallMtlManager
{
private readonly ICallMtlRepository _repository;
public CallMtlManager(ICallMtlRepository repository)
{
_repository = repository;
}
public virtual async Task<List<CallMtl>> GetToBeProcessedListAsync()
{
var plans = await _repository.GetListAsync(p => p.Yl1 == 0).ConfigureAwait(false);
return plans;
}
public virtual async Task UpdateProcesseErrordListAsync(List<CallMtl> entities)
{
var ids = entities.Select(p => p.mesout_callmtl_id);
var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_callmtl_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<CallMtl> entities)
{
var ids = entities.Select(p => p.mesout_callmtl_id);
var plans = await _repository.GetListAsync(p => ids.Contains(p.mesout_callmtl_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/CallMtl/ICallMtlManager.cs

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

7
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/CallMtl/ICallMtlRepository.cs

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

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

49
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/Frozen.cs

@ -0,0 +1,49 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
public class Frozen : Entity
{
/// <summary>
/// 序号
/// </summary>
[Key]
public string mesout_frozen_id { get; set; }
/// <summary>
/// 类型
/// </summary>
public string mesout_frozen_type { get; set; }
/// <summary>
/// 物料
/// </summary>
public string mesout_frozen_part { get; set; }
/// <summary>
/// 日期
/// </summary>
public string mesout_frozen_date { get; set; }
/// <summary>
/// 来源库位
/// </summary>
public string mesout_frozen_loc { get; set; }
/// <summary>
/// 冻结原因
/// </summary>
public string mesout_frozen_reason { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal mesout_frozen_num { get; set; }
/// <summary>
/// 冻结用户
/// </summary>
public string mesout_frozen_user { get; set; }
/// <summary>
/// 是否读取(0,1)
/// </summary>
public long Yl1 { get; set; }
public override object[] GetKeys()
{
return new object[] { mesout_frozen_id };
}
}

45
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/FrozenManager.cs

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

10
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenManager.cs

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

7
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Mes/Frozen/IFrozenRepository.cs

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

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

@ -11,6 +11,10 @@ public class MesOut : Entity
[Key] [Key]
public string Mesout_ref_nbr { get; set; } public string Mesout_ref_nbr { get; set; }
/// <summary> /// <summary>
/// 条码号(20240430添加)
/// </summary>
public string Mesout_barcode { get; set; }
/// <summary>
/// 调出储位 /// 调出储位
/// </summary> /// </summary>
public string Mesout_id { get; set; } public string Mesout_id { get; set; }
@ -19,6 +23,10 @@ public class MesOut : Entity
/// </summary> /// </summary>
public string Mesout_part { get; set; } public string Mesout_part { get; set; }
/// <summary> /// <summary>
/// 质量补标识(20240430添加)
/// </summary>
public string Mesout_quality { get; set; }
/// <summary>
/// 日期 /// 日期
/// </summary> /// </summary>
public string Mesout_date { get; set; } public string Mesout_date { get; set; }

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

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

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

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

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

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

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

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

27
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/CallMtl/CallMtlDbContextModelCreatingExtensions.cs

@ -0,0 +1,27 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.CallMtl;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
public static class CallMtlDbContextModelCreatingExtensions
{
public static void ConfigureCallMtl(this ModelBuilder builder, MesModelBuilderConfigurationOptions options)
{
builder.Entity<CallMtl>(b =>
{
//Configure table & schema Name
b.ToTable(options.TablePrefix + "mesout_callmtl", options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Properties
b.Property(q => q.mesout_callmtl_id).HasMaxLength(20);
b.Property(q => q.mesout_callmtl_erpno).HasMaxLength(20);
b.Property(q => q.mesout_callmtl_loc).HasMaxLength(10);
b.Property(q => q.mesout_callmtl_num).HasPrecision(10, 2);
b.Property(q => q.mesout_callmtl_wt).HasMaxLength(20);
b.Property(q => q.Yl1);
});
}
}

12
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/CallMtl/CallMtlEfCoreRepository.cs

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

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

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

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

@ -3,9 +3,13 @@ using Volo.Abp.BackgroundJobs.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.EntityFrameworkCore.MySQL;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.CallMtl;
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.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
@ -32,5 +36,9 @@ public class DataExchangeEntityFrameworkCoreFawtygModule : AbpModule
context.Services.AddTransient<IScrapRepository, ScrapEfCoreRepository>(); context.Services.AddTransient<IScrapRepository, ScrapEfCoreRepository>();
context.Services.AddTransient<IIssueRepository, IssueEfCoreRepository>(); context.Services.AddTransient<IIssueRepository, IssueEfCoreRepository>();
context.Services.AddTransient<IBackfluRepository, BackfluEfCoreRepository>(); context.Services.AddTransient<IBackfluRepository, BackfluEfCoreRepository>();
context.Services.AddTransient<IQtyrfeRepository, QtyrfeEfCoreRepository>();
context.Services.AddTransient<IFrozenRepository, FrozenEfCoreRepository>();
context.Services.AddTransient<IDeliveryRepository, DeliveryEfCoreRepository>();
context.Services.AddTransient<ICallMtlRepository, CallMtlEfCoreRepository>();
} }
} }

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

30
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenDbContextModelCreatingExtensions.cs

@ -0,0 +1,30 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
public static class FrozenDbContextModelCreatingExtensions
{
public static void ConfigureFrozen(this ModelBuilder builder, MesModelBuilderConfigurationOptions options)
{
builder.Entity<Frozen>(b =>
{
//Configure table & schema Name
b.ToTable(options.TablePrefix + "mesout_frozen", options.Schema);
//Configure ABP properties
b.ConfigureByConvention();
//Properties
b.Property(q => q.mesout_frozen_id).HasMaxLength(20);
b.Property(q => q.mesout_frozen_type).HasMaxLength(1);
b.Property(q => q.mesout_frozen_part).HasMaxLength(20);
b.Property(q => q.mesout_frozen_date).HasMaxLength(20);
b.Property(q => q.mesout_frozen_loc).HasMaxLength(10);
b.Property(q => q.mesout_frozen_reason).HasMaxLength(500);
b.Property(q => q.mesout_frozen_num).HasPrecision(10, 2);
b.Property(q => q.mesout_frozen_user).HasMaxLength(20);
b.Property(q => q.Yl1);
});
}
}

12
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes/Frozen/FrozenEfCoreRepository.cs

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

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

@ -1,9 +1,13 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.CallMtl;
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.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
@ -20,4 +24,11 @@ public interface IMesDbContext : IEfCoreDbContext
DbSet<MesOut> MesOuts { get; } DbSet<MesOut> MesOuts { get; }
DbSet<PullTask> PullTasks { get; } DbSet<PullTask> PullTasks { get; }
DbSet<Backflu> Backflu { get; } DbSet<Backflu> Backflu { get; }
DbSet<Qtyrfe> Qtyrfe { get; }
DbSet<Frozen> Frozen { get; }
DbSet<Delivery> Delivery { get; }
DbSet<CallMtl> CallMtl { get; }
} }

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

@ -1,9 +1,13 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.CallMtl;
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.Mes;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.MesOut;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.PullTask;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Qtyrfe;
namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes; namespace Win_in.Sfs.Wms.DataExchange.EntityFrameworkCore.Fawtyg.Mes;
@ -22,6 +26,13 @@ public class MesDbContext :
public virtual DbSet<IssueNote> Issue { get; } public virtual DbSet<IssueNote> Issue { get; }
public virtual DbSet<Backflu> Backflu { get; } public virtual DbSet<Backflu> Backflu { get; }
public virtual DbSet<Qtyrfe> Qtyrfe { get; }
public virtual DbSet<Frozen> Frozen { get; }
public virtual DbSet<Delivery> Delivery { get; }
public virtual DbSet<CallMtl> CallMtl { get; }
public MesDbContext(DbContextOptions<MesDbContext> options) public MesDbContext(DbContextOptions<MesDbContext> options)
: base(options) : base(options)
{ {

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

@ -17,8 +17,10 @@ public static class MesOutDbContextModelCreatingExtensions
//Properties //Properties
b.Property(q => q.Mesout_ref_nbr).HasMaxLength(36); b.Property(q => q.Mesout_ref_nbr).HasMaxLength(36);
b.Property(q => q.Mesout_barcode).HasMaxLength(20);
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_quality).HasMaxLength(20);
b.Property(q => q.Mesout_date).HasMaxLength(8); b.Property(q => q.Mesout_date).HasMaxLength(8);
b.Property(q => q.Mesout_move).HasPrecision(18, 2); b.Property(q => q.Mesout_move).HasPrecision(18, 2);
b.Property(q => q.Mesout_unable).HasPrecision(18, 2); b.Property(q => q.Mesout_unable).HasPrecision(18, 2);

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

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

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

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

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

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

6
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs

@ -20,6 +20,8 @@ using System.Text.Json.Serialization;
using System.IdentityModel.Tokens.Jwt; using System.IdentityModel.Tokens.Jwt;
using Volo.Abp; using Volo.Abp;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming;
public class InjectionMoldingRequestReader : IReader public class InjectionMoldingRequestReader : IReader
{ {
@ -121,7 +123,7 @@ public class InjectionMoldingRequestReader : IReader
InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput(); InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput();
input.Worker = "Vision"; input.Worker = "Vision";
input.Type = "Vision"; input.IssueRequestType = EnumIssueRequestType.Vision;
input.AutoSubmit = true; input.AutoSubmit = true;
input.ActiveDate = DateTime.Now; input.ActiveDate = DateTime.Now;
input.UseOnTheWayLocation = false; input.UseOnTheWayLocation = false;
@ -135,7 +137,7 @@ public class InjectionMoldingRequestReader : IReader
ToLocationCode = inject.AreaID.ToString(), ToLocationCode = inject.AreaID.ToString(),
PositionCode=inject.CargoID, PositionCode=inject.CargoID,
Qty = 1, Qty = 1,
RecommendType = EnumRecommendType.W, RecommendType = EnumRecommendType.RAW,
IssuedQty = 0, IssuedQty = 0,
ReceivedQty = 0, ReceivedQty = 0,
Status = EnumStatus.Open, Status = EnumStatus.Open,

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

@ -3,10 +3,15 @@ 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.BackFlushNote;
using Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote;
using Win_in.Sfs.Wms.DataExchange.WMS.DeliverRequest;
using Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest;
using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest; using Win_in.Sfs.Wms.DataExchange.WMS.MaterialRequest;
using Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
using Win_in.Sfs.Wms.DataExchange.WMS.PCK; using Win_in.Sfs.Wms.DataExchange.WMS.PCK;
using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote; using Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote;
using Win_in.Sfs.Wms.DataExchange.WMS.ScrapNote; using Win_in.Sfs.Wms.DataExchange.WMS.ScrapNote;
using Win_in.Sfs.Wms.DataExchange.WMS.TransferNote;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent;
@ -148,16 +153,14 @@ public class FawtygAutoMapperProfile : Profile
.IgnoreIHasRecommendAndHandledFrom(); .IgnoreIHasRecommendAndHandledFrom();
CreateMap<IssueNoteDTO, IssueNoteExchangeDto>() CreateMap<IssueNoteDTO, IssueNoteExchangeDto>()
.Ignore(x => x.Detail) .Ignore(x => x.Detail);
;
CreateMap<IssueNoteDetailDTO, IssueNoteDetailExchangeDto>(); CreateMap<IssueNoteDetailDTO, IssueNoteDetailExchangeDto>();
CreateMap<ScrapNoteExchangeDto, ScrapNoteEditInput>() CreateMap<ScrapNoteExchangeDto, ScrapNoteEditInput>()
.Ignore(x => x.Details) .Ignore(x => x.Details)
.Ignore(x => x.ExtraProperties) .Ignore(x => x.ExtraProperties)
.Ignore(x => x.Number) .Ignore(x => x.Number)
.Ignore(x => x.JobNumber) .Ignore(x => x.JobNumber);
;
CreateMap<ScrapNoteDetailExchangeDto, ScrapNoteDetailInput>() CreateMap<ScrapNoteDetailExchangeDto, ScrapNoteDetailInput>()
.Ignore(x => x.ItemName) .Ignore(x => x.ItemName)
.Ignore(x => x.ItemDesc1) .Ignore(x => x.ItemDesc1)
@ -174,8 +177,122 @@ public class FawtygAutoMapperProfile : Profile
.Ignore(x => x.ExpireDate) .Ignore(x => x.ExpireDate)
.Ignore(x => x.ToWarehouseCode) .Ignore(x => x.ToWarehouseCode)
.Ignore(x => x.ToWarehouseCode) .Ignore(x => x.ToWarehouseCode)
.Ignore(x => x.Uom)
.Ignore(x => x.StdPackQty);
CreateMap<TransferNoteExchangeDto, TransferNoteEditInput>()
.Ignore(x => x.Details)
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.RequestNumber)
.Ignore(x => x.JobNumber)
.Ignore(x => x.CallRequestNumber)
.Ignore(x => x.CallJobNumber)
.Ignore(x => x.CallBusinessType)
.Ignore(x => x.CallServerName)
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Confirmed)
.Ignore(x => x.ConfirmTime)
.Ignore(x => x.Details)
.Ignore(x => x.ExtraProperties);
CreateMap<TransferNoteDetailExchangeDto, TransferNoteDetailInput>()
.Ignore(x => x.ItemName)
.Ignore(x => x.ItemDesc1)
.Ignore(x => x.ItemDesc2)
.Ignore(x => x.FromLocationCode)
.Ignore(x => x.FromLocationArea)
.Ignore(x => x.FromLocationGroup)
.Ignore(x => x.FromContainerCode)
.Ignore(x => x.FromWarehouseCode)
.Ignore(x => x.FromLot)
.Ignore(x => x.FromPackingCode)
.Ignore(x => x.ToPackingCode)
.Ignore(x => x.ToContainerCode)
.Ignore(x => x.ToLocationCode)
.Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ToWarehouseCode)
.Ignore(x => x.ToLot)
.Ignore(x => x.SupplierBatch)
.Ignore(x => x.ArriveDate)
.Ignore(x => x.ProduceDate)
.Ignore(x => x.ExpireDate)
.Ignore(x => x.Uom)
.Ignore(x => x.StdPackQty);
CreateMap<MesNoteExchangeDto, MesNoteEditInput>()
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.JobNumber)
.Ignore(x => x.Details)
.Ignore(x => x.ExtraProperties);
CreateMap<MesNoteDetailExchangeDto, MesNoteDetailInput>()
.ForMember(x => x.FromLocationCode, y => y.MapFrom(t => t.FromLocationErpCode))
.ForMember(x => x.ToLocationCode, y => y.MapFrom(t => t.ToLocationErpCode))
.Ignore(x => x.ItemName)
.Ignore(x => x.ItemDesc1)
.Ignore(x => x.ItemDesc2)
.Ignore(x => x.FromLocationArea)
.Ignore(x => x.FromLocationGroup)
.Ignore(x => x.FromContainerCode)
.Ignore(x => x.FromWarehouseCode)
.Ignore(x => x.FromLot)
.Ignore(x => x.FromPackingCode)
.Ignore(x => x.ToPackingCode)
.Ignore(x => x.ToContainerCode)
.Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ToWarehouseCode)
.Ignore(x => x.ToLot)
.Ignore(x => x.SupplierBatch)
.Ignore(x => x.ArriveDate)
.Ignore(x => x.ProduceDate)
.Ignore(x => x.ExpireDate)
.Ignore(x => x.Uom)
.Ignore(x => x.StdPackQty);
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.Uom)
.Ignore(x => x.StdPackQty) .Ignore(x => x.StdPackQty)
; .Ignore(x => x.Remark)
.Ignore(x => x.ItemName)
.Ignore(x => x.ItemDesc1)
.Ignore(x => x.ItemDesc2);
CreateMap<InjectionIssueRequestExchangeDto, InjectionIssueRequestEditInput>()
.Ignore(x => x.ExtraProperties)
.Ignore(x => x.Details)
.Ignore(x => x.AutoSubmit)
.Ignore(x => x.AutoAgree)
.Ignore(x => x.AutoHandle)
.Ignore(x => x.AutoCompleteJob)
.Ignore(x => x.DirectCreateNote)
.Ignore(x => x.UseOnTheWayLocation);
CreateMap<InjectionIssueRequestDetailExchangeDto, InjectionIssueRequestDetailInput>()
.Ignore(x => x.Uom)
.Ignore(x => x.StdPackQty)
.Ignore(x => x.Remark)
.Ignore(x => x.ItemName)
.Ignore(x => x.ItemDesc1)
.Ignore(x => x.ItemDesc2)
.Ignore(x => x.ProdLine)
.Ignore(x => x.ToLocationErpCode)
.Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ToWarehouseCode)
.Ignore(x => x.RequestStatus)
.Ignore(x => x.IssuedQty)
.Ignore(x => x.ReceivedQty)
.Ignore(x => x.Status)
.Ignore(x => x.PositionCode);
} }
} }

101
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/CallMtlConverter.cs

@ -0,0 +1,101 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.InjectionIssueRequest;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class CallMtlConverter : IIncomingConverter
{
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly IIncomingToWmsManager _incomingToWmsManager;
private readonly IObjectMapper _objectMapper;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly ILocationAppService _locationAppService;
private readonly ILogger<CallMtlConverter> _logger;
public CallMtlConverter(
IIncomingToWmsManager incomingToWmsManager
, IObjectMapper objectMapper
, IItemBasicAppService itemBasicAppService
, ILogger<CallMtlConverter> logger,
ILocationAppService locationAppService,
IIncomingFromExternalManager incomingFromExternalManager)
{
_incomingToWmsManager = incomingToWmsManager;
_objectMapper = objectMapper;
_itemBasicAppService = itemBasicAppService;
_logger = logger;
_locationAppService = locationAppService;
_incomingFromExternalManager = incomingFromExternalManager;
}
public virtual async Task ConvertAsync(List<IncomingFromExternal> incomingFromExternalList)
{
if (!incomingFromExternalList.Any())
{
_logger.LogInformation("no CallMtls");
return;
}
//按Number合并InjectionIssue单据
var transferNoteList = await BuildIncomingToWmsOfInjectionIssueAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateManyAsync(transferNoteList).ConfigureAwait(false);
//归档
await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false);
}
private async Task<List<IncomingToWms>> BuildIncomingToWmsOfInjectionIssueAsync(List<IncomingFromExternal> incomingDataList)
{
var incomingToWmsList = new List<IncomingToWms>();
foreach (var incomingData in incomingDataList)
{
var incomingToWms = new IncomingToWms()
{
DataType = incomingData.DataType,
DataAction = incomingData.DataAction,
SourceSystem = incomingData.SourceSystem,
DataIdentityCode = incomingData.SourceDataGroupCode,
};
incomingToWms.SetEffectiveDate(incomingData.EffectiveDate);
var exchangeInjectionIssue = JsonSerializer.Deserialize<InjectionIssueRequestExchangeDto>(incomingData.DestinationDataContent);
var wmsInjectionIssueDetail = _objectMapper.Map<InjectionIssueRequestDetailExchangeDto, InjectionIssueRequestDetailInput>(exchangeInjectionIssue.Detail);
var wmsInjectionIssue = _objectMapper.Map<InjectionIssueRequestExchangeDto, InjectionIssueRequestEditInput>(exchangeInjectionIssue);
wmsInjectionIssue.Details = new List<InjectionIssueRequestDetailInput>();
var item = await _itemBasicAppService.GetByCodeAsync(wmsInjectionIssueDetail.ItemCode).ConfigureAwait(false);
try
{
if (item != null)
{
wmsInjectionIssueDetail.ItemName = item.Name;
wmsInjectionIssueDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsInjectionIssueDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsInjectionIssueDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
wmsInjectionIssueDetail.StdPackQty = item.StdPackQty;
}
}
catch (Exception)
{
wmsInjectionIssueDetail.ItemName = "";
wmsInjectionIssueDetail.ItemDesc1 = "";
wmsInjectionIssueDetail.ItemDesc2 = "";
wmsInjectionIssueDetail.Uom = "";
}
wmsInjectionIssue.Details.Add(wmsInjectionIssueDetail);
incomingToWms.DataContent = JsonSerializer.Serialize(wmsInjectionIssue);
incomingToWmsList.Add(incomingToWms);
}
return incomingToWmsList;
}
}

121
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/CallMtlReader.cs

@ -0,0 +1,121 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using System.Text.Json;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.CallMtl;
using Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class CallMtlReader : IReader
{
private readonly ICallMtlManager _CallMtlManager;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<CallMtlReader> _logger;
private readonly ILocationAppService _locationAppService;
public CallMtlReader(
ICallMtlManager pillTaskManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<CallMtlReader> logger
, ILocationAppService locationAppService
)
{
_CallMtlManager = pillTaskManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
_locationAppService = locationAppService;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从MES读取待处理CallMtl
var toBeProcessedPillTasks = await _CallMtlManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedPillTasks.Any())
{
_logger.LogInformation("no CallMtls");
return new List<IncomingFromExternal>();
}
//CallMtl逐一转换为MaterialRequest
var holdLocation = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.HOLD).ConfigureAwait(false);
var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks, holdLocation == null ? "" : holdLocation.Code);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
//更新MES数据状态
await _CallMtlManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false);
return incomingDataList;
}
private static List<IncomingFromExternal> BuildIncomingFromExternalFromPillTaskAsync(List<CallMtl> toBeProcessedCallMtls, string holdLocationCode)
{
var incomingDataList = new List<IncomingFromExternal>();
foreach (var CallMtl in toBeProcessedCallMtls)
{
var incomingData = BuildIncomingFromExternal(CallMtl);
incomingData.SetEffectiveDate(DateTime.Now);
incomingData.SetSuccess();
try
{
var MaterialRequest = BuildMesNoteCreateInput(CallMtl, holdLocationCode);
incomingData.DestinationDataContent = JsonSerializer.Serialize(MaterialRequest);
}
catch (Exception ex)
{
incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString());
}
incomingDataList.Add(incomingData);
}
return incomingDataList;
}
private static IncomingFromExternal BuildIncomingFromExternal(CallMtl CallMtl)
{
var incomingData = new IncomingFromExternal()
{
DataType = EnumIncomingDataType.CallMtl.ToString(),
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.MES.ToString(),
SourceDataId = CallMtl.mesout_callmtl_id.ToString(),
SourceDataGroupCode = CallMtl.mesout_callmtl_id,
SourceDataDetailCode = CallMtl.mesout_callmtl_erpno,
SourceDataContent = JsonSerializer.Serialize(CallMtl),
WriteTime = DateTime.Now,
Writer = nameof(MesIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.WMS.ToString(),
};
return incomingData;
}
private static InjectionIssueRequestExchangeDto BuildMesNoteCreateInput(CallMtl CallMtl, string holdLocationCode)
{
var request = new InjectionIssueRequestExchangeDto()
{
IssueRequestType = EnumIssueRequestType.Mes,
Worker = "MesZDJL",
ActiveDate = DateTime.TryParse(CallMtl.mesout_callmtl_wt, out DateTime dateTime) ? dateTime : DateTime.Now
};
var detail = new InjectionIssueRequestDetailExchangeDto()
{
ItemCode = CallMtl.mesout_callmtl_erpno,
Qty = CallMtl.mesout_callmtl_num,
BoxQty = CallMtl.mesout_callmtl_num,
ToLocationCode = CallMtl.mesout_callmtl_loc,
RecommendType = EnumRecommendType.RAW,
};
request.Detail = detail;
return request;
}
}

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

133
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent/Incoming/FrozenConverter.cs

@ -0,0 +1,133 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class FrozenConverter : IIncomingConverter
{
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly IIncomingToWmsManager _incomingToWmsManager;
private readonly IObjectMapper _objectMapper;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly ILocationAppService _locationAppService;
private readonly ILogger<FrozenConverter> _logger;
public FrozenConverter(
IIncomingToWmsManager incomingToWmsManager
, IObjectMapper objectMapper
, IItemBasicAppService itemBasicAppService
, ILogger<FrozenConverter> logger,
ILocationAppService locationAppService,
IIncomingFromExternalManager incomingFromExternalManager)
{
_incomingToWmsManager = incomingToWmsManager;
_objectMapper = objectMapper;
_itemBasicAppService = itemBasicAppService;
_logger = logger;
_locationAppService = locationAppService;
_incomingFromExternalManager = incomingFromExternalManager;
}
public virtual async Task ConvertAsync(List<IncomingFromExternal> incomingFromExternalList)
{
if (!incomingFromExternalList.Any())
{
_logger.LogInformation("no Frozens");
return;
}
//按Number合并MesNote单据
var transferNoteList = await BuildIncomingToWmsOfMesNoteAsync(incomingFromExternalList).ConfigureAwait(false);
await _incomingToWmsManager.CreateManyAsync(transferNoteList).ConfigureAwait(false);
//归档
await _incomingFromExternalManager.ArchiveManyAsync(incomingFromExternalList).ConfigureAwait(false);
}
private async Task<List<IncomingToWms>> BuildIncomingToWmsOfMesNoteAsync(List<IncomingFromExternal> incomingDataList)
{
var incomingToWmsList = new List<IncomingToWms>();
foreach (var incomingData in incomingDataList)
{
var incomingToWms = new IncomingToWms()
{
DataType = incomingData.DataType,
DataAction = incomingData.DataAction,
SourceSystem = incomingData.SourceSystem,
DataIdentityCode = incomingData.SourceDataGroupCode,
};
incomingToWms.SetEffectiveDate(incomingData.EffectiveDate);
var exchangeMesNote = JsonSerializer.Deserialize<MesNoteExchangeDto>(incomingData.DestinationDataContent);
var wmsMesNoteDetail = _objectMapper.Map<MesNoteDetailExchangeDto, MesNoteDetailInput>(exchangeMesNote.Detail);
var wmsMesNote = _objectMapper.Map<MesNoteExchangeDto, MesNoteEditInput>(exchangeMesNote);
wmsMesNote.Details = new List<MesNoteDetailInput>();
var item = await _itemBasicAppService.GetByCodeAsync(wmsMesNoteDetail.ItemCode).ConfigureAwait(false);
try
{
wmsMesNoteDetail.FromPackingCode = "";
wmsMesNoteDetail.ToPackingCode = "";
wmsMesNoteDetail.FromLot = "";
wmsMesNoteDetail.ToLot = "";
wmsMesNoteDetail.FromWarehouseCode = "";
wmsMesNoteDetail.ToWarehouseCode = "";
//if (transferNote.Remark.Contains("质量补移库"))//质量补
//{
// wmsMesNoteDetail.FromPackingCode = "RFE"; //质量补排序批次
// wmsMesNoteDetail.FromLot = "RFE";//质量补箱标签
// wmsMesNoteDetail.ToPackingCode = "RFE"; //质量补排序批次
// wmsMesNoteDetail.ToLot = "RFE";//质量补箱标签
//}
if (item != null)
{
wmsMesNoteDetail.ItemName = item.Name;
wmsMesNoteDetail.ItemDesc1 = !string.IsNullOrEmpty(item.Desc1) ? item.Desc1 : "";
wmsMesNoteDetail.ItemDesc2 = !string.IsNullOrEmpty(item.Desc2) ? item.Desc2 : "";
wmsMesNoteDetail.Uom = !string.IsNullOrEmpty(item.BasicUom) ? item.BasicUom : "";
wmsMesNoteDetail.StdPackQty = item.StdPackQty;
}
//if (tolocation != null)
//{
// wmsMesNoteDetail.ToLocationCode = tolocation.Code;
// wmsMesNoteDetail.ToLocationArea = tolocation.AreaCode;
// wmsMesNoteDetail.ToLocationGroup = tolocation.LocationGroupCode;
// wmsMesNoteDetail.ToWarehouseCode = tolocation.WarehouseCode;
// if (tolocation.Type == EnumLocationType.CUST)
// {
// wmsMesNote.Type = EnumTransSubType.Mes_Customer.ToString();//客户储位调拨
// }
//}
//if (fromlocation != null)
//{
// wmsMesNoteDetail.FromLocationCode = fromlocation.Code;
// wmsMesNoteDetail.FromLocationArea = fromlocation.AreaCode;
// wmsMesNoteDetail.FromLocationGroup = fromlocation.LocationGroupCode;
// wmsMesNoteDetail.FromWarehouseCode = fromlocation.WarehouseCode;
//}
}
catch (Exception)
{
wmsMesNoteDetail.ItemName = "";
wmsMesNoteDetail.ItemDesc1 = "";
wmsMesNoteDetail.ItemDesc2 = "";
wmsMesNoteDetail.Uom = "";
}
wmsMesNote.Details.Add(wmsMesNoteDetail);
incomingToWms.DataContent = JsonSerializer.Serialize(wmsMesNote);
incomingToWmsList.Add(incomingToWms);
}
return incomingToWmsList;
}
}

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

@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Frozen;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Domain;
using System.Text.Json;
using Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
public class FrozenReader : IReader
{
private readonly IFrozenManager _FrozenManager;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<FrozenReader> _logger;
private readonly ILocationAppService _locationAppService;
public FrozenReader(
IFrozenManager pillTaskManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<FrozenReader> logger
, ILocationAppService locationAppService
)
{
_FrozenManager = pillTaskManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
_locationAppService = locationAppService;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
//从MES读取待处理Frozen
var toBeProcessedPillTasks = await _FrozenManager.GetToBeProcessedListAsync().ConfigureAwait(false);
if (!toBeProcessedPillTasks.Any())
{
_logger.LogInformation("no Frozens");
return new List<IncomingFromExternal>();
}
//Frozen逐一转换为MaterialRequest
var holdLocation = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.HOLD).ConfigureAwait(false);
var incomingDataList = BuildIncomingFromExternalFromPillTaskAsync(toBeProcessedPillTasks, holdLocation==null?"": holdLocation.Code);
await _incomingFromExternalManager.CreateManyAsync(incomingDataList).ConfigureAwait(false);
//更新MES数据状态
await _FrozenManager.UpdateProcessedListAsync(toBeProcessedPillTasks).ConfigureAwait(false);
return incomingDataList;
}
private static List<IncomingFromExternal> BuildIncomingFromExternalFromPillTaskAsync(List<Frozen> toBeProcessedFrozens,string holdLocationCode)
{
var incomingDataList = new List<IncomingFromExternal>();
foreach (var Frozen in toBeProcessedFrozens)
{
var incomingData = BuildIncomingFromExternal(Frozen);
incomingData.SetEffectiveDate(DateTime.Now);
incomingData.SetSuccess();
try
{
var MaterialRequest = BuildMesNoteCreateInput(Frozen, holdLocationCode);
incomingData.DestinationDataContent = JsonSerializer.Serialize(MaterialRequest);
}
catch (Exception ex)
{
incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString());
}
incomingDataList.Add(incomingData);
}
return incomingDataList;
}
private static IncomingFromExternal BuildIncomingFromExternal(Frozen Frozen)
{
var incomingData = new IncomingFromExternal()
{
DataType = EnumIncomingDataType.MesNote.ToString(),
DataAction = EnumExchangeDataAction.Add,
SourceSystem = EnumSystemType.MES.ToString(),
SourceDataId = Frozen.mesout_frozen_id.ToString(),
SourceDataGroupCode = Frozen.mesout_frozen_id,
SourceDataDetailCode = Frozen.mesout_frozen_part,
SourceDataContent = JsonSerializer.Serialize(Frozen),
WriteTime = DateTime.Now,
Writer = nameof(MesIncomingBackgroundWorker),
DestinationSystem = EnumSystemType.WMS.ToString(),
};
return incomingData;
}
private static MesNoteExchangeDto BuildMesNoteCreateInput(Frozen Frozen, string holdLocationCode)
{
var mesNote = new MesNoteExchangeDto()
{
MesRequestNumber=Frozen.mesout_frozen_id,
Worker = Frozen.mesout_frozen_user,
Remark = Frozen.mesout_frozen_reason,
Type = Frozen.mesout_frozen_type == "0" ? EnumTransType.MesFreezed.ToString() : EnumTransType.MesUnFreezed.ToString(),
ActiveDate = DateTime.TryParse(Frozen.mesout_frozen_date, out DateTime dateTime) ? dateTime : DateTime.Now
};
var mesNoteDetail = new MesNoteDetailExchangeDto()
{
ItemCode = Frozen.mesout_frozen_part,
Qty = Frozen.mesout_frozen_num,
ToLocationErpCode = Frozen.mesout_frozen_type == "0"? holdLocationCode : Frozen.mesout_frozen_loc,
FromLocationErpCode = Frozen.mesout_frozen_type != "0"? holdLocationCode:Frozen.mesout_frozen_loc,
ToStatus= Frozen.mesout_frozen_type == "0"? EnumInventoryStatus.HOLD: EnumInventoryStatus.OK,
FromStatus = Frozen.mesout_frozen_type != "0" ? EnumInventoryStatus.HOLD : EnumInventoryStatus.OK,
};
mesNote.Detail = mesNoteDetail;
return mesNote;
}
}

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

@ -1,4 +1,5 @@
using System; using System;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -6,6 +7,7 @@ using Microsoft.Extensions.Options;
using Volo.Abp.BackgroundWorkers; using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Threading; using Volo.Abp.Threading;
using Volo.Abp.Uow; using Volo.Abp.Uow;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming; using Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent.Incoming;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.MesAgent;
@ -46,10 +48,18 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
Logger.LogInformation($"Read MesOut");//缴库 Logger.LogInformation($"Read MesOut");//缴库
var mesOutReader = workerContext.ServiceProvider.GetRequiredService<MesOutReader>(); var mesOutReader = workerContext.ServiceProvider.GetRequiredService<MesOutReader>();
var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>(); var mesOutConverter = workerContext.ServiceProvider.GetRequiredService<MesOutConverter>();
//读取并保存MesOut var TransferNoteConverter = workerContext.ServiceProvider.GetRequiredService<QtyrfeConverter>();
//读取mes缴库
var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false); var mesOutsFromExternalList = await mesOutReader.ReadAsync().ConfigureAwait(false);
//转换MesOut var mesOutsFromExternalList_ProductReceipt = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.ProductReceipt.ToString()).ToList();
await mesOutConverter.ConvertAsync(mesOutsFromExternalList).ConfigureAwait(false); var mesOutsFromExternalList_TransferNote = mesOutsFromExternalList.Where(r => r.DataType == EnumIncomingDataType.TransferNote.ToString()).ToList();
//转换缴库数据(如果有质量补得数据直接生产移库数据移到客户库位)
await mesOutConverter.ConvertAsync(mesOutsFromExternalList_ProductReceipt).ConfigureAwait(false);
if (mesOutsFromExternalList_TransferNote.Count > 0)//如果有质量补则生产储位调拨任务
{
await TransferNoteConverter.ConvertAsync(mesOutsFromExternalList_TransferNote).ConfigureAwait(false);
}
//上海和安徽无此接口 //上海和安徽无此接口
//Logger.LogInformation($"Read PullTask");//拉动任务 //Logger.LogInformation($"Read PullTask");//拉动任务
@ -59,7 +69,7 @@ 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>();
@ -84,6 +94,42 @@ public class MesIncomingBackgroundWorker : AsyncPeriodicBackgroundWorkerBase
var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false); var backFlushsFromExternalList = await BackFlushReader.ReadAsync().ConfigureAwait(false);
//转换BackFlush //转换BackFlush
await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).ConfigureAwait(false); await BackFlushConverter.ConvertAsync(backFlushsFromExternalList).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($"Read CallMtl");//自动叫料
var CallMtlReader = workerContext.ServiceProvider.GetRequiredService<CallMtlReader>();
var CallMtlConverter = workerContext.ServiceProvider.GetRequiredService<CallMtlConverter>();
//读取并保存Delivery
var callMtlFromExternalList = await CallMtlReader.ReadAsync().ConfigureAwait(false);
//转换Delivery
await CallMtlConverter.ConvertAsync(callMtlFromExternalList).ConfigureAwait(false);
Logger.LogInformation($"Completed: Handling {Incoming}"); Logger.LogInformation($"Completed: Handling {Incoming}");
} }

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

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

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

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

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

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

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

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

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

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

142
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/AssembleIssueNoteConverter.cs

@ -0,0 +1,142 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Wms.DataExchange.Domain;
using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp;
using Win_in.Sfs.Wms.DataExchange.Domain.Shared;
using Win_in.Sfs.Wms.DataExchange.WMS.PCK;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Outgoing;
public class AssembleIssueNoteConverter : IOutgoingConverter
{
private readonly string billtype = "4026";
private readonly IOutgoingFromWmsManager _outgoingFromWmsManager;
private readonly IOutgoingToExternalManager _outgoingToExternalManager;
private readonly IObjectMapper _objectMapper;
public AssembleIssueNoteConverter(
IOutgoingFromWmsManager outgoingFromWmsManager
, IOutgoingToExternalManager outgoingToExternalManager
, IObjectMapper objectMapper
)
{
_outgoingFromWmsManager = outgoingFromWmsManager;
_outgoingToExternalManager = outgoingToExternalManager;
_objectMapper = objectMapper;
}
public virtual async Task<List<OutgoingToExternal>> ConvertAsync()
{
var outgoingToExternalList = new List<OutgoingToExternal>();
//获取要同步得数据
var outgoingFromWmsList = await _outgoingFromWmsManager.GetToBeProcessedListAsync(EnumOutgoingDataType.AssembleIssue, EnumSystemType.ERP).ConfigureAwait(false);
foreach (var outgoingFromWms in outgoingFromWmsList)
{
string tyrpNumber = outgoingFromWms.TyrpNumber;
#region 主表
var wmsReceipt = JsonSerializer.Deserialize<AssembleIssueNoteDTO>(outgoingFromWms.DataContent);
var exchangeReceipt = _objectMapper.Map<AssembleIssueNoteDTO, AssembleIssueNoteExchangeDto>(wmsReceipt);
var putawayNote = BuildDataInterface(exchangeReceipt);
var outgoingToExternal = new OutgoingToExternal()
{
DataType = EnumOutgoingDataType.Issue.ToString(),
TableType = EnumExchangeTableType.MainTable,
DataAction = outgoingFromWms.DataAction,
SerialNumber = tyrpNumber,
SourceSystem = EnumSystemType.WMS.ToString(),
SourceDataId = wmsReceipt.Id.ToString(),
SourceDataGroupCode = wmsReceipt.Number,
SourceDataDetailCode = wmsReceipt.Number,
Writer = nameof(TyrpOutgoingBackgroundWorker),
DestinationSystem = EnumSystemType.ERP.ToString(),
DestinationDataId = "",
};
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceipt);
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNote);
outgoingToExternalList.Add(outgoingToExternal);
#endregion
var sumDetails = wmsReceipt.Details.GroupBy(r => new { r.ItemCode, r.HandledFromLocationErpCode, r.HandledToLocationErpCode }).Select(p => new AssembleIssueNoteDetailDTO { ItemCode = p.Key.ItemCode, HandledFromLocationErpCode = p.Key.HandledFromLocationErpCode, HandledToLocationErpCode = p.Key.HandledToLocationErpCode, HandledToQty = p.Sum(x => x.HandledToQty) }).ToList();
#region 明细
foreach (var detail in sumDetails)
{
var outgoingDetailToExternal = new OutgoingToExternal()
{
DataType = EnumOutgoingDataType.Issue.ToString(),
TableType = EnumExchangeTableType.DetailTable,
DataAction = outgoingFromWms.DataAction,
SerialNumber = tyrpNumber,
SourceSystem = EnumSystemType.WMS.ToString(),
SourceDataId = detail.Id.ToString(),
SourceDataGroupCode = wmsReceipt.Number,
SourceDataDetailCode = detail.ItemCode,
Writer = nameof(TyrpOutgoingBackgroundWorker),
DestinationSystem = EnumSystemType.ERP.ToString(),
DestinationDataId = "",
};
outgoingDetailToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
var exchangeReceiptDetail = _objectMapper.Map<AssembleIssueNoteDetailDTO, AssembleIssueNoteDetailExchangeDto>(detail);
outgoingDetailToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeReceiptDetail);
var putawayNoteDetail = BuildDataInterfaceDetail(exchangeReceipt, exchangeReceiptDetail, putawayNote.scontrol_dt_w);
outgoingDetailToExternal.DestinationDataContent = JsonSerializer.Serialize(putawayNoteDetail);
outgoingToExternalList.Add(outgoingDetailToExternal);
}
#endregion
}
//插入到中间表OutgoingToExternal
await _outgoingToExternalManager.CreateManyAsync(outgoingToExternalList).ConfigureAwait(false);
//将outgoingFromWms数据归档
await _outgoingFromWmsManager.ArchiveManyAsync(outgoingFromWmsList).ConfigureAwait(false);
return outgoingToExternalList;
}
/// <summary>
/// 构建主表
/// </summary>
/// <param name="exchangeOrder"></param>
/// <returns></returns>
private Scontrol BuildDataInterface(AssembleIssueNoteExchangeDto exchangeOrder)
{
var ret = new Scontrol()
{
scontrol_nbr = exchangeOrder.Number,
scontrol_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"),
scontrol_stat = "Y",
scontrol_dt_k = "",
scontrol_type = billtype,
scontrol_id = 0,//明细中最大scmsend_id
};
return ret;
}
/// <summary>
/// 构建明细
/// </summary>
/// <param name="exchangeOrder"></param>
/// <param name="exchangeDetailOrder"></param>
/// <returns></returns>
private Scmsend BuildDataInterfaceDetail(AssembleIssueNoteExchangeDto exchangeOrder, AssembleIssueNoteDetailExchangeDto exchangeDetailOrder, string dt_w)
{
var ret = new Scmsend()
{
scmsend_type = billtype,
scmsend_dt_w = dt_w,
scmsend_nbr = exchangeOrder.Number,
scmsend_stat1 = "1",
scmsend_part = exchangeDetailOrder.ItemCode,
scmsend_delv_date = "",
scmsend_orderno = "",
scmsend_loc = exchangeDetailOrder.FromLocationErpCode,
//scmsend_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"),
scmsend_date = DateTime.Now.ToString("yyyyMMdd"),
scmsend_qty = exchangeDetailOrder.Qty,
scmsend_wipd_loc = exchangeDetailOrder.ToLocationErpCode,
scmsend_userid = "WMS"
};
return ret;
}
}

6
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/CountAdjustNoteConverter.cs

@ -75,7 +75,7 @@ public class CountAdjustNoteConverter : IOutgoingConverter
DestinationDataId = "", DestinationDataId = "",
}; };
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate); outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
var exchangeIssue = await BuildPurchaseReceiptExchangeDtoAsync(wmsCountAdjust, detail).ConfigureAwait(false); var exchangeIssue = BuildPurchaseReceiptExchangeDtoAsync(wmsCountAdjust, detail);
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeIssue); outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeIssue);
var arrive = BuildWip(exchangeIssue, departmentCode); var arrive = BuildWip(exchangeIssue, departmentCode);
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(arrive); outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(arrive);
@ -103,7 +103,7 @@ public class CountAdjustNoteConverter : IOutgoingConverter
DestinationDataId = "", DestinationDataId = "",
}; };
outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate); outgoingToExternal.SetEffectiveDate(outgoingFromWms.EffectiveDate);
var exchangeIssue = await BuildPurchaseReceiptExchangeDtoAsync(wmsCountAdjust, detail).ConfigureAwait(false); var exchangeIssue = BuildPurchaseReceiptExchangeDtoAsync(wmsCountAdjust, detail);
outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeIssue); outgoingToExternal.SourceDataContent = JsonSerializer.Serialize(exchangeIssue);
var arrive = BuildIssue(exchangeIssue, departmentCode); var arrive = BuildIssue(exchangeIssue, departmentCode);
outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(arrive); outgoingToExternal.DestinationDataContent = JsonSerializer.Serialize(arrive);
@ -159,7 +159,7 @@ public class CountAdjustNoteConverter : IOutgoingConverter
}; };
return counta; return counta;
} }
private async Task<CountAdjustNoteExchangeDto> BuildPurchaseReceiptExchangeDtoAsync( private CountAdjustNoteExchangeDto BuildPurchaseReceiptExchangeDtoAsync(
CountAdjustNoteDTO wmsCountAdjust, CountAdjustNoteDetailExchangeDto wmsCountAdjustDetail) CountAdjustNoteDTO wmsCountAdjust, CountAdjustNoteDetailExchangeDto wmsCountAdjustDetail)
{ {
var exchangeCountAdjust = _objectMapper.Map<CountAdjustNoteDTO, CountAdjustNoteExchangeDto>(wmsCountAdjust); var exchangeCountAdjust = _objectMapper.Map<CountAdjustNoteDTO, CountAdjustNoteExchangeDto>(wmsCountAdjust);

17
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/UnplannedIssueNoteConverter.cs

@ -22,19 +22,22 @@ public class UnplannedIssueNoteConverter : IOutgoingConverter
private readonly IDepartmentAppService _departmentAppService; private readonly IDepartmentAppService _departmentAppService;
private readonly IObjectMapper _objectMapper; private readonly IObjectMapper _objectMapper;
private readonly ISfsUserAppService _sfsUserAppService; private readonly ISfsUserAppService _sfsUserAppService;
private readonly IUnplannedIssueRequestAppService _unplannedIssueRequestAppService;
public UnplannedIssueNoteConverter( public UnplannedIssueNoteConverter(
IOutgoingFromWmsManager outgoingFromWmsManager IOutgoingFromWmsManager outgoingFromWmsManager
, IOutgoingToExternalManager outgoingToExternalManager , IOutgoingToExternalManager outgoingToExternalManager
, IDepartmentAppService departmentAppService , IDepartmentAppService departmentAppService
, IObjectMapper objectMapper , IObjectMapper objectMapper
, ISfsUserAppService sfsUserAppService) , ISfsUserAppService sfsUserAppService,
IUnplannedIssueRequestAppService unplannedIssueRequestAppService)
{ {
_outgoingFromWmsManager = outgoingFromWmsManager; _outgoingFromWmsManager = outgoingFromWmsManager;
_outgoingToExternalManager = outgoingToExternalManager; _outgoingToExternalManager = outgoingToExternalManager;
_departmentAppService = departmentAppService; _departmentAppService = departmentAppService;
_objectMapper = objectMapper; _objectMapper = objectMapper;
_sfsUserAppService = sfsUserAppService; _sfsUserAppService = sfsUserAppService;
_unplannedIssueRequestAppService = unplannedIssueRequestAppService;
} }
/// <summary> /// <summary>
@ -54,6 +57,12 @@ public class UnplannedIssueNoteConverter : IOutgoingConverter
var exchangeReceipt = _objectMapper.Map<UnplannedIssueNoteDTO, UnplannedIssueNoteExchangeDto>(wmsReceipt); var exchangeReceipt = _objectMapper.Map<UnplannedIssueNoteDTO, UnplannedIssueNoteExchangeDto>(wmsReceipt);
var department = await _departmentAppService.GetByUsernameAsync(exchangeReceipt.Worker).ConfigureAwait(false); var department = await _departmentAppService.GetByUsernameAsync(exchangeReceipt.Worker).ConfigureAwait(false);
var departmentCode = department == null ? "" : department.Code; var departmentCode = department == null ? "" : department.Code;
var requset = await _unplannedIssueRequestAppService.GetByNumberAsync(exchangeReceipt.UnplannedIssueRequestNumber).ConfigureAwait(false);
string worker = requset?.Worker;
if (!string.IsNullOrEmpty(worker))
{
worker = await _sfsUserAppService.GetUserNameByUserAsync(requset.Worker).ConfigureAwait(false);
}
//if (Guid.TryParse(exchangeReceipt.CreatorId.ToString(), out Guid guid)) //if (Guid.TryParse(exchangeReceipt.CreatorId.ToString(), out Guid guid))
//{ //{
// var username = await _sfsUserAppService.GetUserNameById(guid).ConfigureAwait(false); // var username = await _sfsUserAppService.GetUserNameById(guid).ConfigureAwait(false);
@ -63,7 +72,7 @@ public class UnplannedIssueNoteConverter : IOutgoingConverter
// } // }
//} //}
var purchaseOrder = BuildDataInterface(exchangeReceipt, tyrpNumber, departmentCode); var purchaseOrder = BuildDataInterface(exchangeReceipt, tyrpNumber, departmentCode, worker);
var outgoingToExternal = new OutgoingToExternal() var outgoingToExternal = new OutgoingToExternal()
{ {
DataType = EnumOutgoingDataType.UnplannedIssue.ToString(), DataType = EnumOutgoingDataType.UnplannedIssue.ToString(),
@ -123,7 +132,7 @@ public class UnplannedIssueNoteConverter : IOutgoingConverter
/// </summary> /// </summary>
/// <param name="exchangeOrder"></param> /// <param name="exchangeOrder"></param>
/// <returns></returns> /// <returns></returns>
private Wmsoutm BuildDataInterface(UnplannedIssueNoteExchangeDto exchangeOrder,string tyrpNumber,string departmentCode) private Wmsoutm BuildDataInterface(UnplannedIssueNoteExchangeDto exchangeOrder,string tyrpNumber,string departmentCode,string worker)
{ {
string billtype = "4013"; string billtype = "4013";
if (exchangeOrder.UnplannedIssueType== EnumUnplannedIssueType.Wip) if (exchangeOrder.UnplannedIssueType== EnumUnplannedIssueType.Wip)
@ -137,7 +146,7 @@ public class UnplannedIssueNoteConverter : IOutgoingConverter
wmsoutm_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"), wmsoutm_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"),
wmsoutm_stat = "Y", wmsoutm_stat = "Y",
wmsoutm_tyrp_dt = "", wmsoutm_tyrp_dt = "",
wmsoutm_user = exchangeOrder.Worker.Length >= 6 ? exchangeOrder.Worker.Substring(exchangeOrder.Worker.Length- 6) : exchangeOrder.Worker, wmsoutm_user = worker.Length >= 6 ? worker.Substring(worker.Length- 6) : worker,
wmsoutm_dept = departmentCode,//根据Worker从UserDepartment中获取 wmsoutm_dept = departmentCode,//根据Worker从UserDepartment中获取
// wmsoutm_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"), // wmsoutm_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"),
wmsoutm_date = DateTime.Now.ToString("yyyyMMdd"), wmsoutm_date = DateTime.Now.ToString("yyyyMMdd"),

17
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent/Outgoing/UnplannedReceiptNoteConverter.cs

@ -23,6 +23,7 @@ public class UnplannedReceiptNoteConverter : IOutgoingConverter
private readonly IDepartmentAppService _departmentAppService; private readonly IDepartmentAppService _departmentAppService;
private readonly IObjectMapper _objectMapper; private readonly IObjectMapper _objectMapper;
private readonly ISfsUserAppService _sfsUserAppService; private readonly ISfsUserAppService _sfsUserAppService;
private readonly IUnplannedReceiptRequestAppService _unplannedReceiptRequestAppService;
public UnplannedReceiptNoteConverter( public UnplannedReceiptNoteConverter(
IOutgoingFromWmsManager outgoingFromWmsManager IOutgoingFromWmsManager outgoingFromWmsManager
@ -30,6 +31,9 @@ public class UnplannedReceiptNoteConverter : IOutgoingConverter
, IDepartmentAppService departmentAppService , IDepartmentAppService departmentAppService
, IObjectMapper objectMapper , IObjectMapper objectMapper
, ISfsUserAppService sfsUserAppService , ISfsUserAppService sfsUserAppService
,
IUnplannedReceiptRequestAppService unplannedReceiptRequestAppService
) )
{ {
_outgoingFromWmsManager = outgoingFromWmsManager; _outgoingFromWmsManager = outgoingFromWmsManager;
@ -37,6 +41,7 @@ public class UnplannedReceiptNoteConverter : IOutgoingConverter
_departmentAppService = departmentAppService; _departmentAppService = departmentAppService;
_objectMapper = objectMapper; _objectMapper = objectMapper;
_sfsUserAppService = sfsUserAppService; _sfsUserAppService = sfsUserAppService;
_unplannedReceiptRequestAppService = unplannedReceiptRequestAppService;
} }
/// <summary> /// <summary>
@ -56,6 +61,12 @@ public class UnplannedReceiptNoteConverter : IOutgoingConverter
var exchangeReceipt = _objectMapper.Map<UnplannedReceiptNoteDTO, UnplannedReceiptNoteExchangeDto>(wmsReceipt); var exchangeReceipt = _objectMapper.Map<UnplannedReceiptNoteDTO, UnplannedReceiptNoteExchangeDto>(wmsReceipt);
var department = await _departmentAppService.GetByUsernameAsync(exchangeReceipt.Worker).ConfigureAwait(false); var department = await _departmentAppService.GetByUsernameAsync(exchangeReceipt.Worker).ConfigureAwait(false);
var departmentCode = department == null ? "" : department.Code; var departmentCode = department == null ? "" : department.Code;
var requset = await _unplannedReceiptRequestAppService.GetByNumberAsync(exchangeReceipt.UnplannedReceiptRequestNumber).ConfigureAwait(false);
string worker = requset?.Worker;
if (!string.IsNullOrEmpty(worker))
{
worker = await _sfsUserAppService.GetUserNameByUserAsync(requset.Worker).ConfigureAwait(false);
}
//if (Guid.TryParse(exchangeReceipt.CreatorId.ToString(), out Guid guid)) //if (Guid.TryParse(exchangeReceipt.CreatorId.ToString(), out Guid guid))
//{ //{
// var username = await _sfsUserAppService.GetUserNameById(guid).ConfigureAwait(false); // var username = await _sfsUserAppService.GetUserNameById(guid).ConfigureAwait(false);
@ -64,7 +75,7 @@ public class UnplannedReceiptNoteConverter : IOutgoingConverter
// exchangeReceipt.Worker = username; // exchangeReceipt.Worker = username;
// } // }
//} //}
var purchaseOrder = BuildDataInterface(exchangeReceipt, tyrpNumber, departmentCode); var purchaseOrder = BuildDataInterface(exchangeReceipt, tyrpNumber, departmentCode, worker);
var outgoingToExternal = new OutgoingToExternal() var outgoingToExternal = new OutgoingToExternal()
{ {
DataType = EnumOutgoingDataType.UnplannedReceipt.ToString(), DataType = EnumOutgoingDataType.UnplannedReceipt.ToString(),
@ -124,7 +135,7 @@ public class UnplannedReceiptNoteConverter : IOutgoingConverter
/// </summary> /// </summary>
/// <param name="exchangeOrder"></param> /// <param name="exchangeOrder"></param>
/// <returns></returns> /// <returns></returns>
private Wmsoutm BuildDataInterface(UnplannedReceiptNoteExchangeDto exchangeOrder, string tyrpNumber,string departmentCode) private Wmsoutm BuildDataInterface(UnplannedReceiptNoteExchangeDto exchangeOrder, string tyrpNumber,string departmentCode,string worker)
{ {
string billtype = "4014"; string billtype = "4014";
if (exchangeOrder.UnplannedReceiptType == EnumUnplannedReceiptType.Wip) if (exchangeOrder.UnplannedReceiptType == EnumUnplannedReceiptType.Wip)
@ -138,7 +149,7 @@ public class UnplannedReceiptNoteConverter : IOutgoingConverter
wmsoutm_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"), wmsoutm_dt_w = DateTime.Now.ToString("yyyyMMdd HH:mm:ss"),
wmsoutm_stat = "Y", wmsoutm_stat = "Y",
wmsoutm_tyrp_dt = "", wmsoutm_tyrp_dt = "",
wmsoutm_user = exchangeOrder.Worker.Length>=6? exchangeOrder.Worker.Substring(exchangeOrder.Worker.Length-6) : exchangeOrder.Worker, wmsoutm_user = worker.Length>=6? worker.Substring(worker.Length-6) : worker,
wmsoutm_dept = departmentCode,//根据Worker从UserDepartment中获取 wmsoutm_dept = departmentCode,//根据Worker从UserDepartment中获取
//wmsoutm_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"), //wmsoutm_date = exchangeOrder.ActiveDate.ToString("yyyyMMdd"),
wmsoutm_date = DateTime.Now.ToString("yyyyMMdd"), wmsoutm_date = DateTime.Now.ToString("yyyyMMdd"),

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

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

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

@ -68,7 +68,7 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
//Do the work //Do the work
var incomingToWmsList = await incomingToWmsManager.GetToBeProcessedListAsync().ConfigureAwait(false); var incomingToWmsList = await incomingToWmsManager.GetToBeProcessedListAsync().ConfigureAwait(false);
foreach (var incomingToWms in incomingToWmsList) foreach (var incomingToWms in incomingToWmsList.OrderBy(r=>r.CreationTime))
{ {
try try
{ {
@ -169,7 +169,7 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
await incomingToWms.HandleAsnsAsync(workerContext).ConfigureAwait(false); await incomingToWms.HandleAsnsAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.ProductReceipt: case EnumIncomingDataType.ProductReceipt:
await SendProductReceipt(workerContext, incomingToWms).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);
@ -184,8 +184,20 @@ public class IncomingToWmsWorker : AsyncPeriodicBackgroundWorkerBase
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);
await SendBackFlush(workerContext, incomingToWms).ConfigureAwait(false); // await SendBackFlush(workerContext, incomingToWms).ConfigureAwait(false);
break;
case EnumIncomingDataType.TransferNote:
await incomingToWms.HandleTransferNoteAsync(workerContext).ConfigureAwait(false);
break;
case EnumIncomingDataType.MesNote:
await incomingToWms.HandleMesNoteAsync(workerContext).ConfigureAwait(false);
break;
case EnumIncomingDataType.Delivery:
await incomingToWms.HandleDeliveryRequestAsync(workerContext).ConfigureAwait(false);
break;
case EnumIncomingDataType.CallMtl:
await incomingToWms.HandleInjectionIssueRequestAsync(workerContext).ConfigureAwait(false);
break; break;
case EnumIncomingDataType.None: case EnumIncomingDataType.None:
default: default:

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

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

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

@ -26,4 +26,19 @@ public class DeliverNoteDetailExchangeDto
/// </summary> /// </summary>
[Display(Name = "数量")] [Display(Name = "数量")]
public decimal Qty { get; set; } 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();
}

34
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/InjectionIssueRequest/InjectionIssueRequestDetailExchangeDto.cs

@ -0,0 +1,34 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest;
public class InjectionIssueRequestDetailExchangeDto
{
/// <summary>
/// 目标ERP储位
/// </summary>
[Display(Name = "目标储位")]
public string ToLocationCode { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
public string ItemCode { get; set; }
/// <summary>
/// 推荐类型
/// </summary>
public EnumRecommendType RecommendType { get; set; }
}

36
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/InjectionIssueRequest/InjectionIssueRequestExchangeDto.cs

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
using Win_in.Sfs.Wms.DataExchange.WMS.PurchaseOrder;
namespace Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest;
public class InjectionIssueRequestExchangeDto
{
/// <summary>
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 操作员
/// </summary>
[Display(Name = "操作员")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Worker { get; set; }
/// <summary>
/// 生效日期
/// </summary>
[Display(Name = "生效日期")]
public DateTime ActiveDate { get; set; } = DateTime.Now.Date;
/// <summary>
/// 明细
/// </summary>
[Display(Name = "明细")]
public InjectionIssueRequestDetailExchangeDto Detail { get; set; } = new();
}

36
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteDetailExchangeDto.cs

@ -0,0 +1,36 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.DataExchange.WMS.PCK;
public class AssembleIssueNoteDetailExchangeDto
{
/// <summary>
/// 目标ERP库位
/// </summary>
[Display(Name = "目标ERP库位")]
public string ToLocationErpCode { get; set; }
public string FromPackingCode { get; set; }
/// <summary>
/// 来源ERP库位
/// </summary>
public string FromLocationErpCode { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
[Required(ErrorMessage = "{0}是必填项")]
public string ItemCode { get; set; }
}

29
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/IssueNote/AssembleIssueNote/AssembleIssueNoteExchangeDto.cs

@ -0,0 +1,29 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.DataExchange.WMS.PCK;
public class AssembleIssueNoteExchangeDto
{
/// <summary>
/// 发料记录号
/// </summary>
[Display(Name = "发料记录号")]
public string Number { get; set; }
/// <summary>
/// 生效日期
/// </summary>
[Display(Name = "生效日期")]
public DateTime ActiveDate { get; set; } = DateTime.Now.Date;
/// <summary>
/// 操作员
/// </summary>
[Display(Name = "操作员")]
public string Worker { get; set; }
/// <summary>
/// 明细
/// </summary>
[Display(Name = "明细")]
public AssembleIssueNoteDetailExchangeDto Detail { get; set; } = new();
}

48
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteDetailExchangeDto.cs

@ -0,0 +1,48 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
public class MesNoteDetailExchangeDto
{
/// <summary>
/// 上架单号
/// </summary>
[Display(Name = "移库单号")]
public string Number { get; set; }
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
public string ItemCode { get; set; }
/// <summary>
/// 目标ERP库位
/// </summary>
[Display(Name = "目标ERP库位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 来源ERP库位
/// </summary>
[Display(Name = "来源ERP库位")]
public string FromLocationErpCode { get; set; }
/// <summary>
/// 目标ERP库位
/// </summary>
[Display(Name = "来源库位状态")]
public EnumInventoryStatus FromStatus { get; set; }
/// <summary>
/// 来源ERP库位
/// </summary>
[Display(Name = "目标库位状态")]
public EnumInventoryStatus ToStatus { get; set; }
/// <summary>
/// 数量
/// </summary>
[Display(Name = "数量")]
public decimal Qty { get; set; }
}

47
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/MesNote/MesNoteExchangeDto.cs

@ -0,0 +1,47 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Win_in.Sfs.Wms.DataExchange.WMS.MesNote;
public class MesNoteExchangeDto
{
/// <summary>
/// 上架单号
/// </summary>
[Display(Name = "移库单号")]
public string Number { get; set; }
/// <summary>
/// MES请求单号
/// </summary>
[Display(Name = "MES请求单号")]
public string MesRequestNumber { get; set; }
/// <summary>
/// 生效日期
/// </summary>
[Display(Name = "生效日期")]
public DateTime ActiveDate { get; set; } = DateTime.Now.Date;
/// <summary>
/// 操作员
/// </summary>
[Display(Name = "操作员")]
public string Worker { get; set; }
/// <summary>
/// 调拨类型
/// </summary>
[Display(Name = "调拨类型")]
public string Type { get; set; }
/// <summary>
/// 备注
/// </summary>
[Display(Name = "备注")]
public string Remark { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public MesNoteDetailExchangeDto Detail { get; set; } = new();
}

11
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/ProductReceiptNote/ProductReceiptNoteDetailExchangeDto.cs

@ -61,4 +61,15 @@ public class ProductReceiptNoteDetailExchangeDto
/// 仓库 /// 仓库
/// </summary> /// </summary>
public string WarehouseCode { get; set; } public string WarehouseCode { get; set; }
/// <summary>
/// Mes条码号
/// </summary>
[Display(Name = "Mes条码号")]
public string MesBarCode { get; set; }
/// <summary>
/// Mes质量补标识
/// </summary>
[Display(Name = "Mes质量补标识")]
public string MesQuality { get; set; }
} }

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

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

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

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

9
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/UnplannedIssueNote/UnplannedIssueNoteExchangeDto.cs

@ -1,4 +1,8 @@
using System; using System;
using IdentityServer4.Models;
using System.ComponentModel.DataAnnotations;
using System.Xml.Linq;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.DataExchange.WMS.UnplannedIssueNote; namespace Win_in.Sfs.Wms.DataExchange.WMS.UnplannedIssueNote;
@ -27,4 +31,9 @@ public class UnplannedIssueNoteExchangeDto
/// 领料类别 /// 领料类别
/// </summary> /// </summary>
public EnumUnplannedIssueType UnplannedIssueType { get; set; } public EnumUnplannedIssueType UnplannedIssueType { get; set; }
/// <summary>
/// 计划外出库请求单号
/// </summary>
public string UnplannedIssueRequestNumber { get; set; }
} }

8
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Application.Contracts/WMS/UnplannedReceiptNote/UnplannedReceiptNoteExchangeDto.cs

@ -1,4 +1,8 @@
using System; using System;
using IdentityServer4.Models;
using System.ComponentModel.DataAnnotations;
using System.Xml.Linq;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.DataExchange.WMS.UnplannedReceiptNote; namespace Win_in.Sfs.Wms.DataExchange.WMS.UnplannedReceiptNote;
@ -28,5 +32,9 @@ public class UnplannedReceiptNoteExchangeDto
/// 退料类别 /// 退料类别
/// </summary> /// </summary>
public EnumUnplannedReceiptType UnplannedReceiptType { get; set; } public EnumUnplannedReceiptType UnplannedReceiptType { get; set; }
/// <summary>
/// 计划外入库请求单号
/// </summary>
public string UnplannedReceiptRequestNumber { get; set; }
} }

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

@ -531,6 +531,21 @@
数量 数量
</summary> </summary>
</member> </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"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.DeliverNote.DeliverNoteExchangeDto.Number">
<summary> <summary>
单据号 单据号
@ -551,6 +566,76 @@
客户 客户
</summary> </summary>
</member> </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"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.Deparment.DepartmentExchangerDto.Code">
<summary> <summary>
代码 代码
@ -631,6 +716,51 @@
仓库代码 仓库代码
</summary> </summary>
</member> </member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest.InjectionIssueRequestDetailExchangeDto.ToLocationCode">
<summary>
目标ERP储位
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest.InjectionIssueRequestDetailExchangeDto.Qty">
<summary>
数量
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest.InjectionIssueRequestDetailExchangeDto.BoxQty">
<summary>
需求箱数量
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest.InjectionIssueRequestDetailExchangeDto.ItemCode">
<summary>
物品代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest.InjectionIssueRequestDetailExchangeDto.RecommendType">
<summary>
推荐类型
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest.InjectionIssueRequestExchangeDto.IssueRequestType">
<summary>
叫料类型
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest.InjectionIssueRequestExchangeDto.Worker">
<summary>
操作员
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest.InjectionIssueRequestExchangeDto.ActiveDate">
<summary>
生效日期
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InjectionIssueRequest.InjectionIssueRequestExchangeDto.Detail">
<summary>
明细
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InterfaceCalendar.InterfaceCalendarExchangeDto.Enabled"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.InterfaceCalendar.InterfaceCalendarExchangeDto.Enabled">
<summary> <summary>
是否可用 是否可用
@ -771,6 +901,76 @@
明细列表 明细列表
</summary> </summary>
</member> </member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.Number">
<summary>
上架单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.ItemCode">
<summary>
物品代码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.ToLocationErpCode">
<summary>
目标ERP库位
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.FromLocationErpCode">
<summary>
来源ERP库位
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.FromStatus">
<summary>
目标ERP库位
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.ToStatus">
<summary>
来源ERP库位
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteDetailExchangeDto.Qty">
<summary>
数量
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Number">
<summary>
上架单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.MesRequestNumber">
<summary>
MES请求单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.ActiveDate">
<summary>
生效日期
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Worker">
<summary>
操作员
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Type">
<summary>
调拨类型
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Remark">
<summary>
备注
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.MesNote.MesNoteExchangeDto.Detail">
<summary>
明细列表
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ProductionReturnNote.ProductionReturnNoteDetailExchangeDto.Number"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ProductionReturnNote.ProductionReturnNoteDetailExchangeDto.Number">
<summary> <summary>
上架单号 上架单号
@ -861,6 +1061,16 @@
仓库 仓库
</summary> </summary>
</member> </member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote.ProductReceiptNoteDetailExchangeDto.MesBarCode">
<summary>
Mes条码号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote.ProductReceiptNoteDetailExchangeDto.MesQuality">
<summary>
Mes质量补标识
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote.ProductReceiptNoteExchangeDto.CompleteTime"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.ProductReceiptNote.ProductReceiptNoteExchangeDto.CompleteTime">
<summary> <summary>
完工时间 完工时间
@ -1721,6 +1931,16 @@
数量 数量
</summary> </summary>
</member> </member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteDetailExchangeDto.Lot">
<summary>
批次
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteDetailExchangeDto.PackingCode">
<summary>
箱码
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteExchangeDto.Number"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteExchangeDto.Number">
<summary> <summary>
上架单号 上架单号
@ -1741,6 +1961,16 @@
调拨类型 调拨类型
</summary> </summary>
</member> </member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteExchangeDto.Remark">
<summary>
备注
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.TransferNote.TransferNoteExchangeDto.Detail">
<summary>
明细列表
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.UnplannedIssueNote.UnplannedIssueNoteDetailExchangeDto.Number"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.UnplannedIssueNote.UnplannedIssueNoteDetailExchangeDto.Number">
<summary> <summary>
单据号 单据号
@ -1801,6 +2031,11 @@
领料类别 领料类别
</summary> </summary>
</member> </member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.UnplannedIssueNote.UnplannedIssueNoteExchangeDto.UnplannedIssueRequestNumber">
<summary>
计划外出库请求单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.UnplannedReceiptNote.UnplannedReceiptNoteDetailExchangeDto.Number"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.UnplannedReceiptNote.UnplannedReceiptNoteDetailExchangeDto.Number">
<summary> <summary>
单据号 单据号
@ -1861,6 +2096,11 @@
退料类别 退料类别
</summary> </summary>
</member> </member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.UnplannedReceiptNote.UnplannedReceiptNoteExchangeDto.UnplannedReceiptRequestNumber">
<summary>
计划外入库请求单号
</summary>
</member>
<member name="P:Win_in.Sfs.Wms.DataExchange.WMS.User.IdentityUserExchangerDto.UserName"> <member name="P:Win_in.Sfs.Wms.DataExchange.WMS.User.IdentityUserExchangerDto.UserName">
<summary> <summary>
用户号码 用户号码

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

@ -114,4 +114,20 @@ public enum EnumIncomingDataType
/// Erp库位零件(开账) /// Erp库位零件(开账)
/// </summary> /// </summary>
ErpLocationItem = 27, ErpLocationItem = 27,
/// <summary>
/// 储位调拨
/// </summary>
TransferNote=28,
/// <summary>
/// 储位调拨
/// </summary>
MesNote = 29,
/// <summary>
/// 发货单
/// </summary>
Delivery=30,
/// <summary>
/// 自动叫料
/// </summary>
CallMtl=31,
} }

15
be/DataExchange/src/Win_in.Sfs.Wms.DataExchange.Domain.Shared/Enums/EnumOutgoingDataType.cs

@ -32,7 +32,20 @@ public enum EnumOutgoingDataType
ProductRecycle = 24, ProductRecycle = 24,
Item_Transform = 25,//线边仓调整单 Item_Transform = 25,//线边仓调整单
WIPAdjust = 26,//回收料调整单 WIPAdjust = 26,//回收料调整单
SemiPutaway=27//半成品上架 SemiPutaway=27,//半成品上架
/// <summary>
/// 注塑发料
/// </summary>
InjectionIssue = 30,
/// <summary>
/// 涂装发料
/// </summary>
CoatingIssue = 31,
/// <summary>
/// 装配发料
/// </summary>
AssembleIssue = 32,
} }
public enum EnumExchangeTableType public enum EnumExchangeTableType
{ {

33
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/BaseDatas/ItemContainerController.cs

@ -0,0 +1,33 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Basedata.Application.Contracts;
namespace Win_in.Sfs.Wms.Pda.Controllers.BaseDatas;
/// <summary>
/// </summary>
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}item-container")]
public class ItemContainerController : AbpController
{
private readonly IItemContainerAppService _itemContainerAppService;
public ItemContainerController(IItemContainerAppService itemContainerAppService)
{
_itemContainerAppService = itemContainerAppService;
}
/// <summary>
/// 根据名称获取物品
/// </summary>
/// <param name="itemCode"></param>
/// <returns></returns>
[HttpGet("by-item")]
public virtual async Task<ItemContainerDTO> GetListByItemNameAsync(string itemCode)
{
var dto = await _itemContainerAppService.GetByItemCodeAsync(itemCode).ConfigureAwait(false);
return dto;
}
}

176
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/IssueJobs/KittingIssueJobsController.cs

@ -0,0 +1,176 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Auth.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Pda.Controllers.Jobs.IssueJobs;
/// <summary>
/// </summary>
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}job/kitting-issue")]
public class KittingIssueJobsController : AbpController
{
private readonly IKittingIssueJobAppService _kittingIssueJobAppService;
private readonly IUserWorkGroupAppService _userWorkGroupAppService;
public KittingIssueJobsController(IKittingIssueJobAppService kittingIssueJobAppService, IUserWorkGroupAppService userWorkGroupAppService)
{
_kittingIssueJobAppService = kittingIssueJobAppService;
_userWorkGroupAppService = userWorkGroupAppService;
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="isFinished"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<KittingIssueJobDTO>> GetListAsync(int pageSize, int pageIndex,
bool isFinished)
{
var status = new List<int>();
if (isFinished)
{
status.Add((int)EnumJobStatus.Done);
}
else
{
status.Add((int)EnumJobStatus.Open);
status.Add((int)EnumJobStatus.Wait);
status.Add((int)EnumJobStatus.Doing);
status.Add((int)EnumJobStatus.Partial);
}
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsJobRequestInputBase
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
}
};
var list = await _kittingIssueJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
return list;
}
/// <summary>
/// 承接任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("take/{id}")]
public virtual async Task TakeAsync(Guid id)
{
await _kittingIssueJobAppService.AcceptAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 取消承接任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("cancel-take/{id}")]
public virtual async Task CancelTakeAsync(Guid id)
{
await _kittingIssueJobAppService.CancelAcceptAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 执行任务明细
/// </summary>
/// <returns></returns>
[HttpPost("ExecuteDetail/{masterId}")]
public async Task ExecuteDetailAsync(Guid masterId, Guid detailId, KittingIssueJobDetailDTO issueJobDetailDto)
{
await _kittingIssueJobAppService.ExecuteDetailAsync(masterId,detailId,issueJobDetailDto).ConfigureAwait(false);
}
/// <summary>
/// 获取任务数量
/// </summary>
/// <returns></returns>
[HttpGet("count")]
public virtual async Task<ActionResult<long>> CountAsync()
{
var status = new List<int>
{
(int)EnumJobStatus.Open, (int)EnumJobStatus.Doing, (int)EnumJobStatus.Partial, (int)EnumJobStatus.Wait
};
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsJobRequestInputBase
{
Sorting = $"{nameof(InspectJobDTO.Priority)} ASC",
Condition = new Condition
{
Filters = new List<Filter>
{
//new(nameof(InspectJobDTO.WorkGroupCode),jsonCodes,"In"),
new(nameof(InspectJobDTO.JobStatus), jsonStatus, "In")
}
}
};
var count = await _kittingIssueJobAppService.GetCountByFilterAsync(request).ConfigureAwait(false);
return Ok(count);
}
/// <summary>
/// 获取任务详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public virtual async Task<ActionResult<KittingIssueJobDTO>> GetAsync(Guid id)
{
var result = await _kittingIssueJobAppService.GetAsync(id).ConfigureAwait(false);
return Ok(result);
}
/// <summary>
/// 根据Job Number 获取盘点任务列表
/// </summary>
/// <param name="jobNumber"></param>
/// <returns></returns>
[HttpGet("by-number/{jobNumber}")]
public virtual async Task<ActionResult<KittingIssueJobDTO>> GetByNumberAsync(string jobNumber)
{
var jobDto = await _kittingIssueJobAppService.GetByNumberAsync(jobNumber).ConfigureAwait(false);
if (jobDto == null)
{
throw new UserFriendlyException($"未找到编号为 {jobNumber} 的任务");
}
var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
if (!wlgCodes.Contains(jobDto.WorkGroupCode))
{
return new NotFoundObjectResult($"任务属于工作组 {jobDto.WorkGroupCode}");
}
if (jobDto.JobStatus == EnumJobStatus.Doing && jobDto.AcceptUserId != CurrentUser.Id)
{
return new NotFoundObjectResult($"任务正在被 {jobDto.AcceptUserName} 处理");
}
return jobDto;
}
}

2
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/TransferLibJobController.cs → be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs

@ -31,7 +31,7 @@ public class TransferLibJobController : AbpController
} }
/// <summary> /// <summary>
/// 获取盘点任务详情 ///
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>

125
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/KittingRequestController.cs

@ -0,0 +1,125 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
using Win_in.Sfs.Auth.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Pda.Controllers.Stores;
/// <summary>
/// Kitting叫料请求
/// </summary>
[ApiController]
[Route($"{PdaHostConst.ROOT_ROUTE}store/kitting-request")]
public class KittingRequestController : AbpController
{
private readonly IKittingIssueRequestAppService _kittingIssueRequestAppService;
private readonly IUserWorkGroupAppService _userWorkGroupAppService;
/// <summary>
/// </summary>
/// <param name="kittingIssueRequestAppService"></param>
public KittingRequestController(IKittingIssueRequestAppService kittingIssueRequestAppService,
IUserWorkGroupAppService userWorkGroupAppService)
{
_kittingIssueRequestAppService = kittingIssueRequestAppService;
_userWorkGroupAppService = userWorkGroupAppService;
}
/// <summary>
/// Kitting叫料申请
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("")]
public virtual async Task CreateAsync(KittingIssueRequestEditInput input)
{
await _kittingIssueRequestAppService.CreateAndHandleAsync(input).ConfigureAwait(false);
}
/// <summary>
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <param name="isFinished"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<KittingIssueRequestDTO>> GetListAsync(int pageSize, int pageIndex,
bool isFinished)
{
var status = new List<int>();
if (isFinished)
{
status.Add((int)EnumRequestStatus.Completed);
}
else
{
status.Add((int)EnumRequestStatus.Partial);
status.Add((int)EnumRequestStatus.Handling);
status.Add((int)EnumRequestStatus.New);
}
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsStoreRequestInputBase
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ContainerJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(ContainerJobDTO.JobStatus), jsonStatus, "In") }
}
};
var list = await _kittingIssueRequestAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
return list;
}
/// <summary>
/// </summary>
/// <param name="id"></param>
[HttpPost("handle/{id}")]
public virtual async Task HandleAsync(Guid id)
{
await _kittingIssueRequestAppService.HandleAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 根据Job Number 获取盘点任务列表
/// </summary>
/// <param name="jobNumber"></param>
/// <returns></returns>
[HttpGet("by-number/{requestNumber}")]
public virtual async Task<ActionResult<KittingIssueRequestDTO>> GetByNumberAsync(string requestNumber)
{
var jobDto = await _kittingIssueRequestAppService.GetByNumberAsync(requestNumber).ConfigureAwait(false);
if (jobDto == null)
{
throw new UserFriendlyException($"未找到编号为 {requestNumber} 的请求");
}
return jobDto;
}
/// <summary>
/// 获取任务详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public virtual async Task<ActionResult<KittingIssueRequestDTO>> GetAsync(Guid id)
{
var result = await _kittingIssueRequestAppService.GetAsync(id).ConfigureAwait(false);
return Ok(result);
}
}

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

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

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

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

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

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

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

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

2
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemBasics/IItemBasicAppService.cs

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Win_in.Sfs.Basedata.tests;
using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
@ -26,4 +27,5 @@ public interface IItemBasicAppService
Task UpsertAsyncByInterface(ItemBasicEditInput input); Task UpsertAsyncByInterface(ItemBasicEditInput input);
Task UpsertStdPackQtyAsync(string itemCode, decimal stdpackqty); Task UpsertStdPackQtyAsync(string itemCode, decimal stdpackqty);
Task<ErpCodeRequest> GetErpCodeByMesBarCode(string BarCode);
} }

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemContainers/IItemContainerAppService.cs

@ -8,4 +8,5 @@ public interface IItemContainerAppService : ISfsBaseDataAppServiceBase<ItemConta
{ {
Task<List<ItemContainerDTO>> GetListByItemCodeAsync(string itemCode); Task<List<ItemContainerDTO>> GetListByItemCodeAsync(string itemCode);
Task UpsertAndItemBasicUomAsync(string itemCode,decimal stdPackQty); Task UpsertAndItemBasicUomAsync(string itemCode,decimal stdPackQty);
Task<ItemContainerDTO> GetByItemCodeAsync(string itemCode);
} }

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/ItemStoreRelations/IItemStoreRelationAppService.cs

@ -21,4 +21,5 @@ public interface IItemStoreRelationAppService : ISfsBaseDataAppServiceBase<ItemS
Task<ItemStoreRelationDTO> GetFirstAsync(ItemAndLocationRequestInput itemAndLocations); Task<ItemStoreRelationDTO> GetFirstAsync(ItemAndLocationRequestInput itemAndLocations);
Task<ItemStoreRelationDTO> GetFirstAsync(string itemCode, string locationCode); Task<ItemStoreRelationDTO> GetFirstAsync(string itemCode, string locationCode);
Task<ItemStoreRelationDTO> GetByItemAndLocationAsync(string itemCode, string value, EnumStoreRelationType storeRelationType);
} }

24
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application.Contracts/tests/ErpCodeRequest.cs

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
namespace Win_in.Sfs.Basedata.tests;
[Serializable]
public class ErpCodeRequest
{
public string ErpCode { set; get; }
public string ProductType { set; get; }
public string ProductColor { set; get; }
public string ProductState { set; get; }
public string ProductProperty { set; get; }
public string From { set; get; }
}

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

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

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

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

9
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemContainers/ItemContainerAppService.cs

@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Caching; using Volo.Abp.Caching;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow; using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Basedata.Domain;
@ -81,7 +82,6 @@ public class ItemContainerAppService
return dtos; return dtos;
} }
protected override async Task ValidateImportModelAsync(ItemContainerImportInput importInput, List<ValidationResult> validationRresult) protected override async Task ValidateImportModelAsync(ItemContainerImportInput importInput, List<ValidationResult> validationRresult)
{ {
await base.CheckItemBasicPackUomAsync(importInput.ItemCode, importInput.BasicUom, validationRresult).ConfigureAwait(false); await base.CheckItemBasicPackUomAsync(importInput.ItemCode, importInput.BasicUom, validationRresult).ConfigureAwait(false);
@ -97,4 +97,11 @@ public class ItemContainerAppService
await _repository.UpsertAsync(entity).ConfigureAwait(false); await _repository.UpsertAsync(entity).ConfigureAwait(false);
await ItemBasicAppService.UpsertStdPackQtyAsync(itemCode, stdPackQty).ConfigureAwait(false); await ItemBasicAppService.UpsertStdPackQtyAsync(itemCode, stdPackQty).ConfigureAwait(false);
} }
[HttpPut("get-by-item")]
public async Task<ItemContainerDTO> GetByItemCodeAsync(string itemCode)
{
var entity = await _repository.FindAsync(p => p.ItemCode == itemCode).ConfigureAwait(false);
return ObjectMapper.Map<ItemContainer, ItemContainerDTO>(entity);
}
} }

14
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ItemStoreRelations/ItemStoreRelationAppService.cs

@ -99,6 +99,20 @@ public class ItemStoreRelationAppService : SfsBaseDataAppServiceBase<ItemStoreRe
return dtos; return dtos;
} }
[HttpGet("by-item-location")]
public virtual async Task<ItemStoreRelationDTO> GetByItemAndLocationAsync(string itemCode,string value, EnumStoreRelationType storeRelationType)
{
var entitie= await _repository.FirstOrDefaultAsync(p => p.ItemCode == itemCode&&p.StoreValue== value && p.Enabled == true && p.StoreRelationType == storeRelationType).ConfigureAwait(false);
if (entitie != null)
{
var dtos = ObjectMapper.Map<ItemStoreRelation, ItemStoreRelationDTO>(entitie);
return dtos;
}
else
{
return null;
}
}
/// <summary> /// <summary>
/// 当前库位 允许的 零件关系 /// 当前库位 允许的 零件关系
/// </summary> /// </summary>

16
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/Items/ItemBasicAppService.cs

@ -14,6 +14,7 @@ using Volo.Abp.Validation;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Basedata.Domain; using Win_in.Sfs.Basedata.Domain;
using Win_in.Sfs.Basedata.Domain.Shared; using Win_in.Sfs.Basedata.Domain.Shared;
using Win_in.Sfs.Basedata.tests;
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;
@ -231,4 +232,19 @@ public class ItemBasicAppService
} }
#endregion #endregion
[HttpPost("get-erp-code-by-mes-barcode")]
public virtual async Task<ErpCodeRequest> GetErpCodeByMesBarCode(string BarCode)
{
var itemBasic = await _repository.GetAsync(p => p.Code == BarCode).ConfigureAwait(false);
ErpCodeRequest rest = new ErpCodeRequest();
rest.ErpCode = itemBasic.Code;
rest.ProductType = itemBasic.Type;
rest.ProductColor = itemBasic.Color;
rest.ProductState = itemBasic.Status.ToString();
rest.ProductProperty = "油漆件";
rest.From = "WIPT";
return rest;
}
} }

12
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs

@ -68,7 +68,7 @@ public class PositionCodeAppService
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false); var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
Check.NotNull(itemBasic, "物品代码", $"物品 {input.PartCode} 不存在"); Check.NotNull(itemBasic, "物品代码", $"物品 {input.PartCode} 不存在");
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验 //如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.W && itemBasic.CanBuy != true) if (input.Type == EnumRecommendType.RAW && itemBasic.CanBuy != true)
{ {
throw new UserFriendlyException($"{input.PartCode} 物料号类型必须为采购件"); throw new UserFriendlyException($"{input.PartCode} 物料号类型必须为采购件");
} }
@ -80,7 +80,7 @@ public class PositionCodeAppService
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false); var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在"); Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在");
//如果类型选择为原料,库位的类型必须为原料库位 //如果类型选择为原料,库位的类型必须为原料库位
if (input.Type == EnumRecommendType.W && location.Type != EnumLocationType.RAW) if (input.Type == EnumRecommendType.RAW && location.Type != EnumLocationType.RAW)
{ {
throw new UserFriendlyException($"{input.LocationCode} 库位的类型必须为原料库位"); throw new UserFriendlyException($"{input.LocationCode} 库位的类型必须为原料库位");
} }
@ -120,7 +120,7 @@ public class PositionCodeAppService
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false); var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
Check.NotNull(itemBasic, "物品代码", $"物品 {input.PartCode} 不存在"); Check.NotNull(itemBasic, "物品代码", $"物品 {input.PartCode} 不存在");
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验 //如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.W && itemBasic.Type != "10C02") if (input.Type == EnumRecommendType.RAW && itemBasic.Type != "10C02")
{ {
throw new UserFriendlyException($"{input.PartCode} 物料号类型必须为原料"); throw new UserFriendlyException($"{input.PartCode} 物料号类型必须为原料");
} }
@ -132,7 +132,7 @@ public class PositionCodeAppService
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false); var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在"); Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在");
//如果类型选择为原料,库位的类型必须为原料库位 //如果类型选择为原料,库位的类型必须为原料库位
if (input.Type == EnumRecommendType.W && location.Type!= EnumLocationType.RAW) if (input.Type == EnumRecommendType.RAW && location.Type!= EnumLocationType.RAW)
{ {
throw new UserFriendlyException($"{input.LocationCode} 库位的类型必须为原料库位"); throw new UserFriendlyException($"{input.LocationCode} 库位的类型必须为原料库位");
} }
@ -180,13 +180,13 @@ public class PositionCodeAppService
} }
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false); var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验 //如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.W && itemBasic.Type != "10C02") if (input.Type == EnumRecommendType.RAW && itemBasic.Type != "10C02")
{ {
validationRresult.Add(new ValidationResult($"物品代码{input.PartCode} 物料号类型必须为原料", new string[] { "物料号类型" })); validationRresult.Add(new ValidationResult($"物品代码{input.PartCode} 物料号类型必须为原料", new string[] { "物料号类型" }));
} }
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false); var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
//如果类型选择为原料,库位的类型必须为原料库位 //如果类型选择为原料,库位的类型必须为原料库位
if (input.Type==EnumRecommendType.W && location.Type != EnumLocationType.RAW) if (input.Type==EnumRecommendType.RAW && location.Type != EnumLocationType.RAW)
{ {
validationRresult.Add(new ValidationResult($"库位代码{input.LocationCode} 库位的类型必须为原料库位", new string[] { "库位类型" })); validationRresult.Add(new ValidationResult($"库位代码{input.LocationCode} 库位的类型必须为原料库位", new string[] { "库位类型" }));
} }

11
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/ProductionLineItems/ProductionLineItemAppService.cs

@ -16,17 +16,10 @@ public class ProductionLineItemAppService :
SfsBaseDataAppServiceBase<ProductionLineItem, ProductionLineItemDTO, SfsBaseDataRequestInputBase, SfsBaseDataAppServiceBase<ProductionLineItem, ProductionLineItemDTO, SfsBaseDataRequestInputBase,
ProductionLineItemEditInput, ProductionLineItemImportInput>, IProductionLineItemAppService ProductionLineItemEditInput, ProductionLineItemImportInput>, IProductionLineItemAppService
{ {
private new readonly IProductionLineItemRepository _repository;
public ProductionLineItemAppService( public ProductionLineItemAppService(
IProductionLineItemRepository repository IProductionLineItemRepository repository, IDistributedCache<ProductionLineItemDTO> cache
, IDistributedCache<ProductionLineItemDTO> cache
, IProductionLineItemManager manager
, IProductionLineAppService prodLineAppService
) : base(repository, cache) ) : base(repository, cache)
{ {
_repository = repository;
base.CreatePolicyName = ProductionLineItemPermissions.Create; base.CreatePolicyName = ProductionLineItemPermissions.Create;
base.UpdatePolicyName = ProductionLineItemPermissions.Update; base.UpdatePolicyName = ProductionLineItemPermissions.Update;
base.DeletePolicyName = ProductionLineItemPermissions.Delete; base.DeletePolicyName = ProductionLineItemPermissions.Delete;
@ -36,7 +29,7 @@ public class ProductionLineItemAppService :
public virtual async Task UpsertAsync(ProductionLineItemEditInput input) public virtual async Task UpsertAsync(ProductionLineItemEditInput input)
{ {
var entity = ObjectMapper.Map<ProductionLineItemEditInput, ProductionLineItem>(input); var entity = ObjectMapper.Map<ProductionLineItemEditInput, ProductionLineItem>(input);
await _repository.UpsertAsync(entity).ConfigureAwait(false); await _repository.UpdateAsync(entity).ConfigureAwait(false);
} }
protected override async Task ValidateImportModelAsync(ProductionLineItemImportInput importInput, protected override async Task ValidateImportModelAsync(ProductionLineItemImportInput importInput,

9
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain.Shared/Commons/CommonHelper.cs

@ -28,4 +28,13 @@ public sealed class CommonHelper
return DateTime.Now; return DateTime.Now;
} }
} }
public static string CurTimeStr
{
get
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
} }

8
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/Boms/BomManager.cs

@ -4,6 +4,7 @@ using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
using NetTopologySuite.Geometries; using NetTopologySuite.Geometries;
using Omu.ValueInjecter; using Omu.ValueInjecter;
using Volo.Abp; using Volo.Abp;
@ -382,10 +383,15 @@ public class BomManager : DomainService, IBomManager
public virtual async Task<List<Bom>> GetAllItemByCode(string productCode,Guid id) public virtual async Task<List<Bom>> GetAllItemByCode(string productCode,Guid id)
{ {
List<Bom> boms = new List<Bom>(); List<Bom> boms = new List<Bom>();
var lst = await _repository.GetListAsync(p => p.Product == productCode).ConfigureAwait(false); var lst = await
(await _repository.GetDbSetAsync().ConfigureAwait(false))
.Where(p => p.Product == productCode)
.AsNoTracking()
.ToListAsync().ConfigureAwait(false);
foreach (var bom in lst) foreach (var bom in lst)
{ {
bom.Remark = id.ToString(); bom.Remark = id.ToString();
bom.SetId(GuidGenerator.Create());
boms.Add(bom); boms.Add(bom);
var results= await GetAllItemByCode(bom.Component,bom.Id).ConfigureAwait(false); var results= await GetAllItemByCode(bom.Component,bom.Id).ConfigureAwait(false);
boms.AddRange(results); boms.AddRange(results);

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

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

1
be/Modules/BaseData/src/Win_in.Sfs.Basedata.Domain/ProductionLineItems/ProductionLineItem.cs

@ -14,7 +14,6 @@ public class ProductionLineItem : SfsBaseDataAggregateRootBase
/// <summary> /// <summary>
/// 生产线代码 /// 生产线代码
/// </summary> /// </summary>
[Key]
[Display(Name = "生产线代码")] [Display(Name = "生产线代码")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
[IgnoreUpdate] [IgnoreUpdate]

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

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

13
be/Modules/BaseData/src/Win_in.Sfs.Basedata.EntityFrameworkCore/ProductionLineItems/ProductionLineItemDbContextModelCreatingExtensions.cs

@ -17,21 +17,8 @@ public static class ProductionLineItemDbContextModelCreatingExtensions
b.ConfigureByConvention(); b.ConfigureByConvention();
//Configure Sfs base properties //Configure Sfs base properties
b.ConfigureSfsBase(); b.ConfigureSfsBase();
//Properties
//b.Property(x => x.ProdLineId).IsRequired();
//b.Property(x => x.ItemId).IsRequired();
//b.Property(x => x.BomId).IsRequired();
//b.Property(x => x.RoutingId).IsRequired();
b.Property(x => x.ProdLineCode).IsRequired(); b.Property(x => x.ProdLineCode).IsRequired();
b.Property(x => x.ItemCode).IsRequired(); b.Property(x => x.ItemCode).IsRequired();
//Relations
//None
//Indexes
b.HasIndex(q => new { q.ProdLineCode, q.ItemCode }).IsUnique();
}); });
} }
} }

18
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application.Contracts/ExpectOuts/IExpectOutAppService.cs

@ -24,13 +24,6 @@ public interface IExpectOutAppService
EnumInventoryStatus enumInventoryStatus, EnumInventoryStatus enumInventoryStatus,
string lot); string lot);
Task RemoveListByItemCodeAndStatusAndPackingCodeAsync(
string itemCode,
string locationCode,
string packingCode,
EnumInventoryStatus enumInventoryStatus,
string lot);
/// <summary> /// <summary>
/// 保存拆箱时涉及的明细修改 /// 保存拆箱时涉及的明细修改
/// </summary> /// </summary>
@ -43,4 +36,15 @@ public interface IExpectOutAppService
/// <returns></returns> /// <returns></returns>
Task<List<ExpectOutDTO>> GetListByJobNumberAsync(SplitPacking_UpdateDetailInput input); Task<List<ExpectOutDTO>> GetListByJobNumberAsync(SplitPacking_UpdateDetailInput input);
Task RemoveByNumberAndInventoryAsync(
string jobNumber,
string itemCode,
string locationCode,
string packingCode,
EnumInventoryStatus enumInventoryStatus,
string lot,
decimal qty);
Task RemoveByNumberAsync(string number);
} }

3
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/Balances/BalanceAppService.cs

@ -604,8 +604,9 @@ public class BalanceAppService
[HttpGet("usable-list")] [HttpGet("usable-list")]
public virtual async Task<List<BalanceDTO>> GetUsableListAsync(RecommendBalanceRequestInput input) public virtual async Task<List<BalanceDTO>> GetUsableListAsync(RecommendBalanceRequestInput input)
{ {
var inventoryBalances = await _balanceManager var inventoryBalances = await _balanceManager
.GetUsableListAsync(input.ItemCode, input.Locations, input.Statuses, true).ConfigureAwait(false); .GetUsableListAsync(input.ItemCode, input.Locations, input.Statuses, input.IsPackingCode).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<Balance>, List<BalanceDTO>>(inventoryBalances); var dtos = ObjectMapper.Map<List<Balance>, List<BalanceDTO>>(inventoryBalances);

42
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs

@ -43,6 +43,48 @@ public class ExpectOutAppService
await _expectOutManager.RemoveAsync(jobNumber).ConfigureAwait(false); await _expectOutManager.RemoveAsync(jobNumber).ConfigureAwait(false);
} }
[HttpPost("remove/job-number-and-inventory-balance")]
public virtual async Task RemoveByNumberAndInventoryAsync(
string jobNumber,
string itemCode,
string locationCode,
string packingCode,
EnumInventoryStatus enumInventoryStatus,
string lot,
decimal qty)
{
var expectOut= await _repository.FindAsync(p =>
p.ItemCode == itemCode &&
p.Status == enumInventoryStatus &&
p.PackingCode == packingCode &&
p.Lot == lot&&
p.JobNumber==jobNumber
).ConfigureAwait(false);
if (expectOut != null)
{
expectOut.Qty -= qty;
if (expectOut.Qty == 0)
{
await _repository.DeleteAsync(expectOut).ConfigureAwait(false);
}
else
{
await _repository.UpdateAsync(expectOut).ConfigureAwait(false);
}
}
}
[HttpPost("remove/job-number")]
public virtual async Task RemoveByNumberAsync(string number)
{
var expectOut = await _repository.GetListAsync(p => p.JobNumber == number).ConfigureAwait(false);
if (expectOut != null && expectOut.Any())
{
await _repository.DeleteManyAsync(expectOut).ConfigureAwait(false);
}
}
[HttpPost("remove/{id}")] [HttpPost("remove/{id}")]
public virtual async Task RemoveAsync(Guid id) public virtual async Task RemoveAsync(Guid id)
{ {

1
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Domain/Balances/BalanceManager.cs

@ -867,6 +867,7 @@ public class BalanceManager : DomainService, IBalanceManager
.FilterLocationEnablePickAsync(locations) .FilterLocationEnablePickAsync(locations)
//排序库存余额 最终可用的余额集合 //排序库存余额 最终可用的余额集合
.SortByFifo(); .SortByFifo();
usableBalances = usableBalances.Where(p => p.Qty != 0).ToList();
return usableBalances; return usableBalances;
} }

5
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumLocationType.cs

@ -83,4 +83,9 @@ public enum EnumLocationType
/// Kitting线边 /// Kitting线边
/// </summary> /// </summary>
[Display(Name = "Kitting线边")] KittingWip = 15, [Display(Name = "Kitting线边")] KittingWip = 15,
/// <summary>
/// 立体库
/// </summary>
[Display(Name = "立体库")] DimensionalStorehouse = 16,
} }

7
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Basedata/EnumProductionLineType.cs

@ -19,5 +19,10 @@ public enum EnumProductionLineType
/// <summary> /// <summary>
/// 装配 /// 装配
/// </summary> /// </summary>
[Display(Name = "装配")] Assemble = 3 [Display(Name = "装配")] Assemble = 3,
/// <summary>
/// Kitting
/// </summary>
[Display(Name = "Kitting")] Kitting = 4
} }

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save