Browse Source

修改 三方库

dev_DY_CC
郑勃旭 11 months ago
parent
commit
8c2baa4bc1
  1. 158
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs
  2. 11
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs
  3. 40
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDTO.cs
  4. 16
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/IThirdLocationJobAppService.cs
  5. 51
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ThirdLocationNotes/DTOs/ThirdLocationNoteDTO.cs
  6. 11
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ThirdLocationNotes/IThirdLocationNoteAppService.cs
  7. 20
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDTO.cs
  8. 100
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDetailDTO.cs
  9. 196
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ThirdLocationJobs/ThirdLocationJobAppService.cs
  10. 72
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ThirdLocationNotes/ThirdLocationNoteAppService.cs
  11. 421
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs
  12. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAutoMapperProfile.cs
  13. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/IThirdLocationJobManager.cs
  14. 72
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJob.cs
  15. 92
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs
  16. 93
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobManager.cs
  17. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/IThirdLocationNoteManager.cs
  18. 75
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNote.cs
  19. 99
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNoteDetail.cs
  20. 24
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNoteManager.cs
  21. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestDetail.cs
  22. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/IThirdLocationRequestManager.cs
  23. 25
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequest.cs
  24. 79
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs
  25. 120
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestManager.cs
  26. 12
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs
  27. 34547
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240614074403_Added_ThirdLocation.Designer.cs
  28. 835
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240614074403_Added_ThirdLocation.cs
  29. 250
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/StoreDbContextModelSnapshot.cs
  30. 8
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/ThirdLocationNotes/ThirdLocationNoteDbContextModelCreatingExtensions.cs
  31. 6
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs
  32. 18
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ThirdLocationJobAutoMapperProfile.cs
  33. 1
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/ThirdLocationNoteAutoMapperProfile.cs
  34. 224
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ThirdLocationJobEventHandler.cs
  35. 379
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs
  36. 182
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ThirdLocationNoteEventHandler.cs

158
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/ThirdLocationJobController.cs

@ -46,161 +46,5 @@ public class ThirdLocationJobController : AbpController
_dictApp = dictApp; _dictApp = dictApp;
} }
/// <summary>
/// 获取任务详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public virtual async Task<ActionResult<ThirdLocationJobDTO>> GetAsync(Guid id)
{
var result = await _thirdLocationJobAppService.GetAsync(id).ConfigureAwait(false);
return Ok(result);
}
/// <summary>
/// 获取列表 筛选
/// </summary>
/// <param name="sfsRequestDTO"></param>
/// <returns></returns>
[HttpPost("list")]
public virtual async Task<PagedResultDto<ThirdLocationJobDTO>> GetListAsync(SfsJobRequestInputBase sfsRequestDTO)
{
var list = await _thirdLocationJobAppService.GetPagedListByFilterAsync(sfsRequestDTO, true).ConfigureAwait(false);
return list;
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="pageSize"></param>
/// <param name="pageIndex"></param>
/// <returns></returns>
[HttpGet("list")]
public virtual async Task<PagedResultDto<ThirdLocationJobDTO>> GetListAsync(int pageSize, int pageIndex)
{
var status = new List<int>() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing, (int)EnumJobStatus.Partial };
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsJobRequestInputBase
{
MaxResultCount = pageSize,
SkipCount = (pageIndex - 1) * pageSize,
Sorting = $"{nameof(ThirdLocationJobDTO.CreationTime)} ASC",
Condition = new Condition
{
Filters = new List<Filter>
{
new(nameof(IssueJobDTO.JobStatus),jsonStatus,"In")
}
}
};
var list = await _thirdLocationJobAppService.GetPagedListByFilterAsync(request, true).ConfigureAwait(false);
return list;
}
/// <summary>
/// 根据Job Number 获取任务列表
/// </summary>
/// <param name="jobNumber"></param>
/// <returns></returns>
[HttpGet("by-number/{jobNumber}")]
public virtual async Task<ActionResult<ThirdLocationJobDTO>> GetByNumberAsync(string jobNumber)
{
var jobDto = await _thirdLocationJobAppService.GetByNumberAsync(jobNumber).ConfigureAwait(false);
if (jobDto == null)
{
throw new UserFriendlyException($"未找到编号为 {jobNumber} 的任务");
}
var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
if (!wlgCodes.Contains(jobDto.WorkGroupCode))
{
return new NotFoundObjectResult($"任务属于工作组 {jobDto.WorkGroupCode}");
}
if (jobDto.JobStatus == EnumJobStatus.Doing && jobDto.AcceptUserId != CurrentUser.Id)
{
return new NotFoundObjectResult($"任务正在被 {jobDto.AcceptUserName} 处理");
}
return jobDto;
}
/// <summary>
/// 获取任务数量
/// </summary>
/// <returns></returns>
[HttpGet("count")]
public virtual async Task<ActionResult<long>> CountAsync()
{
var wlgCodes = await _userWorkGroupAppService.GetCodsOfCurrentUserAsync().ConfigureAwait(false);
var jsonCodes = JsonSerializer.Serialize(wlgCodes);
var status = new List<int>() { (int)EnumJobStatus.Open, (int)EnumJobStatus.Doing, (int)EnumJobStatus.Partial };
var jsonStatus = JsonSerializer.Serialize(status);
var request = new SfsJobRequestInputBase
{
Sorting = $"{nameof(ThirdLocationJobDTO.Priority)} ASC",
Condition = new Condition
{
Filters = new List<Filter>
{
new(nameof(ThirdLocationJobDTO.WorkGroupCode),jsonCodes,"In"),
new(nameof(ThirdLocationJobDTO.JobStatus),jsonStatus,"In")
}
}
};
var count = await _thirdLocationJobAppService.GetCountByFilterAsync(request).ConfigureAwait(false);
return Ok(count);
}
/// <summary>
/// 承接任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("take/{id}")]
public virtual async Task TakeAsync(Guid id)
{
await _thirdLocationJobAppService.AcceptAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 取消承接任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("cancel-take/{id}")]
public virtual async Task CancelTakeAsync(Guid id)
{
await _thirdLocationJobAppService.CancelAcceptAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 终止关闭任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("close-job/{id}")]
public virtual async Task CloseJobAsync(Guid id)
{
await _thirdLocationJobAppService.CloseJobAsync(id).ConfigureAwait(false);
}
/// <summary>
/// 执行任务
/// </summary>
/// <param name="id"></param>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost("finish/{id}")]
public virtual async Task FinishAsync(Guid id, [FromBody] ThirdLocationJobDTO dto)
{
await _thirdLocationJobAppService.CompleteAsync(id, dto).ConfigureAwait(false);
}
} }

11
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/ThirdLocationNoteController.cs

@ -24,15 +24,4 @@ public class ThirdLocationNoteController : AbpController
_thirdLocationNoteAppService = thirdLocationNoteAppService; _thirdLocationNoteAppService = thirdLocationNoteAppService;
} }
/// <summary>
/// 创建三方库转移记录
/// </summary>
/// <param name="input">CreateInput</param>
/// <returns></returns>
[HttpPost("")]
public virtual async Task CreateAsync(ThirdLocationNoteEditInput input)
{
await _thirdLocationNoteAppService.CreateAsync(input).ConfigureAwait(false);
}
} }

40
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/DTOs/ThirdLocationJobDTO.cs

@ -1,5 +1,7 @@
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.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -10,37 +12,35 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ThirdLocationJobDTO : SfsJobDTOBase<ThirdLocationJobDetailDTO> public class ThirdLocationJobDTO : SfsJobDTOBase<ThirdLocationJobDetailDTO>
{ {
/// <summary> /// <summary>
/// 叫料请求类型 /// 请求单号
/// </summary> /// </summary>
[Display(Name = "叫料请求类型")] [Display(Name = "请求单号")]
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] public string RequestNumber { get; set; }
public string RequestType { get; set; }
/// <summary> /// <summary>
/// 收货单件码 /// 已承接
/// </summary> /// </summary>
[Display(Name = "收货单件码")] /// <returns></returns>
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] [Display(Name = "是否已承接")]
public string SingleCodeJob { get; set; } public bool IsClaims { get; set; }
/// <summary> /// <summary>
/// 要货申请单号 /// 承接人ID
/// </summary> /// </summary>
[Display(Name = "要货申请单号")] /// <returns></returns>
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] [Display(Name = "承接人ID")]
public string RequestNumber { get; set; } public string ClaimsUserId { get; set; }
/// <summary> /// <summary>
/// 车间 /// 承接人
/// </summary> /// </summary>
[Display(Name = "车间")] /// <returns></returns>
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")] [Display(Name = "承接人")]
public string Workshop { get; set; } public string ClaimsUserName { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 三方库申请类型
/// </summary> /// </summary>
[Display(Name = "使用在途库")] [Display(Name = "三方库申请类型")]
public bool UseOnTheWayLocation { get; set; } public string Type { get; set; }
} }

16
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/ThirdLocationJobs/IThirdLocationJobAppService.cs

@ -9,20 +9,4 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IThirdLocationJobAppService public interface IThirdLocationJobAppService
: ISfsJobAppServiceBase<ThirdLocationJobDTO, SfsJobRequestInputBase, ThirdLocationJobCheckInput, ThirdLocationJobEditInput> : ISfsJobAppServiceBase<ThirdLocationJobDTO, SfsJobRequestInputBase, ThirdLocationJobCheckInput, ThirdLocationJobEditInput>
{ {
Task<List<ThirdLocationJobDTO>> CheckJobExistByItemCodeAndLocationCode(string itemCode, string locationCode);
Task CancelByMaterialRequestAsync(string thirdLocationNumber);
Task<PagedResultDto<ThirdLocationJobDTO>> GetListByTypeAsync(SfsJobRequestInputBase requestInput, string requestType,
bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<ThirdLocationJobDTO>> GetByRequestNumberAsync(string requestNumber);
Task CloseJobAsync(Guid id);
/// <summary>
/// 保存拆箱时涉及的明细修改
/// </summary>
/// <returns></returns>
Task<ThirdLocationJobDTO> SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input);
} }

51
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ThirdLocationNotes/DTOs/ThirdLocationNoteDTO.cs

@ -1,55 +1,56 @@
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ThirdLocationNoteDTO : SfsStoreDTOBase<ThirdLocationNoteDetailDTO>, IHasJobNumber, IHasRequestNumber public class ThirdLocationNoteDTO : SfsStoreDTOBase<ThirdLocationNoteDetailDTO>, IHasJobNumber, IHasRequestNumber
{ {
/// <summary> /// <summary>
/// 任务ID /// 发出时间
/// </summary> /// </summary>
[Display(Name = "任务ID")] public DateTime IssueTime { get; set; }
public string JobNumber { get; set; }
/// <summary> /// <summary>
/// /// 接收时
/// </summary> /// </summary>
[Display(Name = "车间")] public DateTime ReceiptTime { get; set; }
[StringLength(SfsEfCorePropertyConst.CodeLength, ErrorMessage = "{0}最多输入{1}个字符")]
public string Workshop { get; set; }
/// <summary> /// <summary>
/// 请求代码 /// 请求单号
/// </summary> /// </summary>
[Display(Name = "请求代码")] [Display(Name = "请求单号")]
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 string JobNumber { get; set; }
public string RequestType { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 已承接
/// </summary> /// </summary>
[Display(Name = "使用在途库")] /// <returns></returns>
public bool UseOnTheWayLocation { get; set; } [Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary> /// <summary>
/// 已确认 /// 承接人ID
/// </summary> /// </summary>
[Display(Name = "已确认")] /// <returns></returns>
public bool Confirmed { get; set; } [Display(Name = "承接人ID")]
public string ClaimsUserId { get; set; }
/// <summary> /// <summary>
/// 确认时间 /// 承接人
/// </summary> /// </summary>
[Display(Name = "确认时间")] /// <returns></returns>
public DateTime? ConfirmTime { get; set; } [Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
/// <summary>
/// 三方库申请类型
/// </summary>
[Display(Name = "三方库申请类型")]
public string Type { get; set; }
} }

11
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Notes/ThirdLocationNotes/IThirdLocationNoteAppService.cs

@ -8,14 +8,5 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public interface IThirdLocationNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<ThirdLocationNoteDTO, SfsStoreRequestInputBase, ThirdLocationNoteDetailDTO, SfsStoreRequestInputBase> public interface IThirdLocationNoteAppService : ISfsStoreMasterReadOnlyAppServiceBase<ThirdLocationNoteDTO, SfsStoreRequestInputBase, ThirdLocationNoteDetailDTO, SfsStoreRequestInputBase>
{ {
Task<ThirdLocationNoteDTO> CreateAsync(ThirdLocationNoteEditInput input);
Task<ThirdLocationNoteDTO> ConfirmAsync(Guid id);
Task<ThirdLocationNoteDTO> ConfirmAsync(string number);
Task<PagedResultDto<ThirdLocationNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default);
Task<List<ThirdLocationNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType);
} }

20
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDTO.cs

@ -1,27 +1,15 @@
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.Wms.Store.Domain;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ThirdLocationRequestDTO : SfsStoreRequestDTOBase<ThirdLocationRequestDetailDTO>, IHasNumber public class ThirdLocationRequestDTO : SfsStoreRequestDTOBase<ThirdLocationRequestDetailDTO>, IHasNumber
{ {
/// <summary> /// <summary>
/// 类型 /// 三方库申请类型
/// </summary> /// </summary>
[Display(Name = "类型")] [Display(Name = "三方库申请类型")]
public string Type { get; set; } public string Type { get; set; }
/// <summary>
/// 申请单件码
/// </summary>
[IgnoreUpdate]
public string SingleCodeRequest { get; set; }
/// <summary>
/// 是否使用在途库
/// </summary>
[Display(Name = "是否使用在途库")]
public bool IsUseOnTheWayLocation { get; set; }
} }

100
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Requests/ThirdLocationRequests/DTOs/ThirdLocationRequestDetailDTO.cs

@ -8,68 +8,112 @@ namespace Win_in.Sfs.Wms.Store.Application.Contracts;
public class ThirdLocationRequestDetailDTO : SfsStoreDetailWithQtyDTOBase public class ThirdLocationRequestDetailDTO : SfsStoreDetailWithQtyDTOBase
{ {
#region 目标库位
/// <summary> /// <summary>
/// 目标库位 /// 库位
/// </summary> /// </summary>
[Display(Name = "目标库位")]
public string ToLocationCode { get; set; } public string ToLocationCode { get; set; }
/// <summary> /// <summary>
/// 目标ERP储位 /// 到库区
/// </summary>
public string ToLocationArea { get; set; }
/// <summary>
/// 到库位组
/// </summary>
public string ToLocationGroup { get; set; }
/// <summary>
/// 到ERP库位
/// </summary> /// </summary>
[Display(Name = "目标ERP储位")]
public string ToLocationErpCode { get; set; } public string ToLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 来源库位 /// 到仓库
/// </summary> /// </summary>
[Display(Name = "来源库位")] public string ToWarehouseCode { get; set; }
public string FromLocationCode { get; set; }
#endregion
#region 来源库位
/// <summary> /// <summary>
/// 申请单件码 /// 到库位
/// </summary> /// </summary>
[Display(Name = "申请单件码")] public string FromLocationCode { get; set; }
public string SingleCodeRequest { get; set; }
/// <summary> /// <summary>
/// 来源库区 /// 库区
/// </summary> /// </summary>
[Display(Name = "来源库区")]
public string FromLocationArea { get; set; } public string FromLocationArea { get; set; }
/// <summary> /// <summary>
/// 已发数量 /// 到库位组
/// </summary>
public string FromLocationGroup { get; set; }
/// <summary>
/// 到ERP库位
/// </summary>
public string FromLocationErpCode { get; set; }
/// <summary>
/// 到仓库
/// </summary>
public string FromWarehouseCode { get; set; }
#endregion
#region 在途库位
/// <summary>
/// 在途库库位
/// </summary>
public string OnTheWayLocationCode { get; set; }
#endregion
/// <summary>
/// 申请单件码
/// </summary>
public string SingleCodeRequest { get; set; }
/// <summary>
/// 已发数量
/// </summary> /// </summary>
[Display(Name = "已发数量")]
public decimal IssuedQty { get; set; } public decimal IssuedQty { get; set; }
/// <summary> /// <summary>
/// 已收数量 /// 已收数量
/// </summary> /// </summary>
[Display(Name = "已收数量")]
public decimal ReceivedQty { get; set; } public decimal ReceivedQty { get; set; }
/// <summary> /// <summary>
/// 请求未发 /// 箱码
/// </summary> /// </summary>
[Display(Name = "请求未发")] public string PackingCode { get; set; }
[NotMapped]
public decimal ToBeIssuedQty => Qty - IssuedQty;
/// <summary> /// <summary>
/// 已发未收 /// 批次
/// </summary> /// </summary>
[Display(Name = "已发未收")] public string Lot { get; set; }
[NotMapped]
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty; /// <summary>
/// 过期时间
/// </summary>
public DateTime ExpiredTime { get; set; }
/// <summary>
/// 库位状态
/// </summary>
public EnumInventoryStatus EnumInventoryStatus { get; set; }
/// <summary> /// <summary>
/// 请求未收 /// 请求未收
/// </summary> /// </summary>
[Display(Name = "请求未收")]
[NotMapped] [NotMapped]
public decimal NotFinishQty => Qty - ReceivedQty; public decimal NotFinishQty => IssuedQty - ReceivedQty;
} }

196
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/ThirdLocationJobs/ThirdLocationJobAppService.cs

@ -37,200 +37,4 @@ public class ThirdLocationJobAppService
_thirdLocationJobManager = thirdLocationJobManager; _thirdLocationJobManager = thirdLocationJobManager;
} }
/// <summary>
/// 完成任务
/// </summary>
/// <param name="id"></param>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost("handle/{id}")]
[UnitOfWork]
public override async Task<ThirdLocationJobDTO> CompleteAsync(Guid id, ThirdLocationJobDTO dto)
{
var handleEntity = ObjectMapper.Map<ThirdLocationJobDTO, ThirdLocationJob>(dto);
var job = await _repository.GetAsync(id).ConfigureAwait(false);
if (job.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None or EnumJobStatus.Done)//需要考虑下 多次提交的问题 所以不判断 进行中
{
throw new UserFriendlyException($"任务状态错误:编号为【{job.Number}】的任务已经【{job.JobStatus.GetDisplayName()}】");
}
if(dto.Details.Count==0)
{
throw new UserFriendlyException($"任务错误:编号为【{dto.Number} 的任务未包含明细");
}
else
{
foreach(var item in dto.Details)
{
var jobDetail = job.Details.FirstOrDefault(p => p.ItemCode == item.ItemCode);
if (jobDetail == null)
{
throw new UserFriendlyException($"任务错误:未找到物品【{item.ItemCode} 的明细信息");
}
else
{
if (item.HandledQty > jobDetail.RecommendQty)
{
throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际数量【{item.HandledQty}】不能大于推荐数量【{item.RecommendQty}】");
}
if (jobDetail.ToLocationCode != item.ToLocationCode)
{
throw new UserFriendlyException($"任务错误:编号为【{job.Number}】的实际目标库位【{item.ToLocationCode}】与申请目标库位【{jobDetail.ToLocationCode}】不一致");
}
}
}
}
var handleResult = await _thirdLocationJobManager.CompleteAsync(handleEntity,CurrentUser).ConfigureAwait(false);
//判断申请是否执行完成
if (job.JobStatus == EnumJobStatus.Done)
{
}
var handleDto = ObjectMapper.Map<ThirdLocationJob, ThirdLocationJobDTO>(handleResult);
return handleDto;
}
/// <summary>
/// 终止关闭任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
[HttpPost("close-job/{id}")]
public virtual async Task CloseJobAsync(Guid id)
{
var thirdLocationJob = await _repository.GetAsync(id).ConfigureAwait(false);
if (thirdLocationJob == null)
{
throw new UserFriendlyException($"未找到ID为 {id} 的任务");
}
else
{
if (thirdLocationJob.JobStatus == EnumJobStatus.Partial)
{
thirdLocationJob.JobStatus = EnumJobStatus.Done;
await Task.CompletedTask.ConfigureAwait(false);
await LocalEventBus.PublishAsync(new SfsClosedEntityEventData<ThirdLocationJob>(thirdLocationJob), false).ConfigureAwait(false);
await Repository.UpdateAsync(thirdLocationJob).ConfigureAwait(false);
}
else if (thirdLocationJob.JobStatus == EnumJobStatus.Open)
{
thirdLocationJob.JobStatus = EnumJobStatus.Closed;
await Task.CompletedTask.ConfigureAwait(false);
await LocalEventBus.PublishAsync(new SfsClosedEntityEventData<ThirdLocationJob>(thirdLocationJob), false).ConfigureAwait(false);
await Repository.UpdateAsync(thirdLocationJob).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{thirdLocationJob.JobStatus.GetDisplayName()}】状态不允许终止");
}
}
}
/// <summary>
/// 根据物品和库位 检查是否存在发料任务
/// </summary>
/// <param name="itemCode"></param>
/// <param name="locationCode"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
[Authorize]
[HttpGet("check-job-exist")]
public virtual async Task<List<ThirdLocationJobDTO>> CheckJobExistByItemCodeAndLocationCode(string itemCode,
string locationCode)
{
var entities = await _repository.GetListAsync(c =>
c.Details.Any(p =>
(p.ItemCode == itemCode && p.RecommendFromLocationCode == locationCode) ||
(p.ItemCode == itemCode && p.ToLocationCode == locationCode))
&& (c.JobStatus == EnumJobStatus.Open || c.JobStatus == EnumJobStatus.Doing), true).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<ThirdLocationJob>, List<ThirdLocationJobDTO>>(entities);
return dtos;
}
[HttpPost("cancel-by-request/{thirdLocationNumber}")]
public virtual async Task CancelByMaterialRequestAsync(string thirdLocationNumber)
{
var entities = await _repository.GetListAsync(p => p.RequestNumber == thirdLocationNumber).ConfigureAwait(false);
foreach (var entity in entities)
{
await _thirdLocationJobManager.CancelAsync(entity).ConfigureAwait(false);
}
}
[HttpPost("invalid")]
public override async Task CancelAsync(Guid id)
{
var thirdLocationJob = await _repository.GetAsync(id).ConfigureAwait(false);
if (thirdLocationJob == null)
{
throw new UserFriendlyException($"未找到ID为 {id} 的任务");
}
await _thirdLocationJobManager.CancelAsync(thirdLocationJob).ConfigureAwait(false);
}
[HttpPost("by-type/{requestType}")]
public virtual async Task<PagedResultDto<ThirdLocationJobDTO>> GetListByTypeAsync(SfsJobRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default)
{
Expression<Func<ThirdLocationJob, bool>> expression = p => p.RequestType == requestType;
if (requestInput.Condition.Filters?.Count > 0)
{
expression = expression.And(requestInput.Condition.Filters.ToLambda<ThirdLocationJob>());
}
return await GetPagedListAsync(expression, requestInput.SkipCount, requestInput.MaxResultCount,
requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false);
}
[HttpPost("by-request-number/{requestNumber}")]
public virtual async Task<List<ThirdLocationJobDTO>> GetByRequestNumberAsync(string requestNumber)
{
var entitys = await _repository.GetListAsync(p => p.RequestNumber == requestNumber).ConfigureAwait(false);
return ObjectMapper.Map<List<ThirdLocationJob>, List<ThirdLocationJobDTO>>(entitys);
}
/// <summary>
/// 保存拆箱时涉及的明细修改
/// </summary>
/// <returns></returns>
[HttpPost("save-detail-split-packing")]
public virtual async Task<ThirdLocationJobDTO> SaveDetail_SplitPackingAsync(SplitPacking_UpdateJobDetailInput input)
{
var job = await _repository.FindAsync(p => p.Number == input.Number).ConfigureAwait(false);
ThirdLocationJobDetail detail = job.Details.FirstOrDefault(p => p.RecommendPackingCode == input.FromPackingCode ); /*&& p.HandledQty == input.FromQty*/
if (detail == null)
{
//throw new UserFriendlyException($"根据HandledPackingCode={input.FromPackingCode}取ThirdLocationJobDetail表为空!");
throw new UserFriendlyException($"根据RecommendPackingCode={input.FromPackingCode}取ThirdLocationJobDetail表为空!");
}
//插入目标箱
var newDetail = CommonHelper.CloneObj(detail);
newDetail.SetId(GuidGenerator.Create());
newDetail.RecommendPackingCode = input.ToPackingCode;
newDetail.RecommendQty = input.ToQty;
newDetail.HandledPackingCode = detail.HandledPackingCode.HasValue() ? input.ToPackingCode : null; //源实际实际箱码有值,则新记录实际箱码有值
newDetail.HandledQty = detail.HandledQty > 0 ? input.ToQty : 0;
//newDetail.CreationTime = CommonHelper.CurTime;
job.Details.Add(newDetail);
//修改源箱
detail.RecommendQty = input.FromQty - input.ToQty;
detail.HandledQty = detail.HandledQty > 0 ? input.FromQty - input.ToQty : 0;
var entity = await _repository.UpdateAsync(job).ConfigureAwait(false);
var ret = ObjectMapper.Map<ThirdLocationJob, ThirdLocationJobDTO>(entity);
return ret;
}
} }

