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. 15
      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. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/IssueNotes/InjectionIssueNotes/Inputs/InjectionIssueNoteImportInput.cs
  14. 4
      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. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/IssueRequest/InjectionIssueRequests/Inputs/InjectionIssueRequestEditInput.cs
  19. 9
      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. 229
      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. 13
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/InjectionIssueJobs/InjectionIssueJob.cs
  24. 17
      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. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/InjectionIssueRequests/InjectionIssueRequest.cs
  28. 1
      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. 267
      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 Volo.Abp;
using System.Net.NetworkInformation;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.InjectionMoldingTaskAgent.Incoming;
public class InjectionMoldingRequestReader : IReader
{
@ -121,7 +123,7 @@ public class InjectionMoldingRequestReader : IReader
InjectionIssueRequestEditInput input = new InjectionIssueRequestEditInput();
input.Worker = "Vision";
input.Type = "Vision";
input.IssueRequestType = EnumIssueRequestType.Vision;
input.AutoSubmit = true;
input.ActiveDate = DateTime.Now;
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.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -10,20 +11,20 @@ public enum EnumIssueType
None=0,
/// <summary>
/// 按箱 叫
/// 原材
/// </summary>
BoxQty=1,
[Display(Name = "原材料")]
RAW =1,
/// <summary>
/// 按数量 叫料
/// 半成品
/// </summary>
Qty=2,
[Display(Name = "半成品")]
SEMI= 2,
/// <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 Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
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>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <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 Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -47,6 +48,12 @@ public class InjectionIssueJobDetailDTO : SfsDetailDTOBase
/// </summary>
public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion
#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 Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -47,6 +48,12 @@ public class InjectionIssueJobDetailInput : SfsDetailInputBase
/// </summary>
public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion
#region 请求信息

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

@ -9,7 +9,6 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class InjectionIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCreateInput<InjectionIssueJobDetailInput>
{
#region Create
/// <summary>
/// 上游任务编号
/// </summary>
@ -25,13 +24,6 @@ public class InjectionIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCr
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string InjectionIssueRequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
/// <summary>
/// 任务类型
/// </summary>
@ -65,5 +57,10 @@ public class InjectionIssueJobEditInput : SfsJobCreateUpdateInputBase, ISfsJobCr
/// </summary>
[Display(Name = "使用在途库")]
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.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;
@ -20,11 +21,10 @@ public class InjectionIssueNoteDTO : SfsStoreDTOBase<InjectionIssueNoteDetailDTO
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <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 Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -47,6 +48,12 @@ public class InjectionIssueNoteDetailDTO : SfsDetailDTOBase
/// </summary>
public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion
#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.Tasks;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
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);
@ -14,8 +16,9 @@ public interface IInjectionIssueNoteAppService : ISfsStoreMasterReadOnlyAppServi
Task<InjectionIssueNoteDTO> ConfirmAsync(string number);
Task<PagedResultDto<InjectionIssueNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(EnumIssueRequestType issueRequestType);
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 Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -47,6 +48,12 @@ public class InjectionIssueNoteDetailInput : SfsDetailInputBase
/// </summary>
public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion
#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.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;
@ -41,11 +42,10 @@ public class InjectionIssueNoteEditInput : SfsStoreCreateOrUpdateInputBase
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

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

@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -19,10 +20,10 @@ public class InjectionIssueNoteImportInput : SfsStoreImportInputBase, IHasJobNum
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[Display(Name = "叫料请求类型")]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库

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

@ -1,4 +1,6 @@
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;
@ -8,7 +10,7 @@ public class InjectionIssueRequestDTO : SfsStoreRequestDTOBase<InjectionIssueReq
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <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 = "需求箱数量")]
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>
{
Task<InjectionIssueRequestDTO> CreateAndHandleAsync(InjectionIssueRequestEditInput input);
/// <summary>
/// 获取已完成的叫料单数量
/// </summary>
/// <returns></returns>
Task<long> GetCountAsync();
/// <summary>
/// 获取物品类别列表
/// </summary>

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

@ -1,18 +1,16 @@
using System.Collections.Generic;
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;
public class InjectionIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInputBase
{
#region Base
/// <summary>
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
@ -24,10 +22,5 @@ public class InjectionIssueRequestEditInput : SfsStoreRequestCreateOrUpdateInput
/// 明细列表
/// </summary>
[Display(Name = "明细列表")]
public List<InjectionIssueRequestDetailInput> Details { get; set; } = new List<InjectionIssueRequestDetailInput>();
#endregion
#region Create
#endregion
public List<InjectionIssueRequestDetailInput> Details { get; set; } = new();
}

9
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 Win_in.Sfs.Shared.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -11,11 +10,7 @@ public class InjectionIssueRequestImportInput : SfsStoreImportInputBase
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
[Required(ErrorMessage = "{0}是必填项")]
[ImporterHeader(Name = "叫料类型")]
[ExporterHeader(DisplayName = "叫料类型")]
[ValueMapping("人工拉动", EnumMaterialRequestType.Issue_Manual)]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 物品代码

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.Domain.Entities;
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.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
@ -85,9 +86,9 @@ public class InjectionIssueNoteAppService :
/// <returns></returns>
[HttpPost("by-type/{requestType}")]
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)
{
expression = expression.And(requestInput.Condition.Filters.ToLambda<InjectionIssueNote>());
@ -97,10 +98,10 @@ public class InjectionIssueNoteAppService :
requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false);
}
[HttpGet("list/un-confirmed/{requestType}")]
public virtual async Task<List<InjectionIssueNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType)
[HttpPost("list-by-type-and-un-confirmed")]
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);
var dtos = ObjectMapper.Map<List<InjectionIssueNote>, List<InjectionIssueNoteDTO>>(entities);

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

