Browse Source

修改 字段

dev_DY_CC
郑勃旭 1 year ago
parent
commit
42dd78785b
  1. 4
      be/DataExchange/Fawtyg/Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent/Incoming/InjectionMoldingRequestReader.cs
  2. 36
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueRequestType.cs
  3. 19
      be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueType.cs
  4. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/DTOs/InjectionIssueJobDTO.cs
  5. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/DTOs/InjectionIssueJobDetailDTO.cs
  6. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/Inputs/InjectionIssueJobDetailInput.cs
  7. 29
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/Inputs/InjectionIssueJobEditInput.cs
  8. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/DTOs/InjectionIssueNoteDTO.cs
  9. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/DTOs/InjectionIssueNoteDetailDTO.cs
  10. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/IInjectionIssueNoteAppService.cs
  11. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteDetailInput.cs
  12. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteEditInput.cs
  13. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteImportInput.cs
  14. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDTO.cs
  15. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDetailDTO.cs
  16. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs
  17. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs
  18. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestEditInput.cs
  19. 21
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestImportInput.cs
  20. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs
  21. 249
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs
  22. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAutoMapperProfile.cs
  23. 23
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJob.cs
  24. 207
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobDetail.cs
  25. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNote.cs
  26. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteDetail.cs
  27. 14
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequest.cs
  28. 35
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestDetail.cs
  29. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobDbContextModelCreatingExtensions.cs
  30. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteDbContextModelCreatingExtensions.cs
  31. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/InjectionRequests/InjectionIssueRequestDbContextModelCreatingExtensions.cs
  32. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/InjectionRequestAutoMapperProfile.cs
  33. 18
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/AssembleIssueRequestEventHandler.cs
  34. 18
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingIssueRequestEventHandler.cs
  35. 269
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionIssueRequestEventHandler.cs
  36. 18
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/KittingIssueRequestEventHandler.cs

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