72
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Notes/ThirdLocationNotes/ThirdLocationNoteAppService.cs

@ -33,76 +33,4 @@ public class ThirdLocationNoteAppService :
{ {
_thirdLocationNoteManager = thirdLocationNoteManager; _thirdLocationNoteManager = thirdLocationNoteManager;
} }
[HttpPost("")]
//[Authorize(ThirdLocationNotePermissions.Create)]
public override async Task<ThirdLocationNoteDTO> CreateAsync(ThirdLocationNoteEditInput input)
{
var entity = ObjectMapper.Map<ThirdLocationNoteEditInput, ThirdLocationNote>(input);
await _thirdLocationNoteManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<ThirdLocationNote, ThirdLocationNoteDTO>(entity);
return dto;
}
/// <summary>
/// 确认对应的记录单
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("confirm/{id}")]
public virtual async Task<ThirdLocationNoteDTO> ConfirmAsync(Guid id)
{
var thirdLocationNote= await _repository.GetAsync(id).ConfigureAwait(false);
thirdLocationNote.Confirmed = true;
thirdLocationNote=await _repository.UpdateAsync(thirdLocationNote).ConfigureAwait(false);
await LocalEventBus.PublishAsync(new SfsConfirmedEntityEventData<ThirdLocationNote>(thirdLocationNote), false).ConfigureAwait(false);
return ObjectMapper.Map<ThirdLocationNote, ThirdLocationNoteDTO>(thirdLocationNote);
}
[HttpPost("confirm-by-number/{number}")]
public virtual async Task<ThirdLocationNoteDTO> ConfirmAsync(string number)
{
var entity = await _repository.FindAsync(p => p.Number == number).ConfigureAwait(false);
Check.NotNull(entity, nameof(ThirdLocationNote));
var result = await _thirdLocationNoteManager.ConfirmAsync(entity.Id).ConfigureAwait(false);
var dto = ObjectMapper.Map<ThirdLocationNote, ThirdLocationNoteDTO>(result);
return dto;
}
/// <summary>
/// 根据叫料请求类型获取发料记录
/// </summary>
/// <param name="requestInput"></param>
/// <param name="requestType">
/// 叫料请求类型:
/// 人工拉动:Issue_Manual;
/// 线边拉动:Issue_WIP;
/// </param>
/// <param name="includeDetails"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
[HttpPost("by-type/{requestType}")]
public virtual async Task<PagedResultDto<ThirdLocationNoteDTO>> GetListByTypeAsync(SfsStoreRequestInputBase requestInput,
string requestType, bool includeDetails = false, CancellationToken cancellationToken = default)
{
Expression<Func<ThirdLocationNote, bool>> expression = p => p.RequestType == requestType;
if (requestInput.Condition.Filters?.Count > 0)
{
expression = expression.And(requestInput.Condition.Filters.ToLambda<ThirdLocationNote>());
}
return await GetPagedListAsync(expression, requestInput.SkipCount, requestInput.MaxResultCount,
requestInput.Sorting, includeDetails, cancellationToken).ConfigureAwait(false);
}
[HttpGet("list/un-confirmed/{requestType}")]
public virtual async Task<List<ThirdLocationNoteDTO>> GetListUnConfirmedByTypeAsync(string requestType)
{
var entities = await _repository.GetListAsync(c => !c.Confirmed && c.RequestType == requestType)
.ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<ThirdLocationNote>, List<ThirdLocationNoteDTO>>(entities);
return dtos;
}
} }

421
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAppService.cs

@ -81,425 +81,4 @@ public class ThirdLocationRequestAppService : SfsStoreRequestAppServiceBase<Thir
_thirdLocationJobAppService= thirdLocationJobAppService; _thirdLocationJobAppService= thirdLocationJobAppService;
_thirdLocationJobRepository= thirdLocationJobRepository; _thirdLocationJobRepository= thirdLocationJobRepository;
} }
#region 东阳V2
public override async Task<ThirdLocationRequestDTO> HandleAsync(Guid id)
{
var entity = await _repository.GetAsync(id).ConfigureAwait(false);
await LocalEventBus.PublishAsync(new SfsHandledEntityEventData<ThirdLocationRequest>(entity), false).ConfigureAwait(false);
return ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(entity);
}
[HttpPost("")]
//[Authorize(ThirdLocationRequestPermissions.Create)]
public override async Task<ThirdLocationRequestDTO> CreateAsync(ThirdLocationRequestEditInput input)
{
foreach (var item in input.Details)
{
if (item.Qty <= 0)
{
throw new UserFriendlyException($"{item.ItemCode} 物品的需求量必须大于0");
}
//校验来源库位
if(string.IsNullOrEmpty(item.FromLocationCode))
{
throw new UserFriendlyException($"{item.ItemCode} 来源库位不能为空");
}
else
{
var fromLocationDto = await _locationAppService.GetByCodeAsync(item.FromLocationCode).ConfigureAwait(false);
if(fromLocationDto == null)
{
throw new UserFriendlyException($"库位代码为【{item.FromLocationCode}】不存在");
}
else
{
if (fromLocationDto.Type == EnumLocationType.HOLD || fromLocationDto.Type == EnumLocationType.INSP || fromLocationDto.Type == EnumLocationType.TRANSPORT)
{
throw new UserFriendlyException($"{item.ItemCode} 来源库位不允许扫待检库、在途库、隔离库");
}
}
}
//校验目标库位
if (string.IsNullOrEmpty(item.ToLocationCode))
{
throw new UserFriendlyException($"{item.ItemCode} 目标库位不能为空");
}
else
{
var toLocationDto = await _locationAppService.GetByCodeAsync(item.ToLocationCode).ConfigureAwait(false);
if (toLocationDto!=null && toLocationDto.Type != EnumLocationType.THIRDPARTY)
{
throw new UserFriendlyException($"{item.ItemCode} 目标库位不是三方库库位");
}
}
}
foreach (var detailInput in input.Details)
{
var toLocationDto = await _locationAppService.GetByCodeAsync(detailInput.ToLocationCode).ConfigureAwait(false);
CheckLocation(toLocationDto, detailInput.ToLocationCode);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detailInput.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detailInput.ItemCode);
var balanceNums= await _balanceAppService.GetListByLocationCodeAndItemCodeAsync(detailInput.FromLocationCode, detailInput.ItemCode).ConfigureAwait(false);
decimal balanceSum = 0;
foreach (var item in balanceNums)
{
balanceSum += item.Qty;
}
var expectOutNums= await _expectOutAppService.GetListByItemAsync(detailInput.ItemCode).ConfigureAwait(false);
decimal expectOutSum = 0;
foreach (var item in expectOutNums)
{
expectOutSum += item.Qty;
}
decimal realityBalance = balanceSum - expectOutSum;
if (detailInput.Qty> realityBalance)
{
throw new UserFriendlyException($"{detailInput.ItemCode} 物品的库存为 {realityBalance} ,库存不够");
}
detailInput.ToLocationErpCode = toLocationDto.ErpLocationCode;
}
await SetRequestAutoPropertiesAsync(input).ConfigureAwait(false);
var entity = ObjectMapper.Map<ThirdLocationRequestEditInput, ThirdLocationRequest>(input);
foreach (var detail in entity.Details)
{
var toLocationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detail.ItemCode).ConfigureAwait(false);
detail.ToLocationArea = toLocationDto.AreaCode;
detail.ToLocationErpCode = toLocationDto.ErpLocationCode;
detail.ToLocationGroup = toLocationDto.LocationGroupCode;
detail.ToWarehouseCode = toLocationDto.WarehouseCode;
detail.ItemDesc1 = itemBasicDto.Desc1;
detail.ItemDesc2 = itemBasicDto.Desc2;
detail.ItemName = itemBasicDto.Name;
detail.Uom = itemBasicDto.BasicUom;
detail.StdPackQty = itemBasicDto.StdPackQty;
detail.IssuedQty = detail.Qty;
}
var result = await _thirdLocationRequestManager.CreateAsync(entity).ConfigureAwait(false);
var dto = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(result);
return dto;
}
/// <summary>
/// 用来重写 取消请求
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public override async Task<ThirdLocationRequestDTO> CancelAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
var list = await _thirdLocationJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var thirdLocationJobDto in list)
{
if (thirdLocationJobDto.JobStatus == EnumJobStatus.Open)
{
await _thirdLocationJobAppService.CancelAsync(thirdLocationJobDto.Id).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{thirdLocationJobDto.JobStatus.GetDisplayName()}】状态不允许取消");
}
}
}
if (request.RequestStatus == EnumRequestStatus.Handling ||
request.RequestStatus == EnumRequestStatus.New)
{
request.RequestStatus = EnumRequestStatus.Cancelled;
await Task.CompletedTask.ConfigureAwait(false);
await LocalEventBus.PublishAsync(new SfsCancelledEntityEventData<ThirdLocationRequest>(request), false).ConfigureAwait(false);
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
return ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(request);
}
/// <summary>
/// 用来重写 完成请求
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public override async Task<ThirdLocationRequestDTO> CompleteAsync(Guid id)
{
var request = await _repository.GetAsync(id).ConfigureAwait(false);
if (request.RequestStatus == EnumRequestStatus.Partial)
{
request.RequestStatus = EnumRequestStatus.Completed;
await Task.CompletedTask.ConfigureAwait(false);
//await LocalEventBus.PublishAsync(new SfsCompletedEntityEventData<ThirdLocationRequest>(request), false).ConfigureAwait(false);
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
var entitys = await _thirdLocationJobRepository.GetListAsync(p => p.RequestNumber == request.Number, "", true).ConfigureAwait(false);
if (entitys.Any())
{
foreach (var thirdLocationJob in entitys)
{
if (thirdLocationJob.JobStatus == EnumJobStatus.Partial)
{
thirdLocationJob.JobStatus = EnumJobStatus.Done;
await Task.CompletedTask.ConfigureAwait(false);
await LocalEventBus.PublishAsync(new SfsClosedEntityEventData<ThirdLocationJob>(thirdLocationJob), false).ConfigureAwait(false);
await _thirdLocationJobRepository.UpdateAsync(thirdLocationJob).ConfigureAwait(false);
}
else if (thirdLocationJob.JobStatus == EnumJobStatus.Open)
{
thirdLocationJob.JobStatus = EnumJobStatus.Closed;
await Task.CompletedTask.ConfigureAwait(false);
await LocalEventBus.PublishAsync(new SfsClosedEntityEventData<ThirdLocationJob>(thirdLocationJob), false).ConfigureAwait(false);
await _thirdLocationJobRepository.UpdateAsync(thirdLocationJob).ConfigureAwait(false);
}
else
{
}
}
}
return ObjectMapper.Map<ThirdLocationRequest, ThirdLocationRequestDTO>(request);
}
/// <summary>
/// 赋值Request业务属性
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task SetRequestAutoPropertiesAsync(ThirdLocationRequestEditInput entity)
{
var tranType = await _transactionTypeAppService.GetByTransTypeAsync(EnumTransType.TransferLib, EnumTransSubType.Transfer_Warehouse).ConfigureAwait(false);
Check.NotNull(tranType, "事务类型", "事务类型不存在");
entity.AutoSubmit = tranType.AutoSubmitRequest;
entity.AutoAgree = tranType.AutoAgreeRequest;
entity.AutoHandle = tranType.AutoHandleRequest;
entity.AutoCompleteJob = tranType.AutoCompleteJob;
entity.DirectCreateNote = tranType.DirectCreateNote;
}
//[Authorize(ThirdLocationRequestPermissions.Create)]
[HttpPost("create-and-handle")]
public async Task<ThirdLocationRequestDTO> CreateAndHandleAsync(ThirdLocationRequestEditInput input)
{
var thirdLocationRequestDto = await CreateAsync(input).ConfigureAwait(false);
await HandleAsync(thirdLocationRequestDto.Id).ConfigureAwait(false);
return thirdLocationRequestDto;
}
#endregion
/// <summary>
/// 根据类型 获取叫料申请
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
[HttpGet("list/by-type/{type}")]
public virtual async Task<List<ThirdLocationRequestDTO>> GetListByTypeAsync(string type)
{
var entities = await _repository.GetListAsync(c => c.Type == type).ConfigureAwait(false);
var dtos = ObjectMapper.Map<List<ThirdLocationRequest>, List<ThirdLocationRequestDTO>>(entities);
return dtos;
}
#region 导入
/// <summary>
/// 用来重写 导入数据时可以加工数据
/// </summary>
/// <param name="dictionary"></param>
/// <returns></returns>
protected override async Task<Dictionary<ThirdLocationRequest, EntityState>> ImportProcessingEntityAsync(
Dictionary<ThirdLocationRequest, EntityState> dictionary)
{
var addList = dictionary.Where(p => p.Value == EntityState.Added).Select(p => p.Key);
foreach (var thirdLocationRequest in addList)
{
thirdLocationRequest.Worker = CurrentUser.GetUserName();
thirdLocationRequest.CreatorId = CurrentUser.Id;
if (thirdLocationRequest.Type == EnumTransSubType.Issue_Manual.GetDisplayName())
{
thirdLocationRequest.Type = EnumTransSubType.Issue_Manual.ToString();
}
foreach (var detail in thirdLocationRequest.Details)
{
var locationDto = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
CheckLocation(locationDto, detail.ToLocationCode);
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;
}
}
return dictionary;
}
/// <summary>
/// 导入验证
/// </summary>
/// <param name="model"></param>
/// <param name="validationRresult"></param>
/// <returns></returns>
protected override async Task ValidateImportModelAsync(ThirdLocationRequestImportInput 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);
}
#region 校验
protected override async Task<bool> ValidateImportEntities(Dictionary<ThirdLocationRequest, 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<ItemBasicDTO> CheckItemBasicAsync(ThirdLocationRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var item = await _itemBasicAppService.GetByCodeAsync(importInput.ItemCode).ConfigureAwait(false);
if (item == null)
{
validationRresult.Add(new ValidationResult($"ERP料号{importInput.ItemCode}不存在", new[] { "ERP料号" }));
}
else if (item.StdPackQty == 0)
{
validationRresult.Add(
new ValidationResult($"ERP料号{importInput.ItemCode}的物品信息中标准包装等于0或不存在", new[] { "标准包装" }));
}
return item;
}
protected async Task<LocationDTO> CheckLocationAsync(ThirdLocationRequestImportInput 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;
}
protected async Task CheckAreaAsync(ThirdLocationRequestImportInput 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(ThirdLocationRequestImportInput importInput,
List<ValidationResult> validationRresult)
{
var itemStoreRelation = await _itemStoreRelationApp
.GetFirstAsync(importInput.ItemCode, importInput.ToLocationCode).ConfigureAwait(false);
if (itemStoreRelation == null)
{
validationRresult.Add(new ValidationResult(
$"ERP料号{importInput.ItemCode}与目标库位{importInput.ToLocationCode}不存在对应关", new[] { "物品库位对应关系" }));
}
}
#endregion
#endregion
#region 校验
private void CheckItemBasic(ItemBasicDTO ItemBasicDto, string itemCode)
{
if (ItemBasicDto == null)
{
throw new UserFriendlyException($"ERP料号为【{itemCode}】不存在");
}
}
private void CheckLocation(LocationDTO LocationDto, string LocationCode)
{
if (LocationDto == null)
{
throw new UserFriendlyException($"库位代码为【{LocationCode}】不存在");
}
if (LocationDto.Type != EnumLocationType.THIRDPARTY)
{
throw new UserFriendlyException($"库位代码【{LocationCode}】不是【{EnumLocationType.THIRDPARTY.GetDisplayName()}】类型");
}
}
#endregion
} }

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/ThirdLocationRequests/ThirdLocationRequestAutoMapperProfile.cs