@ -1,26 +1,13 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using DocumentFormat.OpenXml.Office.PowerPoint.Y2021.M06.Main;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
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.Shared.Domain;
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.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -32,48 +19,37 @@ namespace Win_in.Sfs.Wms.Store.Application;
/// </summary>
[Authorize]
[Route($"{StoreConsts.RootPath}injection-issue-request")]
public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<InjectionIssueRequest, InjectionIssueRequestDTO,
SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetail, InjectionIssueRequestDetailDTO,
public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<InjectionIssueRequest,
InjectionIssueRequestDTO,
SfsStoreRequestInputBase, InjectionIssueRequestEditInput, InjectionIssueRequestDetail,
InjectionIssueRequestDetailDTO,
SfsStoreRequestInputBase, InjectionIssueRequestImportInput>,
IInjectionIssueRequestAppService
{
private readonly IInjectionIssueRequestManager _injectionRequestManager;
private readonly IItemStoreRelationAppService _itemStoreRelationApp;
private readonly IAreaAppService _areaApp;
private readonly ILocationAppService _locationAppService;
private readonly IItemBasicAppService _itemBasicAppService;
private readonly IItemContainerAppService _itemContainerAppService;
private readonly IProductionLineAppService _productionLineAppService;
private readonly ITransactionTypeAppService _transactionTypeAppService;
public InjectionIssueRequestAppService(
IInjectionIssueRequestRepository repository,
IInjectionIssueRequestManager injectionRequestManager,
IPreparationPlanManager preparationPlanManager,
IItemStoreRelationAppService itemStoreRelationApp,
IAreaAppService areaApp,
ILocationAppService locationAppService,
IItemBasicAppService itemBasicAppService,
IItemContainerAppService itemContainerAppService,
IProductionLineAppService productionLineAppService,
ITransactionTypeAppService transactionTypeAppService
)
: base(repository, injectionRequestManager)
{
_injectionRequestManager = injectionRequestManager;
_itemStoreRelationApp = itemStoreRelationApp;
_areaApp = areaApp;
_locationAppService = locationAppService;
_itemBasicAppService = itemBasicAppService;
_itemContainerAppService= itemContainerAppService;
_productionLineAppService = productionLineAppService;
_itemContainerAppService = itemContainerAppService;
_transactionTypeAppService = transactionTypeAppService;
}
#region 东阳V2
public override async Task<InjectionIssueRequestDTO> HandleAsync(Guid id)
{
await Task.CompletedTask.ConfigureAwait(false);
@ -101,7 +77,7 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
detailInput.ToLocationArea = toLocationDto.AreaCode;
detailInput.ToLocationGroup = toLocationDto.LocationGroupCode;
detailInput.ToWarehouseCode= toLocationDto.WarehouseCode;
detailInput.ToWarehouseCode = toLocationDto.WarehouseCode;
detailInput.ProdLine = detailInput.ToLocationCode;
detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode;
@ -109,8 +85,9 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
detailInput.ItemDesc2 = itemBasicDto.Desc2;
detailInput.ItemName = itemBasicDto.Name;
var itemContainerDto = await _itemContainerAppService.GetListByItemCodeAsync(detailInput.ItemCode).ConfigureAwait(false);
if(itemContainerDto.Count>0)
var itemContainerDto = await _itemContainerAppService.GetListByItemCodeAsync(detailInput.ItemCode)
.ConfigureAwait(false);
if (itemContainerDto.Count > 0)
{
detailInput.Uom = itemContainerDto[0].BasicUom;
detailInput.Qty = itemContainerDto[0].Qty;
@ -146,7 +123,8 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
/// <returns></returns>
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, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
@ -178,113 +156,39 @@ public class InjectionIssueRequestAppService : SfsStoreRequestAppServiceBase<Inj
return entities;
}
#endregion
#region 导入
/// <summary>
/// 用来重写 导入数据时可以加工数据
/// 获取已完成的叫料单数量
/// </summary>
/// <param name="dictionary"></param>
/// <returns></returns>
protected override async Task<Dictionary<InjectionIssueRequest, EntityState>> ImportProcessingEntityAsync(
Dictionary<InjectionIssueRequest, EntityState> dictionary)
[HttpPost("get-uncompleted-request")]
public async Task<List<UnCompletedRequestDto>> GetUnCompletedRequestAsync(List<UnCompletedRequestDto> p_list)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
foreach (var injectionRequest in addList)
var returnList = new List<UnCompletedRequestDto>();
//枚举类型查不到改成SQL查询
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();
injectionRequest.CreatorId = CurrentUser.Id;
if (injectionRequest.Type == EnumTransSubType.Issue_Manual.GetDisplayName())
var query = from detail in itm.Details
join citm in p_list on new
{
injectionRequest.Type = EnumTransSubType.Issue_Manual.ToString();
}
foreach (var detail in injectionRequest.Details)
detail.ItemCode, locCode = detail.ToLocationCode, areaCode = detail.PositionCode
} equals
new { citm.ItemCode, locCode = citm.LocCode, areaCode = citm.PositionCode }
select new UnCompletedRequestDto
{
var locationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
CheckLocation(locationDto, detail.ToLocationCode);
ItemCode = detail.ItemCode, LocCode = detail.ToLocationCode, PositionCode = detail.PositionCode
};
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;
returnList.AddRange(query.ToList());
}
/// <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);
return returnList;
}
#endregion
#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)
{
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
}

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>()
.IgnoreAuditedObjectProperties()
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Details)
.Ignore(x => x.Remark)

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