36
be/Modules/Shared/src/Win_in.Sfs.Shared.Domain.Shared/Enums/Store/EnumIssueRequestType.cs

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
public enum EnumIssueRequestType
{
None = 0,
/// <summary>
/// 视觉
/// </summary>
[Display(Name = "视觉发起")]
Vision =1,
/// <summary>
/// Mes
/// </summary>
[Display(Name = "Mes发起")]
Mes =2,
/// <summary>
/// 立体库
/// </summary>
[Display(Name = "立体库发起")]
DimensionalStorehouse=3,
/// <summary>
/// 位置码
/// </summary>
[Display(Name = "位置码")]
PositionCode =4,
}

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

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -10,20 +11,20 @@ public enum EnumIssueType
None=0, None=0,
/// <summary> /// <summary>
/// 按箱 叫 /// 原材
/// </summary> /// </summary>
BoxQty=1, [Display(Name = "原材料")]
RAW =1,
/// <summary> /// <summary>
/// 按数量 叫料 /// 半成品
/// </summary> /// </summary>
Qty=2, [Display(Name = "半成品")]
SEMI= 2,
/// <summary> /// <summary>
/// 按视觉 叫料 /// 立体库
/// </summary> /// </summary>
Vision = 3, [Display(Name = "立体库")]
DimensionalStorehouse = 2,
} }

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/DTOs/InjectionIssueJobDTO.cs

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -10,11 +11,10 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueJobDTO : SfsJobDTOBase<InjectionIssueJobDetailDTO> public class InjectionIssueJobDTO : SfsJobDTOBase<InjectionIssueJobDetailDTO>
{ {
/// <summary> /// <summary>
/// 叫料请求类型 /// 叫料类型
/// </summary> /// </summary>
[Display(Name = "叫料请求类型")] [Display(Name = "叫料类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] public EnumIssueRequestType IssueRequestType { get; set; }
public string RequestType { get; set; }
/// <summary> /// <summary>
/// 生产线 /// 生产线

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/DTOs/InjectionIssueJobDetailDTO.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
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;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -47,6 +48,12 @@ public class InjectionIssueJobDetailDTO : SfsDetailDTOBase
/// </summary> /// </summary>
public string Uom { get; set; } public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion #endregion
#region 请求信息 #region 请求信息

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/Inputs/InjectionIssueJobDetailInput.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
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;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -47,6 +48,12 @@ public class InjectionIssueJobDetailInput : SfsDetailInputBase
/// </summary> /// </summary>
public string Uom { get; set; } public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion #endregion
#region 请求信息 #region 请求信息

29
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/InjectionJobs/Inputs/InjectionIssueJobEditInput.cs

@ -9,16 +9,15 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<InjectionIssueJobDetailInput> public class InjectionIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<InjectionIssueJobDetailInput>
{ {
#region Create
/// <summary> /// <summary>
/// 上游任务编号 /// 上游任务编号
/// </summary> /// </summary>
[Display(Name = "上游任务编号")] [Display(Name = "上游任务编号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string UpStreamJobNumber { get; set; } public string UpStreamJobNumber { get; set; }
/// <summary> /// <summary>
/// 要货单号 /// 要货单号
/// </summary> /// </summary>
[Display(Name = "要货单号")] [Display(Name = "要货单号")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
@ -26,44 +25,42 @@ public class InjectionIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCr
public string InjectionIssueRequestNumber { get; set; } public string InjectionIssueRequestNumber { get; set; }
/// <summary> /// <summary>
/// 叫料请求类型 /// 任务类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
/// <summary>
/// 任务类型
/// </summary> /// </summary>
[Display(Name = "任务类型")] [Display(Name = "任务类型")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
public EnumJobType JobType { get; set; } public EnumJobType JobType { get; set; }
/// <summary> /// <summary>
/// 是否自动完成 /// 是否自动完成
/// </summary> /// </summary>
[Display(Name = "是否自动完成")] [Display(Name = "是否自动完成")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
public bool IsAutoComplete { get; set; } public bool IsAutoComplete { get; set; }
/// <summary> /// <summary>
/// 过期时间 /// 过期时间
/// </summary> /// </summary>
[Display(Name = "过期时间")] [Display(Name = "过期时间")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
public DateTime ExpiredTime { get; set; } public DateTime ExpiredTime { get; set; }
/// <summary> /// <summary>
/// 任务明细 /// 任务明细
/// </summary> /// </summary>
[Display(Name = "任务明细")] [Display(Name = "任务明细")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
public List<InjectionIssueJobDetailInput> Details { get; set; } = new(); public List<InjectionIssueJobDetailInput> Details { get; set; } = new();
/// <summary> /// <summary>
/// 使用在途库 /// 使用在途库
/// </summary> /// </summary>
[Display(Name = "使用在途库")] [Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; } public bool UseOnTheWayLocation { get; set; }
#endregion
/// <summary>
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
} }

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/DTOs/InjectionIssueNoteDTO.cs

@ -1,6 +1,7 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -20,11 +21,10 @@ public class InjectionIssueNoteDTO : SfsStoreDTOBase<InjectionIssueNoteDetailDTO
public string RequestNumber { get; set; } public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 叫料请求类型 /// 叫料类型
/// </summary> /// </summary>
[Display(Name = "叫料请求类型")] [Display(Name = "叫料类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] public EnumIssueRequestType IssueRequestType { get; set; }
public string RequestType { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 使用在途库

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/DTOs/InjectionIssueNoteDetailDTO.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
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;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -47,6 +48,12 @@ public class InjectionIssueNoteDetailDTO : SfsDetailDTOBase
/// </summary> /// </summary>
public string Uom { get; set; } public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion #endregion
#region 请求信息 #region 请求信息

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/IInjectionIssueNoteAppService.cs

@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IInjectionIssueNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<InjectionIssueNoteDTO, SfsStoreRequestInputBase, InjectionIssueNoteDetailDTO, SfsStoreRequestInputBase> public interface IInjectionIssueNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<InjectionIssueNoteDTO,
SfsStoreRequestInputBase, InjectionIssueNoteDetailDTO, SfsStoreRequestInputBase>
{ {
Task<InjectionIssueNoteDTO> CreateAsync(InjectionIssueNoteEditInput input); Task<InjectionIssueNoteDTO> CreateAsync(InjectionIssueNoteEditInput input);
@ -14,8 +16,9 @@ public interface IInjectionIssueNoteAppService : ISfsStoreMasterReadOnlyAppServi
Task<InjectionIssueNoteDTO> ConfirmAsync(string number); Task<InjectionIssueNoteDTO> ConfirmAsync(string number);
Task<PagedResultDto<InjectionIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput, Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(EnumIssueRequestType issueRequestType);
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType); Task<PagedResultDto<InjectionIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
EnumIssueRequestType issueRequestType, bool includeDetails = false,
CancellationToken cancellationToken = default);
} }

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteDetailInput.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
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;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -47,6 +48,12 @@ public class InjectionIssueNoteDetailInput : SfsDetailInputBase
/// </summary> /// </summary>
public string Uom { get; set; } public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion #endregion
#region 请求信息 #region 请求信息

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteEditInput.cs

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -41,11 +42,10 @@ public class InjectionIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
public string RequestNumber { get; set; } public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 叫料请求类型 /// 叫料类型
/// </summary> /// </summary>
[Display(Name = "叫料请求类型")] [Display(Name = "叫料类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] public EnumIssueRequestType IssueRequestType { get; set; }
public string RequestType { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 使用在途库

13
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteImportInput.cs

@ -1,17 +1,18 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumber, IHasRequestNumber public class InjectionIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNumber, IHasRequestNumber
{ {
/// <summary> /// <summary>
/// 任务ID /// 任务ID
/// </summary> /// </summary>
[Display(Name = "任务ID")] [Display(Name = "任务ID")]
public string JobNumber { get; set; } public string JobNumber { get; set; }
/// <summary> /// <summary>
/// 车间 /// 车间
/// </summary> /// </summary>
[Display(Name = "车间")] [Display(Name = "车间")]
public string Workshop { get; set; } public string Workshop { get; set; }
@ -19,13 +20,13 @@ public class InjectionIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNum
public string RequestNumber { get; set; } public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 叫料请求类型 /// 叫料类型
/// </summary> /// </summary>
[Display(Name = "叫料请求类型")] [Display(Name = "叫料类型")]
public string RequestType { get; set; } public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 使用在途库
/// </summary> /// </summary>
[Display(Name = "使用在途库")] [Display(Name = "使用在途库")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDTO.cs

@ -1,14 +1,16 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueRequestDTO : SfsStoreRequestDTOBase<InjectionIssueRequestDetailDTO>, IHasNumber public class InjectionIssueRequestDTO : SfsStoreRequestDTOBase<InjectionIssueRequestDetailDTO>, IHasNumber
{ {
/// <summary> /// <summary>
/// 叫料类型 /// 叫料类型
/// </summary> /// </summary>
[Display(Name = "叫料类型")] [Display(Name = "叫料类型")]
public string Type { get; set; } public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary> /// <summary>
/// 是否使用在途库 /// 是否使用在途库

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/InjectionIssueRequestDetailDTO.cs

@ -53,10 +53,3 @@ public class InjectionIssueRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
[Display(Name = "需求箱数量")] [Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; } public decimal BoxQty { get; set; }
} }
public class UnCompletedRequestDto
{
public string ItemCode { get; set; }
public string LocCode { get; set; }
public string PositionCode { get; set; }
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/DTOs/UnCompletedRequestDto.cs

@ -0,0 +1,8 @@
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class UnCompletedRequestDto
{
public string ItemCode { get; set; }
public string LocCode { get; set; }
public string PositionCode { get; set; }
}

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/IInjectionIssueRequestAppService.cs

@ -10,14 +10,6 @@ public interface IInjectionIssueRequestAppService
: ISfsStoreRequestMasterAppServiceBase<InjectionIssueRequestDTO, SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetailDTO, SfsStoreRequestInputBase> : ISfsStoreRequestMasterAppServiceBase<InjectionIssueRequestDTO, SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetailDTO, SfsStoreRequestInputBase>
{ {
Task<InjectionIssueRequestDTO> CreateAndHandleAsync(InjectionIssueRequestEditInput input);
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
Task<long> GetCountAsync();
/// <summary> /// <summary>
/// 获取物品类别列表 /// 获取物品类别列表
/// </summary> /// </summary>

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestEditInput.cs

@ -1,33 +1,26 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase public class InjectionIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
{ {
#region Base
/// <summary> /// <summary>
/// 叫料类型 /// 叫料类型
/// </summary> /// </summary>
[Display(Name = "叫料类型")] [Display(Name = "叫料类型")]
public string Type { get; set; } public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 使用在途库
/// </summary> /// </summary>
[Display(Name = "使用在途库")] [Display(Name = "使用在途库")]
public bool UseOnTheWayLocation { get; set; } public bool UseOnTheWayLocation { get; set; }
/// <summary> /// <summary>
/// 明细列表 /// 明细列表
/// </summary> /// </summary>
[Display(Name = "明细列表")] [Display(Name = "明细列表")]
public List<InjectionIssueRequestDetailInput> Details { get; set; } = new List<InjectionIssueRequestDetailInput>(); public List<InjectionIssueRequestDetailInput> Details { get; set; } = new();
#endregion
#region Create
#endregion
} }

21
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestImportInput.cs

@ -1,6 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -8,45 +7,41 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueRequestImportInput : SfsStoreImportInputBase public class InjectionIssueRequestImportInput : SfsStoreImportInputBase
{ {
/// <summary> /// <summary>
/// 叫料类型 /// 叫料类型
/// </summary> /// </summary>
[Display(Name = "叫料类型")] [Display(Name = "叫料类型")]
[Required(ErrorMessage = "{0}是必填项")] public EnumIssueRequestType IssueRequestType { get; set; }
[ImporterHeader(Name = "叫料类型")]
[ExporterHeader(DisplayName = "叫料类型")]
[ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)]
public string Type { get; set; }
/// <summary> /// <summary>
/// 物品代码 /// 物品代码
/// </summary> /// </summary>
[Display(Name = "物品代码")] [Display(Name = "物品代码")]
[Required] [Required]
public string ItemCode { get; set; } public string ItemCode { get; set; }
/// <summary> /// <summary>
/// 目标库位 /// 目标库位
/// </summary> /// </summary>
[Display(Name = "目标库位")] [Display(Name = "目标库位")]
[Required] [Required]
public string ToLocationCode { get; set; } public string ToLocationCode { get; set; }
/// <summary> /// <summary>
/// 来源库区 /// 来源库区
/// </summary> /// </summary>
[Display(Name = "调出库区")] [Display(Name = "调出库区")]
[Required] [Required]
public string FromLocationArea { get; set; } public string FromLocationArea { get; set; }
/// <summary> /// <summary>
/// 数量 /// 数量
/// </summary> /// </summary>
[Display(Name = "数量")] [Display(Name = "数量")]
[Required(ErrorMessage = "{0}是必填项")] [Required(ErrorMessage = "{0}是必填项")]
public decimal Qty { get; set; } public decimal Qty { get; set; }
/// <summary> /// <summary>
/// 备注 /// 备注
/// </summary> /// </summary>
[Display(Name = "备注")] [Display(Name = "备注")]
public string Remark { get; set; } public string Remark { get; set; }

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteAppService.cs

@ -10,6 +10,7 @@ using Volo.Abp;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
@ -85,9 +86,9 @@ public class InjectionIssueNoteAppService :
/// <returns></returns> /// <returns></returns>
[HttpPost("by-type/{requestType}")] [HttpPost("by-type/{requestType}")]
public virtual async Task<PagedResultDto<InjectionIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput, public virtual async Task<PagedResultDto<InjectionIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default) EnumIssueRequestType issueRequestType, bool includeDetails = false, CancellationToken cancellationToken = default)
{ {
Expression<Func<InjectionIssueNote, bool>> expression = p => p.RequestType == requestType; Expression<Func<InjectionIssueNote, bool>> expression = p => p.IssueRequestType == issueRequestType;
if (requestInput.Condition.Filters?.Count > 0) if (requestInput.Condition.Filters?.Count > 0)
{ {
expression = expression.And(requestInput.Condition.Filters.ToLambda<InjectionIssueNote>()); expression = expression.And(requestInput.Condition.Filters.ToLambda<InjectionIssueNote>());
@ -97,10 +98,10 @@ public class InjectionIssueNoteAppService :
requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false); requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false);
} }
[HttpGet("list/un-confirmed/{requestType}")] [HttpPost("list-by-type-and-un-confirmed")]
public virtual async Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType) public virtual async Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(EnumIssueRequestType issueRequestType)
{ {
var entities = await _repository.GetListAsync(c => !c.Confirmed && c.RequestType == requestType) var entities = await _repository.GetListAsync(c => !c.Confirmed && c.IssueRequestType == issueRequestType)
.ConfigureAwait(false); .ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<InjectionIssueNote>, List<InjectionIssueNoteDTO>>(entities); var dtos = ObjectMapper.Map<List<InjectionIssueNote>, List<InjectionIssueNoteDTO>>(entities);

249
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAppService.cs

@ -1,26 +1,13 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office.PowerPoint.Y2021.M06.Main;
using IdentityModel;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared; using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -28,52 +15,41 @@ using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Application; namespace Win_in.Sfs.Wms.Store.Application;
/// <summary> /// <summary>
/// 注塑发料申请 /// 注塑发料申请
/// </summary> /// </summary>
[Authorize] [Authorize]
[Route($"{StoreConsts.RootPath}injection-issue-request")] [Route($"{StoreConsts.RootPath}injection-issue-request")]
public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<InjectionIssueRequest, InjectionIssueRequestDTO, public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<InjectionIssueRequest,
SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetail, InjectionIssueRequestDetailDTO, InjectionIssueRequestDTO,
SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetail,
InjectionIssueRequestDetailDTO,
SfsStoreRequestInputBase, InjectionIssueRequestImportInput>, SfsStoreRequestInputBase, InjectionIssueRequestImportInput>,
IInjectionIssueRequestAppService IInjectionIssueRequestAppService
{ {
private readonly IInjectionIssueRequestManager _injectionRequestManager; private readonly IInjectionIssueRequestManager _injectionRequestManager;
private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService; private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService; private readonly IItemBasicAppService _itemBasicAppService;
private readonly IItemContainerAppService _itemContainerAppService; private readonly IItemContainerAppService _itemContainerAppService;
private readonly IProductionLineAppService _productionLineAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService; private readonly ITransactionTypeAppService _transactionTypeAppService;
public InjectionIssueRequestAppService( public InjectionIssueRequestAppService(
IInjectionIssueRequestRepository repository, IInjectionIssueRequestRepository repository,
IInjectionIssueRequestManager injectionRequestManager, IInjectionIssueRequestManager injectionRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp,
ILocationAppService locationAppService, ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService, IItemBasicAppService itemBasicAppService,
IItemContainerAppService itemContainerAppService, IItemContainerAppService itemContainerAppService,
IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService ITransactionTypeAppService transactionTypeAppService
) )
: base(repository, injectionRequestManager) : base(repository, injectionRequestManager)
{ {
_injectionRequestManager = injectionRequestManager; _injectionRequestManager = injectionRequestManager;
_itemStoreRelationApp = itemStoreRelationApp;
_areaApp = areaApp;
_locationAppService = locationAppService; _locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService; _itemBasicAppService = itemBasicAppService;
_itemContainerAppService= itemContainerAppService; _itemContainerAppService = itemContainerAppService;
_productionLineAppService = productionLineAppService;
_transactionTypeAppService = transactionTypeAppService; _transactionTypeAppService = transactionTypeAppService;
} }
#region 东阳V2
public override async Task<InjectionIssueRequestDTO> HandleAsync(Guid id) public override async Task<InjectionIssueRequestDTO> HandleAsync(Guid id)
{ {
await Task.CompletedTask.ConfigureAwait(false); await Task.CompletedTask.ConfigureAwait(false);
@ -101,7 +77,7 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
detailInput.ToLocationArea = toLocationDto.AreaCode; detailInput.ToLocationArea = toLocationDto.AreaCode;
detailInput.ToLocationGroup = toLocationDto.LocationGroupCode; detailInput.ToLocationGroup = toLocationDto.LocationGroupCode;
detailInput.ToWarehouseCode= toLocationDto.WarehouseCode; detailInput.ToWarehouseCode = toLocationDto.WarehouseCode;
detailInput.ProdLine = detailInput.ToLocationCode; detailInput.ProdLine = detailInput.ToLocationCode;
detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode; detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode;
@ -109,8 +85,9 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
detailInput.ItemDesc2 = itemBasicDto.Desc2; detailInput.ItemDesc2 = itemBasicDto.Desc2;
detailInput.ItemName = itemBasicDto.Name; detailInput.ItemName = itemBasicDto.Name;
var itemContainerDto = await _itemContainerAppService.GetListByItemCodeAsync(detailInput.ItemCode).ConfigureAwait(false); var itemContainerDto = await _itemContainerAppService.GetListByItemCodeAsync(detailInput.ItemCode)
if(itemContainerDto.Count>0) .ConfigureAwait(false);
if (itemContainerDto.Count > 0)
{ {
detailInput.Uom = itemContainerDto[0].BasicUom; detailInput.Uom = itemContainerDto[0].BasicUom;
detailInput.Qty = itemContainerDto[0].Qty; detailInput.Qty = itemContainerDto[0].Qty;
@ -121,7 +98,7 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
detailInput.Uom = itemBasicDto.BasicUom; detailInput.Uom = itemBasicDto.BasicUom;
detailInput.StdPackQty = itemBasicDto.StdPackQty; detailInput.StdPackQty = itemBasicDto.StdPackQty;
detailInput.Qty = itemBasicDto.StdPackQty; detailInput.Qty = itemBasicDto.StdPackQty;
} }
detailInput.Status = EnumStatus.Open; detailInput.Status = EnumStatus.Open;
@ -140,13 +117,14 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
} }
/// <summary> /// <summary>
/// 赋值Request业务属性 /// 赋值Request业务属性
/// </summary> /// </summary>
/// <param name="entity"></param> /// <param name="entity"></param>
/// <returns></returns> /// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(InjectionIssueRequestEditInput entity) private async Task SetRequestAutoPropertiesAsync(InjectionIssueRequestEditInput entity)
{ {
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false); var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None)
.ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在"); Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest; entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest; entity.AutoAgree = tranType.AutoAgreeRequest;
@ -166,125 +144,51 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
} }
/// <summary> /// <summary>
/// 获取物品类别列表 /// 获取物品类别列表
/// </summary> /// </summary>
/// <param name="type"></param> /// <param name="type"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet("list/item-category")] [HttpGet("list/item-category")]
public virtual async Task<List<ItemBasicDTO>> GetItemCategoryListAsync() public virtual async Task<List<ItemBasicDTO>> GetItemCategoryListAsync()
{ {
var entities = await _itemBasicAppService.GetCategoryListAsync().ConfigureAwait(false); var entities = await _itemBasicAppService.GetCategoryListAsync().ConfigureAwait(false);
return entities; return entities;
} }
#endregion
#region 导入
/// <summary> /// <summary>
/// 用来重写 导入数据时可以加工数据 /// 获取已完成的叫料单数量
/// </summary> /// </summary>
/// <param name="dictionary"></param>
/// <returns></returns> /// <returns></returns>
protected override async Task<Dictionary<InjectionIssueRequest, EntityState>> ImportProcessingEntityAsync( [HttpPost("get-uncompleted-request")]
Dictionary<InjectionIssueRequest, EntityState> dictionary) public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> p_list)
{ {
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key); var returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询
foreach (var injectionRequest in addList) var list = await _repository.GetListAsync(p =>
p.RequestStatus != EnumRequestStatus.Completed && p.IssueRequestType == EnumIssueRequestType.Vision)
.ConfigureAwait(false);
foreach (var itm in list)
{ {
injectionRequest.Worker = CurrentUser.GetUserName(); var query = from detail in itm.Details
injectionRequest.CreatorId = CurrentUser.Id; join citm in p_list on new
if (injectionRequest.Type == EnumTransSubType.Issue_Manual.GetDisplayName()) {
{ detail.ItemCode, locCode = detail.ToLocationCode, areaCode = detail.PositionCode
injectionRequest.Type = EnumTransSubType.Issue_Manual.ToString(); } equals
} new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode }
select new UnCompletedRequestDto
foreach (var detail in injectionRequest.Details) {
{ ItemCode = detail.ItemCode, LocCode = detail.ToLocationCode, PositionCode = detail.PositionCode
var locationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false); };
CheckLocation(locationDto, detail.ToLocationCode);
returnList.AddRange(query.ToList());
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detail.ItemCode);
detail.ToLocationArea = locationDto.AreaCode;
detail.ToLocationErpCode = locationDto.ErpLocationCode;
detail.ToLocationGroup = locationDto.LocationGroupCode;
detail.ToWarehouseCode = locationDto.WarehouseCode;
detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
detail.StdPackQty = itemBasicDto.StdPackQty;
}
} }
return dictionary; return returnList;
}
/// <summary>
/// 导入验证
/// </summary>
/// <param name="model"></param>
/// <param name="validationRresult"></param>
/// <returns></returns>
protected override async Task ValidateImportModelAsync(InjectionIssueRequestImportInput model,
List<ValidationResult> validationRresult)
{
_ = new Dictionary<string, string>();
_ = await CheckItemBasicAsync(model, validationRresult).ConfigureAwait(false);
_ = await CheckLocationAsync(model, validationRresult).ConfigureAwait(false);
await CheckAreaAsync(model, validationRresult).ConfigureAwait(false);
await CheckStoreRelationAsync(model, validationRresult).ConfigureAwait(false);
} }
#endregion
#region 校验 #region 校验
protected override async Task<bool> ValidateImportEntities(Dictionary<InjectionIssueRequest, EntityState> dict)
{
foreach (var entity in dict.Keys)
{
var tranType = await TransactionTypeAclService
.GetByTransTypeAsync(EnumTransType.Issue, EnumTransSubType.None).ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
return await base.ValidateImportEntities(dict).ConfigureAwait(false);
}
protected async Task CheckAreaAsync(InjectionIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var area = await _areaApp.GetByCodeAsync(importInput.FromLocationArea).ConfigureAwait(false);
if (area == null)
{
validationRresult.Add(new ValidationResult($"调出库区{importInput.FromLocationArea}不存在", new[] { "调出库区" }));
}
}
protected async Task CheckStoreRelationAsync(InjectionIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var itemStoreRelation = await _itemStoreRelationApp
.GetFirstAsync(importInput.ItemCode, importInput.ToLocationCode).ConfigureAwait(false);
if (itemStoreRelation == null)
{
validationRresult.Add(new ValidationResult(
$"物品代码{importInput.ItemCode}与目标库位{importInput.ToLocationCode}不存在对应关", new[] { "物品库位对应关系" }));
}
}
private void CheckItemBasic(ItemBasicDTO itemBasicDto, string itemCode) private void CheckItemBasic(ItemBasicDTO itemBasicDto, string itemCode)
{ {
if (itemBasicDto == null) if (itemBasicDto == null)
@ -306,78 +210,5 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
} }
} }
protected async Task<ItemBasicDTO> CheckItemBasicAsync(InjectionIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var item = await _itemBasicAppService.GetByCodeAsync(importInput.ItemCode).ConfigureAwait(false);
if (item == null)
{
validationRresult.Add(new ValidationResult($"物品代码{importInput.ItemCode}不存在", new[] { "物品代码" }));
}
else if (item.StdPackQty == 0)
{
validationRresult.Add(
new ValidationResult($"物品代码{importInput.ItemCode}的物品信息中标准包装等于0或不存在", new[] { "标准包装" }));
}
return item;
}
protected async Task<LocationDTO> CheckLocationAsync(InjectionIssueRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var location = await _locationAppService.GetByCodeAsync(importInput.ToLocationCode).ConfigureAwait(false);
if (location == null)
{
validationRresult.Add(new ValidationResult($"目标库位{importInput.ToLocationCode}不存在", new[] { "目标库位" }));
}
return location;
}
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
[HttpGet("get-completed-injection-request-count")]
public async Task<long> GetCountAsync()
{
//枚举类型查不到改成SQL查询
var query =await _repository.GetCountAsync(p => p.RequestStatus != EnumRequestStatus.Completed
&&p.Type==nameof(EnumIssueType.Vision)).ConfigureAwait(false);
return query;
}
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
[HttpPost("get-uncompleted-request")]
public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> p_list)
{
List<UnCompletedRequestDto> returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询
var list =await _repository.WithDetails().Where(p => p.RequestStatus != EnumRequestStatus.Completed && p.Type == nameof(EnumIssueType.Vision)).ToListAsync().ConfigureAwait(false);
foreach (var itm in list)
{
var query = from detail in itm.Details join citm in p_list on new { detail.ItemCode, locCode= detail.ToLocationCode,areaCode=detail.PositionCode } equals
new { citm.ItemCode, locCode= citm.LocCode,areaCode=citm.PositionCode }
select new UnCompletedRequestDto { ItemCode = detail.ItemCode, LocCode = detail.ToLocationCode, PositionCode = detail.PositionCode } ;
returnList.AddRange(query.ToList());
}
return returnList;
}
#endregion #endregion
} }

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/InjectionIssueRequests/InjectionIssueRequestAutoMapperProfile.cs

@ -25,7 +25,6 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<InjectionIssueRequestImportInput, InjectionIssueRequest>() CreateMap<InjectionIssueRequestImportInput, InjectionIssueRequest>()
.IgnoreAuditedObjectProperties() .IgnoreAuditedObjectProperties()
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.UseOnTheWayLocation) .Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Details) .Ignore(x => x.Details)
.Ignore(x => x.Remark) .Ignore(x => x.Remark)

23
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJob.cs

@ -1,47 +1,44 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Entities; using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary> /// <summary>
/// 注塑发料任务 /// 注塑发料任务
/// </summary> /// </summary>
[Display(Name = "注塑发料任务")] [Display(Name = "注塑发料任务")]
public class InjectionIssueJob : SfsJobAggregateRootBase<InjectionIssueJobDetail> public class InjectionIssueJob : SfsJobAggregateRootBase<InjectionIssueJobDetail>
{ {
/// <summary> /// <summary>
/// 叫料请求类型 /// 叫料类型
/// </summary> /// </summary>
[IgnoreUpdate] [Display(Name = "叫料类型")]
public string RequestType { get; set; } public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary> /// <summary>
/// 生产线 /// 生产线
/// </summary> /// </summary>
[IgnoreUpdate] [IgnoreUpdate]
public string ProdLine { get; set; } public string ProdLine { get; set; }
/// <summary> /// <summary>
/// 注塑要料单号 /// 注塑要料单号
/// </summary> /// </summary>
[IgnoreUpdate] [IgnoreUpdate]
public string InjectionIssueRequestNumber { get; set; } public string InjectionIssueRequestNumber { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 使用在途库
/// </summary> /// </summary>
[Display(Name = "使用在途库")] [Display(Name = "使用在途库")]
[IgnoreUpdate] [IgnoreUpdate]
public bool UseOnTheWayLocation { get; set; } public bool UseOnTheWayLocation { get; set; }
/// <summary> /// <summary>
/// 任务明细 /// 任务明细
/// </summary> /// </summary>
[IgnoreUpdate] [IgnoreUpdate]
public override List<InjectionIssueJobDetail> Details { get; set; } = new List<InjectionIssueJobDetail>(); public override List<InjectionIssueJobDetail> Details { get; set; } = new();
} }

207
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobDetail.cs

@ -1,8 +1,9 @@
using System; using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
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;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
@ -11,93 +12,105 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 库存基础信息 #region 库存基础信息
/// <summary> /// <summary>
/// 物品代码 /// 物品代码
/// </summary> /// </summary>
[Display(Name = "物品代码")]
public string ItemCode { get; set; } public string ItemCode { get; set; }
/// <summary> /// <summary>
/// 物品名称 /// 物品名称
/// </summary> /// </summary>
[Display(Name = "物品名称")]
public string ItemName { get; set; } public string ItemName { get; set; }
/// <summary> /// <summary>
/// 物品描述1 /// 物品描述1
/// </summary> /// </summary>
[Display(Name = "物品描述1")]
public string ItemDesc1 { get; set; } public string ItemDesc1 { get; set; }
/// <summary> /// <summary>
/// 物品描述2 /// 物品描述2
/// </summary> /// </summary>
[Display(Name = "物品描述2")]
public string ItemDesc2 { get; set; } public string ItemDesc2 { get; set; }
/// <summary> /// <summary>
/// 标包数量 /// 标包数量
/// </summary> /// </summary>
[Display(Name = "标包数量")] [Display(Name = "标包数量")]
[Column(TypeName = "decimal(18,6)")] [Column(TypeName = "decimal(18,6)")]
public decimal StdPackQty { get; set; } public decimal StdPackQty { get; set; }
/// <summary> /// <summary>
/// 库存状态 /// 库存状态
/// </summary> /// </summary>
[Display(Name = "库存状态")]
public EnumInventoryStatus Status { get; set; } public EnumInventoryStatus Status { get; set; }
/// <summary> /// <summary>
/// 计量单位 /// 计量单位
/// </summary> /// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; } public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion #endregion
#region 请求信息 #region 请求信息
/// <summary> /// <summary>
/// 请求库位 /// 请求库位
/// </summary> /// </summary>
public string RequestLocationCode { get; set; } public string RequestLocationCode { get; set; }
/// <summary> /// <summary>
/// 到库区 /// 到库区
/// </summary> /// </summary>
public string RequestLocationArea { get; set; } public string RequestLocationArea { get; set; }
/// <summary> /// <summary>
/// 到库位组 /// 到库位组
/// </summary> /// </summary>
public string RequestLocationGroup { get; set; } public string RequestLocationGroup { get; set; }
/// <summary> /// <summary>
/// 到ERP库位 /// 到ERP库位
/// </summary> /// </summary>
public string RequestLocationErpCode { get; set; } public string RequestLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 到仓库 /// 到仓库
/// </summary> /// </summary>
public string RequestWarehouseCode { get; set; } public string RequestWarehouseCode { get; set; }
/// <summary> /// <summary>
/// 在途库库位 /// 在途库库位
/// </summary> /// </summary>
public string OnTheWayLocationCode { get; set; } public string OnTheWayLocationCode { get; set; }
/// <summary> /// <summary>
/// 生产线 /// 生产线
/// </summary> /// </summary>
public string ProdLine { get; set; } public string ProdLine { get; set; }
/// <summary> /// <summary>
/// 位置码 /// 位置码
/// </summary> /// </summary>
public string PositionCode { get; set; } public string PositionCode { get; set; }
/// <summary> /// <summary>
/// 推荐的类型 /// 推荐的类型
/// </summary> /// </summary>
public EnumRecommendType RecommendType { get; set; } public EnumRecommendType RecommendType { get; set; }
/// <summary> /// <summary>
/// 需求数量 /// 需求数量
/// </summary> /// </summary>
public decimal RequestQty { get; set; } public decimal RequestQty { get; set; }
@ -106,67 +119,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 推荐来源 #region 推荐来源
/// <summary> /// <summary>
/// 推荐来源托标签 /// 推荐来源托标签
/// </summary> /// </summary>
public string RecommendFromContainerCode { get; set; } public string RecommendFromContainerCode { get; set; }
/// <summary> /// <summary>
/// 推荐来源箱标签 /// 推荐来源箱标签
/// </summary> /// </summary>
public string RecommendFromPackingCode { get; set; } public string RecommendFromPackingCode { get; set; }
/// <summary> /// <summary>
/// 推荐来源批次供应商批次 /// 推荐来源批次供应商批次
/// </summary> /// </summary>
public string RecommendFromSupplierBatch { get; set; } public string RecommendFromSupplierBatch { get; set; }
/// <summary> /// <summary>
/// 推荐来源批次到货时间 /// 推荐来源批次到货时间
/// </summary> /// </summary>
public DateTime RecommendFromArriveDate { get; set; } public DateTime RecommendFromArriveDate { get; set; }
/// <summary> /// <summary>
/// 推荐来源批次生产时间 /// 推荐来源批次生产时间
/// </summary> /// </summary>
public DateTime RecommendFromProduceDate { get; set; } public DateTime RecommendFromProduceDate { get; set; }
/// <summary> /// <summary>
/// 推荐来源批次过期时间 /// 推荐来源批次过期时间
/// </summary> /// </summary>
public DateTime RecommendFromExpireDate { get; set; } public DateTime RecommendFromExpireDate { get; set; }
/// <summary> /// <summary>
/// 推荐来源批次排序 /// 推荐来源批次排序
/// </summary> /// </summary>
public string RecommendFromLot { get; set; } public string RecommendFromLot { get; set; }
/// <summary> /// <summary>
/// 推荐来源库位 /// 推荐来源库位
/// </summary> /// </summary>
public string RecommendFromLocationCode { get; set; } public string RecommendFromLocationCode { get; set; }
/// <summary> /// <summary>
/// 推荐来源库区 /// 推荐来源库区
/// </summary> /// </summary>
public string RecommendFromLocationArea { get; set; } public string RecommendFromLocationArea { get; set; }
/// <summary> /// <summary>
/// 推荐来源库位组 /// 推荐来源库位组
/// </summary> /// </summary>
public string RecommendFromLocationGroup { get; set; } public string RecommendFromLocationGroup { get; set; }
/// <summary> /// <summary>
/// 推荐来源ERP库位 /// 推荐来源ERP库位
/// </summary> /// </summary>
public string RecommendFromLocationErpCode { get; set; } public string RecommendFromLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 推荐来源仓库 /// 推荐来源仓库
/// </summary> /// </summary>
public string RecommendFromWarehouseCode { get; set; } public string RecommendFromWarehouseCode { get; set; }
/// <summary> /// <summary>
/// 推荐来源数量 /// 推荐来源数量
/// </summary> /// </summary>
public decimal RecommendFromQty { get; set; } public decimal RecommendFromQty { get; set; }
@ -175,67 +188,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 推荐目标 #region 推荐目标
/// <summary> /// <summary>
/// 推荐目标托标签 /// 推荐目标托标签
/// </summary> /// </summary>
public string RecommendToContainerCode { get; set; } public string RecommendToContainerCode { get; set; }
/// <summary> /// <summary>
/// 推荐目标箱标签 /// 推荐目标箱标签
/// </summary> /// </summary>
public string RecommendToPackingCode { get; set; } public string RecommendToPackingCode { get; set; }
/// <summary> /// <summary>
/// 推荐目标批次供应商批次 /// 推荐目标批次供应商批次
/// </summary> /// </summary>
public string RecommendToSupplierBatch { get; set; } public string RecommendToSupplierBatch { get; set; }
/// <summary> /// <summary>
/// 推荐目标批次到货时间 /// 推荐目标批次到货时间
/// </summary> /// </summary>
public DateTime RecommendToArriveDate { get; set; } public DateTime RecommendToArriveDate { get; set; }
/// <summary> /// <summary>
/// 推荐目标批次生产时间 /// 推荐目标批次生产时间
/// </summary> /// </summary>
public DateTime RecommendToProduceDate { get; set; } public DateTime RecommendToProduceDate { get; set; }
/// <summary> /// <summary>
/// 推荐目标批次过期时间 /// 推荐目标批次过期时间
/// </summary> /// </summary>
public DateTime RecommendToExpireDate { get; set; } public DateTime RecommendToExpireDate { get; set; }
/// <summary> /// <summary>
/// 推荐目标批次排序 /// 推荐目标批次排序
/// </summary> /// </summary>
public string RecommendToLot { get; set; } public string RecommendToLot { get; set; }
/// <summary> /// <summary>
/// 推荐目标库位 /// 推荐目标库位
/// </summary> /// </summary>
public string RecommendToLocationCode { get; set; } public string RecommendToLocationCode { get; set; }
/// <summary> /// <summary>
/// 推荐目标库区 /// 推荐目标库区
/// </summary> /// </summary>
public string RecommendToLocationArea { get; set; } public string RecommendToLocationArea { get; set; }
/// <summary> /// <summary>
/// 推荐目标库位组 /// 推荐目标库位组
/// </summary> /// </summary>
public string RecommendToLocationGroup { get; set; } public string RecommendToLocationGroup { get; set; }
/// <summary> /// <summary>
/// 推荐目标ERP库位 /// 推荐目标ERP库位
/// </summary> /// </summary>
public string RecommendToLocationErpCode { get; set; } public string RecommendToLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 推荐目标仓库 /// 推荐目标仓库
/// </summary> /// </summary>
public string RecommendToWarehouseCode { get; set; } public string RecommendToWarehouseCode { get; set; }
/// <summary> /// <summary>
/// 推荐目标数量 /// 推荐目标数量
/// </summary> /// </summary>
public decimal RecommendToQty { get; set; } public decimal RecommendToQty { get; set; }
@ -244,67 +257,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 库移来源 #region 库移来源
/// <summary> /// <summary>
/// 库移来源托标签 /// 库移来源托标签
/// </summary> /// </summary>
public string TransferLibFromContainerCode { get; set; } public string TransferLibFromContainerCode { get; set; }
/// <summary> /// <summary>
/// 库移来源箱标签 /// 库移来源箱标签
/// </summary> /// </summary>
public string TransferLibFromPackingCode { get; set; } public string TransferLibFromPackingCode { get; set; }
/// <summary> /// <summary>
/// 库移来源批次供应商批次 /// 库移来源批次供应商批次
/// </summary> /// </summary>
public string TransferLibFromSupplierBatch { get; set; } public string TransferLibFromSupplierBatch { get; set; }
/// <summary> /// <summary>
/// 库移来源批次到货时间 /// 库移来源批次到货时间
/// </summary> /// </summary>
public DateTime TransferLibFromArriveDate { get; set; } public DateTime TransferLibFromArriveDate { get; set; }
/// <summary> /// <summary>
/// 库移来源批次生产时间 /// 库移来源批次生产时间
/// </summary> /// </summary>
public DateTime TransferLibFromProduceDate { get; set; } public DateTime TransferLibFromProduceDate { get; set; }
/// <summary> /// <summary>
/// 库移来源批次过期时间 /// 库移来源批次过期时间
/// </summary> /// </summary>
public DateTime TransferLibFromExpireDate { get; set; } public DateTime TransferLibFromExpireDate { get; set; }
/// <summary> /// <summary>
/// 库移来源批次排序 /// 库移来源批次排序
/// </summary> /// </summary>
public string TransferLibFromLot { get; set; } public string TransferLibFromLot { get; set; }
/// <summary> /// <summary>
/// 库移来源库位 /// 库移来源库位
/// </summary> /// </summary>
public string TransferLibFromLocationCode { get; set; } public string TransferLibFromLocationCode { get; set; }
/// <summary> /// <summary>
/// 库移来源库区 /// 库移来源库区
/// </summary> /// </summary>
public string TransferLibFromLocationArea { get; set; } public string TransferLibFromLocationArea { get; set; }
/// <summary> /// <summary>
/// 库移来源库位组 /// 库移来源库位组
/// </summary> /// </summary>
public string TransferLibFromLocationGroup { get; set; } public string TransferLibFromLocationGroup { get; set; }
/// <summary> /// <summary>
/// 库移来源ERP库位 /// 库移来源ERP库位
/// </summary> /// </summary>
public string TransferLibFromLocationErpCode { get; set; } public string TransferLibFromLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 库移来源仓库 /// 库移来源仓库
/// </summary> /// </summary>
public string TransferLibFromWarehouseCode { get; set; } public string TransferLibFromWarehouseCode { get; set; }
/// <summary> /// <summary>
/// 库移来源数量 /// 库移来源数量
/// </summary> /// </summary>
public decimal TransferLibFromQty { get; set; } public decimal TransferLibFromQty { get; set; }
@ -313,67 +326,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 库移目标 #region 库移目标
/// <summary> /// <summary>
/// 库移目标托标签 /// 库移目标托标签
/// </summary> /// </summary>
public string TransferLibToContainerCode { get; set; } public string TransferLibToContainerCode { get; set; }
/// <summary> /// <summary>
/// 库移目标箱标签 /// 库移目标箱标签
/// </summary> /// </summary>
public string TransferLibToPackingCode { get; set; } public string TransferLibToPackingCode { get; set; }
/// <summary> /// <summary>
/// 库移目标批次供应商批次 /// 库移目标批次供应商批次
/// </summary> /// </summary>
public string TransferLibToSupplierBatch { get; set; } public string TransferLibToSupplierBatch { get; set; }
/// <summary> /// <summary>
/// 库移目标批次到货时间 /// 库移目标批次到货时间
/// </summary> /// </summary>
public DateTime TransferLibToArriveDate { get; set; } public DateTime TransferLibToArriveDate { get; set; }
/// <summary> /// <summary>
/// 库移目标批次生产时间 /// 库移目标批次生产时间
/// </summary> /// </summary>
public DateTime TransferLibToProduceDate { get; set; } public DateTime TransferLibToProduceDate { get; set; }
/// <summary> /// <summary>
/// 库移目标批次过期时间 /// 库移目标批次过期时间
/// </summary> /// </summary>
public DateTime TransferLibToExpireDate { get; set; } public DateTime TransferLibToExpireDate { get; set; }
/// <summary> /// <summary>
/// 库移目标批次排序 /// 库移目标批次排序
/// </summary> /// </summary>
public string TransferLibToLot { get; set; } public string TransferLibToLot { get; set; }
/// <summary> /// <summary>
/// 库移目标库位 /// 库移目标库位
/// </summary> /// </summary>
public string TransferLibToLocationCode { get; set; } public string TransferLibToLocationCode { get; set; }
/// <summary> /// <summary>
/// 库移目标库区 /// 库移目标库区
/// </summary> /// </summary>
public string TransferLibToLocationArea { get; set; } public string TransferLibToLocationArea { get; set; }
/// <summary> /// <summary>
/// 库移目标库位组 /// 库移目标库位组
/// </summary> /// </summary>
public string TransferLibToLocationGroup { get; set; } public string TransferLibToLocationGroup { get; set; }
/// <summary> /// <summary>
/// 库移目标ERP库位 /// 库移目标ERP库位
/// </summary> /// </summary>
public string TransferLibToLocationErpCode { get; set; } public string TransferLibToLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 库移目标仓库 /// 库移目标仓库
/// </summary> /// </summary>
public string TransferLibToWarehouseCode { get; set; } public string TransferLibToWarehouseCode { get; set; }
/// <summary> /// <summary>
/// 库移目标数量 /// 库移目标数量
/// </summary> /// </summary>
public decimal TransferLibToQty { get; set; } public decimal TransferLibToQty { get; set; }
@ -382,67 +395,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 实际来源 #region 实际来源
/// <summary> /// <summary>
/// 实际目标托标签 /// 实际目标托标签
/// </summary> /// </summary>
public string HandledFromContainerCode { get; set; } public string HandledFromContainerCode { get; set; }
/// <summary> /// <summary>
/// 实际箱标签 /// 实际箱标签
/// </summary> /// </summary>
public string HandledFromPackingCode { get; set; } public string HandledFromPackingCode { get; set; }
/// <summary> /// <summary>
/// 实际批次供应商批次 /// 实际批次供应商批次
/// </summary> /// </summary>
public string HandledFromSupplierBatch { get; set; } public string HandledFromSupplierBatch { get; set; }
/// <summary> /// <summary>
/// 实际批次到货时间 /// 实际批次到货时间
/// </summary> /// </summary>
public DateTime HandledFromArriveDate { get; set; } public DateTime HandledFromArriveDate { get; set; }
/// <summary> /// <summary>
/// 实际批次生产时间 /// 实际批次生产时间
/// </summary> /// </summary>
public DateTime HandledFromProduceDate { get; set; } public DateTime HandledFromProduceDate { get; set; }
/// <summary> /// <summary>
/// 实际批次过期时间 /// 实际批次过期时间
/// </summary> /// </summary>
public DateTime HandledFromExpireDate { get; set; } public DateTime HandledFromExpireDate { get; set; }
/// <summary> /// <summary>
/// 实际批次排序 /// 实际批次排序
/// </summary> /// </summary>
public string HandledFromLot { get; set; } public string HandledFromLot { get; set; }
/// <summary> /// <summary>
/// 实际库位 /// 实际库位
/// </summary> /// </summary>
public string HandledFromLocationCode { get; set; } public string HandledFromLocationCode { get; set; }
/// <summary> /// <summary>
/// 实际库区 /// 实际库区
/// </summary> /// </summary>
public string HandledFromLocationArea { get; set; } public string HandledFromLocationArea { get; set; }
/// <summary> /// <summary>
/// 实际库位组 /// 实际库位组
/// </summary> /// </summary>
public string HandledFromLocationGroup { get; set; } public string HandledFromLocationGroup { get; set; }
/// <summary> /// <summary>
/// 实际ERP库位 /// 实际ERP库位
/// </summary> /// </summary>
public string HandledFromLocationErpCode { get; set; } public string HandledFromLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 实际仓库 /// 实际仓库
/// </summary> /// </summary>
public string HandledFromWarehouseCode { get; set; } public string HandledFromWarehouseCode { get; set; }
/// <summary> /// <summary>
/// 实际数量 /// 实际数量
/// </summary> /// </summary>
public decimal HandledFromQty { get; set; } public decimal HandledFromQty { get; set; }
@ -451,67 +464,67 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
#region 实际目标 #region 实际目标
/// <summary> /// <summary>
/// 实际目标托标签 /// 实际目标托标签
/// </summary> /// </summary>
public string HandledToContainerCode { get; set; } public string HandledToContainerCode { get; set; }
/// <summary> /// <summary>
/// 实际箱标签 /// 实际箱标签
/// </summary> /// </summary>
public string HandledToPackingCode { get; set; } public string HandledToPackingCode { get; set; }
/// <summary> /// <summary>
/// 实际批次供应商批次 /// 实际批次供应商批次
/// </summary> /// </summary>
public string HandledToSupplierBatch { get; set; } public string HandledToSupplierBatch { get; set; }
/// <summary> /// <summary>
/// 实际批次到货时间 /// 实际批次到货时间
/// </summary> /// </summary>
public DateTime HandledToArriveDate { get; set; } public DateTime HandledToArriveDate { get; set; }
/// <summary> /// <summary>
/// 实际批次生产时间 /// 实际批次生产时间
/// </summary> /// </summary>
public DateTime HandledToProduceDate { get; set; } public DateTime HandledToProduceDate { get; set; }
/// <summary> /// <summary>
/// 实际批次过期时间 /// 实际批次过期时间
/// </summary> /// </summary>
public DateTime HandledToExpireDate { get; set; } public DateTime HandledToExpireDate { get; set; }
/// <summary> /// <summary>
/// 实际批次排序 /// 实际批次排序
/// </summary> /// </summary>
public string HandledToLot { get; set; } public string HandledToLot { get; set; }
/// <summary> /// <summary>
/// 实际库位 /// 实际库位
/// </summary> /// </summary>
public string HandledToLocationCode { get; set; } public string HandledToLocationCode { get; set; }
/// <summary> /// <summary>
/// 实际库区 /// 实际库区
/// </summary> /// </summary>
public string HandledToLocationArea { get; set; } public string HandledToLocationArea { get; set; }
/// <summary> /// <summary>
/// 实际库位组 /// 实际库位组
/// </summary> /// </summary>
public string HandledToLocationGroup { get; set; } public string HandledToLocationGroup { get; set; }
/// <summary> /// <summary>
/// 实际ERP库位 /// 实际ERP库位
/// </summary> /// </summary>
public string HandledToLocationErpCode { get; set; } public string HandledToLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 实际仓库 /// 实际仓库
/// </summary> /// </summary>
public string HandledToWarehouseCode { get; set; } public string HandledToWarehouseCode { get; set; }
/// <summary> /// <summary>
/// 实际数量 /// 实际数量
/// </summary> /// </summary>
public decimal HandledToQty { get; set; } public decimal HandledToQty { get; set; }
@ -519,6 +532,6 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
public void SetId(Guid id) public void SetId(Guid id)
{ {
this.Id = id; Id = id;
} }
} }

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNote.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp; using Volo.Abp;
using Win_in.Sfs.Shared.Domain.Entities; using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
@ -27,10 +28,10 @@ public class InjectionIssueNote : SfsStoreAggregateRootBase<InjectionIssueNoteDe
public string RequestNumber { get; set; } public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 叫料请求类型 /// 叫料类型
/// </summary> /// </summary>
[IgnoreUpdate] [Display(Name = "叫料类型")]
public string RequestType { get; set; } public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 使用在途库

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteDetail.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
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;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
@ -47,6 +48,12 @@ public class InjectionIssueNoteDetail : SfsStoreDetailEntityBase
/// </summary> /// </summary>
public string Uom { get; set; } public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion #endregion
#region 请求信息 #region 请求信息

14
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequest.cs

@ -1,29 +1,29 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities; using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary> /// <summary>
/// 注塑申请 /// 注塑申请
/// </summary> /// </summary>
public class InjectionIssueRequest : SfsStoreRequestAggregateRootBase<InjectionIssueRequestDetail> public class InjectionIssueRequest : SfsStoreRequestAggregateRootBase<InjectionIssueRequestDetail>
{ {
/// <summary> /// <summary>
/// 叫料类型 /// 叫料类型
/// </summary> /// </summary>
[Display(Name = "叫料类型")] [Display(Name = "叫料类型")]
[IgnoreUpdate] public EnumIssueRequestType IssueRequestType { get; set; }
public string Type { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 使用在途库
/// </summary> /// </summary>
public bool UseOnTheWayLocation { get; set; } public bool UseOnTheWayLocation { get; set; }
/// <summary> /// <summary>
/// 明细列表 /// 明细列表
/// </summary> /// </summary>
[IgnoreUpdate] [IgnoreUpdate]
public override List<InjectionIssueRequestDetail> Details { get; set; } = new List<InjectionIssueRequestDetail>(); public override List<InjectionIssueRequestDetail> Details { get; set; } = new();
} }

35
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequestDetail.cs

@ -1,4 +1,3 @@
using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain; using Win_in.Sfs.Shared.Domain;
@ -7,96 +6,96 @@ using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary> /// <summary>
/// 注塑叫料申请明细 /// 注塑叫料申请明细
/// </summary> /// </summary>
public class InjectionIssueRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation public class InjectionIssueRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation
{ {
#region 目标库位信息 #region 目标库位信息
/// <summary> /// <summary>
/// 目标库位 /// 目标库位
/// </summary> /// </summary>
[Display(Name = "目标库位")] [Display(Name = "目标库位")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] [StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string ToLocationCode { get; set; } public string ToLocationCode { get; set; }
/// <summary> /// <summary>
/// 目标库区 /// 目标库区
/// </summary> /// </summary>
[Display(Name = "目标库区")] [Display(Name = "目标库区")]
public string ToLocationArea { get; set; } public string ToLocationArea { get; set; }
/// <summary> /// <summary>
/// 目标库位组 /// 目标库位组
/// </summary> /// </summary>
[Display(Name = "目标库位组")] [Display(Name = "目标库位组")]
public string ToLocationGroup { get; set; } public string ToLocationGroup { get; set; }
/// <summary> /// <summary>
/// 目标ERP储位 /// 目标ERP储位
/// </summary> /// </summary>
[Display(Name = "目标ERP储位")] [Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; } public string ToLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 目标仓库 /// 目标仓库
/// </summary> /// </summary>
[Display(Name = "目标仓库")] [Display(Name = "目标仓库")]
public string ToWarehouseCode { get; set; } public string ToWarehouseCode { get; set; }
#endregion #endregion
/// <summary> /// <summary>
/// 生产线 /// 生产线
/// </summary> /// </summary>
public string ProdLine { get; set; } public string ProdLine { get; set; }
/// <summary> /// <summary>
/// 已发数量 /// 已发数量
/// </summary> /// </summary>
public decimal IssuedQty { get; set; } public decimal IssuedQty { get; set; }
/// <summary> /// <summary>
/// 已收数量 /// 已收数量
/// </summary> /// </summary>
public decimal ReceivedQty { get; set; } public decimal ReceivedQty { get; set; }
/// <summary> /// <summary>
/// 明细状态 /// 明细状态
/// </summary> /// </summary>
public EnumStatus Status { get; set; } public EnumStatus Status { get; set; }
/// <summary> /// <summary>
/// 请求未发 还未发送的数量 /// 请求未发 还未发送的数量
/// </summary> /// </summary>
[NotMapped] [NotMapped]
public decimal ToBeIssuedQty => Qty - IssuedQty; public decimal ToBeIssuedQty => Qty - IssuedQty;
/// <summary> /// <summary>
/// 已发未收 /// 已发未收
/// </summary> /// </summary>
[NotMapped] [NotMapped]
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty; public decimal ToBeReceivedQty => IssuedQty - ReceivedQty;
/// <summary> /// <summary>
/// 请求未收 /// 请求未收
/// </summary> /// </summary>
[NotMapped] [NotMapped]
public decimal NotFinishQty => Qty - ReceivedQty; public decimal NotFinishQty => Qty - ReceivedQty;
/// <summary> /// <summary>
/// 位置码 /// 位置码
/// </summary> /// </summary>
public string PositionCode { get; set; } public string PositionCode { get; set; }
/// <summary> /// <summary>
/// 推荐类型 /// 推荐类型
/// </summary> /// </summary>
public EnumRecommendType RecommendType { get; set; } public EnumRecommendType RecommendType { get; set; }
/// <summary> /// <summary>
/// 需求箱数量 /// 需求箱数量
/// </summary> /// </summary>
[Display(Name = "需求箱数量")] [Display(Name = "需求箱数量")]
public decimal BoxQty { get; set; } public decimal BoxQty { get; set; }

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJobDbContextModelCreatingExtensions.cs

@ -21,7 +21,6 @@ public static class InjectionIssueJobDbContextModelCreatingExtensions
//Configure Job base properties //Configure Job base properties
b.ConfigureJob<InjectionIssueJob, InjectionIssueJobDetail>(); b.ConfigureJob<InjectionIssueJob, InjectionIssueJobDetail>();
//Properties //Properties
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.InjectionIssueRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.InjectionIssueRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.JobType).HasConversion<string>(); b.Property(q => q.JobType).HasConversion<string>();

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/IssueNotes/InjectionIssueNotes/InjectionIssueNoteDbContextModelCreatingExtensions.cs

@ -20,7 +20,6 @@ public static class InjectionIssueNoteDbContextModelCreatingExtensions
//Properties //Properties
b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength); b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength);
//Relations //Relations

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/IssueRequests/InjectionRequests/InjectionIssueRequestDbContextModelCreatingExtensions.cs

@ -19,7 +19,6 @@ public static class InjectionIssueRequestDbContextModelCreatingExtensions
b.ConfigureSfsStoreBase(); b.ConfigureSfsStoreBase();
//Properties //Properties
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>(); b.Property(q => q.RequestStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//Relations //Relations

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Requests/InjectionRequestAutoMapperProfile.cs

@ -13,7 +13,6 @@ public partial class StoreEventAutoMapperProfile : Profile
{ {
CreateMap<InjectionIssueRequest, InjectionIssueJobEditInput>() CreateMap<InjectionIssueRequest, InjectionIssueJobEditInput>()
.ForMember(x => x.InjectionIssueRequestNumber, y => y.MapFrom(d => d.Number)) .ForMember(x => x.InjectionIssueRequestNumber, y => y.MapFrom(d => d.Number))
.ForMember(x => x.RequestType, y => y.MapFrom(d => d.Type))
.Ignore(x => x.WarehouseCode) .Ignore(x => x.WarehouseCode)
.Ignore(x => x.UpStreamJobNumber) .Ignore(x => x.UpStreamJobNumber)
.Ignore(x => x.JobType) .Ignore(x => x.JobType)

18
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/AssembleIssueRequestEventHandler.cs

@ -72,15 +72,15 @@ public class AssembleIssueRequestEventHandler
List<AssembleIssueJobEditInput> assembleJobs = new EditableList<AssembleIssueJobEditInput>(); List<AssembleIssueJobEditInput> assembleJobs = new EditableList<AssembleIssueJobEditInput>();
switch (entity.Type) //switch (entity.Type)
{ //{
case nameof(EnumIssueType.BoxQty): // case nameof(EnumIssueType.BoxQty):
assembleJobs = await CreateAssembleIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false); // assembleJobs = await CreateAssembleIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
break; // break;
case nameof(EnumIssueType.Qty): // case nameof(EnumIssueType.Qty):
assembleJobs = await CreateAssembleIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false); // assembleJobs = await CreateAssembleIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
break; // break;
} //}
if (assembleJobs.Any()) if (assembleJobs.Any())
{ {

18
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/CoatingIssueRequestEventHandler.cs

@ -74,15 +74,15 @@ public class CoatingIssueRequestEventHandler
List<CoatingIssueJobEditInput> coatingIssueJobs = new EditableList<CoatingIssueJobEditInput>(); List<CoatingIssueJobEditInput> coatingIssueJobs = new EditableList<CoatingIssueJobEditInput>();
switch (entity.Type) //switch (entity.Type)
{ //{
case nameof(EnumIssueType.BoxQty): // case nameof(EnumIssueType.BoxQty):
coatingIssueJobs = await CreateCoatingIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false); // coatingIssueJobs = await CreateCoatingIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
break; // break;
case nameof(EnumIssueType.Qty): // case nameof(EnumIssueType.Qty):
coatingIssueJobs = await CreateCoatingIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false); // coatingIssueJobs = await CreateCoatingIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
break; // break;
} //}
if (coatingIssueJobs.Any()) if (coatingIssueJobs.Any())
{ {

269
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/InjectionIssueRequestEventHandler.cs

@ -1,6 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter; using Castle.Components.DictionaryAdapter;
@ -8,12 +7,10 @@ using Volo.Abp;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Win_in.Sfs.Basedata.Application.Contracts; 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.Shared.Domain.Shared.Enums.Store;
using Win_in.Sfs.Shared.Event; using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Inventory.Application.Contracts; using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts; using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest; namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest;
@ -72,15 +69,7 @@ public class InjectionIssueRequestEventHandler
List<InjectionIssueJobEditInput> injectionJobs = new EditableList<InjectionIssueJobEditInput>(); List<InjectionIssueJobEditInput> injectionJobs = new EditableList<InjectionIssueJobEditInput>();
switch (entity.Type) injectionJobs = await CreateInjectionIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
{
case nameof(EnumIssueType.BoxQty):
injectionJobs = await CreateInjectionIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
break;
case nameof(EnumIssueType.Qty):
injectionJobs = await CreateInjectionIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
break;
}
if (injectionJobs.Any()) if (injectionJobs.Any())
{ {
@ -113,249 +102,6 @@ public class InjectionIssueRequestEventHandler
#region 私有 #region 私有
#region 按数量叫料
/// <summary>
/// 创建注塑任务
/// </summary>
/// <param name="injectionRequest"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private async Task<List<InjectionIssueJobEditInput>> CreateInjectionIssueJobWithQtyTypeAsync
(InjectionIssueRequest injectionRequest)
{
var jobs = new List<InjectionIssueJobEditInput>();
var toLocationCodes = injectionRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList(); //所有发送库位的集合
var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false); //所有库位的集合
var injectionRequestDetails = injectionRequest.Details.Where(p => p.ToBeIssuedQty > 0); //所有还没发送物品的集合
foreach (var injectionRequestDetail in injectionRequestDetails) //如果有还有剩余未叫料的数量 则创建新的任务
{
var toLocation =
toLocations.FirstOrDefault(p => p.Code == injectionRequestDetail.ToLocationCode); //判断目标库位是否存在
Check.NotNull(toLocation, "库位代码", $"库位 {injectionRequestDetail.ToLocationCode} 不存在");
//创建详情
var jobDetails =
await CreateInjectionIssueJobDetailInputsWithQtyTypeAsync(injectionRequest, injectionRequestDetail,
toLocation.LocationGroupCode).ConfigureAwait(false);
if (!jobDetails.Any())
{
continue;
}
var fromLocationCode = jobDetails[0].RecommendFromLocationCode;
var fromLocation = await _locationAppService.GetByCodeAsync(fromLocationCode).ConfigureAwait(false);
var job = jobs.FirstOrDefault(p => p.WorkGroupCode == fromLocation?.WorkGroupCode);
if (job == null || job.Details.Any(p => p.RecommendToLocationCode != injectionRequestDetail.ToLocationCode))
{
job = await BuildInjectionIssueJobCreateInputWithQtyTypeAsync(injectionRequest, fromLocation)
.ConfigureAwait(false);
jobs.Add(job);
}
job.Details.AddRange(jobDetails);
if (injectionRequestDetail.ToBeIssuedQty < 0)
{
injectionRequestDetail.Status = EnumStatus.Close;
}
}
jobs = jobs.Where(p => p.Details.Any()).ToList();
var openRequestDetails =
injectionRequest.Details.Where(p => p.Status != EnumStatus.Close).ToList();
if (!openRequestDetails.Any())
{
return jobs;
}
var enableMultipleCreateInjectionIssueJob = await SettingManager
.IsTrueAsync(StoreSettings.MaterialRequest.EnableMultipleCreateIssueJob).ConfigureAwait(false);
if (enableMultipleCreateInjectionIssueJob)
{
//injectionRequest.Partial();
}
else
{
var sb = new StringBuilder();
foreach (var openRequestDetail in openRequestDetails)
{
sb.AppendLine(
$"{openRequestDetail.ItemCode}请求数量 {openRequestDetail.Qty},可用库存数量 {openRequestDetail.IssuedQty}");
}
throw new UserFriendlyException($"{sb} 可用库存数量不足, 无法生成发料任务");
}
return jobs;
}
/// <summary>
/// 构造注塑任务
/// </summary>
/// <param name="injectionRequest"></param>
/// <param name="fromLocation"></param>
/// <returns></returns>
private async Task<InjectionIssueJobEditInput> BuildInjectionIssueJobCreateInputWithQtyTypeAsync(
InjectionIssueRequest injectionRequest,
LocationDTO fromLocation)
{
InjectionIssueJobEditInput job;
job = ObjectMapper.Map<InjectionIssueRequest, InjectionIssueJobEditInput>(injectionRequest);
job.JobType = EnumJobType.IssueJob;
job.JobStatus = EnumJobStatus.Open;
job.WorkGroupCode = fromLocation.WorkGroupCode;
job.WarehouseCode = fromLocation.WarehouseCode;
job.Worker = injectionRequest.Worker;
if (string.IsNullOrEmpty(job.Worker))
{
job.Worker = "admin";
}
job.InjectionIssueRequestNumber = injectionRequest.Number;
await Task.CompletedTask.ConfigureAwait(false);
return job;
}
/// <summary>
/// 创建注塑任务明细
/// </summary>
/// <param name="injectionRequest"></param>
/// <param name="injectionRequestDetail"></param>
/// <param name="toLocationGroupCode"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private async Task<List<InjectionIssueJobDetailInput>> CreateInjectionIssueJobDetailInputsWithQtyTypeAsync(
InjectionIssueRequest injectionRequest,
InjectionIssueRequestDetail injectionRequestDetail, string toLocationGroupCode)
{
var jobDetails = new List<InjectionIssueJobDetailInput>();
//获取推荐库存
var productionLineDto = await _productionLineAppService
.GetByLocationCodeAsync(injectionRequestDetail.ToLocationCode).ConfigureAwait(false);
var productionLineItemDtos = await _productionLineItemAppService
.GetByProductLineCodeAsync(productionLineDto.Code).ConfigureAwait(false);
if (productionLineItemDtos == null)
{
throw new UserFriendlyException($"物品代码【{injectionRequestDetail.ItemCode}】没有对应的【生产线物品关系】");
}
var productionLineItemDto =
productionLineItemDtos.FirstOrDefault(p => p.ItemCode == injectionRequestDetail.ItemCode);
if (productionLineItemDto == null)
{
throw new UserFriendlyException(
$"物品代码【{injectionRequestDetail.ItemCode}】在生产线【{productionLineDto.Code}】中没有对应的【生产线物品关系】");
}
var input = new RecommendBalanceRequestInput
{
ItemCode = injectionRequestDetail.ItemCode,
Qty = injectionRequestDetail.ToBeIssuedQty,
//LocationTypes = transactionType.OutLocationTypes, productionLineItemDto.RawLocationCodeListJson
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = JsonSerializer.Deserialize<List<string>>(productionLineItemDto.RawLocationCodeListJson)
};
var recommendList = await _balanceAppService.GetRecommendBalancesByLocationsAsync(input).ConfigureAwait(false);
//没有推荐库存时 跳过此明细 不生成任务
if (recommendList.Count != 0)
{
foreach (var recommend in recommendList)
{
//拿走需求量
var detail =
await BuildInjectionIssueJobDetailWithQtyTypeAsync(injectionRequestDetail, recommend,
toLocationGroupCode)
.ConfigureAwait(false);
jobDetails.Add(detail);
}
}
return jobDetails;
}
/// <summary>
/// 构造注塑任务明细
/// </summary>
/// <param name="injectionRequestDetail"></param>
/// <param name="balance"></param>
/// <param name="toLocationGroupCode"></param>
/// <returns></returns>
private async Task<InjectionIssueJobDetailInput> BuildInjectionIssueJobDetailWithQtyTypeAsync(
InjectionIssueRequestDetail injectionRequestDetail, BalanceDTO balance, string toLocationGroupCode)
{
var detail = new InjectionIssueJobDetailInput();
detail.RequestLocationCode = injectionRequestDetail.ToLocationCode;
detail.RequestLocationGroup=injectionRequestDetail.ToLocationGroup;
detail.RequestLocationArea = injectionRequestDetail.ToLocationArea;
detail.RequestLocationErpCode = injectionRequestDetail.ToLocationErpCode;
detail.RequestWarehouseCode=injectionRequestDetail.ToWarehouseCode;
detail.PositionCode = injectionRequestDetail.PositionCode;
detail.RecommendType = injectionRequestDetail.RecommendType;
detail.ProdLine = injectionRequestDetail.ToLocationCode;
detail.ItemCode = injectionRequestDetail.ItemCode;
detail.ItemName=injectionRequestDetail.ItemName;
detail.ItemDesc1=injectionRequestDetail.ItemDesc1;
detail.ItemDesc2 = injectionRequestDetail.ItemDesc2;
detail.StdPackQty = injectionRequestDetail.StdPackQty;
detail.RequestQty= injectionRequestDetail.Qty;
detail.Status = EnumInventoryStatus.OK;
detail.Uom = balance.Uom;
detail.RecommendFromPackingCode = balance.PackingCode;
detail.RecommendFromContainerCode = balance.ContainerCode;
detail.RecommendFromLot = balance.Lot;
detail.RecommendFromQty = balance.Qty;
detail.RecommendFromSupplierBatch = balance.SupplierBatch;
detail.RecommendFromProduceDate = balance.ProduceDate;
detail.RecommendFromExpireDate = balance.ExpireDate;
detail.RecommendFromProduceDate = balance.ProduceDate;
detail.RecommendFromArriveDate = balance.ArriveDate;
detail.RecommendFromLocationArea = balance.LocationArea;
detail.RecommendFromLocationCode = balance.LocationCode;
detail.RecommendFromLocationErpCode = balance.LocationErpCode;
detail.RecommendFromLocationGroup = balance.LocationGroup;
detail.RecommendFromWarehouseCode = balance.WarehouseCode;
detail.RecommendToPackingCode = balance.PackingCode;
detail.RecommendToContainerCode = balance.ContainerCode;
detail.RecommendToLot = balance.Lot;
detail.RecommendToQty = balance.Qty;
detail.RecommendToSupplierBatch = balance.SupplierBatch;
detail.RecommendToProduceDate = balance.ProduceDate;
detail.RecommendToExpireDate = balance.ExpireDate;
detail.RecommendToProduceDate = balance.ProduceDate;
detail.RecommendToArriveDate = balance.ArriveDate;
detail.RecommendToLocationCode = injectionRequestDetail.ToLocationCode;
detail.RecommendToLocationErpCode = injectionRequestDetail.ToLocationErpCode;
detail.RecommendToLocationArea = injectionRequestDetail.ToLocationArea;
detail.RecommendToWarehouseCode = injectionRequestDetail.ToWarehouseCode;
detail.RecommendToLocationGroup = injectionRequestDetail.ToLocationGroup;
await Task.CompletedTask.ConfigureAwait(false);
return detail;
}
#endregion
#region 按箱叫料 #region 按箱叫料
/// <summary> /// <summary>
@ -410,7 +156,7 @@ public class InjectionIssueRequestEventHandler
.RawLocationCodeListJson) .RawLocationCodeListJson)
}; };
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);
usableList = usableList.Where(p => !useBalanceList.Contains(p.PackingCode) && p.Qty!=0).ToList(); usableList = usableList.Where(p => !useBalanceList.Contains(p.PackingCode) && p.Qty != 0).ToList();
if (usableList.Any()) if (usableList.Any())
{ {
for (var i = 0; i < sumBoxQty; i++) for (var i = 0; i < sumBoxQty; i++)
@ -420,7 +166,8 @@ public class InjectionIssueRequestEventHandler
usableList.Remove(firstUsable); usableList.Remove(firstUsable);
var injectionJobEditInput = var injectionJobEditInput =
await BuildInjectionIssueJobCreateInputWithBoxQtyTypeAsync(injectionRequest, inputDetailTemplate, await BuildInjectionIssueJobCreateInputWithBoxQtyTypeAsync(injectionRequest,
inputDetailTemplate,
firstUsable) firstUsable)
.ConfigureAwait(false); .ConfigureAwait(false);
@ -471,18 +218,18 @@ public class InjectionIssueRequestEventHandler
{ {
var detail = new InjectionIssueJobDetailInput(); var detail = new InjectionIssueJobDetailInput();
detail.RequestLocationCode = injectionRequestDetail.ToLocationCode; detail.RequestLocationCode = injectionRequestDetail.ToLocationCode;
detail.RequestLocationGroup=injectionRequestDetail.ToLocationGroup; detail.RequestLocationGroup = injectionRequestDetail.ToLocationGroup;
detail.RequestLocationArea = injectionRequestDetail.ToLocationArea; detail.RequestLocationArea = injectionRequestDetail.ToLocationArea;
detail.RequestLocationErpCode = injectionRequestDetail.ToLocationErpCode; detail.RequestLocationErpCode = injectionRequestDetail.ToLocationErpCode;
detail.RequestWarehouseCode=injectionRequestDetail.ToWarehouseCode; detail.RequestWarehouseCode = injectionRequestDetail.ToWarehouseCode;
detail.PositionCode = injectionRequestDetail.PositionCode; detail.PositionCode = injectionRequestDetail.PositionCode;
detail.RecommendType = injectionRequestDetail.RecommendType; detail.RecommendType = injectionRequestDetail.RecommendType;
detail.ProdLine = injectionRequestDetail.ToLocationCode; detail.ProdLine = injectionRequestDetail.ToLocationCode;
detail.ItemCode = injectionRequestDetail.ItemCode; detail.ItemCode = injectionRequestDetail.ItemCode;
detail.ItemName=injectionRequestDetail.ItemName; detail.ItemName = injectionRequestDetail.ItemName;
detail.ItemDesc1=injectionRequestDetail.ItemDesc1; detail.ItemDesc1 = injectionRequestDetail.ItemDesc1;
detail.ItemDesc2 = injectionRequestDetail.ItemDesc2; detail.ItemDesc2 = injectionRequestDetail.ItemDesc2;
detail.StdPackQty = injectionRequestDetail.StdPackQty; detail.StdPackQty = injectionRequestDetail.StdPackQty;

18
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/KittingIssueRequestEventHandler.cs

@ -72,15 +72,15 @@ public class KittingIssueRequestEventHandler
List<KittingIssueJobEditInput> kittingIssueJobs = new EditableList<KittingIssueJobEditInput>(); List<KittingIssueJobEditInput> kittingIssueJobs = new EditableList<KittingIssueJobEditInput>();
switch (entity.Type) //switch (entity.Type)
{ //{
case nameof(EnumIssueType.BoxQty): // case nameof(EnumIssueType.BoxQty):
kittingIssueJobs = await CreateKittingIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false); // kittingIssueJobs = await CreateKittingIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
break; // break;
case nameof(EnumIssueType.Qty): // case nameof(EnumIssueType.Qty):
kittingIssueJobs = await CreateKittingIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false); // kittingIssueJobs = await CreateKittingIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
break; // break;
} //}
if (kittingIssueJobs.Any()) if (kittingIssueJobs.Any())
{ {

Loading…
Cancel
Save