@ -30,8 +30,6 @@ public partial class StoreApplicationAutoMapperProfile : Profile
CreateMap<ThirdLocationRequestImportInput, ThirdLocationRequest>() CreateMap<ThirdLocationRequestImportInput, ThirdLocationRequest>()
.IgnoreAuditedObjectProperties() .IgnoreAuditedObjectProperties()
.ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString())) .ForMember(x => x.Type, y => y.MapFrom(t => t.Type.ToString()))
.Ignore(x => x.SingleCodeRequest)
.Ignore(x => x.UseOnTheWayLocation)
.Ignore(x => x.Details) .Ignore(x => x.Details)
.Ignore(x => x.Remark) .Ignore(x => x.Remark)
.Ignore(x => x.TenantId) .Ignore(x => x.TenantId)
@ -50,13 +48,11 @@ public partial class StoreApplicationAutoMapperProfile : Profile
.Ignore(x => x.ToLocationGroup) .Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ItemName).Ignore(x => x.ItemDesc1).Ignore(x => x.ItemDesc2) .Ignore(x => x.ItemName).Ignore(x => x.ItemDesc1).Ignore(x => x.ItemDesc2)
.Ignore(x => x.SingleCodeRequest) .Ignore(x => x.SingleCodeRequest)
.Ignore(x => x.WorkStation)
.Ignore(x => x.ExpiredTime) .Ignore(x => x.ExpiredTime)
.Ignore(x => x.IssuedQty) .Ignore(x => x.IssuedQty)
.Ignore(x => x.ReceivedQty) .Ignore(x => x.ReceivedQty)
.Ignore(x => x.ToBeIssuedQty)
.Ignore(x => x.ToBeReceivedQty)
.Ignore(x => x.NotFinishQty)
.Ignore(x => x.StdPackQty) .Ignore(x => x.StdPackQty)
.Ignore(x => x.Uom) .Ignore(x => x.Uom)
.Ignore(x => x.TenantId) .Ignore(x => x.TenantId)

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/IThirdLocationJobManager.cs

@ -6,5 +6,5 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public interface IThirdLocationJobManager : IJobManager<ThirdLocationJob> public interface IThirdLocationJobManager : IJobManager<ThirdLocationJob>
{ {
Task<ThirdLocationJob> GetAsync(Expression<Func<ThirdLocationJob, bool>> expression);
} }

72
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJob.cs

@ -12,73 +12,41 @@ namespace Win_in.Sfs.Wms.Store.Domain;
[Display(Name = "三方库库移任务")] [Display(Name = "三方库库移任务")]
public class ThirdLocationJob : SfsJobAggregateRootBase<ThirdLocationJobDetail> public class ThirdLocationJob : SfsJobAggregateRootBase<ThirdLocationJobDetail>
{ {
/// <summary>
/// 叫料请求类型
/// </summary>
[IgnoreUpdate]
public string RequestType { get; set; }
/// <summary>
/// 收货单件码
/// </summary>
[IgnoreUpdate]
public string SingleCodeJob { get; set; }
/// <summary> /// <summary>
/// 请求单号 /// 请求单号
/// </summary> /// </summary>
[IgnoreUpdate] [Display(Name = "请求单号")]
public string RequestNumber { get; set; } public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 车间 /// 已承接
/// </summary> /// </summary>
[IgnoreUpdate] /// <returns></returns>
public string Workshop { get; set; } [Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 承接人ID
/// </summary> /// </summary>
[Display(Name = "使用在途库")] /// <returns></returns>
[IgnoreUpdate] [Display(Name = "承接人ID")]
public bool UseOnTheWayLocation { get; set; } public string ClaimsUserId { get; set; }
/// <summary> /// <summary>
/// 任务明细 /// 承接人
/// </summary> /// </summary>
[IgnoreUpdate] /// <returns></returns>
public override List<ThirdLocationJobDetail> Details { get; set; } = new List<ThirdLocationJobDetail>(); [Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
/// <summary> /// <summary>
/// 设置任务明细的实际库位和实际数量 /// 三方库申请类型
/// </summary> /// </summary>
/// <param name="id"></param> [Display(Name = "三方库申请类型")]
/// <param name="handledLocationCode"></param> public string Type { get; set; }
/// <param name="handledLocationErpCode"></param>
/// <param name="handledWarehouseCode"></param>
/// <param name="handledQty"></param>
/// <param name="handledBatch"></param>
/// <param name="handledContainerCode"></param>
/// <param name="handledLot"></param>
/// <param name="handledPackingCode"></param>
/// <returns></returns>
public virtual async Task BuildDetail(Guid id, string handledLocationCode, string handledLocationErpCode,
string handledWarehouseCode, decimal handledQty, string handledSupplierBatch, DateTime handledArriveDate, DateTime handledProduceDate, DateTime handledExpireDate,
string handledContainerCode, string handledLot, string handledPackingCode)
{
var detail = GetDetail(id);
detail.HandledFromLocationCode = handledLocationCode;
detail.HandledFromLocationErpCode = handledLocationErpCode;
detail.HandledFromWarehouseCode = handledWarehouseCode;
//detail.HandledQty = handledQty;
detail.HandledSupplierBatch = handledSupplierBatch;
detail.HandledArriveDate = handledArriveDate;
detail.HandledProduceDate = handledProduceDate;
detail.HandledExpireDate = handledExpireDate;
detail.HandledContainerCode = handledContainerCode;
detail.HandledLot = handledLot;
detail.HandledPackingCode = handledPackingCode;
await Task.CompletedTask.ConfigureAwait(false);
}
/// <summary>
/// 明细列表
/// </summary>
public override List<ThirdLocationJobDetail> Details { get; set; } = new();
} }

92
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobDetail.cs

@ -1,4 +1,5 @@
using System; using System;
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;
@ -7,107 +8,120 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public class ThirdLocationJobDetail : SfsJobRecommendFromDetailEntityBase, IHasToLocation public class ThirdLocationJobDetail : SfsJobRecommendFromDetailEntityBase, IHasToLocation
{ {
/// <summary> /// <summary>
/// 来源库位 /// 发出时间
/// </summary> /// </summary>
public string FromLocationCode { get; set; } public DateTime IssueTime { get; set; }
/// <summary> /// <summary>
/// 来源库区 /// 是否在在途
/// </summary> /// </summary>
public string FromLocationArea { get; set; } public bool IsOnTheWayLocationCode { get; set; }
#region 目标库位
/// <summary> /// <summary>
/// 到库位 /// 到库位
/// </summary> /// </summary>
public string ToLocationCode { get; set; } public string ToLocationCode { get; set; }
/// <summary> /// <summary>
/// 到库区 /// 到库区
/// </summary> /// </summary>
public string ToLocationArea { get; set; } public string ToLocationArea { get; set; }
/// <summary> /// <summary>
/// 到库位组 /// 到库位组
/// </summary> /// </summary>
public string ToLocationGroup { get; set; } public string ToLocationGroup { get; set; }
/// <summary> /// <summary>
/// 到ERP库位 /// 到ERP库位
/// </summary> /// </summary>
public string ToLocationErpCode { get; set; } public string ToLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 到仓库 /// 到仓库
/// </summary> /// </summary>
public string ToWarehouseCode { get; set; } public string ToWarehouseCode { get; set; }
#endregion
#region 来源库位
/// <summary> /// <summary>
/// 在途库库位 /// 库位
/// </summary> /// </summary>
public string OnTheWayLocationCode { get; set; } public string FromLocationCode { get; set; }
/// <summary> /// <summary>
/// 收货单件码 /// 到库区
/// </summary> /// </summary>
public string SingleCodeJob { get; set; } public string FromLocationArea { get; set; }
/// <summary> /// <summary>
/// 申请单件码 /// 到库位组
/// </summary> /// </summary>
public string SingleCodeRequest { get; set; } public string FromLocationGroup { get; set; }
/// <summary> /// <summary>
/// 过期时间 /// 到ERP库位
/// </summary> /// </summary>
public DateTime ExpiredTime { get; set; } public string FromLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 工序 /// 到仓库
/// </summary> /// </summary>
public string Operation { get; set; } public string FromWarehouseCode { get; set; }
#endregion
#region 在途库位
/// <summary> /// <summary>
/// 配送方式 /// 在途库库位
/// </summary> /// </summary>
public EnumDistributionType DistributionType { get; set; } public string OnTheWayLocationCode { get; set; }
#endregion
/// <summary> /// <summary>
/// 取整方式 /// 申请单件码
/// </summary> /// </summary>
public EnumTruncType TruncType { get; set; } public string SingleCodeRequest { get; set; }
/// <summary> /// <summary>
/// 取整后数量 /// 已发数量
/// </summary> /// </summary>
public decimal RoundedQty { get; set; } public decimal IssuedQty { get; set; }
/// <summary> /// <summary>
/// 计划拆分规则 /// 已收数量
/// </summary> /// </summary>
public EnumPlannedSplitRule PlannedSplitRule { get; set; } public decimal ReceivedQty { get; set; }
/// <summary> /// <summary>
/// 计划开始时间 /// 箱码
/// </summary> /// </summary>
public DateTime PlanBeginTime { get; set; } public string PackingCode { get; set; }
/// <summary> /// <summary>
/// 每次配送数量 /// 批次
/// </summary> /// </summary>
public decimal DeliveryQty { get; set; } public string Lot { get; set; }
/// <summary> /// <summary>
/// 位置码 /// 过期时间
/// </summary> /// </summary>
public string PositionCode { get; set; } public DateTime ExpiredTime { get; set; }
/// <summary> /// <summary>
/// 推荐类型 /// 库位状态
/// </summary> /// </summary>
public EnumRecommendType RecommendType { get; set; } public EnumInventoryStatus EnumInventoryStatus { get; set; }
public void SetId(Guid id) /// <summary>
{ /// 请求未收
this.Id = id; /// </summary>
} [NotMapped]
public decimal NotFinishQty => IssuedQty - ReceivedQty;
} }

93
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/ThirdLocationJobs/ThirdLocationJobManager.cs

@ -19,101 +19,18 @@ public class ThirdLocationJobManager : SfsJobManagerBase<ThirdLocationJob, Third
{ {
} }
/// <summary>
/// 执行三方库任务
/// </summary>
/// <param name="id"></param>
/// <param name="input"></param>
/// <param name="user"></param>
/// <returns></returns>
public override async Task<ThirdLocationJob> CompleteAsync(ThirdLocationJob input, ICurrentUser user)
{
var entity = await Repository.FindAsync(input.Id).ConfigureAwait(false);
foreach (var detail in input.Details)
{
//赋值实际收货
await entity.BuildDetail(detail.Id,
detail.HandledFromLocationCode,
detail.HandledFromLocationErpCode,
detail.HandledFromWarehouseCode,
detail.HandledQty,
detail.HandledSupplierBatch,
detail.HandledArriveDate,
detail.HandledProduceDate,
detail.HandledExpireDate,
detail.HandledContainerCode,
detail.HandledLot,
detail.HandledPackingCode).ConfigureAwait(false);
}
bool isDone = false;
foreach(var jobDetail in entity.Details)
{
var inputDetail= input.Details.FirstOrDefault(p=>p.ItemCode== jobDetail.ItemCode);
jobDetail.HandledQty += inputDetail.HandledQty;
jobDetail.RecommendQty = jobDetail.RecommendQty - inputDetail.HandledQty;
jobDetail.SingleCodeJob = inputDetail.SingleCodeJob;
inputDetail.RecommendQty = jobDetail.RecommendQty;
}
foreach (var item in entity.Details)
{
if (item.RecommendQty == 0)
{
isDone = true;
}
else
{
isDone = false;
}
}
if (isDone)
{
await entity.CompleteAsync(user.Id, user.Name, Clock.Now).ConfigureAwait(false);
await PublishCompletedAsync(input).ConfigureAwait(false);
return await Repository.UpdateAsync(entity).ConfigureAwait(false);
}
else
{
entity.JobStatus = EnumJobStatus.Partial;
await PublishCompletedAsync(input).ConfigureAwait(false);
return await Repository.UpdateAsync(entity).ConfigureAwait(false);
}
}
public override void CheckDetails(ThirdLocationJob entity, AbpValidationResult result) public override void CheckDetails(ThirdLocationJob entity, AbpValidationResult result)
{ {
var details = entity.Details; throw new NotImplementedException();
foreach (var detail in details)
{
if (detail.HandledFromLocationCode == null)
{
result.Errors.Add(new ValidationResult($"{detail.HandledFromLocationCode} 不能为空"));
}
}
} }
public override async Task<List<ThirdLocationJob>> GetWorkingListByPackingAsync(string packingCode) public override Task<List<ThirdLocationJob>> GetWorkingListByPackingAsync(string packingCode)
{ {
return await Repository.GetListAsync(c => c.Details.Any(p => p.RecommendPackingCode == packingCode) && c.JobStatus != EnumJobStatus.Closed && c.JobStatus != EnumJobStatus.Cancelled, true).ConfigureAwait(false); throw new NotImplementedException();
} }
public override async Task<List<ThirdLocationJob>> GetWorkingListByContainerAsync(string containerCode) public override Task<List<ThirdLocationJob>> GetWorkingListByContainerAsync(string containerCode)
{
return await Repository.GetListAsync(c => c.Details.Any(p => p.RecommendContainerCode == containerCode) && c.JobStatus != EnumJobStatus.Closed && c.JobStatus != EnumJobStatus.Cancelled, true).ConfigureAwait(false);
}
public async Task<ThirdLocationJob> GetAsync(Expression<Func<ThirdLocationJob, bool>> expression)
{ {
return await Repository.FindAsync(expression).ConfigureAwait(false); throw new NotImplementedException();
} }
} }

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/IThirdLocationNoteManager.cs

@ -5,6 +5,4 @@ namespace Win_in.Sfs.Wms.Store.Domain;
public interface IThirdLocationNoteManager : ISfsStoreManager<ThirdLocationNote, ThirdLocationNoteDetail> public interface IThirdLocationNoteManager : ISfsStoreManager<ThirdLocationNote, ThirdLocationNoteDetail>
{ {
Task<ThirdLocationNote> ConfirmAsync(Guid id);
} }