@ -1,8 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -13,10 +12,10 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public class InjectionIssueJob : SfsJobAggregateRootBase<InjectionIssueJobDetail>
{
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 生产线
@ -41,7 +40,5 @@ public class InjectionIssueJob : SfsJobAggregateRootBase<InjectionIssueJobDetail
/// 任务明细
/// </summary>
[IgnoreUpdate]
public override List<InjectionIssueJobDetail> Details { get; set; } = new List<InjectionIssueJobDetail>();
public override List<InjectionIssueJobDetail> Details { get; set; } = new();
}

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

@ -1,8 +1,9 @@
using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -13,21 +14,25 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
/// <summary>
/// 物品代码
/// </summary>
[Display(Name = "物品代码")]
public string ItemCode { get; set; }
/// <summary>
/// 物品名称
/// </summary>
[Display(Name = "物品名称")]
public string ItemName { get; set; }
/// <summary>
/// 物品描述1
/// </summary>
[Display(Name = "物品描述1")]
public string ItemDesc1 { get; set; }
/// <summary>
/// 物品描述2
/// </summary>
[Display(Name = "物品描述2")]
public string ItemDesc2 { get; set; }
/// <summary>
@ -40,13 +45,21 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
/// <summary>
/// 库存状态
/// </summary>
[Display(Name = "库存状态")]
public EnumInventoryStatus Status { get; set; }
/// <summary>
/// 计量单位
/// </summary>
[Display(Name = "计量单位")]
public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion
#region 请求信息
@ -519,6 +532,6 @@ public class InjectionIssueJobDetail : SfsDetailEntityBase
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 Volo.Abp;
using Win_in.Sfs.Shared.Domain.Entities;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -27,10 +28,10 @@ public class InjectionIssueNote : SfsStoreAggregateRootBase<InjectionIssueNoteDe
public string RequestNumber { get; set; }
/// <summary>
/// 叫料请求类型
/// 叫料类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
[Display(Name = "叫料类型")]
public EnumIssueRequestType IssueRequestType { get; set; }
/// <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 Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
namespace Win_in.Sfs.Wms.Store.Domain;
@ -47,6 +48,12 @@ public class InjectionIssueNoteDetail : SfsStoreDetailEntityBase
/// </summary>
public string Uom { get; set; }
/// <summary>
/// 发料方式
/// </summary>
[Display(Name = "发料方式")]
public EnumIssueType IssueType { get; set; }
#endregion
#region 请求信息

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

@ -1,6 +1,7 @@
using System.Collections.Generic;
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.Domain;
@ -13,8 +14,7 @@ public class InjectionIssueRequest : SfsStoreRequestAggregateRootBase<InjectionI
/// 叫料类型
/// </summary>
[Display(Name = "叫料类型")]
[IgnoreUpdate]
public string Type { get; set; }
public EnumIssueRequestType IssueRequestType { get; set; }
/// <summary>
/// 使用在途库
@ -25,5 +25,5 @@ public class InjectionIssueRequest : SfsStoreRequestAggregateRootBase<InjectionI
/// 明细列表
/// </summary>
[IgnoreUpdate]
public override List<InjectionIssueRequestDetail> Details { get; set; } = new List<InjectionIssueRequestDetail>();
public override List<InjectionIssueRequestDetail> Details { get; set; } = new();
}

