Browse Source

解决冲突

dev_DY_CC
郑勃旭 1 year ago
parent
commit
be63ce529e
  1. 39
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs
  2. 8
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/InjectionMoldingTaskAgentModule.cs
  3. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/serilogsettings.json
  4. 8
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueType.cs
  5. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/MesNotePermissions.cs
  6. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/MesRecordPermissions.cs
  7. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/DTOs/AssembleRequestDTO.cs
  8. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/DTOs/AssembleRequestDetailDTO.cs
  9. 50
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/Inputs/AssembleRequestDetailInput.cs
  10. 43
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/Inputs/AssembleRequestEditInput.cs
  11. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/Inputs/AssembleRequestImportInput.cs
  12. 25
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestDTO.cs
  13. 49
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestDetailDTO.cs
  14. 50
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestDetailInput.cs
  15. 43
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestEditInput.cs
  16. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestImportInput.cs
  17. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/ICoatingMaterialRequestAppService.cs
  18. 19
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/InjectionRequests/Inputs/InjectionRequestEditInput.cs
  19. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/AssembleRequests/AssembleRequestAutoMapperProfile.cs
  20. 71
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestAppService.cs
  21. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestAutoMapperProfile.cs
  22. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/InjectionRequests/InjectionRequestAppService.cs
  23. 10
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/AssembleRequests/AssembleRequest.cs
  24. 48
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/AssembleRequests/AssembleRequestDetail.cs
  25. 77
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/AssembleRequests/AssembleRequestManager.cs
  26. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/AssembleRequests/IAssembleRequestManager.cs
  27. 22
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequest.cs
  28. 44
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestDetail.cs
  29. 244
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestManager.cs
  30. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/CoatingMaterialRequests/ICoatingMaterialRequestManager.cs
  31. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/IInjectionRequestManager.cs
  32. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/InjectionRequestDetail.cs
  33. 78
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/InjectionRequestManager.cs
  34. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/MaterialRequests/AssembleRequests/AssembleRequestDbContextModelCreatingExtensions.cs
  35. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/MaterialRequests/CoatingMaterialRequestDbContextModelCreatingExtensions.cs
  36. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/AssembleRequestEventHandler.cs
  37. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingMaterialRequestEventHandler.cs
  38. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/CoatingIssueNoteEventHandler.cs

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

@ -28,14 +28,14 @@ public class InjectionMoldingRequestReader : IReader
private readonly IInjectionRequestAppService _injectionRequest;
private readonly IItemBasicAppService _itemService;
private readonly ILocationAppService _locService;
private readonly IIncomingFromExternalManager _incomingFromExternalManager;
private readonly ILogger<InjectionMoldingRequestReader> _logger;
private readonly IOptions<InjectionMoldingTaskOptions> _options;
private readonly IHttpClientFactory _httpClientFactory;
public InjectionMoldingRequestReader(
IInjectionRequestAppService injectionRequest
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<InjectionMoldingRequestReader> logger
, IOptions<InjectionMoldingTaskOptions> options
, IHttpClientFactory httpClientFactory
@ -45,7 +45,7 @@ public class InjectionMoldingRequestReader : IReader
)
{
_injectionRequest = injectionRequest;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
_options = options;
_httpClientFactory = httpClientFactory;
@ -54,6 +54,11 @@ public class InjectionMoldingRequestReader : IReader
}
/// <summary>
/// 读取注塑叫料任务
/// </summary>
/// <returns></returns>
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
try
@ -64,7 +69,15 @@ public class InjectionMoldingRequestReader : IReader
Action = "<>",
Column = "RequestStatus",
Logic = EnumFilterLogic.And.ToString(),
Value = ((int)EnumRequestStatus.Completed).ToString()
Value = (EnumRequestStatus.Completed).ToString()
};
jobCondition.Condition.Filters.Add(filter);
filter = new Filter()
{
Action = "==",
Column = "Type",
Logic = EnumFilterLogic.And.ToString(),
Value = "Vision"
};
jobCondition.Condition.Filters.Add(filter);
var jobs = await _injectionRequest.GetAllListByFilterAsync(jobCondition).ConfigureAwait(false);
@ -172,8 +185,24 @@ public class InjectionMoldingRequestReader : IReader
return "Error occurred";
}
private List<InjectionRequest> Parse(string p_str)
{
List<InjectionRequest> requests = new List<InjectionRequest>();
return System.Text.Json.JsonSerializer.Deserialize<List<InjectionRequest>>(p_str);
}
public class InjectionRequest
public class InjectionRequest
{
/// <summary>
/// 零件M

8
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/InjectionMoldingTaskAgentModule.cs

@ -37,8 +37,8 @@ namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent;
typeof(StoreApplicationContractsModule),
typeof(InventoryApplicationContractsModule),
typeof(LabelApplicationContractsModule),
typeof(DataExchangeDomainModule),
typeof(DataExchangeEntityFrameworkCoreModule),
//typeof(DataExchangeDomainModule),
//typeof(DataExchangeEntityFrameworkCoreModule),
//typeof(DataExchangeDomainFawtygMesModule),
//typeof(DataExchangeEntityFrameworkCoreFawtygModule),
typeof(AbpAccountApplicationContractsModule)
@ -80,9 +80,9 @@ public class InjectionMoldingTaskAgentModule : AbpModule
var configuration = context.Services.GetConfiguration();
var env = context.Services.GetSingletonInstance<IHostEnvironment>();
context.SetConsoleTitleOfConsoleApp("MesAgent", env.EnvironmentName);
context.SetConsoleTitleOfConsoleApp("InjectionAgent", env.EnvironmentName);
ConfigureDbContext();
//ConfigureDbContext();
ConfigureOptions(configuration);

4
be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/serilogsettings.json

@ -16,7 +16,7 @@
{
"Name": "File",
"Args": {
"path": "..//Logs//MesAgent//MesAgent_.log",
"path": "..//Logs//InjectionAgent//InjectionAgent_.log",
"rollingInterval": "Day",
"fileSizeLimitBytes": "52428800",
"rollOnFileSizeLimit": "true",
@ -36,4 +36,4 @@
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ]
}
}
}