75
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNote.cs

@ -1,78 +1,65 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Volo.Abp;
using Win_in.Sfs.Shared.Domain.Entities;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary> /// <summary>
/// 三方库库移记录 /// 三方库库移记录
/// </summary> /// </summary>
public class ThirdLocationNote : SfsStoreAggregateRootBase<ThirdLocationNoteDetail>, IHasJobNumber, IHasRequestNumber public class ThirdLocationNote : SfsStoreAggregateRootBase<ThirdLocationNoteDetail>, IHasJobNumber, IHasRequestNumber
{ {
/// <summary> /// <summary>
/// 任务ID /// 发出时间
/// </summary> /// </summary>
[IgnoreUpdate] public DateTime IssueTime { get; set; }
public string JobNumber { get; set; }
/// <summary> /// <summary>
/// /// 接收时
/// </summary> /// </summary>
[IgnoreUpdate] public DateTime ReceiptTime { get; set; }
public string Workshop { get; set; }
/// <summary> /// <summary>
/// 明细列表 /// 请求单号
/// </summary> /// </summary>
[IgnoreUpdate] [Display(Name = "请求单号")]
public override List<ThirdLocationNoteDetail> Details { get; set; } = new List<ThirdLocationNoteDetail>();
[IgnoreUpdate]
public string RequestNumber { get; set; } public string RequestNumber { get; set; }
/// <summary> /// <summary>
/// 叫料请求类型 /// 任务单号
/// </summary> /// </summary>
[IgnoreUpdate] [Display(Name = "任务单号")]
public string RequestType { get; set; } public string JobNumber { get; set; }
/// <summary> /// <summary>
/// 使用在途库 /// 已承接
/// </summary> /// </summary>
[IgnoreUpdate] /// <returns></returns>
public bool UseOnTheWayLocation { get; set; } [Display(Name = "是否已承接")]
public bool IsClaims { get; set; }
/// <summary> /// <summary>
/// 确认时间 /// 承接人ID
/// </summary> /// </summary>
[Display(Name = "确认时间")] /// <returns></returns>
[IgnoreUpdate] [Display(Name = "承接人ID")]
public DateTime? ConfirmTime { get; set; } public string ClaimsUserId { get; set; }
/// <summary> /// <summary>
/// 已确认 /// 承接人
/// </summary> /// </summary>
[Display(Name = "已确认")] /// <returns></returns>
public bool Confirmed { get; set; } [Display(Name = "承接人")]
public string ClaimsUserName { get; set; }
public void Confirm(DateTime confirmTime)
{
CheckStatus(Confirmed);
Confirmed = true;
ConfirmTime = confirmTime;
}
private static void CheckStatus(bool confirmed) /// <summary>
{ /// 三方库申请类型
if (confirmed) /// </summary>
{ [Display(Name = "三方库申请类型")]
throw new UserFriendlyException($"当前状态为 【已确认】 ,无法再次确认!"); public string Type { get; set; }
}
}
/// <summary>
/// 明细列表
/// </summary>
public override List<ThirdLocationNoteDetail> Details { get; set; } = new();
} }

99
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNoteDetail.cs

@ -1,43 +1,116 @@
using System; using System;
using System.ComponentModel.DataAnnotations.Schema;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
public class ThirdLocationNoteDetail : SfsStoreRecommendFromDetailWithFromToEntityBase public class ThirdLocationNoteDetail : SfsStoreRecommendFromDetailWithFromToEntityBase
{ {
#region 目标库位
/// <summary> /// <summary>
/// 发出时间 /// 到库位
/// </summary> /// </summary>
public DateTime IssueTime { get; set; } public string ToLocationCode { get; set; }
/// <summary> /// <summary>
/// 过期时间 /// 到库区
/// </summary> /// </summary>
public DateTime ExpiredTime { get; set; } public string ToLocationArea { get; set; }
/// <summary> /// <summary>
/// 收货单件码 /// 到库位组
/// </summary> /// </summary>
public string SingleCodeJob { get; set; } public string ToLocationGroup { get; set; }
/// <summary> /// <summary>
/// 申请单件码 /// 到ERP库位
/// </summary> /// </summary>
public string SingleCodeRequest { get; set; } public string ToLocationErpCode { get; set; }
/// <summary>
/// 到仓库
/// </summary>
public string ToWarehouseCode { get; set; }
#endregion
#region 来源库位
/// <summary>
/// 到库位
/// </summary>
public string FromLocationCode { get; set; }
/// <summary> /// <summary>
/// 在途库库位 /// 到库区
/// </summary>
public string FromLocationArea { get; set; }
/// <summary>
/// 到库位组
/// </summary>
public string FromLocationGroup { get; set; }
/// <summary>
/// 到ERP库位
/// </summary>
public string FromLocationErpCode { get; set; }
/// <summary>
/// 到仓库
/// </summary>
public string FromWarehouseCode { get; set; }
#endregion
#region 在途库位
/// <summary>
/// 在途库库位
/// </summary> /// </summary>
public string OnTheWayLocationCode { get; set; } public string OnTheWayLocationCode { get; set; }
#endregion
/// <summary>
/// 申请单件码
/// </summary>
public string SingleCodeRequest { get; set; }
/// <summary>
/// 已发数量
/// </summary>
public decimal IssuedQty { get; set; }
/// <summary>
/// 已收数量
/// </summary>
public decimal ReceivedQty { get; set; }
/// <summary>
/// 箱码
/// </summary>
public string PackingCode { get; set; }
/// <summary>
/// 批次
/// </summary>
public string Lot { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime ExpiredTime { get; set; }
/// <summary> /// <summary>
/// 位置码 /// 库位状态
/// </summary> /// </summary>
public string PositionCode { get; set; } public EnumInventoryStatus EnumInventoryStatus { get; set; }
/// <summary> /// <summary>
/// 推荐类型 /// 请求未收
/// </summary> /// </summary>
public EnumRecommendType RecommendType { get; set; } [NotMapped]
public decimal NotFinishQty => IssuedQty - ReceivedQty;
} }

24
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Notes/ThirdLocationNotes/ThirdLocationNoteManager.cs

@ -15,28 +15,4 @@ public class ThirdLocationNoteManager : SfsStoreManagerBase<ThirdLocationNote, T
) : base(repository) ) : base(repository)
{ {
} }
[UnitOfWork]
public virtual async Task<ThirdLocationNote> ConfirmAsync(Guid id)
{
var entity = await Repository.FindAsync(id).ConfigureAwait(false);
Check.NotNull(entity, EntityClassName);
entity.Confirm(Clock.Now);
await PublishConfirmedAsync(entity).ConfigureAwait(false);
return await Repository.UpdateAsync(entity).ConfigureAwait(false);
}
private async Task PublishConfirmedAsync(ThirdLocationNote entity)
{
try
{
await LocalEventBus.PublishAsync(new SfsConfirmedEntityEventData<ThirdLocationNote>(entity), false).ConfigureAwait(false);
}
catch (Exception ex)
{
Logger.LogDebug($"{nameof(ThirdLocationNote)} Confirmed Event:{ex.Message}", null);
Console.WriteLine(ex.Source);
throw;
}
}
} }

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/IssueRequests/AssembleIssueRequests/AssembleIssueRequestDetail.cs

@ -46,7 +46,6 @@ public class AssembleIssueRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasT
#endregion #endregion
/// <summary> /// <summary>
/// 生产线 /// 生产线
/// </summary> /// </summary>

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/IThirdLocationRequestManager.cs

@ -8,9 +8,4 @@ public interface IThirdLocationRequestManager : ISfsStoreRequestManager<ThirdLoc
IBulkImportService<ThirdLocationRequest> IBulkImportService<ThirdLocationRequest>
{ {
Task UpdateDetailsAsync(ThirdLocationRequest entity);
Task CompleteAsync(string number);
Task<ThirdLocationRequest> CreateBynNumberAsync(ThirdLocationRequest entity);
} }

25
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequest.cs

@ -1,35 +1,16 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Win_in.Sfs.Shared.Domain.Entities;
namespace Win_in.Sfs.Wms.Store.Domain; namespace Win_in.Sfs.Wms.Store.Domain;
/// <summary> /// <summary>
/// 三方库移库申请 /// 三方库移库申请
/// </summary> /// </summary>
public class ThirdLocationRequest : SfsStoreRequestAggregateRootBase<ThirdLocationRequestDetail> public class ThirdLocationRequest : SfsStoreRequestAggregateRootBase<ThirdLocationRequestDetail>
{ {
/// <summary> /// <summary>
/// 叫料类型 /// 三方库申请类型
/// </summary> /// </summary>
[Display(Name = "叫料类型")] [Display(Name = "三方库申请类型")]
[IgnoreUpdate]
public string Type { get; set; } public string Type { get; set; }
/// <summary>
/// 申请单件码
/// </summary>
[IgnoreUpdate]
public string SingleCodeRequest { get; set; }
/// <summary>
/// 使用在途库
/// </summary>
public bool UseOnTheWayLocation { get; set; }
/// <summary>
/// 明细列表
/// </summary>
[IgnoreUpdate]
public override List<ThirdLocationRequestDetail> Details { get; set; } = new List<ThirdLocationRequestDetail>();
} }

79
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestDetail.cs

@ -6,104 +6,109 @@ 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 ThirdLocationRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation public class ThirdLocationRequestDetail : SfsStoreDetailWithQtyEntityBase, IHasToLocation
{ {
#region 目标库位
/// <summary> /// <summary>
/// 到库位 /// 到库位
/// </summary> /// </summary>
public string ToLocationCode { get; set; } public string ToLocationCode { get; set; }
/// <summary> /// <summary>
/// 到库区 /// 到库区
/// </summary> /// </summary>
public string ToLocationArea { get; set; } public string ToLocationArea { get; set; }
/// <summary> /// <summary>
/// 到库位组 /// 到库位组
/// </summary> /// </summary>
public string ToLocationGroup { get; set; } public string ToLocationGroup { get; set; }
/// <summary> /// <summary>
/// 到ERP库位 /// 到ERP库位
/// </summary> /// </summary>
public string ToLocationErpCode { get; set; } public string ToLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 到仓库 /// 到仓库
/// </summary> /// </summary>
public string ToWarehouseCode { get; set; } public string ToWarehouseCode { get; set; }
#endregion
#region 来源库位
/// <summary> /// <summary>
/// 来源库位 /// 库位
/// </summary> /// </summary>
public string FromLocationCode { get; set; } public string FromLocationCode { get; set; }
/// <summary> /// <summary>
/// 来源库区 /// 库区
/// </summary> /// </summary>
public string FromLocationArea { get; set; } public string FromLocationArea { get; set; }
/// <summary> /// <summary>
/// 在途库库位 /// 到库位组
/// </summary> /// </summary>
public string OnTheWayLocationCode { get; set; } public string FromLocationGroup { get; set; }
/// <summary> /// <summary>
/// 申请单件码 /// 到ERP库位
/// </summary> /// </summary>
public string SingleCodeRequest { get; set; } public string FromLocationErpCode { get; set; }
/// <summary> /// <summary>
/// 工作中心 /// 到仓库
/// </summary> /// </summary>
public string WorkStation { get; set; } public string FromWarehouseCode { get; set; }
#endregion
#region 在途库位
/// <summary> /// <summary>
/// 过期时间 /// 在途库库位
/// </summary> /// </summary>
public DateTime ExpiredTime { get; set; } public string OnTheWayLocationCode { get; set; }
#endregion
/// <summary> /// <summary>
/// 已发数量 /// 申请单件码
/// </summary> /// </summary>
public decimal IssuedQty { get; set; } public string SingleCodeRequest { get; set; }
/// <summary> /// <summary>
/// 已收数量 /// 已发数量
/// </summary> /// </summary>
public decimal ReceivedQty { get; set; } public decimal IssuedQty { get; set; }
/// <summary> /// <summary>
/// 请求未发 还未发送的数量 /// 已收数量
/// </summary> /// </summary>
[NotMapped] public decimal ReceivedQty { get; set; }
public decimal ToBeIssuedQty => Qty - IssuedQty;
/// <summary> /// <summary>
/// 已发未收 /// 箱码
/// </summary> /// </summary>
[NotMapped] public string PackingCode { get; set; }
public decimal ToBeReceivedQty => IssuedQty - ReceivedQty;
/// <summary> /// <summary>
/// 请求未收 /// 批次
/// </summary> /// </summary>
[NotMapped] public string Lot { get; set; }
public decimal NotFinishQty => Qty - ReceivedQty;
/// <summary> /// <summary>
/// 位置码 /// 过期时间
/// </summary> /// </summary>
public string PositionCode { get; set; } public DateTime ExpiredTime { get; set; }
/// <summary> /// <summary>
/// 推荐类型 /// 库位状态
/// </summary> /// </summary>
public EnumRecommendType RecommendType { get; set; } public EnumInventoryStatus EnumInventoryStatus { get; set; }
} }

120
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Requests/ThirdLocationRequests/ThirdLocationRequestManager.cs

@ -25,124 +25,8 @@ public class ThirdLocationRequestManager
} }
public Task ImportDataAsync(List<ThirdLocationRequest> entities, List<ThirdLocationRequest> deleteEntities = null)
#region 东阳V2
#endregion
/// <summary>
/// 创建
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public virtual async Task<ThirdLocationRequest> CreateBynNumberAsync(ThirdLocationRequest entity)
{
var number = string.IsNullOrEmpty(entity.Number) ? await GenerateNumberAsync(nameof(ThirdLocationRequest), entity.ActiveDate).ConfigureAwait(false) : entity.Number;
entity.SetIdAndNumberWithDetails(GuidGenerator, number);
entity.Submit();
entity.Agree();
entity.RequestStatus = EnumRequestStatus.Partial;
await LocalEventBus.PublishAsync(new SfsHandledEntityEventData<ThirdLocationRequest>(entity), false)
.ConfigureAwait(false);
await _repository.InsertAsync(entity).ConfigureAwait(false);
return entity;
}
public virtual async Task UpdateDetailsAsync(ThirdLocationRequest newEntity)
{
var oldEntity = await Repository.FindAsync(newEntity.Id, true).ConfigureAwait(false);
if(oldEntity!=null)
{
foreach (var newDetail in newEntity.Details)
{
oldEntity.ReplaceDetail(newDetail.Id, newDetail);
}
foreach (var detail in oldEntity.Details)
{
SetMaterialRequestDetailStatus(detail);
}
await SetMaterialRequestStatusAsync(oldEntity).ConfigureAwait(false);
await Repository.UpdateAsync(oldEntity).ConfigureAwait(false);
}
}
private void SetMaterialRequestDetailStatus(ThirdLocationRequestDetail detail)
{ {
//if (detail.ReceivedQty >= detail.Qty)//执行的时候 实际收料 多余 要料数 throw new NotImplementedException();
//{
// detail.Status = EnumStatus.Close;
//}
//else
//{
// detail.Status = EnumStatus.Open;
//}
} }
private async Task SetMaterialRequestStatusAsync(ThirdLocationRequest materialRequest)
{
//if (materialRequest.Details.All(p => p.Status == EnumStatus.Close))
//{
// materialRequest.RequestStatus = EnumRequestStatus.Completed;
//}
//else
//{
// var issueJobs = await _issueJobRepository.GetListAsync(t => t.MaterialRequestNumber == materialRequest.Number).ConfigureAwait(false);
// if (issueJobs.Count > 0)
// {
// if (issueJobs.All(t => t.JobStatus is EnumJobStatus.Done or EnumJobStatus.Closed or EnumJobStatus.Cancelled))
// {
// if (materialRequest.Details.All(p => p.ReceivedQty >= p.Qty))
// {
// materialRequest.RequestStatus = EnumRequestStatus.Completed;
// }
// else
// {
// materialRequest.RequestStatus = EnumRequestStatus.Partial;
// }
// }
// else
// {
// materialRequest.RequestStatus = EnumRequestStatus.Partial;
// }
// }
// else
// {
// materialRequest.RequestStatus = EnumRequestStatus.Partial;
// }
//}
}
public virtual async Task CompleteAsync(string number)
{
var entity = await GetByNumberAsync(number).ConfigureAwait(false);
if (entity != null && !entity.Details.Any(p => p.ToBeIssuedQty > 0))
{
await CompleteAsync(entity).ConfigureAwait(false);
}
}
#region 导入
/// <summary>
/// 执行导入
/// </summary>
public virtual async Task ImportDataAsync(List<ThirdLocationRequest> mergeEntities, List<ThirdLocationRequest> deleteEntities = null)
{
if (deleteEntities != null && deleteEntities.Count > 0)
{
await _repository.BulkDeleteAsync(deleteEntities).ConfigureAwait(false);
}
await CreateManyAsync(mergeEntities).ConfigureAwait(false);
}
#endregion
} }

12
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Jobs/ThirdLocationJobs/ThirdLocationJobDbContextModelCreatingExtensions.cs