1
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.Schema;
using Win_in.Sfs.Shared.Domain;

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
b.ConfigureJob<InjectionIssueJob, InjectionIssueJobDetail>();
//Properties
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.InjectionIssueRequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ProdLine).HasMaxLength(SfsPropertyConst.CodeLength);
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
b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength);
//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();
//Properties
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//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>()
.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.UpStreamJobNumber)
.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>();
switch (entity.Type)
{
case nameof(EnumIssueType.BoxQty):
assembleJobs = await CreateAssembleIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
break;
case nameof(EnumIssueType.Qty):
assembleJobs = await CreateAssembleIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
break;
}
//switch (entity.Type)
//{
// case nameof(EnumIssueType.BoxQty):
// assembleJobs = await CreateAssembleIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
// break;
// case nameof(EnumIssueType.Qty):
// assembleJobs = await CreateAssembleIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
// break;
//}
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>();
switch (entity.Type)
{
case nameof(EnumIssueType.BoxQty):
coatingIssueJobs = await CreateCoatingIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
break;
case nameof(EnumIssueType.Qty):
coatingIssueJobs = await CreateCoatingIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
break;
}
//switch (entity.Type)
//{
// case nameof(EnumIssueType.BoxQty):
// coatingIssueJobs = await CreateCoatingIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
// break;
// case nameof(EnumIssueType.Qty):
// coatingIssueJobs = await CreateCoatingIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
// break;
//}
if (coatingIssueJobs.Any())
{

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

@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
@ -8,12 +7,10 @@ using Volo.Abp;
using Volo.Abp.EventBus;
using Win_in.Sfs.Basedata.Application.Contracts;
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.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Event.BusinessRequest;
@ -72,15 +69,7 @@ public class InjectionIssueRequestEventHandler
List<InjectionIssueJobEditInput> injectionJobs = new EditableList<InjectionIssueJobEditInput>();
switch (entity.Type)
{
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())
{
@ -113,249 +102,6 @@ public class InjectionIssueRequestEventHandler
#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 按箱叫料
/// <summary>
@ -410,7 +156,7 @@ public class InjectionIssueRequestEventHandler
.RawLocationCodeListJson)
};
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())
{
for (var i = 0; i < sumBoxQty; i++)
@ -420,7 +166,8 @@ public class InjectionIssueRequestEventHandler
usableList.Remove(firstUsable);
var injectionJobEditInput =
await BuildInjectionIssueJobCreateInputWithBoxQtyTypeAsync(injectionRequest, inputDetailTemplate,
await BuildInjectionIssueJobCreateInputWithBoxQtyTypeAsync(injectionRequest,
inputDetailTemplate,
firstUsable)
.ConfigureAwait(false);
@ -471,18 +218,18 @@ public class InjectionIssueRequestEventHandler
{
var detail = new InjectionIssueJobDetailInput();
detail.RequestLocationCode = injectionRequestDetail.ToLocationCode;
detail.RequestLocationGroup=injectionRequestDetail.ToLocationGroup;
detail.RequestLocationGroup = injectionRequestDetail.ToLocationGroup;
detail.RequestLocationArea = injectionRequestDetail.ToLocationArea;
detail.RequestLocationErpCode = injectionRequestDetail.ToLocationErpCode;
detail.RequestWarehouseCode=injectionRequestDetail.ToWarehouseCode;
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.ItemName = injectionRequestDetail.ItemName;
detail.ItemDesc1 = injectionRequestDetail.ItemDesc1;
detail.ItemDesc2 = injectionRequestDetail.ItemDesc2;
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>();
switch (entity.Type)
{
case nameof(EnumIssueType.BoxQty):
kittingIssueJobs = await CreateKittingIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
break;
case nameof(EnumIssueType.Qty):
kittingIssueJobs = await CreateKittingIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
break;
}
//switch (entity.Type)
//{
// case nameof(EnumIssueType.BoxQty):
// kittingIssueJobs = await CreateKittingIssueJobWithBoxQtyTypeAsync(entity).ConfigureAwait(false);
// break;
// case nameof(EnumIssueType.Qty):
// kittingIssueJobs = await CreateKittingIssueJobWithQtyTypeAsync(entity).ConfigureAwait(false);
// break;
//}
if (kittingIssueJobs.Any())
{

Loading…
Cancel
Save