8
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueType.cs

@ -18,4 +18,12 @@ public enum EnumIssueType
/// 按数量 叫料
/// </summary>
Qty=2,
/// <summary>
/// 按视觉 叫料
/// </summary>
Vision = 3,
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/MesNotePermissions.cs

@ -11,10 +11,10 @@ public static class MesNotePermissions
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
//完工收货报废记录
public const string ProductScrapNote = StorePermissions.GroupName + "." + nameof(ProductScrapNote);
//线边报废记录
public const string WipScrapNote = StorePermissions.GroupName + "." + nameof(WipScrapNote);
////完工收货报废记录
//public const string ProductScrapNote = StorePermissions.GroupName + "." + nameof(ProductScrapNote);
////线边报废记录
//public const string WipScrapNote = StorePermissions.GroupName + "." + nameof(WipScrapNote);
public static void AddMesNotePermission(this PermissionGroupDefinition permissionGroup)
{

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/MesNotes/MesRecordPermissions.cs

@ -11,10 +11,10 @@ public static class MesRecordPermissions
public const string Update = Default + "." + StorePermissions.UpdateStr;
public const string Delete = Default + "." + StorePermissions.DeleteStr;
//完工收货报废记录
public const string ProductScrapNote = StorePermissions.GroupName + "." + nameof(ProductScrapNote);
//线边报废记录
public const string WipScrapNote = StorePermissions.GroupName + "." + nameof(WipScrapNote);
////完工收货报废记录
//public const string ProductScrapNote = StorePermissions.GroupName + "." + nameof(ProductScrapNote);
////线边报废记录
//public const string WipScrapNote = StorePermissions.GroupName + "." + nameof(WipScrapNote);
public static void AddMesRecordPermission(this PermissionGroupDefinition permissionGroup)
{

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/DTOs/AssembleRequestDTO.cs

@ -10,12 +10,6 @@ public class AssembleRequestDTO : SfsStoreRequestDTOBase<AssembleRequestDetailDT
[Display(Name = "叫料类型")]
public string Type { get; set; }
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
public string ProdLine { get; set; }
/// <summary>
/// 是否使用在途库
/// </summary>

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/DTOs/AssembleRequestDetailDTO.cs

@ -47,4 +47,10 @@ public class AssembleRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
[NotMapped]
public decimal NotFinishQty => Qty - ReceivedQty;
/// <summary>
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
}

50
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/Inputs/AssembleRequestDetailInput.cs

@ -7,6 +7,8 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class AssembleRequestDetailInput : SfsStoreDetailWithQtyInputBase
{
#region 目标库位信息
/// <summary>
/// 目标库位
/// </summary>
@ -15,43 +17,43 @@ public class AssembleRequestDetailInput : SfsStoreDetailWithQtyInputBase
public string ToLocationCode { get; set; }
/// <summary>
/// 来源库区
/// 目标库区
/// </summary>
[Display(Name = "来源库区")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string FromLocationArea { get; set; }
[Display(Name = "目标库区")]
public string ToLocationArea { get; set; }
/// <summary>
/// 生产线
/// 目标库位组
/// </summary>
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
[Display(Name = "目标库位组")]
public string ToLocationGroup { get; set; }
/// <summary>
/// 工作中心
/// 目标ERP储位
/// </summary>
[Display(Name = "工作中心")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string WorkStation { get; set; }
[Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 过期时间
/// 目标仓库
/// </summary>
[Display(Name = "过期时间")]
public DateTime ExpiredTime { get; set; }
[Display(Name = "目标仓库")]
public string ToWarehouseCode { get; set; }
#endregion
/// <summary>
/// 状态
/// 生产线
/// </summary>
[Display(Name = "状态")]
public EnumRequestStatus RequestStatus { get; set; } = EnumRequestStatus.New;
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
/// <summary>
/// ERP储位
/// 状态
/// </summary>
[Display(Name = "ERP储位")]
public string ToLocationErpCode { get; set; }
[Display(Name = "状态")]
public EnumRequestStatus RequestStatus { get; set; } = EnumRequestStatus.New;
/// <summary>
/// 已发数量
@ -81,5 +83,9 @@ public class AssembleRequestDetailInput : SfsStoreDetailWithQtyInputBase
/// </summary>
public EnumRecommendType RecommendType { get; set; }
/// <summary>
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
}

43
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/Inputs/AssembleRequestEditInput.cs

@ -6,35 +6,7 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class AssembleRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
{
#region Base
/// <summary>
/// 车间
/// </summary>
[Display(Name = "车间")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Workshop { get; set; }
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
/// <summary>
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
#endregion
#region Create
/// <summary>
/// 要货单号
/// </summary>
[Display(Name = "要货单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Number { get; set; }
#region Base
/// <summary>
/// 叫料类型
@ -43,16 +15,19 @@ public class AssembleRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
public string Type { get; set; }
/// <summary>
/// 备料计划单号
/// 使用在途库
/// </summary>
[Display(Name = "备料计划单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string PreparationPlanNumber { get; set; }
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public List<AssembleRequestDetailInput> Details { get; set; } = new List<AssembleRequestDetailInput>();
public List<InjectionRequestDetailInput> Details { get; set; } = new List<InjectionRequestDetailInput>();
#endregion
#region Create
#endregion
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/AssembleRequests/Inputs/AssembleRequestImportInput.cs

@ -7,6 +7,7 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
[Display(Name = "叫料申请")]
public class AssembleRequestImportInput : SfsStoreImportInputBase
{
/// <summary>
/// 叫料类型
/// </summary>

25
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestDTO.cs

@ -6,33 +6,30 @@ namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
public class CoatingMaterialRequestDTO : SfsStoreRequestDTOBase<CoatingMaterialRequestDetailDTO>, IHasNumber
{
/// <summary>
/// 叫料类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public string Type { get; set; }
/// <summary>
/// 备料计划单号
/// 是否使用在途库
/// </summary>
[Display(Name = "备料计划单号")]
public string PreparationPlanNumber { get; set; }
[Display(Name = "是否使用在途库")]
public bool IsUseOnTheWayLocation { get; set; }
/// <summary>
/// 生产线
/// 可用来源库位Json集合
/// </summary>
[Display(Name = "生产线")]
public string ProdLine { get; set; }
public string FromLocationCodeJsonList { get; set; }
/// <summary>
/// 车间
/// 叫料库位
/// </summary>
[Display(Name = "车间")]
public string Workshop { get; set; }
public string ToLocationCode { get; set; }
/// <summary>
/// 使用在途库
/// 目标ERP储位
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
[Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; }
}

49
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestDetailDTO.cs

@ -10,49 +10,6 @@ namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
public class CoatingMaterialRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
{
/// <summary>
/// 目标库位
/// </summary>
[Display(Name = "目标库位")]
public string ToLocationCode { get; set; }
/// <summary>
/// 来源库区
/// </summary>
[Display(Name = "来源库区")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string FromLocationArea { get; set; }
// /// <summary>
// /// 在途库库位
// /// </summary>
// public string OnTheWayLocationCode { get; set; }
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
public string ProdLine { get; set; }
/// <summary>
/// 工作中心
/// </summary>
[Display(Name = "工作中心")]
public string WorkStation { get; set; }
/// <summary>
/// 过期时间
/// </summary>
[Display(Name = "过期时间")]
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 目标ERP储位
/// </summary>
[Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 已发数量
/// </summary>
@ -92,4 +49,10 @@ public class CoatingMaterialRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
[NotMapped]
public decimal NotFinishQty => Qty - ReceivedQty;
/// <summary>
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
}

50
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestDetailInput.cs

@ -8,6 +8,8 @@ namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
public class CoatingMaterialRequestDetailInput : SfsStoreDetailWithQtyInputBase
{
#region 目标库位信息
/// <summary>
/// 目标库位
/// </summary>
@ -16,43 +18,43 @@ public class CoatingMaterialRequestDetailInput : SfsStoreDetailWithQtyInputBase
public string ToLocationCode { get; set; }
/// <summary>
/// 来源库区
/// 目标库区
/// </summary>
[Display(Name = "来源库区")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string FromLocationArea { get; set; }
[Display(Name = "目标库区")]
public string ToLocationArea { get; set; }
/// <summary>
/// 生产线
/// 目标库位组
/// </summary>
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
[Display(Name = "目标库位组")]
public string ToLocationGroup { get; set; }
/// <summary>
/// 工作中心
/// 目标ERP储位
/// </summary>
[Display(Name = "工作中心")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string WorkStation { get; set; }
[Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 过期时间
/// 目标仓库
/// </summary>
[Display(Name = "过期时间")]
public DateTime ExpiredTime { get; set; }
[Display(Name = "目标仓库")]
public string ToWarehouseCode { get; set; }
#endregion
/// <summary>
/// 状态
/// 生产线
/// </summary>
[Display(Name = "状态")]
public EnumRequestStatus RequestStatus { get; set; } = EnumRequestStatus.New;
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
/// <summary>
/// ERP储位
/// 状态
/// </summary>
[Display(Name = "ERP储位")]
public string ToLocationErpCode { get; set; }
[Display(Name = "状态")]
public EnumRequestStatus RequestStatus { get; set; } = EnumRequestStatus.New;
/// <summary>
/// 已发数量
@ -82,5 +84,9 @@ public class CoatingMaterialRequestDetailInput : SfsStoreDetailWithQtyInputBase
/// </summary>
public EnumRecommendType RecommendType { get; set; }
/// <summary>
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
}

43
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestEditInput.cs

@ -7,35 +7,7 @@ namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
public class CoatingMaterialRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
{
#region Base
/// <summary>
/// 车间
/// </summary>
[Display(Name = "车间")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Workshop { get; set; }
/// <summary>
/// 生产线
/// </summary>
[Display(Name = "生产线")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ProdLine { get; set; }
/// <summary>
/// 使用在途库
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
#endregion
#region Create
/// <summary>
/// 要货单号
/// </summary>
[Display(Name = "要货单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Number { get; set; }
#region Base
/// <summary>
/// 叫料类型
@ -44,16 +16,19 @@ public class CoatingMaterialRequestEditInput : SfsStoreRequestCreateOrUpdateInpu
public string Type { get; set; }
/// <summary>
/// 备料计划单号
/// 使用在途库
/// </summary>
[Display(Name = "备料计划单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string PreparationPlanNumber { get; set; }
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public List<CoatingMaterialRequestDetailInput> Details { get; set; } = new List<CoatingMaterialRequestDetailInput>();
public List<InjectionRequestDetailInput> Details { get; set; } = new List<InjectionRequestDetailInput>();
#endregion
#region Create
#endregion
}

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestImportInput.cs

@ -8,6 +8,7 @@ namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
[Display(Name = "叫料申请")]
public class CoatingMaterialRequestImportInput : SfsStoreImportInputBase
{
/// <summary>
/// 叫料类型
/// </summary>

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/CoatingMaterialRequests/ICoatingMaterialRequestAppService.cs

@ -11,12 +11,7 @@ public interface ICoatingMaterialRequestAppService
{
Task<CoatingMaterialRequestDTO> CreateAndHandleAsync(CoatingMaterialRequestEditInput input);
/// <summary>
/// 根据备料计划生成 叫料请求
/// </summary>
/// <returns></returns>
Task<CoatingMaterialRequestDTO> CreateAndHandleByPreparationPlan(string productionPlanNumber);
Task<CoatingMaterialRequestDTO> CreateAndHandleByAPIAsync(CoatingMaterialRequestEditInput input);

19
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/MaterialRequests/InjectionRequests/Inputs/InjectionRequestEditInput.cs

@ -9,19 +9,16 @@ public class InjectionRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
#region Base
/// <summary>
/// 使用在途库
/// 叫料类型
/// </summary>
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
#endregion
#region Create
[Display(Name = "叫料类型")]
public string Type { get; set; }
/// <summary>
/// 叫料类型
/// 使用在途库
/// </summary>
[Display(Name = "叫料类型")]
public string Type { get; set; }
[Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 明细列表
@ -29,4 +26,8 @@ public class InjectionRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
[Display(Name = "明细列表")]
public List<InjectionRequestDetailInput> Details { get; set; } = new List<InjectionRequestDetailInput>();
#endregion
#region Create
#endregion
}

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/AssembleRequests/AssembleRequestAutoMapperProfile.cs

@ -28,8 +28,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<AssembleRequestImportInput, AssembleRequest>()
.IgnoreAuditedObjectProperties()
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.ProdLine)
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Details)
.Ignore(x => x.Remark)
@ -49,9 +48,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ItemName).Ignore(x => x.ItemDesc1).Ignore(x => x.ItemDesc2)
.Ignore(x => x.ProdLine)
.Ignore(x => x.WorkStation)
.Ignore(x => x.ExpiredTime)
.Ignore(x => x.ProdLine)
.Ignore(x => x.IssuedQty)
.Ignore(x => x.ReceivedQty)
.Ignore(x => x.ToBeIssuedQty)

71
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestAppService.cs

@ -160,22 +160,13 @@ public class CoatingMaterialRequestAppService : SfsStoreRequestAppServiceBase<Co
throw new UserFriendlyException($"{item.ItemCode} 物料的需求量必须大于 0");
}
}
//检验备料计划是否存在要料请求
if (!string.IsNullOrWhiteSpace(input.PreparationPlanNumber))
{
var exist = await CheckExistByPreparationPlanAsync(input.PreparationPlanNumber).ConfigureAwait(false);
if (exist.Count > 0)
{
throw new UserFriendlyException($"{input.PreparationPlanNumber} 备料计划已存在要料申请");
}
}
foreach (var item in input.Details) //赋值生产线
{
var location = await LocationAclService.GetByCodeAsync(item.ToLocationCode).ConfigureAwait(false);
item.ProdLine = location.LocationGroupCode;
input.ProdLine = location.LocationGroupCode;
}
var entity = ObjectMapper.Map<CoatingMaterialRequestEditInput, CoatingMaterialRequest>(input);
@ -268,15 +259,7 @@ public class CoatingMaterialRequestAppService : SfsStoreRequestAppServiceBase<Co
}
}
//检验备料计划是否存在要料请求
if (!string.IsNullOrWhiteSpace(input.PreparationPlanNumber))
{
var exist = await CheckExistByPreparationPlanAsync(input.PreparationPlanNumber).ConfigureAwait(false);
if (exist.Count > 0)
{
throw new UserFriendlyException($"{input.PreparationPlanNumber} 备料计划已存在要料申请");
}
}
foreach (var detailInput in input.Details) //赋值生产线
{
@ -287,7 +270,7 @@ public class CoatingMaterialRequestAppService : SfsStoreRequestAppServiceBase<Co
var location = await LocationAclService.GetByCodeAsync(detailInput.ToLocationCode).ConfigureAwait(false);
detailInput.ProdLine = location.LocationGroupCode;
input.ProdLine = location.LocationGroupCode;
input.Worker = input.Worker;
}
@ -306,51 +289,7 @@ public class CoatingMaterialRequestAppService : SfsStoreRequestAppServiceBase<Co
return dto;
}
/// <summary>
/// 根据备料计划生成 叫料请求
/// </summary>
/// <returns></returns>
[HttpPost("create-and-handle-by-preparation-plan/{number}")]
public virtual async Task<CoatingMaterialRequestDTO> CreateAndHandleByPreparationPlan(string number)
{
var prodPreparationPlan = await _preparationPlanManager.GetByNumberAsync(number).ConfigureAwait(false);
var materialRequestCreateInput = new CoatingMaterialRequestEditInput { Worker = CurrentUser.GetUserName() };
foreach (var preparationPlanDetail in prodPreparationPlan.Details)
{
var detail = new CoatingMaterialRequestDetailInput
{
ItemCode = preparationPlanDetail.ItemCode,
ItemName = preparationPlanDetail.ItemName,
ItemDesc1 = preparationPlanDetail.ItemDesc1,
ItemDesc2 = preparationPlanDetail.ItemDesc2,
Uom = preparationPlanDetail.Uom,
Qty = preparationPlanDetail.Qty,
StdPackQty = preparationPlanDetail.StdPackQty,
ToLocationCode = preparationPlanDetail.ToLocationCode
};
materialRequestCreateInput.Details.Add(detail);
}
var dto = await CreateAndHandleAsync(materialRequestCreateInput).ConfigureAwait(false);
return dto;
}
/// <summary>
/// 检验备料计划是否存在要料请求
/// </summary>
/// <param name="preparationPlanNumber"></param>
/// <returns></returns>
private async Task<List<CoatingMaterialRequest>> CheckExistByPreparationPlanAsync(string preparationPlanNumber)
{
var entities = await _repository.GetListAsync(c => c.PreparationPlanNumber == preparationPlanNumber)
.ConfigureAwait(false);
return entities;
}
/// <summary>
/// 根据类型获取叫料请求
/// </summary>

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestAutoMapperProfile.cs

@ -27,10 +27,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<CoatingMaterialRequestImportInput, CoatingMaterialRequest>()
.IgnoreAuditedObjectProperties()
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.PreparationPlanNumber)
.Ignore(x => x.ProdLine)
.Ignore(x => x.Workshop)
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Details)
.Ignore(x => x.Remark)
@ -50,9 +47,7 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ItemName).Ignore(x => x.ItemDesc1).Ignore(x => x.ItemDesc2)
.Ignore(x => x.ProdLine)
.Ignore(x => x.WorkStation)
.Ignore(x => x.ExpiredTime)
.Ignore(x => x.ProdLine)
.Ignore(x => x.IssuedQty)
.Ignore(x => x.ReceivedQty)
.Ignore(x => x.ToBeIssuedQty)

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/MaterialRequests/InjectionRequests/InjectionRequestAppService.cs

@ -186,6 +186,7 @@ public class InjectionRequestAppService : SfsStoreRequestAppServiceBase<Injectio
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
detail.StdPackQty = itemBasicDto.StdPackQty;
}
}

10
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/AssembleRequests/AssembleRequest.cs

@ -5,7 +5,7 @@ using Win_in.Sfs.Shared.Domain.Entities;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 装配申请
/// 装配叫料申请
/// </summary>
public class AssembleRequest : SfsStoreRequestAggregateRootBase<AssembleRequestDetail>
{
@ -14,13 +14,7 @@ public class AssembleRequest : SfsStoreRequestAggregateRootBase<AssembleRequestD
/// </summary>
[Display(Name = "叫料类型")]
[IgnoreUpdate]
public string Type { get; set; }
/// <summary>
/// 生产线
/// </summary>
[IgnoreUpdate]
public string ProdLine { get; set; }
public string Type { get; set; }
/// <summary>
/// 使用在途库

48
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/AssembleRequests/AssembleRequestDetail.cs

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
@ -6,60 +7,51 @@ using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 装配申请明细
/// 装配叫料申请明细
/// </summary>
public class AssembleRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation
{
#region 目标库位信息
/// <summary>
/// 到库位
/// 目标库位
/// </summary>
[Display(Name = "目标库位")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ToLocationCode { get; set; }
/// <summary>
/// 库区
/// 目标库区
/// </summary>
[Display(Name = "目标库区")]
public string ToLocationArea { get; set; }
/// <summary>
/// 库位组
/// 目标库位组
/// </summary>
[Display(Name = "目标库位组")]
public string ToLocationGroup { get; set; }
/// <summary>
/// 到ERP库
/// 目标ERP储
/// </summary>
[Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 仓库
/// 目标仓库
/// </summary>
[Display(Name = "目标仓库")]
public string ToWarehouseCode { get; set; }
/// <summary>
/// 来源库区
/// </summary>
public string FromLocationArea { get; set; }
// /// <summary>
// /// 在途库库位
// /// </summary>
// public string OnTheWayLocationCode { get; set; }
#endregion
/// <summary>
/// 生产线
/// </summary>
public string ProdLine { get; set; }
/// <summary>
/// 工作中心
/// </summary>
public string WorkStation { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 已发数量
/// </summary>
@ -102,4 +94,10 @@ public class AssembleRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLoca
/// 推荐类型
/// </summary>
public EnumRecommendType RecommendType { get; set; }
/// <summary>
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
}

77
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/AssembleRequests/AssembleRequestManager.cs

@ -14,23 +14,21 @@ public class AssembleRequestManager
, IAssembleRequestManager
{
private readonly IAssembleRequestRepository _repository;
private readonly IIssueJobRepository _issueJobRepository;
public AssembleRequestManager(
IAssembleRequestRepository repository
, IIssueJobRepository issueJobRepository
) : base(repository)
{
_repository = repository;
_issueJobRepository = issueJobRepository;
}
#region 东阳V2
#endregion
/// <summary>
/// 创建
/// </summary>
@ -49,74 +47,7 @@ public class AssembleRequestManager
return entity;
}
public virtual async Task UpdateDetailsAsync(AssembleRequest newEntity)
{
var oldEntity = await Repository.FindAsync(newEntity.Id, true).ConfigureAwait(false);
if(oldEntity!=null)
{
foreach (var newDetail in newEntity.Details)
{
oldEntity.ReplaceDetail(newDetail.Id, newDetail);
}
foreach (var detail in oldEntity.Details)
{
SetMaterialRequestDetailStatus(detail);
}
await SetMaterialRequestStatusAsync(oldEntity).ConfigureAwait(false);
await Repository.UpdateAsync(oldEntity).ConfigureAwait(false);
}
}
private void SetMaterialRequestDetailStatus(AssembleRequestDetail detail)
{
if (detail.ReceivedQty >= detail.Qty)//执行的时候 实际收料 多余 要料数
{
detail.Status = EnumStatus.Close;
}
else
{
detail.Status = EnumStatus.Open;
}
}
private async Task SetMaterialRequestStatusAsync(AssembleRequest materialRequest)
{
if (materialRequest.Details.All(p => p.Status == EnumStatus.Close))
{
materialRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false);
if (issueJobs.Count > 0)
{
if (issueJobs.All(t => t.JobStatus is EnumJobStatus.Done or EnumJobStatus.Closed or EnumJobStatus.Cancelled))
{
if (materialRequest.Details.All(p => p.ReceivedQty >= p.Qty))
{
materialRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
}
public virtual async Task CompleteAsync(string number)
{
var entity = await GetByNumberAsync(number).ConfigureAwait(false);

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/AssembleRequests/IAssembleRequestManager.cs

@ -6,10 +6,7 @@ using Win_in.Sfs.Shared.Domain;
public interface IAssembleRequestManager : ISfsStoreRequestManager<AssembleRequest, AssembleRequestDetail>,
IBulkImportService<AssembleRequest>
{
Task UpdateDetailsAsync(AssembleRequest entity);
{
Task CompleteAsync(string number);
Task<AssembleRequest> CreateBynNumberAsync(AssembleRequest entity);

22
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequest.cs

@ -6,7 +6,7 @@ using Win_in.Sfs.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
/// <summary>
/// 喷涂料申请
/// 喷涂料申请
/// </summary>
public class CoatingMaterialRequest : SfsStoreRequestAggregateRootBase<CoatingMaterialRequestDetail>
{
@ -15,25 +15,7 @@ public class CoatingMaterialRequest : SfsStoreRequestAggregateRootBase<CoatingMa
/// </summary>
[Display(Name = "叫料类型")]
[IgnoreUpdate]
public string Type { get; set; }
/// <summary>
/// 喷涂要料计划单号
/// </summary>
[IgnoreUpdate]
public string PreparationPlanNumber { get; set; }
/// <summary>
/// 生产线
/// </summary>
[IgnoreUpdate]
public string ProdLine { get; set; }
/// <summary>
/// 车间
/// </summary>
[IgnoreUpdate]
public string Workshop { get; set; }
public string Type { get; set; }
/// <summary>
/// 使用在途库

44
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestDetail.cs

@ -1,4 +1,5 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
@ -9,56 +10,46 @@ namespace Win_in.Sfs.Wms.Store.Requests.MaterialRequests;
public class CoatingMaterialRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation
{
#region 目标库位信息
/// <summary>
/// 到库位
/// 目标库位
/// </summary>
[Display(Name = "目标库位")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ToLocationCode { get; set; }
/// <summary>
/// 库区
/// 目标库区
/// </summary>
[Display(Name = "目标库区")]
public string ToLocationArea { get; set; }
/// <summary>
/// 库位组
/// 目标库位组
/// </summary>
[Display(Name = "目标库位组")]
public string ToLocationGroup { get; set; }
/// <summary>
/// 到ERP库
/// 目标ERP储
/// </summary>
[Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; }
/// <summary>
/// 仓库
/// 目标仓库
/// </summary>
[Display(Name = "目标仓库")]
public string ToWarehouseCode { get; set; }
/// <summary>
/// 来源库区
/// </summary>
public string FromLocationArea { get; set; }
// /// <summary>
// /// 在途库库位
// /// </summary>
// public string OnTheWayLocationCode { get; set; }
#endregion
/// <summary>
/// 生产线
/// </summary>
public string ProdLine { get; set; }
/// <summary>
/// 工作中心
/// </summary>
public string WorkStation { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 已发数量
/// </summary>
@ -102,4 +93,9 @@ public class CoatingMaterialRequestDetail : SfsStoreDetailWithQtyEntityBase, IHa
/// </summary>
public EnumRecommendType RecommendType { get; set; }
/// <summary>
/// 需求箱数量
/// </summary>
[Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; }
}

244
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/CoatingMaterialRequests/CoatingMaterialRequestManager.cs

@ -16,7 +16,7 @@ public class CoatingMaterialRequestManager
, ICoatingMaterialRequestManager
{
private readonly ICoatingMaterialRequestRepository _repository;
private readonly ICoatingIssueJobRepository _issueJobRepository;
public CoatingMaterialRequestManager(
ICoatingMaterialRequestRepository repository
@ -24,7 +24,7 @@ public class CoatingMaterialRequestManager
) : base(repository)
{
_repository = repository;
_issueJobRepository = issueJobRepository;
}
/// <summary>
@ -44,75 +44,7 @@ public class CoatingMaterialRequestManager
await _repository.InsertAsync(entity).ConfigureAwait(false);
return entity;
}
public virtual async Task UpdateDetailsAsync(CoatingMaterialRequest newEntity)
{
var oldEntity = await Repository.FindAsync(newEntity.Id, true).ConfigureAwait(false);
if (oldEntity != null)
{
foreach (var newDetail in newEntity.Details)
{
oldEntity.ReplaceDetail(newDetail.Id, newDetail);
}
foreach (var detail in oldEntity.Details)
{
SetMaterialRequestDetailStatus(detail);
}
await SetMaterialRequestStatus(oldEntity).ConfigureAwait(false);
await Repository.UpdateAsync(oldEntity).ConfigureAwait(false);
}
}
private void SetMaterialRequestDetailStatus(CoatingMaterialRequestDetail detail)
{
if (detail.ReceivedQty >= detail.Qty)//执行的时候 实际收料 多余 要料数
{
detail.Status = EnumStatus.Close;
}
else
{
detail.Status = EnumStatus.Open;
}
}
private async Task SetMaterialRequestStatus(CoatingMaterialRequest materialRequest)
{
if (materialRequest.Details.All(p => p.Status == EnumStatus.Close))
{
materialRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false);
if (issueJobs.Count > 0)
{
if (issueJobs.All(t => t.JobStatus is EnumJobStatus.Done or EnumJobStatus.Closed or EnumJobStatus.Cancelled))
{
if (materialRequest.Details.All(p => p.ReceivedQty >= p.Qty))
{
materialRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
}
public virtual async Task CompleteAsync(string number)
{
var entity = await GetByNumberAsync(number).ConfigureAwait(false);
@ -121,90 +53,7 @@ public class CoatingMaterialRequestManager
await CompleteAsync(entity).ConfigureAwait(false);
}
}
#region 公有
/*
// /// <summary>
// /// 处理
// /// </summary>
// /// <returns></returns>
// public virtual async Task<bool> Handle(Guid id)
// {
// var entity =await Repository.GetAsync(id);
// if (entity == null)
// {
// return false;
// }
// entity.Handle();
// await Repository.UpdateAsync(entity);
//
// await HandledPublishAsync(entity);
// return true;
// }
//
// private async Task HandledPublishAsync(MaterialRequest entity)
// {
// //发布,以生成发料任务
// var eto = BuildMaterialRequestHandledETO(entity);
// await DistributedEventBus.PublishAsync(eto);
// }
//
// /// <summary>
// /// 关闭
// /// </summary>
// /// <returns></returns>
// public virtual async Task<bool> Close(Guid id)
// {
// var entity = await Repository.GetAsync(id);
// if (entity == null)
// {
// return false;
// }
// entity.Close();
// await Repository.UpdateAsync(entity);
//
// //发布,以关闭发料任务
// var eto = BuildMaterialRequestClosedETO(entity);
// await DistributedEventBus.PublishAsync(eto);
// return true;
// }
//
// /// <summary>
// /// 打开
// /// </summary>
// /// <returns></returns>
// public virtual async Task<bool> Open(Guid id)
// {
// var entity = await Repository.GetAsync(id);
// if (entity == null)
// {
// return false;
// }
// entity.Open();
//
// await Repository.UpdateAsync(entity);
//
// //发布,以打开发料任务
// var eto = BuildMaterialRequestOpenedETO(entity);
// await DistributedEventBus.PublishAsync(eto);
// return true;
// }
public virtual async Task<MaterialRequest> CreateAndHandleAsync(MaterialRequest entity)
{
await base.CreateAsync(entity);
await base.HandleAsync(entity.Id);
return entity;
}
*/
#endregion
#region Import
/// <summary>
@ -221,89 +70,6 @@ public class CoatingMaterialRequestManager
}
#endregion
/*
#region 私有
private MaterialRequestOpenedETO BuildMaterialRequestOpenedETO(MaterialRequest materialRequest)
{
var materialRequestETO = new MaterialRequestOpenedETO()
{
Number = materialRequest.Number,
Workshop = materialRequest.Workshop,
Status = materialRequest.Status,
Details = BuildMaterialRequestDetailETO(materialRequest.Details)
};
return materialRequestETO;
}
private MaterialRequestClosedETO BuildMaterialRequestClosedETO(MaterialRequest materialRequest)
{
var materialRequestETO = new MaterialRequestClosedETO()
{
Company = materialRequest.Company,
Number = materialRequest.Number
};
return materialRequestETO;
}
private MaterialRequestHandledETO BuildMaterialRequestHandledETO(MaterialRequest materialRequest)
{
var materialRequestETO = new MaterialRequestHandledETO()
{
Company = materialRequest.Company,
Number = materialRequest.Number,
Workshop = materialRequest.Workshop,
Status = materialRequest.Status,
Details = BuildMaterialRequestDetailETO(materialRequest.Details)
};
return materialRequestETO;
}
private List<MaterialRequestDetailETO> BuildMaterialRequestDetailETO(List<MaterialRequestDetail> materialRequestDetail)
{
var list = new List<MaterialRequestDetailETO>();
foreach (var detail in materialRequestDetail)
{
var materialRequestDetailETO = new MaterialRequestDetailETO()
{
Number = detail.Number,
Item = detail.Item,
ItemCode = detail.ItemCode,
Qty = detail.Qty,
ToLocationCode = detail.ToLocationCode,
ProdLine = detail.ProdLine,
WorkStation = detail.WorkStation,
ExpiredTime = detail.ExpiredTime,
Status = detail.Status
};
list.Add(materialRequestDetailETO);
}
return list;
}
#endregion
*/
}
///// <summary>
///// 为了解决补料时 无法拿到订阅错误信息
///// </summary>
///// <param name="entity"></param>
///// <param name="flag"></param>
///// <returns></returns>
//public virtual async Task<MaterialRequest> CreateAndHandleAsync(MaterialRequest entity, bool flag)
//{
// await entity.Handle();
// foreach (var detail in entity.Details)
// {
// detail.Status = EnumStoreStatus.Handle;
// }
// await base.CreateAsync(entity);
// //发布,以打开发料任务??
// //var eto = BuildMaterialRequestHandledETO(entity);
// //await DistributedEventBus.PublishAsync(eto);
// return entity;
//}

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/CoatingMaterialRequests/ICoatingMaterialRequestManager.cs

@ -7,10 +7,7 @@ using Win_in.Sfs.Shared.Domain;
public interface ICoatingMaterialRequestManager : ISfsStoreRequestManager<CoatingMaterialRequest, CoatingMaterialRequestDetail>,
IBulkImportService<CoatingMaterialRequest>
{
// Task<MaterialRequest> CreateAndHandleAsync(MaterialRequest entity);
Task UpdateDetailsAsync(CoatingMaterialRequest entity);
{
Task CompleteAsync(string number);
Task<CoatingMaterialRequest> CreateBynNumberAsync(CoatingMaterialRequest entity);

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/IInjectionRequestManager.cs

@ -5,8 +5,7 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public interface IInjectionRequestManager : ISfsStoreRequestManager<InjectionRequest, InjectionRequestDetail>,
IBulkImportService<InjectionRequest>
{
Task UpdateDetailsAsync(InjectionRequest entity);
{
Task CompleteAsync(string number);

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/InjectionRequestDetail.cs

@ -7,7 +7,7 @@ using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary>
/// 注塑申请明细
/// 注塑叫料申请明细
/// </summary>
public class InjectionRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation
{

78
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/MaterialRequests/InjectionRequests/InjectionRequestManager.cs

@ -11,18 +11,17 @@ public class InjectionRequestManager
, IInjectionRequestManager
{
private readonly IInjectionRequestRepository _repository;
private readonly IIssueJobRepository _issueJobRepository;
private readonly IInjectionJobRepository _injectionJobRepository;
public InjectionRequestManager(
IInjectionRequestRepository repository
, IIssueJobRepository issueJobRepository
, IInjectionJobRepository injectionJobRepository
) : base(repository)
{
_repository = repository;
_issueJobRepository = issueJobRepository;
_injectionJobRepository = injectionJobRepository;
}
#region 东阳V2
#endregion
@ -47,76 +46,7 @@ public class InjectionRequestManager
await _repository.InsertAsync(entity).ConfigureAwait(false);
return entity;
}
public virtual async Task UpdateDetailsAsync(InjectionRequest newEntity)
{
var oldEntity = await Repository.FindAsync(newEntity.Id).ConfigureAwait(false);
if (oldEntity != null)
{
foreach (var newDetail in newEntity.Details)
{
oldEntity.ReplaceDetail(newDetail.Id, newDetail);
}
foreach (var detail in oldEntity.Details)
{
SetMaterialRequestDetailStatus(detail);
}
await SetMaterialRequestStatusAsync(oldEntity).ConfigureAwait(false);
await Repository.UpdateAsync(oldEntity).ConfigureAwait(false);
}
}
private void SetMaterialRequestDetailStatus(InjectionRequestDetail detail)
{
if (detail.ReceivedQty >= detail.Qty) //执行的时候 实际收料 多余 要料数
{
detail.Status = EnumStatus.Close;
}
else
{
detail.Status = EnumStatus.Open;
}
}
private async Task SetMaterialRequestStatusAsync(InjectionRequest materialRequest)
{
if (materialRequest.Details.All(p => p.Status == EnumStatus.Close))
{
materialRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
var issueJobs = await _issueJobRepository
.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false);
if (issueJobs.Count > 0)
{
if (issueJobs.All(t =>
t.JobStatus is EnumJobStatus.Done or EnumJobStatus.Closed or EnumJobStatus.Cancelled))
{
if (materialRequest.Details.All(p => p.ReceivedQty >= p.Qty))
{
materialRequest.RequestStatus = EnumRequestStatus.Completed;
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
else
{
materialRequest.RequestStatus = EnumRequestStatus.Partial;
}
}
}
public virtual async Task CompleteAsync(string number)
{
var entity = await GetByNumberAsync(number).ConfigureAwait(false);

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/MaterialRequests/AssembleRequests/AssembleRequestDbContextModelCreatingExtensions.cs

@ -19,8 +19,7 @@ public static class AssembleRequestDbContextModelCreatingExtensions
b.ConfigureSfsStoreBase();
//Properties
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//Relations
@ -45,10 +44,8 @@ public static class AssembleRequestDbContextModelCreatingExtensions
b.Property(q => q.ToLocationErpCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ToWarehouseCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ToLocationArea).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ToLocationGroup).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ExpiredTime).IsRequired();
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.WorkStation).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ToLocationGroup).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.IssuedQty).HasPrecision(18, 6);
b.Property(q => q.ReceivedQty).HasPrecision(18, 6);
b.Property(q => q.Status).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/MaterialRequests/CoatingMaterialRequestDbContextModelCreatingExtensions.cs

@ -19,10 +19,7 @@ public static class CoatingMaterialRequestDbContextModelCreatingExtensions
b.ConfigureSfsStoreBase();
//Properties
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.PreparationPlanNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Workshop).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//Relations
@ -47,10 +44,8 @@ public static class CoatingMaterialRequestDbContextModelCreatingExtensions
b.Property(q => q.ToLocationErpCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ToWarehouseCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ToLocationArea).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ToLocationGroup).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ExpiredTime).IsRequired();
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.WorkStation).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ToLocationGroup).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.IssuedQty).HasPrecision(18, 6);
b.Property(q => q.ReceivedQty).HasPrecision(18, 6);
b.Property(q => q.Status).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/AssembleRequestEventHandler.cs

@ -209,7 +209,7 @@ public class AssembleRequestEventHandler
ItemCode = assembleRequestDetail.ItemCode,
Qty = assembleRequestDetail.ToBeIssuedQty,
LocationTypes = transactionType.OutLocationTypes,
LocationAreas = new List<string> { assembleRequestDetail.FromLocationArea },
Statuses = transactionType.OutInventoryStatuses,
};
//获取推荐库存
@ -245,9 +245,7 @@ public class AssembleRequestEventHandler
//ProductionLineDTO prodLine = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationGroupCode).ConfigureAwait(false);
var detail = ObjectMapper.Map<BalanceDTO, AssembleJobDetailInput>(balance);
detail.RequestLocationCode = assembleRequestDetail.ToLocationCode;
detail.WorkStation = assembleRequestDetail.WorkStation;
detail.ExpiredTime = assembleRequestDetail.ExpiredTime;
detail.RequestLocationCode = assembleRequestDetail.ToLocationCode;
detail.PositionCode = assembleRequestDetail.PositionCode;
detail.RecommendType = assembleRequestDetail.RecommendType;

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingMaterialRequestEventHandler.cs

@ -209,7 +209,7 @@ public class CoatingMaterialRequestEventHandler
ItemCode = CoatingMaterialRequestDetail.ItemCode,
Qty = CoatingMaterialRequestDetail.ToBeIssuedQty,
LocationTypes = transactionType.OutLocationTypes,
LocationAreas = new List<string> { CoatingMaterialRequestDetail.FromLocationArea },
Statuses = transactionType.OutInventoryStatuses,
};
//获取推荐库存
@ -231,7 +231,7 @@ public class CoatingMaterialRequestEventHandler
jobDetails.Add(detail);
CoatingMaterialRequestDetail.IssuedQty += recommend.Qty;
await _CoatingMaterialRequestManager.UpdateDetailsAsync(CoatingMaterialRequest).ConfigureAwait(false);
}
}
@ -243,9 +243,7 @@ public class CoatingMaterialRequestEventHandler
//ProductionLineDTO prodLine = await _productionLineAppService.GetByLocationGroupCodeAsync(toLocationGroupCode).ConfigureAwait(false);
var detail = ObjectMapper.Map<BalanceDTO, CoatingIssueJobDetailInput>(balance);
detail.RequestLocationCode = CoatingMaterialRequestDetail.ToLocationCode;
detail.WorkStation = CoatingMaterialRequestDetail.WorkStation;
detail.ExpiredTime = CoatingMaterialRequestDetail.ExpiredTime;
detail.RequestLocationCode = CoatingMaterialRequestDetail.ToLocationCode;
detail.PositionCode = CoatingMaterialRequestDetail.PositionCode;
detail.RecommendType = CoatingMaterialRequestDetail.RecommendType;

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/Note/CoatingIssueNoteEventHandler.cs

@ -94,7 +94,7 @@ public class CoatingIssueNoteEventHandler
}
}
await _materialRequestManager.UpdateDetailsAsync(materialRequest).ConfigureAwait(false);
}
}
}

Loading…
Cancel
Save