@ -21,10 +21,7 @@ public static class ThirdLocationJobDbContextModelCreatingExtensions
//Configure Job base properties //Configure Job base properties
b.ConfigureJob<ThirdLocationJob, ThirdLocationJobDetail>(); b.ConfigureJob<ThirdLocationJob, ThirdLocationJobDetail>();
//Properties //Properties
b.Property(q => q.RequestType).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.RequestNumber).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Workshop).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.SingleCodeJob).HasMaxLength(SfsPropertyConst.CodeLength);
//Relations //Relations
b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired(); b.HasMany(q => q.Details).WithOne().HasForeignKey(d => d.MasterID).IsRequired();
//Indexes //Indexes
@ -50,16 +47,9 @@ public static class ThirdLocationJobDbContextModelCreatingExtensions
b.Property(q => q.ToLocationGroup).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.ToLocationGroup).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.FromLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.FromLocationCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.FromLocationArea).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.FromLocationArea).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.SingleCodeJob).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.SingleCodeRequest).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.SingleCodeRequest).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.Operation).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.DistributionType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
b.Property(q => q.TruncType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
b.Property(q => q.PlannedSplitRule).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
b.Property(q => q.OnTheWayLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.OnTheWayLocationCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.PositionCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.CodeLength).HasConversion<string>();
//Relations //Relations
//None //None

34547
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240614074403_Added_ThirdLocation.Designer.cs

File diff suppressed because it is too large

835
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/20240614074403_Added_ThirdLocation.cs

@ -0,0 +1,835 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Win_in.Sfs.Wms.Store.Migrations
{
public partial class Added_ThirdLocation : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_Store_ThirdLocationNoteDetail_FromPackingCode",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropIndex(
name: "IX_Store_ThirdLocationNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "PositionCode",
table: "Store_ThirdLocationRequestDetail");
migrationBuilder.DropColumn(
name: "RecommendType",
table: "Store_ThirdLocationRequestDetail");
migrationBuilder.DropColumn(
name: "WorkStation",
table: "Store_ThirdLocationRequestDetail");
migrationBuilder.DropColumn(
name: "SingleCodeRequest",
table: "Store_ThirdLocationRequest");
migrationBuilder.DropColumn(
name: "UseOnTheWayLocation",
table: "Store_ThirdLocationRequest");
migrationBuilder.DropColumn(
name: "IssueTime",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "PositionCode",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "RecommendType",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "SingleCodeJob",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "ConfirmTime",
table: "Store_ThirdLocationNote");
migrationBuilder.DropColumn(
name: "Confirmed",
table: "Store_ThirdLocationNote");
migrationBuilder.DropColumn(
name: "RequestType",
table: "Store_ThirdLocationNote");
migrationBuilder.DropColumn(
name: "Workshop",
table: "Store_ThirdLocationNote");
migrationBuilder.DropColumn(
name: "DistributionType",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "Operation",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "PlannedSplitRule",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "PositionCode",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "RecommendType",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "SingleCodeJob",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "TruncType",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "RequestType",
table: "Job_ThirdLocationJob");
migrationBuilder.DropColumn(
name: "SingleCodeJob",
table: "Job_ThirdLocationJob");
migrationBuilder.DropColumn(
name: "Workshop",
table: "Job_ThirdLocationJob");
migrationBuilder.RenameColumn(
name: "UseOnTheWayLocation",
table: "Store_ThirdLocationNote",
newName: "IsClaims");
migrationBuilder.RenameColumn(
name: "RoundedQty",
table: "Job_ThirdLocationJobDetail",
newName: "ReceivedQty");
migrationBuilder.RenameColumn(
name: "PlanBeginTime",
table: "Job_ThirdLocationJobDetail",
newName: "IssueTime");
migrationBuilder.RenameColumn(
name: "DeliveryQty",
table: "Job_ThirdLocationJobDetail",
newName: "IssuedQty");
migrationBuilder.RenameColumn(
name: "UseOnTheWayLocation",
table: "Job_ThirdLocationJob",
newName: "IsClaims");
migrationBuilder.AddColumn<int>(
name: "EnumInventoryStatus",
table: "Store_ThirdLocationRequestDetail",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<string>(
name: "FromLocationErpCode",
table: "Store_ThirdLocationRequestDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "FromLocationGroup",
table: "Store_ThirdLocationRequestDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "FromWarehouseCode",
table: "Store_ThirdLocationRequestDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "Lot",
table: "Store_ThirdLocationRequestDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "PackingCode",
table: "Store_ThirdLocationRequestDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AlterColumn<string>(
name: "FromPackingCode",
table: "Store_ThirdLocationNoteDetail",
type: "nvarchar(max)",
nullable: true,
oldClrType: typeof(string),
oldType: "nvarchar(450)",
oldNullable: true);
migrationBuilder.AddColumn<int>(
name: "EnumInventoryStatus",
table: "Store_ThirdLocationNoteDetail",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<decimal>(
name: "IssuedQty",
table: "Store_ThirdLocationNoteDetail",
type: "decimal(18,6)",
nullable: false,
defaultValue: 0m);
migrationBuilder.AddColumn<string>(
name: "Lot",
table: "Store_ThirdLocationNoteDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "PackingCode",
table: "Store_ThirdLocationNoteDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<decimal>(
name: "ReceivedQty",
table: "Store_ThirdLocationNoteDetail",
type: "decimal(18,6)",
nullable: false,
defaultValue: 0m);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserId",
table: "Store_ThirdLocationNote",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserName",
table: "Store_ThirdLocationNote",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "IssueTime",
table: "Store_ThirdLocationNote",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<DateTime>(
name: "ReceiptTime",
table: "Store_ThirdLocationNote",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<string>(
name: "Type",
table: "Store_ThirdLocationNote",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AlterColumn<string>(
name: "ChassisNumber",
table: "Store_KittingPackagingNoteChassisDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true,
oldClrType: typeof(long),
oldType: "bigint");
migrationBuilder.AddColumn<long>(
name: "ChassisSortNumber",
table: "Store_KittingPackagingNoteChassisDetail",
type: "bigint",
nullable: false,
defaultValue: 0L);
migrationBuilder.AddColumn<string>(
name: "Configuration",
table: "Store_Chassis",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "EnumInventoryStatus",
table: "Job_ThirdLocationJobDetail",
type: "int",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<string>(
name: "FromLocationErpCode",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "FromLocationGroup",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "FromWarehouseCode",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "IsOnTheWayLocationCode",
table: "Job_ThirdLocationJobDetail",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<string>(
name: "Lot",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "PackingCode",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserId",
table: "Job_ThirdLocationJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserName",
table: "Job_ThirdLocationJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "Type",
table: "Job_ThirdLocationJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserId",
table: "Job_SparePartIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserName",
table: "Job_SparePartIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "IsClaims",
table: "Job_SparePartIssueJob",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserId",
table: "Job_KittingIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserName",
table: "Job_KittingIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "IsClaims",
table: "Job_KittingIssueJob",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserId",
table: "Job_InjectionIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserName",
table: "Job_InjectionIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "IsClaims",
table: "Job_InjectionIssueJob",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserId",
table: "Job_CoatingIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserName",
table: "Job_CoatingIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "IsClaims",
table: "Job_CoatingIssueJob",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserId",
table: "Job_AssembleIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "ClaimsUserName",
table: "Job_AssembleIssueJob",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "IsClaims",
table: "Job_AssembleIssueJob",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.CreateIndex(
name: "IX_Store_ThirdLocationNoteDetail_Number",
table: "Store_ThirdLocationNoteDetail",
column: "Number");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_Store_ThirdLocationNoteDetail_Number",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "EnumInventoryStatus",
table: "Store_ThirdLocationRequestDetail");
migrationBuilder.DropColumn(
name: "FromLocationErpCode",
table: "Store_ThirdLocationRequestDetail");
migrationBuilder.DropColumn(
name: "FromLocationGroup",
table: "Store_ThirdLocationRequestDetail");
migrationBuilder.DropColumn(
name: "FromWarehouseCode",
table: "Store_ThirdLocationRequestDetail");
migrationBuilder.DropColumn(
name: "Lot",
table: "Store_ThirdLocationRequestDetail");
migrationBuilder.DropColumn(
name: "PackingCode",
table: "Store_ThirdLocationRequestDetail");
migrationBuilder.DropColumn(
name: "EnumInventoryStatus",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "IssuedQty",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "Lot",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "PackingCode",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "ReceivedQty",
table: "Store_ThirdLocationNoteDetail");
migrationBuilder.DropColumn(
name: "ClaimsUserId",
table: "Store_ThirdLocationNote");
migrationBuilder.DropColumn(
name: "ClaimsUserName",
table: "Store_ThirdLocationNote");
migrationBuilder.DropColumn(
name: "IssueTime",
table: "Store_ThirdLocationNote");
migrationBuilder.DropColumn(
name: "ReceiptTime",
table: "Store_ThirdLocationNote");
migrationBuilder.DropColumn(
name: "Type",
table: "Store_ThirdLocationNote");
migrationBuilder.DropColumn(
name: "ChassisSortNumber",
table: "Store_KittingPackagingNoteChassisDetail");
migrationBuilder.DropColumn(
name: "Configuration",
table: "Store_Chassis");
migrationBuilder.DropColumn(
name: "EnumInventoryStatus",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "FromLocationErpCode",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "FromLocationGroup",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "FromWarehouseCode",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "IsOnTheWayLocationCode",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "Lot",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "PackingCode",
table: "Job_ThirdLocationJobDetail");
migrationBuilder.DropColumn(
name: "ClaimsUserId",
table: "Job_ThirdLocationJob");
migrationBuilder.DropColumn(
name: "ClaimsUserName",
table: "Job_ThirdLocationJob");
migrationBuilder.DropColumn(
name: "Type",
table: "Job_ThirdLocationJob");
migrationBuilder.DropColumn(
name: "ClaimsUserId",
table: "Job_SparePartIssueJob");
migrationBuilder.DropColumn(
name: "ClaimsUserName",
table: "Job_SparePartIssueJob");
migrationBuilder.DropColumn(
name: "IsClaims",
table: "Job_SparePartIssueJob");
migrationBuilder.DropColumn(
name: "ClaimsUserId",
table: "Job_KittingIssueJob");
migrationBuilder.DropColumn(
name: "ClaimsUserName",
table: "Job_KittingIssueJob");
migrationBuilder.DropColumn(
name: "IsClaims",
table: "Job_KittingIssueJob");
migrationBuilder.DropColumn(
name: "ClaimsUserId",
table: "Job_InjectionIssueJob");
migrationBuilder.DropColumn(
name: "ClaimsUserName",
table: "Job_InjectionIssueJob");
migrationBuilder.DropColumn(
name: "IsClaims",
table: "Job_InjectionIssueJob");
migrationBuilder.DropColumn(
name: "ClaimsUserId",
table: "Job_CoatingIssueJob");
migrationBuilder.DropColumn(
name: "ClaimsUserName",
table: "Job_CoatingIssueJob");
migrationBuilder.DropColumn(
name: "IsClaims",
table: "Job_CoatingIssueJob");
migrationBuilder.DropColumn(
name: "ClaimsUserId",
table: "Job_AssembleIssueJob");
migrationBuilder.DropColumn(
name: "ClaimsUserName",
table: "Job_AssembleIssueJob");
migrationBuilder.DropColumn(
name: "IsClaims",
table: "Job_AssembleIssueJob");
migrationBuilder.RenameColumn(
name: "IsClaims",
table: "Store_ThirdLocationNote",
newName: "UseOnTheWayLocation");
migrationBuilder.RenameColumn(
name: "ReceivedQty",
table: "Job_ThirdLocationJobDetail",
newName: "RoundedQty");
migrationBuilder.RenameColumn(
name: "IssuedQty",
table: "Job_ThirdLocationJobDetail",
newName: "DeliveryQty");
migrationBuilder.RenameColumn(
name: "IssueTime",
table: "Job_ThirdLocationJobDetail",
newName: "PlanBeginTime");
migrationBuilder.RenameColumn(
name: "IsClaims",
table: "Job_ThirdLocationJob",
newName: "UseOnTheWayLocation");
migrationBuilder.AddColumn<string>(
name: "PositionCode",
table: "Store_ThirdLocationRequestDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "RecommendType",
table: "Store_ThirdLocationRequestDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "WorkStation",
table: "Store_ThirdLocationRequestDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SingleCodeRequest",
table: "Store_ThirdLocationRequest",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "UseOnTheWayLocation",
table: "Store_ThirdLocationRequest",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AlterColumn<string>(
name: "FromPackingCode",
table: "Store_ThirdLocationNoteDetail",
type: "nvarchar(450)",
nullable: true,
oldClrType: typeof(string),
oldType: "nvarchar(max)",
oldNullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "IssueTime",
table: "Store_ThirdLocationNoteDetail",
type: "datetime2",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<string>(
name: "PositionCode",
table: "Store_ThirdLocationNoteDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "RecommendType",
table: "Store_ThirdLocationNoteDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "SingleCodeJob",
table: "Store_ThirdLocationNoteDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "ConfirmTime",
table: "Store_ThirdLocationNote",
type: "datetime2",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "Confirmed",
table: "Store_ThirdLocationNote",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<string>(
name: "RequestType",
table: "Store_ThirdLocationNote",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "Workshop",
table: "Store_ThirdLocationNote",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AlterColumn<long>(
name: "ChassisNumber",
table: "Store_KittingPackagingNoteChassisDetail",
type: "bigint",
nullable: false,
defaultValue: 0L,
oldClrType: typeof(string),
oldType: "nvarchar(64)",
oldMaxLength: 64,
oldNullable: true);
migrationBuilder.AddColumn<string>(
name: "DistributionType",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "Operation",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "PlannedSplitRule",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "PositionCode",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "RecommendType",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "SingleCodeJob",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "TruncType",
table: "Job_ThirdLocationJobDetail",
type: "nvarchar(64)",
maxLength: 64,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<string>(
name: "RequestType",
table: "Job_ThirdLocationJob",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "SingleCodeJob",
table: "Job_ThirdLocationJob",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "Workshop",
table: "Job_ThirdLocationJob",
type: "nvarchar(64)",
maxLength: 64,
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_Store_ThirdLocationNoteDetail_FromPackingCode",
table: "Store_ThirdLocationNoteDetail",
column: "FromPackingCode");
migrationBuilder.CreateIndex(
name: "IX_Store_ThirdLocationNoteDetail_Number_FromPackingCode_FromLocationCode_ToLocationCode",
table: "Store_ThirdLocationNoteDetail",
columns: new[] { "Number", "FromPackingCode", "FromLocationCode", "ToLocationCode" },
unique: true,
filter: "[FromPackingCode] IS NOT NULL");
}
}
}

250
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Migrations/StoreDbContextModelSnapshot.cs

@ -43,6 +43,12 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("ClaimsUserId")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimsUserName")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("CompleteTime") b.Property<DateTime?>("CompleteTime")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -79,6 +85,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("bit") .HasColumnType("bit")
.HasDefaultValue(false); .HasDefaultValue(false);
b.Property<bool>("IsClaims")
.HasColumnType("bit");
b.Property<int>("IssueRequestType") b.Property<int>("IssueRequestType")
.HasColumnType("int"); .HasColumnType("int");
@ -1504,6 +1513,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(40)") .HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp"); .HasColumnName("ConcurrencyStamp");
b.Property<string>("Configuration")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("CreationTime") b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2") .HasColumnType("datetime2")
.HasColumnName("CreationTime"); .HasColumnName("CreationTime");
@ -1917,6 +1929,12 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("ClaimsUserId")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimsUserName")
.HasColumnType("nvarchar(max)");
b.Property<string>("CoatingRequestNumber") b.Property<string>("CoatingRequestNumber")
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
@ -1957,6 +1975,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("bit") .HasColumnType("bit")
.HasDefaultValue(false); .HasDefaultValue(false);
b.Property<bool>("IsClaims")
.HasColumnType("bit");
b.Property<int>("IssueRequestType") b.Property<int>("IssueRequestType")
.HasColumnType("int"); .HasColumnType("int");
@ -8124,6 +8145,12 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("ClaimsUserId")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimsUserName")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("CompleteTime") b.Property<DateTime?>("CompleteTime")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -8164,6 +8191,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("bit") .HasColumnType("bit")
.HasDefaultValue(false); .HasDefaultValue(false);
b.Property<bool>("IsClaims")
.HasColumnType("bit");
b.Property<int>("IssueRequestType") b.Property<int>("IssueRequestType")
.HasColumnType("int"); .HasColumnType("int");
@ -14936,6 +14966,12 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("ClaimsUserId")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimsUserName")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("CompleteTime") b.Property<DateTime?>("CompleteTime")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -14972,6 +15008,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("bit") .HasColumnType("bit")
.HasDefaultValue(false); .HasDefaultValue(false);
b.Property<bool>("IsClaims")
.HasColumnType("bit");
b.Property<int>("IssueRequestType") b.Property<int>("IssueRequestType")
.HasColumnType("int"); .HasColumnType("int");
@ -16118,7 +16157,11 @@ namespace Win_in.Sfs.Wms.Store.Migrations
b.Property<Guid>("Id") b.Property<Guid>("Id")
.HasColumnType("uniqueidentifier"); .HasColumnType("uniqueidentifier");
b.Property<long>("ChassisNumber") b.Property<string>("ChassisNumber")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<long>("ChassisSortNumber")
.HasColumnType("bigint"); .HasColumnType("bigint");
b.Property<DateTime>("CreationTime") b.Property<DateTime>("CreationTime")
@ -25565,6 +25608,12 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("ClaimsUserId")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimsUserName")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("CompleteTime") b.Property<DateTime?>("CompleteTime")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -25601,6 +25650,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("bit") .HasColumnType("bit")
.HasDefaultValue(false); .HasDefaultValue(false);
b.Property<bool>("IsClaims")
.HasColumnType("bit");
b.Property<int>("IssueRequestType") b.Property<int>("IssueRequestType")
.HasColumnType("int"); .HasColumnType("int");
@ -26972,6 +27024,12 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("ClaimsUserId")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimsUserName")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("CompleteTime") b.Property<DateTime?>("CompleteTime")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -27005,6 +27063,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("bit") .HasColumnType("bit")
.HasDefaultValue(false); .HasDefaultValue(false);
b.Property<bool>("IsClaims")
.HasColumnType("bit");
b.Property<string>("JobDescription") b.Property<string>("JobDescription")
.HasMaxLength(1024) .HasMaxLength(1024)
.HasColumnType("nvarchar(1024)"); .HasColumnType("nvarchar(1024)");
@ -27051,25 +27112,17 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("RequestType")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("SingleCodeJob")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid?>("TenantId") b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier") .HasColumnType("uniqueidentifier")
.HasColumnName("TenantId"); .HasColumnName("TenantId");
b.Property<string>("Type")
.HasColumnType("nvarchar(max)");
b.Property<string>("UpStreamJobNumber") b.Property<string>("UpStreamJobNumber")
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<bool>("UseOnTheWayLocation")
.HasColumnType("bit");
b.Property<string>("WarehouseCode") b.Property<string>("WarehouseCode")
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
@ -27080,10 +27133,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
b.Property<string>("Worker") b.Property<string>("Worker")
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
b.Property<string>("Workshop")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.HasKey("Id"); b.HasKey("Id");
b.HasIndex("Number") b.HasIndex("Number")
@ -27105,13 +27154,8 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier") .HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId"); .HasColumnName("CreatorId");
b.Property<decimal>("DeliveryQty") b.Property<int>("EnumInventoryStatus")
.HasColumnType("decimal(18,6)"); .HasColumnType("int");
b.Property<string>("DistributionType")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<DateTime>("ExpiredTime") b.Property<DateTime>("ExpiredTime")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -27124,6 +27168,15 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("FromLocationErpCode")
.HasColumnType("nvarchar(max)");
b.Property<string>("FromLocationGroup")
.HasColumnType("nvarchar(max)");
b.Property<string>("FromWarehouseCode")
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("HandledArriveDate") b.Property<DateTime>("HandledArriveDate")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -27181,6 +27234,15 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(64)") .HasColumnType("nvarchar(64)")
.HasColumnName("HandledSupplierBatch"); .HasColumnName("HandledSupplierBatch");
b.Property<bool>("IsOnTheWayLocationCode")
.HasColumnType("bit");
b.Property<DateTime>("IssueTime")
.HasColumnType("datetime2");
b.Property<decimal>("IssuedQty")
.HasColumnType("decimal(18,6)");
b.Property<string>("ItemCode") b.Property<string>("ItemCode")
.IsRequired() .IsRequired()
.HasMaxLength(64) .HasMaxLength(64)
@ -27210,6 +27272,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier") .HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId"); .HasColumnName("LastModifierId");
b.Property<string>("Lot")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("MasterID") b.Property<Guid>("MasterID")
.HasColumnType("uniqueidentifier"); .HasColumnType("uniqueidentifier");
@ -27222,21 +27287,11 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("Operation") b.Property<string>("PackingCode")
.HasMaxLength(64) .HasColumnType("nvarchar(max)");
.HasColumnType("nvarchar(64)");
b.Property<DateTime>("PlanBeginTime")
.HasColumnType("datetime2");
b.Property<string>("PlannedSplitRule")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("PositionCode") b.Property<decimal>("ReceivedQty")
.HasMaxLength(64) .HasColumnType("decimal(18,6)");
.HasColumnType("nvarchar(64)");
b.Property<DateTime>("RecommendArriveDate") b.Property<DateTime>("RecommendArriveDate")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -27295,23 +27350,11 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(64)") .HasColumnType("nvarchar(64)")
.HasColumnName("RecommendSupplierBatch"); .HasColumnName("RecommendSupplierBatch");
b.Property<string>("RecommendType")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Remark") b.Property<string>("Remark")
.HasMaxLength(3072) .HasMaxLength(3072)
.HasColumnType("nvarchar(3072)") .HasColumnType("nvarchar(3072)")
.HasColumnName("Remark"); .HasColumnName("Remark");
b.Property<decimal>("RoundedQty")
.HasColumnType("decimal(18,6)");
b.Property<string>("SingleCodeJob")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("SingleCodeRequest") b.Property<string>("SingleCodeRequest")
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
@ -27348,11 +27391,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("TruncType")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Uom") b.Property<string>("Uom")
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
@ -27371,18 +27409,18 @@ namespace Win_in.Sfs.Wms.Store.Migrations
b.Property<DateTime>("ActiveDate") b.Property<DateTime>("ActiveDate")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
b.Property<string>("ClaimsUserId")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClaimsUserName")
.HasColumnType("nvarchar(max)");
b.Property<string>("ConcurrencyStamp") b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken() .IsConcurrencyToken()
.HasMaxLength(40) .HasMaxLength(40)
.HasColumnType("nvarchar(40)") .HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp"); .HasColumnName("ConcurrencyStamp");
b.Property<DateTime?>("ConfirmTime")
.HasColumnType("datetime2");
b.Property<bool>("Confirmed")
.HasColumnType("bit");
b.Property<DateTime>("CreationTime") b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2") .HasColumnType("datetime2")
.HasColumnName("CreationTime"); .HasColumnName("CreationTime");
@ -27395,6 +27433,12 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(max)") .HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties"); .HasColumnName("ExtraProperties");
b.Property<bool>("IsClaims")
.HasColumnType("bit");
b.Property<DateTime>("IssueTime")
.HasColumnType("datetime2");
b.Property<string>("JobNumber") b.Property<string>("JobNumber")
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)") .HasColumnType("nvarchar(64)")
@ -27414,6 +27458,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(64)") .HasColumnType("nvarchar(64)")
.HasColumnName("Number"); .HasColumnName("Number");
b.Property<DateTime>("ReceiptTime")
.HasColumnType("datetime2");
b.Property<string>("Remark") b.Property<string>("Remark")
.HasMaxLength(3072) .HasMaxLength(3072)
.HasColumnType("nvarchar(3072)") .HasColumnType("nvarchar(3072)")
@ -27423,24 +27470,16 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("RequestType")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid?>("TenantId") b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier") .HasColumnType("uniqueidentifier")
.HasColumnName("TenantId"); .HasColumnName("TenantId");
b.Property<bool>("UseOnTheWayLocation") b.Property<string>("Type")
.HasColumnType("bit"); .HasColumnType("nvarchar(max)");
b.Property<string>("Worker") b.Property<string>("Worker")
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
b.Property<string>("Workshop")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.HasKey("Id"); b.HasKey("Id");
b.HasIndex("Number") b.HasIndex("Number")
@ -27465,6 +27504,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier") .HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId"); .HasColumnName("CreatorId");
b.Property<int>("EnumInventoryStatus")
.HasColumnType("int");
b.Property<DateTime>("ExpireDate") b.Property<DateTime>("ExpireDate")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -27500,7 +27542,7 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
b.Property<string>("FromPackingCode") b.Property<string>("FromPackingCode")
.HasColumnType("nvarchar(450)"); .HasColumnType("nvarchar(max)");
b.Property<string>("FromStatus") b.Property<string>("FromStatus")
.IsRequired() .IsRequired()
@ -27570,8 +27612,8 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(64)") .HasColumnType("nvarchar(64)")
.HasColumnName("HandledSupplierBatch"); .HasColumnName("HandledSupplierBatch");
b.Property<DateTime>("IssueTime") b.Property<decimal>("IssuedQty")
.HasColumnType("datetime2"); .HasColumnType("decimal(18,6)");
b.Property<string>("ItemCode") b.Property<string>("ItemCode")
.IsRequired() .IsRequired()
@ -27602,6 +27644,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier") .HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId"); .HasColumnName("LastModifierId");
b.Property<string>("Lot")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("MasterID") b.Property<Guid>("MasterID")
.HasColumnType("uniqueidentifier"); .HasColumnType("uniqueidentifier");
@ -27615,9 +27660,8 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("PositionCode") b.Property<string>("PackingCode")
.HasMaxLength(64) .HasColumnType("nvarchar(max)");
.HasColumnType("nvarchar(64)");
b.Property<DateTime>("ProduceDate") b.Property<DateTime>("ProduceDate")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -27627,6 +27671,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("decimal(18,6)") .HasColumnType("decimal(18,6)")
.HasColumnName("Qty"); .HasColumnName("Qty");
b.Property<decimal>("ReceivedQty")
.HasColumnType("decimal(18,6)");
b.Property<DateTime>("RecommendArriveDate") b.Property<DateTime>("RecommendArriveDate")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -27684,20 +27731,11 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(64)") .HasColumnType("nvarchar(64)")
.HasColumnName("RecommendSupplierBatch"); .HasColumnName("RecommendSupplierBatch");
b.Property<string>("RecommendType")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Remark") b.Property<string>("Remark")
.HasMaxLength(3072) .HasMaxLength(3072)
.HasColumnType("nvarchar(3072)") .HasColumnType("nvarchar(3072)")
.HasColumnName("Remark"); .HasColumnName("Remark");
b.Property<string>("SingleCodeJob")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("SingleCodeRequest") b.Property<string>("SingleCodeRequest")
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
@ -27764,13 +27802,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
b.HasKey("Id"); b.HasKey("Id");
b.HasIndex("FromPackingCode");
b.HasIndex("MasterID"); b.HasIndex("MasterID");
b.HasIndex("Number", "FromPackingCode", "FromLocationCode", "ToLocationCode") b.HasIndex("Number");
.IsUnique()
.HasFilter("[FromPackingCode] IS NOT NULL");
b.ToTable("Store_ThirdLocationNoteDetail", (string)null); b.ToTable("Store_ThirdLocationNoteDetail", (string)null);
}); });
@ -27840,10 +27874,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("SingleCodeRequest")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<Guid?>("TenantId") b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier") .HasColumnType("uniqueidentifier")
.HasColumnName("TenantId"); .HasColumnName("TenantId");
@ -27852,9 +27882,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<bool>("UseOnTheWayLocation")
.HasColumnType("bit");
b.Property<string>("Worker") b.Property<string>("Worker")
.HasColumnType("nvarchar(max)"); .HasColumnType("nvarchar(max)");
@ -27879,6 +27906,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier") .HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId"); .HasColumnName("CreatorId");
b.Property<int>("EnumInventoryStatus")
.HasColumnType("int");
b.Property<DateTime>("ExpiredTime") b.Property<DateTime>("ExpiredTime")
.HasColumnType("datetime2"); .HasColumnType("datetime2");
@ -27892,6 +27922,15 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("FromLocationErpCode")
.HasColumnType("nvarchar(max)");
b.Property<string>("FromLocationGroup")
.HasColumnType("nvarchar(max)");
b.Property<string>("FromWarehouseCode")
.HasColumnType("nvarchar(max)");
b.Property<decimal>("IssuedQty") b.Property<decimal>("IssuedQty")
.HasPrecision(18, 6) .HasPrecision(18, 6)
.HasColumnType("decimal(18,6)"); .HasColumnType("decimal(18,6)");
@ -27925,6 +27964,9 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("uniqueidentifier") .HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId"); .HasColumnName("LastModifierId");
b.Property<string>("Lot")
.HasColumnType("nvarchar(max)");
b.Property<Guid>("MasterID") b.Property<Guid>("MasterID")
.HasColumnType("uniqueidentifier"); .HasColumnType("uniqueidentifier");
@ -27939,9 +27981,8 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasMaxLength(64) .HasMaxLength(64)
.HasColumnType("nvarchar(64)"); .HasColumnType("nvarchar(64)");
b.Property<string>("PositionCode") b.Property<string>("PackingCode")
.HasMaxLength(64) .HasColumnType("nvarchar(max)");
.HasColumnType("nvarchar(64)");
b.Property<decimal>("Qty") b.Property<decimal>("Qty")
.HasPrecision(18, 6) .HasPrecision(18, 6)
@ -27952,11 +27993,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasPrecision(18, 6) .HasPrecision(18, 6)
.HasColumnType("decimal(18,6)"); .HasColumnType("decimal(18,6)");
b.Property<string>("RecommendType")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.Property<string>("Remark") b.Property<string>("Remark")
.HasMaxLength(3072) .HasMaxLength(3072)
.HasColumnType("nvarchar(3072)") .HasColumnType("nvarchar(3072)")
@ -28004,10 +28040,6 @@ namespace Win_in.Sfs.Wms.Store.Migrations
.HasColumnType("nvarchar(64)") .HasColumnType("nvarchar(64)")
.HasColumnName("Uom"); .HasColumnName("Uom");
b.Property<string>("WorkStation")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)");
b.HasKey("Id"); b.HasKey("Id");
b.HasIndex("ItemCode"); b.HasIndex("ItemCode");

8
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Notes/ThirdLocationNotes/ThirdLocationNoteDbContextModelCreatingExtensions.cs

@ -20,8 +20,6 @@ public static class ThirdLocationNoteDbContextModelCreatingExtensions
//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.Workshop).HasMaxLength(SfsPropertyConst.NameLength);
b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength); b.Property(q => q.Remark).HasMaxLength(SfsPropertyConst.RemarkLength);
//Relations //Relations
@ -43,16 +41,12 @@ public static class ThirdLocationNoteDbContextModelCreatingExtensions
b.ConfigureSfsStoreDetailBase(); b.ConfigureSfsStoreDetailBase();
//Properties //Properties
b.Property(q => q.IssueTime).IsRequired();
b.Property(q => q.ExpiredTime).IsRequired(); b.Property(q => q.ExpiredTime).IsRequired();
b.Property(q => q.SingleCodeJob).HasMaxLength(SfsPropertyConst.NameLength);
b.Property(q => q.SingleCodeRequest).HasMaxLength(SfsPropertyConst.NameLength); b.Property(q => q.SingleCodeRequest).HasMaxLength(SfsPropertyConst.NameLength);
b.Property(q => q.OnTheWayLocationCode).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.OnTheWayLocationCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.FromStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>(); b.Property(q => q.FromStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
b.Property(q => q.ToStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>(); b.Property(q => q.ToStatus).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
b.Property(q => q.PositionCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//Relations //Relations
//Indexes //Indexes

6
be/Modules/Store/src/Win_in.Sfs.Wms.Store.EntityFrameworkCore/Requests/ThirdLocationRequests/ThirdLocationRequestDbContextModelCreatingExtensions.cs

@ -20,7 +20,6 @@ public static class ThirdLocationRequestDbContextModelCreatingExtensions
//Properties //Properties
b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.Type).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.SingleCodeRequest).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
@ -51,12 +50,9 @@ public static class ThirdLocationRequestDbContextModelCreatingExtensions
b.Property(q => q.OnTheWayLocationCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.OnTheWayLocationCode).IsRequired().HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.ExpiredTime).IsRequired(); b.Property(q => q.ExpiredTime).IsRequired();
b.Property(q => q.SingleCodeRequest).HasMaxLength(SfsPropertyConst.CodeLength); b.Property(q => q.SingleCodeRequest).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.WorkStation).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.IssuedQty).HasPrecision(18, 6); b.Property(q => q.IssuedQty).HasPrecision(18, 6);
b.Property(q => q.ReceivedQty).HasPrecision(18, 6); b.Property(q => q.ReceivedQty).HasPrecision(18, 6);
b.Property(q => q.PositionCode).HasMaxLength(SfsPropertyConst.CodeLength);
b.Property(q => q.RecommendType).HasMaxLength(SfsPropertyConst.NameLength).HasConversion<string>();
//Relations //Relations
//Indexes //Indexes

18
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Jobs/ThirdLocationJobAutoMapperProfile.cs

@ -12,15 +12,12 @@ public partial class StoreEventAutoMapperProfile : Profile
{ {
private void ThirdLocationJobAutoMapperProfile() private void ThirdLocationJobAutoMapperProfile()
{ {
CreateMap<ThirdLocationJob, ThirdLocationNote>() CreateMap<ThirdLocationJob, ThirdLocationNote>()
.ForMember(x => x.JobNumber, y => y.MapFrom(d => d.Number)) .ForMember(x => x.JobNumber, y => y.MapFrom(d => d.Number))
.ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.RequestNumber)) .ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.RequestNumber))
.ForMember(x => x.ActiveDate, y => y.MapFrom(d => DateTime.Now)) .ForMember(x => x.ActiveDate, y => y.MapFrom(d => DateTime.Now))
.ForMember(x => x.Worker, y => y.MapFrom(d => d.CompleteUserName)) .ForMember(x => x.Worker, y => y.MapFrom(d => d.CompleteUserName))
.Ignore(x => x.Confirmed) .Ignore(x => x.Number);
.Ignore(x => x.Number)
.Ignore(x => x.ConfirmTime);
CreateMap<ThirdLocationJobDetail, ThirdLocationNoteDetail>() CreateMap<ThirdLocationJobDetail, ThirdLocationNoteDetail>()
.ForMember(x => x.FromPackingCode, y => y.MapFrom(d => d.HandledPackingCode)) .ForMember(x => x.FromPackingCode, y => y.MapFrom(d => d.HandledPackingCode))
@ -36,16 +33,14 @@ public partial class StoreEventAutoMapperProfile : Profile
.ForMember(x => x.FromStatus, y => y.MapFrom(d => d.Status)) .ForMember(x => x.FromStatus, y => y.MapFrom(d => d.Status))
.ForMember(x => x.ToStatus, y => y.MapFrom(d => d.Status)) .ForMember(x => x.ToStatus, y => y.MapFrom(d => d.Status))
.ForMember(x => x.Qty, y => y.MapFrom(d => d.HandledQty)) .ForMember(x => x.Qty, y => y.MapFrom(d => d.HandledQty))
.ForMember(x => x.IssueTime, y => y.MapFrom(d => DateTime.Now))
.ForMember(x => x.FromLocationCode, y => y.MapFrom(d => d.FromLocationCode)) .ForMember(x => x.FromLocationCode, y => y.MapFrom(d => d.FromLocationCode))
.ForMember(x => x.FromLocationArea, y => y.MapFrom(d => d.FromLocationArea)) .ForMember(x => x.FromLocationArea, y => y.MapFrom(d => d.FromLocationArea))
.ForMember(x => x.FromLocationGroup, y => y.MapFrom(d => d.HandledFromLocationGroup)) .ForMember(x => x.FromLocationGroup, y => y.MapFrom(d => d.HandledFromLocationGroup))
.ForMember(x => x.FromLocationErpCode, y => y.MapFrom(d => d.HandledFromLocationErpCode)) .ForMember(x => x.FromLocationErpCode, y => y.MapFrom(d => d.HandledFromLocationErpCode))
.ForMember(x => x.FromWarehouseCode, y => y.MapFrom(d => d.HandledFromWarehouseCode)) .ForMember(x => x.FromWarehouseCode, y => y.MapFrom(d => d.HandledFromWarehouseCode))
.ForMember(x => x.ToLocationCode, y => y.MapFrom(d => d.ToLocationCode)) .ForMember(x => x.ToLocationCode, y => y.MapFrom(d => d.ToLocationCode))
.ForMember(x => x.SingleCodeJob, y => y.MapFrom(d => d.SingleCodeJob))
.ForMember(x => x.SingleCodeRequest, y => y.MapFrom(d => d.SingleCodeRequest)) .ForMember(x => x.SingleCodeRequest, y => y.MapFrom(d => d.SingleCodeRequest))
.Ignore(x => x.ToLocationArea) .Ignore(x => x.ToLocationArea)
.Ignore(x => x.ToLocationGroup) .Ignore(x => x.ToLocationGroup)
.Ignore(x => x.ToLocationErpCode) .Ignore(x => x.ToLocationErpCode)
; ;
@ -66,11 +61,11 @@ public partial class StoreEventAutoMapperProfile : Profile
CreateMap<ThirdLocationJob, ThirdLocationNoteEditInput>() CreateMap<ThirdLocationJob, ThirdLocationNoteEditInput>()
.ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.RequestNumber)) .ForMember(x => x.RequestNumber, y => y.MapFrom(d => d.RequestNumber))
.Ignore(x => x.Confirmed) .Ignore(x => x.Confirmed)
.Ignore(x => x.JobNumber) .Ignore(x => x.JobNumber)
.Ignore(x => x.ActiveDate) .Ignore(x => x.ActiveDate)
; ;
CreateMap<ThirdLocationJobDetail, ThirdLocationNoteDetailInput>() CreateMap<ThirdLocationJobDetail, ThirdLocationNoteDetailInput>()
.ForMember(x => x.Qty, y => y.MapFrom(d => d.HandledQty)) .ForMember(x => x.Qty, y => y.MapFrom(d => d.HandledQty))
.ForMember(x => x.IssueTime, y => y.MapFrom(d => DateTime.Now)) .ForMember(x => x.IssueTime, y => y.MapFrom(d => DateTime.Now))
.ForMember(x => x.FromPackingCode, y => y.MapFrom(d => d.HandledPackingCode)) .ForMember(x => x.FromPackingCode, y => y.MapFrom(d => d.HandledPackingCode))
.ForMember(x => x.ToPackingCode, y => y.MapFrom(d => d.HandledPackingCode)) .ForMember(x => x.ToPackingCode, y => y.MapFrom(d => d.HandledPackingCode))
@ -89,8 +84,7 @@ public partial class StoreEventAutoMapperProfile : Profile
.ForMember(x => x.FromWarehouseCode, y => y.MapFrom(d => d.HandledFromWarehouseCode)) .ForMember(x => x.FromWarehouseCode, y => y.MapFrom(d => d.HandledFromWarehouseCode))
.ForMember(x => x.FromStatus, y => y.MapFrom(d => d.Status)) .ForMember(x => x.FromStatus, y => y.MapFrom(d => d.Status))
.ForMember(x => x.ToStatus, y => y.MapFrom(d => d.Status)) .ForMember(x => x.ToStatus, y => y.MapFrom(d => d.Status))
.ForMember(x => x.SingleCodeJob, y => y.MapFrom(d => d.SingleCodeJob)) .ForMember(x => x.SingleCodeRequest, y => y.MapFrom(d => d.SingleCodeRequest))
.ForMember(x => x.SingleCodeRequest, y => y.MapFrom(d => d.SingleCodeRequest))
; ;
} }
} }

1
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/AutoMapperProfiles/Notes/ThirdLocationNoteAutoMapperProfile.cs

@ -20,7 +20,6 @@ public partial class StoreEventAutoMapperProfile : Profile
; ;
CreateMap<ThirdLocationNote, TransferNoteDTO>() CreateMap<ThirdLocationNote, TransferNoteDTO>()
.ForMember(dest => dest.Type, opts => opts.MapFrom(src => src.RequestType))
.Ignore(x => x.ExtraProperties) .Ignore(x => x.ExtraProperties)
.Ignore(x => x.CallServerName) .Ignore(x => x.CallServerName)
.Ignore(x => x.CallBusinessType) .Ignore(x => x.CallBusinessType)

224
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/ThirdLocationJobEventHandler.cs

@ -1,23 +1,20 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Routing.Matching;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Volo.Abp.Uow;
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.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.BusinessJob; namespace Win_in.Sfs.Wms.Store.Event.BusinessJob;
public class ThirdLocationJobEventHandler : public class ThirdLocationJobEventHandler :
StoreEventHandlerBase StoreEventHandlerBase
, ILocalEventHandler<SfsCompletedEntityEventData<ThirdLocationJob>>,ILocalEventHandler<SfsCancelledEntityEventData<ThirdLocationJob>>, ILocalEventHandler<SfsClosedEntityEventData<ThirdLocationJob>> , ILocalEventHandler<SfsCompletedEntityEventData<ThirdLocationJob>>,
ILocalEventHandler<SfsCancelledEntityEventData<ThirdLocationJob>>,
ILocalEventHandler<SfsClosedEntityEventData<ThirdLocationJob>>
{ {
private const EnumTransType TransType = EnumTransType.Issue; private const EnumTransType TransType = EnumTransType.Issue;
@ -27,7 +24,9 @@ public class ThirdLocationJobEventHandler :
private readonly ITransferLogAppService _transferLogAppService; private readonly ITransferLogAppService _transferLogAppService;
private readonly IThirdLocationJobRepository _thirdLocationJobRepository; private readonly IThirdLocationJobRepository _thirdLocationJobRepository;
public ThirdLocationJobEventHandler(IThirdLocationNoteAppService thirdLocationNoteAppService, IThirdLocationJobRepository thirdLocationJobRepository, ITransferLogAppService transferLogAppService, IThirdLocationRequestManager thirdLocationRequestManager, ILocationAppService locationAppService) public ThirdLocationJobEventHandler(IThirdLocationNoteAppService thirdLocationNoteAppService,
IThirdLocationJobRepository thirdLocationJobRepository, ITransferLogAppService transferLogAppService,
IThirdLocationRequestManager thirdLocationRequestManager, ILocationAppService locationAppService)
{ {
_thirdLocationNoteAppService = thirdLocationNoteAppService; _thirdLocationNoteAppService = thirdLocationNoteAppService;
_locationAppService = locationAppService; _locationAppService = locationAppService;
@ -36,217 +35,18 @@ public class ThirdLocationJobEventHandler :
_thirdLocationJobRepository = thirdLocationJobRepository; _thirdLocationJobRepository = thirdLocationJobRepository;
} }
/// <summary> public Task HandleEventAsync(SfsCompletedEntityEventData<ThirdLocationJob> eventData)
/// 执行后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCompletedEntityEventData<ThirdLocationJob> eventData)
{ {
var entity = eventData.Entity; throw new NotImplementedException();
entity.CompleteTime = Clock.Now;
var thirdLocationNote = await BuildThirdLocationNoteAsync(entity).ConfigureAwait(false);
await _thirdLocationNoteAppService.CreateAsync(thirdLocationNote).ConfigureAwait(false);
}
#region 私有
/// <summary>
/// 创建记录实体
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private async Task<ThirdLocationNoteEditInput> BuildThirdLocationNoteAsync(ThirdLocationJob entity)
{
var thirdLocationNoteCreateInput = ObjectMapper.Map<ThirdLocationJob, ThirdLocationNoteEditInput>(entity);
thirdLocationNoteCreateInput.JobNumber = entity.Number;
var locationCodes = thirdLocationNoteCreateInput.Details.Select(p => p.ToLocationCode).Distinct().ToList();
var locations = await _locationAppService.GetByCodesAsync(locationCodes).ConfigureAwait(false);
thirdLocationNoteCreateInput.Details.RemoveAll(p => p.Qty == 0);
foreach (var detail in thirdLocationNoteCreateInput.Details)
{
var location = locations.First(p => p.Code == detail.ToLocationCode);
await RemovePackingCodeAndContainerCodeAndLotAsync(detail, location.Type).ConfigureAwait(false); //去箱 去托 去批
detail.ToLocationArea = location.AreaCode;
detail.ToLocationGroup = location.LocationGroupCode;
detail.ToLocationErpCode = location.ErpLocationCode;
detail.ToWarehouseCode = location.WarehouseCode;
var locationFrom = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
detail.FromLocationErpCode = locationFrom.ErpLocationCode;
detail.FromWarehouseCode = locationFrom.WarehouseCode;
detail.FromStatus = EnumInventoryStatus.OK;
detail.FromPackingCode = "";
detail.ToPackingCode = "";
detail.FromLot = "";
detail.ToLot = "";
}
return thirdLocationNoteCreateInput;
}
/// <summary>
/// 取消后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCancelledEntityEventData<ThirdLocationJob> eventData)
{
var entity = eventData.Entity;
}
/// <summary>
/// 终止关闭任务后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsClosedEntityEventData<ThirdLocationJob> eventData)
{
var entity = eventData.Entity;
if (!string.IsNullOrEmpty(entity.RequestNumber))
{
var thirdLocationRequest = await _thirdLocationRequestManager.GetByNumberAsync(entity.RequestNumber).ConfigureAwait(false);
var transferLogs = new List<TransferLogEditInput>();
transferLogs.AddRange(await BuildCancelTransferLogsAsync(thirdLocationRequest, entity.Details[0].ItemCode).ConfigureAwait(false));
await _transferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
var jobEntities = await _thirdLocationJobRepository.GetListAsync(p => p.RequestNumber == entity.RequestNumber, "Number", true).ConfigureAwait(false);
bool isDone = false;
foreach (var job in jobEntities.Where(p=>p.Number!= entity.Number))
{
if(job.JobStatus == EnumJobStatus.Done || job.JobStatus == EnumJobStatus.Closed)
{
isDone = true;
}
else
{
isDone = false;
}
}
if(isDone)
{
thirdLocationRequest.RequestStatus = EnumRequestStatus.Completed;
await _thirdLocationRequestManager.UpdateAsync(thirdLocationRequest).ConfigureAwait(false);
}
}
} }
private async Task<List<TransferLogEditInput>> BuildCancelTransferLogsAsync(ThirdLocationRequest thirdLocationRequest,string itemCode) public Task HandleEventAsync(SfsCancelledEntityEventData<ThirdLocationJob> eventData)
{ {
var transferLogs = new List<TransferLogEditInput>(); throw new NotImplementedException();
foreach (var detail in thirdLocationRequest.Details.Where(detail => detail.IssuedQty-detail.ReceivedQty != 0 && detail.ItemCode== itemCode))
{
var transferLog = ObjectMapper.Map<ThirdLocationRequestDetail, TransferLogEditInput>(detail);
LocationDTO fromLocationDTO = null;
LocationDTO toLocationDTO = null;
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
transferLog.FromLocationCode = fromLocationDTO.Code;
transferLog.FromLocationArea = fromLocationDTO.AreaCode;
transferLog.FromLocationErpCode = fromLocationDTO.ErpLocationCode;
transferLog.FromLocationGroup = fromLocationDTO.LocationGroupCode;
transferLog.FromWarehouseCode = fromLocationDTO.WarehouseCode;
transferLog.ToLocationCode = toLocationDTO.Code;
transferLog.ToLocationArea = toLocationDTO.AreaCode;
transferLog.ToLocationErpCode = toLocationDTO.ErpLocationCode;
transferLog.ToLocationGroup = toLocationDTO.LocationGroupCode;
transferLog.ToWarehouseCode = toLocationDTO.WarehouseCode;
transferLog.TransSubType = Enum.Parse<EnumTransSubType>(thirdLocationRequest.Type);
transferLog.TransType = TransType;
transferLog.DocNumber = thirdLocationRequest.Number;
transferLog.JobNumber = "";
transferLog.Qty = detail.IssuedQty - detail.ReceivedQty;
transferLog.FromPackingCode = "";
transferLog.FromLot = "";
transferLog.ToPackingCode = "";
transferLog.ToLot = "";
transferLog.FromStatus = EnumInventoryStatus.OK;
transferLog.ToStatus = EnumInventoryStatus.OK;
transferLogs.Add(transferLog);
}
return transferLogs;
} }
/// <summary> public Task HandleEventAsync(SfsClosedEntityEventData<ThirdLocationJob> eventData)
/// 去除箱码 托码 批次
/// </summary>
private async Task RemovePackingCodeAndContainerCodeAndLotAsync(ThirdLocationNoteDetailInput thirdLocationNoteDetail,
EnumLocationType locationType)
{ {
switch (locationType) throw new NotImplementedException();
{
case EnumLocationType.WIP:
{
//用开关控制 发料到线边后去除箱码和托码 ???
if (await SettingManager.IsTrueAsync(StoreSettings.Issue.ToWip.IsRemovePackingCode)
.ConfigureAwait(false))
{
thirdLocationNoteDetail.ToPackingCode = "";
}
if (await SettingManager.IsTrueAsync(StoreSettings.Issue.ToWip.IsRemoveContainerCode)
.ConfigureAwait(false))
{
thirdLocationNoteDetail.ToContainerCode = "";
}
if (await SettingManager.IsTrueAsync(StoreSettings.Issue.ToWip.IsRemoveLot).ConfigureAwait(false))
{
thirdLocationNoteDetail.ToLot = "";
}
break;
}
case EnumLocationType.SEMI:
{
//用开关控制 发料到后去除箱码和托码 ???
if (await SettingManager.IsTrueAsync(StoreSettings.Issue.ToSemi.IsRemovePackingCode)
.ConfigureAwait(false))
{
thirdLocationNoteDetail.ToPackingCode = "";
}
if (await SettingManager.IsTrueAsync(StoreSettings.Issue.ToSemi.IsRemoveContainerCode)
.ConfigureAwait(false))
{
thirdLocationNoteDetail.ToContainerCode = "";
}
if (await SettingManager.IsTrueAsync(StoreSettings.Issue.ToSemi.IsRemoveLot).ConfigureAwait(false))
{
thirdLocationNoteDetail.ToLot = "";
}
break;
}
}
} }
#endregion
} }

379
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/ThirdLocationRequestEventHandler.cs

@ -55,388 +55,33 @@ public class ThirdLocationRequestEventHandler
_transferLogAppService = transferLogAppService; _transferLogAppService = transferLogAppService;
} }
/// <summary> public Task HandleEventAsync(SfsHandledEntityEventData<ThirdLocationRequest> eventData)
/// 创建后
/// </summary>
/// <param name="eventData">Event data</param>
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<ThirdLocationRequest> eventData)
{ {
var entity = eventData.Entity; throw new NotImplementedException();
//if (entity.AutoSubmit)
//{
// await _thirdLocationRequestManager.SubmitAsync(entity).ConfigureAwait(false);
//}
}
/// <summary>
/// 批量创建后
/// </summary>
/// <param name="eventData">Event data</param>
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<ThirdLocationRequest>> eventData)
{
var entitys = eventData.Entity;
foreach (var entity in entitys)
{
if (entity.AutoSubmit)
{
await _thirdLocationRequestManager.SubmitAsync(entity).ConfigureAwait(false);
}
}
}
/// <summary>
/// 执行后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
public virtual async Task HandleEventAsync(SfsHandledEntityEventData<ThirdLocationRequest> eventData)
{
var entity = eventData.Entity;
var thirdLocationJobs = await BuildThirdLocationJobAsync(entity).ConfigureAwait(false);
if (thirdLocationJobs.Any())
{
await _thirdLocationJobAppService.CreateManyAsync(thirdLocationJobs).ConfigureAwait(false);
//来源库位更新为在途库位
var transferLogs = new List<TransferLogEditInput>();
var route = entity.UseOnTheWayLocation
? EnumTransferRoute.SourceToOnTheWay
: EnumTransferRoute.SourceToDestination;
transferLogs.AddRange(await BuildTransferLogsAsync(entity, route).ConfigureAwait(false));
await _transferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
}
}
private async Task<List<TransferLogEditInput>> BuildTransferLogsAsync(ThirdLocationRequest thirdLocationRequest, EnumTransferRoute route)
{
var transferLogs = new List<TransferLogEditInput>();
foreach (var detail in thirdLocationRequest.Details.Where(detail => detail.Qty != 0))
{
var transferLog = ObjectMapper.Map<ThirdLocationRequestDetail, TransferLogEditInput>(detail);
LocationDTO fromLocationDTO = null;
LocationDTO toLocationDTO = null;
var transportLocation = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false);
if (transportLocation != null)
{
detail.OnTheWayLocationCode = transportLocation.Code;
}
else
{
throw new UserFriendlyException($"未获取到在途库代码");
}
if (thirdLocationRequest.UseOnTheWayLocation)
{
var location = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
switch (route)
{
case EnumTransferRoute.SourceToOnTheWay:
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
break;
case EnumTransferRoute.OnTheWayToDestination:
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
await RemovePackingCodeAndContainerCodeAndLotAsync(transferLog).ConfigureAwait(false);
break;
case EnumTransferRoute.SourceToDestination:
default:
throw new ArgumentOutOfRangeException(nameof(route), route, null);
}
}
else
{
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
}
transferLog.FromLocationCode = fromLocationDTO.Code;
transferLog.FromLocationArea = fromLocationDTO.AreaCode;
transferLog.FromLocationErpCode = fromLocationDTO.ErpLocationCode;
transferLog.FromLocationGroup = fromLocationDTO.LocationGroupCode;
transferLog.FromWarehouseCode = fromLocationDTO.WarehouseCode;
transferLog.ToLocationCode = toLocationDTO.Code;
transferLog.ToLocationArea = toLocationDTO.AreaCode;
transferLog.ToLocationErpCode = toLocationDTO.ErpLocationCode;
transferLog.ToLocationGroup = toLocationDTO.LocationGroupCode;
transferLog.ToWarehouseCode = toLocationDTO.WarehouseCode;
transferLog.TransSubType = Enum.Parse<EnumTransSubType>(thirdLocationRequest.Type);
transferLog.TransType = TransType;
transferLog.DocNumber = thirdLocationRequest.Number;
transferLog.JobNumber = "";
transferLog.FromPackingCode = "";
transferLog.FromLot = "";
transferLog.ToPackingCode = "";
transferLog.ToLot = "";
transferLog.FromStatus = EnumInventoryStatus.OK;
transferLog.ToStatus = EnumInventoryStatus.OK;
transferLogs.Add(transferLog);
}
return transferLogs;
}
private async Task RemovePackingCodeAndContainerCodeAndLotAsync(TransferLogEditInput transferLogCreateInput)
{
transferLogCreateInput.ToPackingCode = "";
transferLogCreateInput.ToLot = "";
transferLogCreateInput.ToContainerCode = "";
transferLogCreateInput.FromPackingCode = "";
transferLogCreateInput.FromLot = "";
transferLogCreateInput.FromContainerCode = "";
}
private async Task<List<TransferLogEditInput>> BuildCancelTransferLogsAsync(ThirdLocationRequest thirdLocationRequest)
{
var transferLogs = new List<TransferLogEditInput>();
foreach (var detail in thirdLocationRequest.Details.Where(detail => detail.Qty != 0))
{
var transferLog = ObjectMapper.Map<ThirdLocationRequestDetail, TransferLogEditInput>(detail);
LocationDTO fromLocationDTO = null;
LocationDTO toLocationDTO = null;
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
transferLog.FromLocationCode = fromLocationDTO.Code;
transferLog.FromLocationArea = fromLocationDTO.AreaCode;
transferLog.FromLocationErpCode = fromLocationDTO.ErpLocationCode;
transferLog.FromLocationGroup = fromLocationDTO.LocationGroupCode;
transferLog.FromWarehouseCode = fromLocationDTO.WarehouseCode;
transferLog.ToLocationCode = toLocationDTO.Code;
transferLog.ToLocationArea = toLocationDTO.AreaCode;
transferLog.ToLocationErpCode = toLocationDTO.ErpLocationCode;
transferLog.ToLocationGroup = toLocationDTO.LocationGroupCode;
transferLog.ToWarehouseCode = toLocationDTO.WarehouseCode;
transferLog.TransSubType = Enum.Parse<EnumTransSubType>(thirdLocationRequest.Type);
transferLog.TransType = TransType;
transferLog.DocNumber = thirdLocationRequest.Number;
transferLog.JobNumber = "";
transferLog.FromPackingCode = "";
transferLog.FromLot = "";
transferLog.ToPackingCode = "";
transferLog.ToLot = "";
transferLog.FromStatus = EnumInventoryStatus.OK;
transferLog.ToStatus = EnumInventoryStatus.OK;
transferLogs.Add(transferLog);
}
return transferLogs;
} }
/// <summary> public Task HandleEventAsync(SfsAbortedEntityEventData<ThirdLocationRequest> eventData)
/// 驳回后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
public virtual async Task HandleEventAsync(SfsAbortedEntityEventData<ThirdLocationRequest> eventData)
{ {
throw new NotImplementedException();
} }
/// <summary> public Task HandleEventAsync(SfsCompletedEntityEventData<ThirdLocationRequest> eventData)
/// 取消后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCancelledEntityEventData<ThirdLocationRequest> eventData)
{ {
var entity = eventData.Entity; throw new NotImplementedException();
var transferLogs = new List<TransferLogEditInput>();
transferLogs.AddRange(await BuildCancelTransferLogsAsync(entity).ConfigureAwait(false));
await _transferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
} }
/// <summary> public Task HandleEventAsync(SfsCreatedEntityEventData<ThirdLocationRequest> eventData)
/// 完成后
/// </summary>
/// <param name="eventData"></param>
/// <returns></returns>
public virtual async Task HandleEventAsync(SfsCompletedEntityEventData<ThirdLocationRequest> eventData)
{ {
_ = eventData.Entity; throw new NotImplementedException();
// await _thirdLocationJobAppService.CompleteByThirdLocationRequestAsync(entity.Number);
await Task.CompletedTask.ConfigureAwait(false);
} }
#region 私有 public Task HandleEventAsync(SfsCancelledEntityEventData<ThirdLocationRequest> eventData)
private async Task<List<ThirdLocationJobEditInput>> BuildThirdLocationJobAsync
(ThirdLocationRequest thirdLocationRequest)
{ {
var jobs = new List<ThirdLocationJobEditInput>(); throw new NotImplementedException();
var transactionType = await TransactionTypeAclService.GetByTransTypeAsync(EnumTransType.TransferLib, EnumTransSubType.Transfer_Warehouse).ConfigureAwait(false);//库存事务
var toLocationCodes = thirdLocationRequest.Details.Select(p => p.ToLocationCode).Distinct().ToList();//所有发送库位的集合
var toLocations = await _locationAppService.GetByCodesAsync(toLocationCodes).ConfigureAwait(false);//所有库位的集合
var thirdLocationRequestDetails = thirdLocationRequest.Details;
foreach (var thirdLocationRequestDetail in thirdLocationRequestDetails)
{
var toLocation = toLocations.FirstOrDefault(p => p.Code == thirdLocationRequestDetail.ToLocationCode);//判断目标库位是否存在
Check.NotNull(toLocation, "库位代码", $"库位 {thirdLocationRequestDetail.ToLocationCode} 不存在");
//创建详情
var jobDetails = await BuildThirdLocationJobDetailInputsAsync(thirdLocationRequest, thirdLocationRequestDetail, transactionType, toLocation.LocationGroupCode).ConfigureAwait(false);
if (!jobDetails.Any())
{
continue;
}
var fromLocation = await _locationAppService.GetByCodeAsync(thirdLocationRequestDetail.FromLocationCode).ConfigureAwait(false);
var job = BuildThirdLocationJobCreateInput(thirdLocationRequest, fromLocation);
job.Details.AddRange(jobDetails);
jobs.Add(job);
//var job = jobs.FirstOrDefault(p => p.WorkGroupCode == fromLocation?.WorkGroupCode);
//if (job == null || job.Details.Any(p => p.ToLocationCode != thirdLocationRequestDetail.ToLocationCode))
//{
// job = BuildThirdLocationJobCreateInput(thirdLocationRequest, fromLocation);
// jobs.Add(job);
//}
//job.Details.AddRange(jobDetails);
}
jobs = jobs.Where(p => p.Details.Any()).ToList();
return jobs;
} }
private ThirdLocationJobEditInput BuildThirdLocationJobCreateInput(ThirdLocationRequest thirdLocationRequest, LocationDTO fromLocation) public Task HandleEventAsync(SfsCreatedEntityEventData<List<ThirdLocationRequest>> eventData)
{ {
ThirdLocationJobEditInput job; throw new NotImplementedException();
job = ObjectMapper.Map<ThirdLocationRequest, ThirdLocationJobEditInput>(thirdLocationRequest);
job.JobType = EnumJobType.ThirdLocationJob;
job.JobStatus = EnumJobStatus.Open;
job.WorkGroupCode = fromLocation.WorkGroupCode;
job.WarehouseCode = fromLocation.WarehouseCode;
//job.ProdLine = fromLocation.LocationGroupCode;
job.Worker = thirdLocationRequest.Worker;
if (string.IsNullOrEmpty(job.Worker))
{
job.Worker = "admin";
}
job.RequestNumber = thirdLocationRequest.Number;
return job;
} }
private async Task<List<ThirdLocationJobDetailInput>> BuildThirdLocationJobDetailInputsAsync(ThirdLocationRequest thirdLocationRequest,
ThirdLocationRequestDetail thirdLocationRequestDetail, TransactionTypeDTO transactionType, string toLocationGroupCode)
{
var jobDetails = new List<ThirdLocationJobDetailInput>();
var input = new RecommendBalanceRequestInput()
{
ItemCode = thirdLocationRequestDetail.ItemCode,
Qty = thirdLocationRequestDetail.ToBeIssuedQty,
LocationTypes = transactionType.OutLocationTypes,
LocationAreas = new List<string> { thirdLocationRequestDetail.FromLocationArea },
Statuses = transactionType.OutInventoryStatuses,
};
//获取推荐库存
var recommendList = await _balanceAppService.GetRecommendBalancesAsync(input).ConfigureAwait(false);
//没有推荐库存时 跳过此明细 不生成任务
if (recommendList.Count != 0)
{
foreach (var recommend in recommendList)
{
//拿走需求量
var detail = await BuildThirdLocationJobDetailAsync(thirdLocationRequestDetail, recommend, toLocationGroupCode).ConfigureAwait(false);
if (thirdLocationRequest.UseOnTheWayLocation)
{
//获取在途库
var locationDto = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false);
detail.OnTheWayLocationCode = locationDto.Code;
}
jobDetails.Add(detail);
//thirdLocationRequestDetail.IssuedQty += recommend.Qty;
//await _thirdLocationRequestManager.UpdateDetailsAsync(thirdLocationRequest).ConfigureAwait(false);
}
}
return jobDetails;
}
private async Task<ThirdLocationJobDetailInput> BuildThirdLocationJobDetailAsync(ThirdLocationRequestDetail thirdLocationRequestDetail, BalanceDTO balance, string toLocationGroupCode)
{
var detail = ObjectMapper.Map<BalanceDTO, ThirdLocationJobDetailInput>(balance);
detail.SingleCodeRequest = thirdLocationRequestDetail.SingleCodeRequest;
detail.ExpiredTime = thirdLocationRequestDetail.ExpiredTime;
detail.PositionCode = thirdLocationRequestDetail.PositionCode;
detail.RecommendType = thirdLocationRequestDetail.RecommendType;
//detail.RecommendPackingCode = balance.PackingCode;
//detail.RecommendContainerCode = balance.ContainerCode;
//detail.RecommendSupplierBatch = balance.SupplierBatch;
//detail.RecommendProduceDate = balance.ProduceDate;
//detail.RecommendExpireDate = balance.ExpireDate;
//detail.RecommendLot = balance.Lot;
//detail.RecommendProduceDate = balance.ProduceDate;
//detail.RecommendArriveDate = balance.ArriveDate;
//detail.RecommendFromLocationArea = balance.LocationArea;
//detail.RecommendFromLocationCode = balance.LocationCode;
//detail.RecommendFromLocationErpCode = balance.LocationErpCode;
//detail.RecommendFromLocationGroup = balance.LocationGroup;
//detail.RecommendFromWarehouseCode = balance.WarehouseCode;
//detail.RecommendQty = balance.Qty;
//detail.Uom = balance.Uom;
detail.RecommendPackingCode = "";
detail.RecommendLot = "";
detail.RecommendFromLocationCode = thirdLocationRequestDetail.FromLocationCode;
detail.RecommendFromLocationErpCode = "";
detail.RecommendQty = thirdLocationRequestDetail.Qty;
detail.ToLocationCode = thirdLocationRequestDetail.ToLocationCode;
detail.ToLocationErpCode = thirdLocationRequestDetail.ToLocationErpCode;
detail.ToLocationArea = thirdLocationRequestDetail.ToLocationArea;
detail.ToWarehouseCode = thirdLocationRequestDetail.ToWarehouseCode;
var transportLocation = await _locationAppService.GetFirstByTypeAsync(EnumLocationType.TRANSPORT).ConfigureAwait(false);
if (transportLocation != null)
{
detail.FromLocationCode = transportLocation.Code;
detail.FromLocationArea = transportLocation.AreaCode;
}
else
{
throw new UserFriendlyException($"未获取到在途库代码");
}
await Task.CompletedTask.ConfigureAwait(false);
return detail;
}
#endregion
} }

182
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Transactions/ThirdLocationNoteEventHandler.cs

@ -1,25 +1,20 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Volo.Abp.Uow;
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.Event; using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Inventory.Application.Contracts;
using Win_in.Sfs.Wms.Store.Domain; using Win_in.Sfs.Wms.Store.Domain;
using Win_in.Sfs.Wms.Store.Event.Transaction; using Win_in.Sfs.Wms.Store.Event.Transaction;
using static ClosedXML.Excel.XLPredefinedFormat;
namespace Win_in.Sfs.Wms.Store.Event.Transactions; namespace Win_in.Sfs.Wms.Store.Event.Transactions;
public class ThirdLocationNoteEventHandler public class ThirdLocationNoteEventHandler
: StoreInventoryEventHandlerBase : StoreInventoryEventHandlerBase
, ILocalEventHandler<SfsCreatedEntityEventData<ThirdLocationNote>> , ILocalEventHandler<SfsCreatedEntityEventData<ThirdLocationNote>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<ThirdLocationNote>>> , ILocalEventHandler<SfsCreatedEntityEventData<List<ThirdLocationNote>>>
, ILocalEventHandler<SfsConfirmedEntityEventData<ThirdLocationNote>> , ILocalEventHandler<SfsConfirmedEntityEventData<ThirdLocationNote>>
{ {
private const EnumTransType TransType = EnumTransType.TransferLib; private const EnumTransType TransType = EnumTransType.TransferLib;
@ -28,181 +23,26 @@ public class ThirdLocationNoteEventHandler
private readonly IThirdLocationRequestRepository _ThirdLocationRequestRepository; private readonly IThirdLocationRequestRepository _ThirdLocationRequestRepository;
public ThirdLocationNoteEventHandler(ILocationAppService locationAppService public ThirdLocationNoteEventHandler(ILocationAppService locationAppService
, IThirdLocationRequestRepository ThirdLocationRequestRepository, IThirdLocationRequestManager thirdLocationRequestManager) , IThirdLocationRequestRepository ThirdLocationRequestRepository,
IThirdLocationRequestManager thirdLocationRequestManager)
{ {
_locationAppService = locationAppService; _locationAppService = locationAppService;
_thirdLocationRequestManager = thirdLocationRequestManager; _thirdLocationRequestManager = thirdLocationRequestManager;
_ThirdLocationRequestRepository = ThirdLocationRequestRepository; _ThirdLocationRequestRepository = ThirdLocationRequestRepository;
} }
[UnitOfWork] public Task HandleEventAsync(SfsCreatedEntityEventData<ThirdLocationNote> eventData)
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<ThirdLocationNote> eventData)
{ {
var entity = eventData.Entity; throw new NotImplementedException();
var transferLogs = new List<TransferLogEditInput>();
var route = EnumTransferRoute.OnTheWayToDestination;
transferLogs.AddRange(await BuildTransferLogsAsync(entity, route).ConfigureAwait(false));
await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
if (!string.IsNullOrEmpty(entity.RequestNumber))
{
//var thirdLocationRequest = await _thirdLocationRequestManager.GetByNumberAsync(entity.RequestNumber).ConfigureAwait(false);
var requestEntities = await _ThirdLocationRequestRepository.GetListAsync(p => p.Number == entity.RequestNumber, "Number", true).ConfigureAwait(false);
if(requestEntities.Count>0 && entity.Details.Count>0)
{
bool isDone = false;
foreach(var item in requestEntities[0].Details)
{
var noteDetail = entity.Details.FirstOrDefault(p => p.ItemCode == item.ItemCode);
if(noteDetail != null)
{
item.ReceivedQty += noteDetail.HandledQty;
}
}
foreach(var item in requestEntities[0].Details)
{
if(item.IssuedQty == item.ReceivedQty)
{
isDone = true;
}
else
{
isDone = false;
}
}
if (isDone)
{
await _thirdLocationRequestManager.CompleteAsync(requestEntities[0]).ConfigureAwait(false);
}
else
{
requestEntities[0].RequestStatus = EnumRequestStatus.Partial;
await _thirdLocationRequestManager.UpdateAsync(requestEntities[0]).ConfigureAwait(false);
}
}
}
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<ThirdLocationNote>> eventData)
{
var entities = eventData.Entity;
var transferLogs = new List<TransferLogEditInput>();
//如果要做库存事务汇总,可以修改此处
foreach (var thirdLocationNote in entities)
{
var route = EnumTransferRoute.OnTheWayToDestination;
transferLogs.AddRange(await BuildTransferLogsAsync(thirdLocationNote, route).ConfigureAwait(false));
}
await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
}
[UnitOfWork]
public virtual async Task HandleEventAsync(SfsConfirmedEntityEventData<ThirdLocationNote> eventData)
{
var entity = eventData.Entity;
var inputList = await BuildTransferLogsAsync(entity, EnumTransferRoute.OnTheWayToDestination).ConfigureAwait(false);
await AddTransferLogsAsync(inputList).ConfigureAwait(false);
}
private async Task AddTransferLogsAsync(List<TransferLogEditInput> inputList)
{
var transferLogs = new List<TransferLogEditInput>();
transferLogs.AddRange(inputList);
await TransferLogAppService.AddManyAsync(transferLogs).ConfigureAwait(false);
} }
private async Task<List<TransferLogEditInput>> BuildTransferLogsAsync(ThirdLocationNote thirdLocationNote, EnumTransferRoute route) public Task HandleEventAsync(SfsCreatedEntityEventData<List<ThirdLocationNote>> eventData)
{ {
var transferLogs = new List<TransferLogEditInput>(); throw new NotImplementedException();
foreach (var detail in thirdLocationNote.Details.Where(detail => detail.Qty != 0))
{
var transferLog = ObjectMapper.Map<ThirdLocationNoteDetail, TransferLogEditInput>(detail);
LocationDTO fromLocationDTO = null;
LocationDTO toLocationDTO = null;
if (thirdLocationNote.UseOnTheWayLocation)
{
var location = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
switch (route)
{
case EnumTransferRoute.SourceToOnTheWay:
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
break;
case EnumTransferRoute.OnTheWayToDestination:
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.OnTheWayLocationCode).ConfigureAwait(false);
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
await RemovePackingCodeAndContainerCodeAndLotAsync(transferLog).ConfigureAwait(false);
break;
case EnumTransferRoute.SourceToDestination:
default:
throw new ArgumentOutOfRangeException(nameof(route), route, null);
}
}
else
{
fromLocationDTO = await _locationAppService.GetByCodeAsync(detail.FromLocationCode).ConfigureAwait(false);
toLocationDTO = await _locationAppService.GetByCodeAsync(detail.ToLocationCode).ConfigureAwait(false);
}
transferLog.FromLocationCode = fromLocationDTO.Code;
transferLog.FromLocationArea = fromLocationDTO.AreaCode;
transferLog.FromLocationErpCode = fromLocationDTO.ErpLocationCode;
transferLog.FromLocationGroup = fromLocationDTO.LocationGroupCode;
transferLog.ToLocationCode = toLocationDTO.Code;
transferLog.ToLocationArea = toLocationDTO.AreaCode;
transferLog.ToLocationErpCode = toLocationDTO.ErpLocationCode;
transferLog.ToLocationGroup = toLocationDTO.LocationGroupCode;
transferLog.TransSubType = Enum.Parse<EnumTransSubType>(thirdLocationNote.RequestType);
transferLog.TransType = TransType;
transferLog.DocNumber = thirdLocationNote.Number;
transferLog.JobNumber = thirdLocationNote.JobNumber;
transferLog.FromPackingCode = "";
transferLog.FromLot = "";
transferLog.ToPackingCode = "";
transferLog.ToLot = "";
transferLog.FromStatus = EnumInventoryStatus.OK;
transferLog.ToStatus = EnumInventoryStatus.OK;
transferLogs.Add(transferLog);
}
return transferLogs;
} }
private async Task RemovePackingCodeAndContainerCodeAndLotAsync(TransferLogEditInput transferLogCreateInput) public Task HandleEventAsync(SfsConfirmedEntityEventData<ThirdLocationNote> eventData)
{ {
transferLogCreateInput.ToPackingCode = ""; throw new NotImplementedException();
transferLogCreateInput.ToLot = "";
transferLogCreateInput.ToContainerCode = "";
transferLogCreateInput.FromPackingCode = "";
transferLogCreateInput.FromLot = "";
transferLogCreateInput.FromContainerCode = "";
} }
} }

Loading…
Cancel
Save