Browse Source

修改 库移 修改 kiting

dev_DY_CC
郑勃旭 12 months ago
parent
commit
6477e1a2f1
  1. 1
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs
  2. 2
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Stores/IssueRequest/KittingRequestController.cs
  3. 35
      be/Modules/BaseData/src/Win_in.Sfs.Basedata.Application/PositionCodes/PositionCodeAppService.cs
  4. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Chassis/IChassisAppService.cs
  5. 9
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/ChassisOperationSequence/IChassisOperationSequenceAppService.cs
  6. 30
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Chassis/ChassisAppService.cs
  7. 41
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/ChassisOperationSequence/ChassisOperationSequenceAppService.cs
  8. 26
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs
  9. 26
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/TransferLibJobs/TransferLibJobAppService.cs
  10. 75
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs
  11. 5
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobManager.cs
  12. 2
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/TransferLibJobs/TransferLibJobManager.cs
  13. 3
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/KittingIssueJobEventHandler.cs

1
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Jobs/TransferLibJobController.cs

@ -72,7 +72,6 @@ public class TransferLibJobController : AbpController
/// <param name="jobDTO"></param> /// <param name="jobDTO"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("complete/{id}")] [HttpPost("complete/{id}")]
public virtual async Task<TransferLibJobDTO> CompleteAsync(Guid id, TransferLibJobDTO jobDTO) public virtual async Task<TransferLibJobDTO> CompleteAsync(Guid id, TransferLibJobDTO jobDTO)
{ {
var entity = await _transferLibJobAppService.CompleteAsync(id, jobDTO).ConfigureAwait(false); var entity = await _transferLibJobAppService.CompleteAsync(id, jobDTO).ConfigureAwait(false);

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

@ -97,7 +97,7 @@ public class KittingRequestController : AbpController
/// <summary> /// <summary>
/// 根据Job Number 获取盘点任务列表 /// 根据Job Number 获取盘点任务列表
/// </summary> /// </summary>
/// <param name="jobNumber"></param> /// <param name="requestNumber"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet("by-number/{requestNumber}")] [HttpGet("by-number/{requestNumber}")]
public virtual async Task<ActionResult<KittingIssueRequestDTO>> GetByNumberAsync(string requestNumber) public virtual async Task<ActionResult<KittingIssueRequestDTO>> GetByNumberAsync(string requestNumber)

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

@ -75,7 +75,6 @@ public class PositionCodeAppService
input.PartName = itemBasic.Name; input.PartName = itemBasic.Name;
input.PartDesc = itemBasic.Desc1; input.PartDesc = itemBasic.Desc1;
input.BasicUom = itemBasic.BasicUom; input.BasicUom = itemBasic.BasicUom;
input.StdPackQty = itemBasic.StdPackQty;
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false); var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在"); Check.NotNull(location, "库位代码", $"库位 {input.LocationCode} 不存在");
@ -173,23 +172,23 @@ public class PositionCodeAppService
private async Task CheckPositionCodeInputAsync(PositionCodeImportInput input, List<ValidationResult> validationRresult) private async Task CheckPositionCodeInputAsync(PositionCodeImportInput input, List<ValidationResult> validationRresult)
{ {
var itemEntity = await _repository.FirstOrDefaultAsync(p => p.PartCode == input.PartCode && p.Code != input.Code).ConfigureAwait(false); //var itemEntity = await _repository.FirstOrDefaultAsync(p => p.PartCode == input.PartCode && p.Code != input.Code).ConfigureAwait(false);
if (itemEntity != null) //if (itemEntity != null)
{ //{
validationRresult.Add(new ValidationResult($"物品代码{input.PartCode}已存在", new string[] { "物品代码" })); // validationRresult.Add(new ValidationResult($"物品代码{input.PartCode}已存在", new string[] { "物品代码" }));
} //}
var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false); //var itemBasic = await ItemBasicAppService.GetByCodeAsync(input.PartCode).ConfigureAwait(false);
//如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验 ////如果类型选择为原料,校验物料号类型必须为原料,器具、KItting 的不用加校验
if (input.Type == EnumRecommendType.RAW && itemBasic.Type != "10C02") //if (input.Type == EnumRecommendType.RAW && itemBasic.Type != "10C02")
{ //{
validationRresult.Add(new ValidationResult($"物品代码{input.PartCode} 物料号类型必须为原料", new string[] { "物料号类型" })); // validationRresult.Add(new ValidationResult($"物品代码{input.PartCode} 物料号类型必须为原料", new string[] { "物料号类型" }));
} //}
var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false); //var location = await LocationAppService.GetByCodeAsync(input.LocationCode).ConfigureAwait(false);
//如果类型选择为原料,库位的类型必须为原料库位 ////如果类型选择为原料,库位的类型必须为原料库位
if (input.Type==EnumRecommendType.RAW && location.Type != EnumLocationType.RAW) //if (input.Type==EnumRecommendType.RAW && location.Type != EnumLocationType.RAW)
{ //{
validationRresult.Add(new ValidationResult($"库位代码{input.LocationCode} 库位的类型必须为原料库位", new string[] { "库位类型" })); // validationRresult.Add(new ValidationResult($"库位代码{input.LocationCode} 库位的类型必须为原料库位", new string[] { "库位类型" }));
} //}
} }
protected override async Task ValidateImportModelAsync(PositionCodeImportInput importInput, List<ValidationResult> validationRresult) protected override async Task ValidateImportModelAsync(PositionCodeImportInput importInput, List<ValidationResult> validationRresult)

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Chassis/IChassisAppService.cs

@ -12,10 +12,5 @@ public interface IChassisAppService
ISfsCheckStatusAppService ISfsCheckStatusAppService
, ISfsUpsertAppService<ChassisEditInput> , ISfsUpsertAppService<ChassisEditInput>
{ {
/// <summary>
/// 平板或手持使用 按照底盘返回排序大于参数中20个的
/// </summary>
/// <returns></returns>
Task<PagedResultDto<ChassisDTO>> GetListWithNextCountAsync(long sortNumber,int count,
CancellationToken cancellationToken = default);
} }

9
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/ChassisOperationSequence/IChassisOperationSequenceAppService.cs

@ -1,4 +1,6 @@
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Shared.Application.Contracts; using Win_in.Sfs.Shared.Application.Contracts;
namespace Win_in.Sfs.Wms.Store.Application.Contracts; namespace Win_in.Sfs.Wms.Store.Application.Contracts;
@ -18,4 +20,11 @@ public interface IChassisOperationSequenceAppService
/// <param name="chassisNumber"></param> /// <param name="chassisNumber"></param>
/// <returns></returns> /// <returns></returns>
Task UpdateChassisSortNumberByKittingCodeAsync(string kittingCode, long newChassisSortNumber,string chassisNumber); Task UpdateChassisSortNumberByKittingCodeAsync(string kittingCode, long newChassisSortNumber,string chassisNumber);
/// <summary>
/// 平板或手持使用 按照底盘返回排序大于参数中20个的
/// </summary>
/// <returns></returns>
Task<PagedResultDto<ChassisDTO>> GetListWithNextCountAsync(int count, string kittingCode,
CancellationToken cancellationToken = default);
} }

30
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Chassis/ChassisAppService.cs

@ -1,11 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Store.Application.Contracts; using Win_in.Sfs.Store.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;
@ -74,32 +71,5 @@ public class ChassisAppService
throw new NotImplementedException(); throw new NotImplementedException();
} }
/// <summary>
/// 平板或手持使用 按照底盘返回排序大于参数中20个的
/// </summary>
/// <returns></returns>
[HttpPost("get-list-with-next-count")]
public async Task<PagedResultDto<ChassisDTO>> GetListWithNextCountAsync(long sortNumber,int count,
CancellationToken cancellationToken = default)
{
var requestInput = new SfsStoreRequestInputBase
{
MaxResultCount = count,
SkipCount = 0,
Sorting = $"{nameof(Chassis.SortNumber)} DESC",
Condition = new Condition
{
Filters = new List<Filter> { new(nameof(Chassis.SortNumber), sortNumber.ToString(), ">=") }
}
};
var expression = requestInput.Condition.Filters?.Count > 0
? requestInput.Condition.Filters.ToLambda<Chassis>()
: p => true;
return await GetPagedListAsync(expression, requestInput.SkipCount, requestInput.MaxResultCount,
requestInput.Sorting, false, cancellationToken).ConfigureAwait(false);
}
#endregion #endregion
} }

41
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/ChassisOperationSequence/ChassisOperationSequenceAppService.cs

@ -1,8 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Application.Dtos;
using Win_in.Sfs.Shared.Domain;
using Win_in.Sfs.Store.Application.Contracts; using Win_in.Sfs.Store.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;
@ -21,10 +24,10 @@ public class ChassisOperationSequenceAppService
{ {
private new readonly IChassisOperationSequenceRepository _repository; private new readonly IChassisOperationSequenceRepository _repository;
private readonly IChassisOperationSequenceManager _manager; private readonly IChassisOperationSequenceManager _manager;
private readonly IChassisAppService _chassisAppService;
public ChassisOperationSequenceAppService( public ChassisOperationSequenceAppService(
IChassisOperationSequenceRepository repository, IChassisOperationSequenceManager manager IChassisOperationSequenceRepository repository, IChassisOperationSequenceManager manager, IChassisAppService chassisAppService) : base(repository)
) : base(repository)
{ {
base.CreatePolicyName = ChassisOperationSequencePermissions.Create; base.CreatePolicyName = ChassisOperationSequencePermissions.Create;
base.UpdatePolicyName = ChassisOperationSequencePermissions.Update; base.UpdatePolicyName = ChassisOperationSequencePermissions.Update;
@ -32,6 +35,7 @@ public class ChassisOperationSequenceAppService
_repository = repository; _repository = repository;
_manager = manager; _manager = manager;
_chassisAppService = chassisAppService;
} }
/// <summary> /// <summary>
@ -39,6 +43,7 @@ public class ChassisOperationSequenceAppService
/// </summary> /// </summary>
/// <param name="kittingCode"></param> /// <param name="kittingCode"></param>
/// <param name="newChassisSortNumber"></param> /// <param name="newChassisSortNumber"></param>
/// <param name="chassisNumber"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("update-chassis-sort-number-by-kitting-code")] [HttpPost("update-chassis-sort-number-by-kitting-code")]
public async Task UpdateChassisSortNumberByKittingCodeAsync(string kittingCode, long newChassisSortNumber, string chassisNumber) public async Task UpdateChassisSortNumberByKittingCodeAsync(string kittingCode, long newChassisSortNumber, string chassisNumber)
@ -62,6 +67,38 @@ public class ChassisOperationSequenceAppService
} }
} }
/// <summary>
/// 平板或手持使用 按照底盘返回排序大于参数中20个的
/// </summary>
/// <returns></returns>
[HttpPost("get-list-with-next-count")]
public async Task<PagedResultDto<ChassisDTO>> GetListWithNextCountAsync(int count, string kittingCode,
CancellationToken cancellationToken = default)
{
var chassisOperationSequence=await _repository.FindAsync(p => p.KittingCode == kittingCode).ConfigureAwait(false);
long sortNumber = 1;
if (chassisOperationSequence != null)
{
sortNumber = chassisOperationSequence.ChassisSortNumber;
}
var requestInput = new SfsStoreRequestInputBase
{
MaxResultCount = count,
SkipCount = 0,
Sorting = $"{nameof(Chassis.SortNumber)} DESC",
Condition = new Condition
{
Filters = new List<Filter>
{
new(nameof(Chassis.SortNumber), sortNumber.ToString(), ">="),
}
}
};
return await _chassisAppService.GetPagedListByFilterAsync(requestInput,false, cancellationToken).ConfigureAwait(false);
}
#region 无用 #region 无用
[NonAction] [NonAction]

26
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs

@ -2,9 +2,11 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.ObjectMapping;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; using Win_in.Sfs.Shared.Domain.Shared.Enums.Store;
@ -78,7 +80,6 @@ public class KittingIssueJobAppService
await _kittingIssueJobManager.CancelAsync(injectionJob).ConfigureAwait(false); await _kittingIssueJobManager.CancelAsync(injectionJob).ConfigureAwait(false);
} }
[HttpPost("cancel-by-request/{requestNumber}")] [HttpPost("cancel-by-request/{requestNumber}")]
public virtual async Task CancelByMaterialRequestAsync(string requestNumber) public virtual async Task CancelByMaterialRequestAsync(string requestNumber)
{ {
@ -161,20 +162,24 @@ public class KittingIssueJobAppService
var kittingIssueNoteEditInput = await BuildKittingIssueNoteAsync(kittingIssueJobDto).ConfigureAwait(false); var kittingIssueNoteEditInput = await BuildKittingIssueNoteAsync(kittingIssueJobDto).ConfigureAwait(false);
await _kittingIssueNoteAppService.CreateAsync(kittingIssueNoteEditInput).ConfigureAwait(false); await _kittingIssueNoteAppService.CreateAsync(kittingIssueNoteEditInput).ConfigureAwait(false);
kittingIssueJobDto = ObjectMapper.Map<KittingIssueJob, KittingIssueJobDTO>(kittingIssueJob); var issueJobDetail=ObjectMapper.Map<KittingIssueJobDetailDTO, KittingIssueJobDetail>(issueJobDetailDto);
issueJobDetail.HandledToQty += issueJobDetailDto.HandledToQty;
kittingIssueJob.Details = new EditableList<KittingIssueJobDetail>() { issueJobDetail };
if (kittingIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成 if (kittingIssueJob.EnumIssueSendType == EnumIssueSendType.BoxQtyType) //按箱叫料 因为任务只有1箱 所以可以直接完成
{ {
await UpdateJobStatusDoneAsync(kittingIssueJob, issueJobDetailDto).ConfigureAwait(false); await UpdateRequestAndjobStatusDoneAsync(kittingIssueJob, issueJobDetailDto).ConfigureAwait(false);
} }
else else
{ {
var detail = kittingIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id); var detail = kittingIssueJob.Details.First(p => p.Id == issueJobDetailDto.Id);
if (issueJobDetailDto.HandledToQty >= detail.RequestQty) if (issueJobDetail.HandledToQty >= detail.RequestQty)
{ {
await UpdateJobStatusDoneAsync(kittingIssueJob, issueJobDetailDto).ConfigureAwait(false); await UpdateRequestAndjobStatusDoneAsync(kittingIssueJob, issueJobDetailDto).ConfigureAwait(false);
} }
} }
await _repository.UpdateAsync(kittingIssueJob).ConfigureAwait(false);
} }
#region 私有 #region 私有
@ -263,14 +268,21 @@ public class KittingIssueJobAppService
} }
} }
private async Task UpdateJobStatusDoneAsync(KittingIssueJob kittingIssueJob, /// <summary>
/// 修改当前任务状态 和 该任务的请求状态
/// </summary>
/// <param name="kittingIssueJob"></param>
/// <param name="kittingIssueJobDetailDto"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private async Task UpdateRequestAndjobStatusDoneAsync(KittingIssueJob kittingIssueJob,
KittingIssueJobDetailDTO kittingIssueJobDetailDto) KittingIssueJobDetailDTO kittingIssueJobDetailDto)
{ {
if (kittingIssueJob.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None if (kittingIssueJob.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None
or EnumJobStatus.Done) //需要考虑下 多次提交的问题 所以不判断 进行中 or EnumJobStatus.Done) //需要考虑下 多次提交的问题 所以不判断 进行中
{ {
throw new UserFriendlyException( throw new UserFriendlyException(
$"任务状态错误:编号为【{kittingIssueJob.Number}】的任务已经【{kittingIssueJob.JobStatus.GetDisplayName()}】"); $"任务状态错误:编号为【{kittingIssueJob.Number}】的任务状态为【{kittingIssueJob.JobStatus.GetDisplayName()}】");
} }
kittingIssueJob.JobStatus = EnumJobStatus.Done; kittingIssueJob.JobStatus = EnumJobStatus.Done;

26
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/TransferLibJobs/TransferLibJobAppService.cs

@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Uow; using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.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; using Win_in.Sfs.Wms.Store.Domain.Shared;
@ -21,11 +22,13 @@ public class TransferLibJobAppService
ITransferLibJobAppService ITransferLibJobAppService
{ {
private readonly IServiceProvider _serviceProvider; private readonly IServiceProvider _serviceProvider;
private readonly ILocationAppService _locationAppService;
public TransferLibJobAppService( public TransferLibJobAppService(
ITransferLibJobRepository repository, ITransferLibJobManager TransferLibJobManager, IServiceProvider serviceProvider) : base(repository, TransferLibJobManager) ITransferLibJobRepository repository, ITransferLibJobManager TransferLibJobManager, IServiceProvider serviceProvider, ILocationAppService locationAppService) : base(repository, TransferLibJobManager)
{ {
_serviceProvider = serviceProvider; _serviceProvider = serviceProvider;
_locationAppService = locationAppService;
} }
/// <summary> /// <summary>
@ -172,6 +175,27 @@ public class TransferLibJobAppService
} }
#endregion #endregion
foreach (var detail in dto.Details)
{
detail.HandledFromContainerCode = string.Empty;
detail.HandledToContainerCode = string.Empty;
var fromLocationDto=await _locationAppService.GetByCodeAsync(detail.HandledFromLocationCode).ConfigureAwait(false);
var toLocationDto=await _locationAppService.GetByCodeAsync(detail.HandledToLocationCode).ConfigureAwait(false);
detail.HandledFromLocationArea = fromLocationDto.AreaCode;
detail.HandledFromLocationCode = fromLocationDto.Code;
detail.HandledFromLocationErpCode = fromLocationDto.ErpLocationCode;
detail.HandledFromLocationGroup = fromLocationDto.LocationGroupCode;
detail.HandledFromWarehouseCode = fromLocationDto.WarehouseCode;
detail.HandledToLocationArea = toLocationDto.AreaCode;
detail.HandledToLocationCode = toLocationDto.Code ;
detail.HandledToLocationErpCode = toLocationDto.ErpLocationCode;
detail.HandledToLocationGroup = toLocationDto.LocationGroupCode;
detail.HandledToWarehouseCode = toLocationDto.WarehouseCode;
}
var ret = await base.CompleteAsync(id, dto).ConfigureAwait(false); var ret = await base.CompleteAsync(id, dto).ConfigureAwait(false);
if (ret != null) if (ret != null)
{ {

75
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NUglify.Helpers; using NUglify.Helpers;
@ -139,14 +140,38 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
return kittingIssueRequestDto; return kittingIssueRequestDto;
} }
public override async Task<KittingIssueRequestDTO> CancelAsync(Guid id)
{
var request=await _repository.GetAsync(id).ConfigureAwait(false);
var list=await _kittingIssueJobAppService.GetByRequestNumberAsync(request.Number).ConfigureAwait(false);
if (list.Any())
{
foreach (var kittingIssueJobDto in list)
{
if (kittingIssueJobDto.JobStatus == EnumJobStatus.Open ||
kittingIssueJobDto.JobStatus == EnumJobStatus.Partial ||
kittingIssueJobDto.JobStatus == EnumJobStatus.Doing ||
kittingIssueJobDto.JobStatus == EnumJobStatus.Wait)
{
await _kittingIssueJobAppService.CancelAsync(kittingIssueJobDto.Id).ConfigureAwait(false);
}
}
}
return await base.CancelAsync(id).ConfigureAwait(false);
}
[HttpPost("UpdateStatusCompleted")] [HttpPost("UpdateStatusCompleted")]
public async Task UpdateStatusCompletedAsync(string number) public async Task UpdateStatusCompletedAsync(string number)
{ {
var kittingIssueRequest=await _repository.FindAsync(p=>p.Number== number).ConfigureAwait(false); var kittingIssueRequest=await _repository.FindAsync(p=>p.Number== number).ConfigureAwait(false);
await UpdateKittingIssueRequestDetailQtyAsync(kittingIssueRequest,new EditableList<KittingIssueJobDTO>()).ConfigureAwait(false);
var kittingIssueJobDtos=await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number).ConfigureAwait(false); var kittingIssueJobDtos=await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number).ConfigureAwait(false);
if (!kittingIssueJobDtos.Any(p => if (kittingIssueJobDtos.Any(p =>
p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Doing || p.JobStatus == EnumJobStatus.Open || p.JobStatus == EnumJobStatus.Doing ||
p.JobStatus == EnumJobStatus.Partial) ) p.JobStatus == EnumJobStatus.Partial) )
{ {
@ -176,6 +201,54 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed; kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
} }
/// <summary>
/// 修改请求的 已发 已收数量
/// </summary>
/// <param name="kittingIssueRequest"></param>
/// <param name="addKittingIssueJobDtos"></param>
/// <returns></returns>
private async Task UpdateKittingIssueRequestDetailQtyAsync(KittingIssueRequest kittingIssueRequest,
List<KittingIssueJobDTO> addKittingIssueJobDtos)
{
//原有任务
var existKittingIssueJobDtos = await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number)
.ConfigureAwait(false);
//新增的任务和已有的任务总和
var allKittingIssueJobDtos = new List<KittingIssueJobDTO>();
allKittingIssueJobDtos.AddRange(addKittingIssueJobDtos);
allKittingIssueJobDtos.AddRange(existKittingIssueJobDtos);
var groupByItemCodeLocationCode = kittingIssueRequest.Details.GroupBy(p =>
new { p.ItemCode, p.ToLocationCode });
foreach (var group in groupByItemCodeLocationCode)
{
foreach (var requestDetail in group)
{
//所有已发数量
decimal allIssuedQty = 0;
//所有已发数量
decimal allReceivedQty = 0;
foreach (var allKittingIssueJobDto in allKittingIssueJobDtos)
{
var jobDetailDtos = allKittingIssueJobDto.Details.Where(p =>
p.ItemCode == group.Key.ItemCode && p.RequestLocationCode == group.Key.ToLocationCode);
//所有已发数量
allIssuedQty += jobDetailDtos.Sum(p => p.RequestQty);
//所有已发数量
allReceivedQty += jobDetailDtos.Sum(p => p.HandledToQty);
}
requestDetail.IssuedQty += allIssuedQty;
requestDetail.ReceivedQty += allReceivedQty;
}
}
await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false);
}
[HttpPost("IsHasNewJob")] [HttpPost("IsHasNewJob")]
public async Task<string> IsHasNewJobAsync(string requestNumber,List<string> jobNumber) public async Task<string> IsHasNewJobAsync(string requestNumber,List<string> jobNumber)
{ {

5
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobManager.cs

@ -5,6 +5,7 @@ using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Users; using Volo.Abp.Users;
using Volo.Abp.Validation; using Volo.Abp.Validation;
using Win_in.Sfs.Shared.Domain.Shared; using Win_in.Sfs.Shared.Domain.Shared;
@ -18,7 +19,9 @@ public class KittingIssueJobManager : SfsJobManagerBase<KittingIssueJob, Kitting
private readonly IExpectOutAppService _expectOutAppService; private readonly IExpectOutAppService _expectOutAppService;
public KittingIssueJobManager( public KittingIssueJobManager(
IKittingIssueJobRepository repository, IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService) : base(repository) IKittingIssueJobRepository repository,
IBalanceAppService balanceAppService,
IExpectOutAppService expectOutAppService) : base(repository)
{ {
_balanceAppService = balanceAppService; _balanceAppService = balanceAppService;
_expectOutAppService = expectOutAppService; _expectOutAppService = expectOutAppService;

2
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Domain/Jobs/TransferLibJobs/TransferLibJobManager.cs

@ -50,7 +50,7 @@ public class TransferLibJobManager : SfsJobManagerBase<TransferLibJob, TransferL
entity.RequestNumber = input.RequestNumber; entity.RequestNumber = input.RequestNumber;
entity.JobNumber = input.JobNumber; entity.JobNumber = input.JobNumber;
entity.Type = input.Type; entity.Type = input.Type;
entity.UseOnTheWayLocation = input.UseOnTheWayLocation; entity.UseOnTheWayLocation = false;
entity.ConfirmTime = input.ConfirmTime; entity.ConfirmTime = input.ConfirmTime;
entity.CreationTime = input.CreationTime; entity.CreationTime = input.CreationTime;
entity.CreatorId = input.CreatorId; entity.CreatorId = input.CreatorId;

3
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Jobs/KittingIssueJobEventHandler.cs

@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Castle.Components.DictionaryAdapter;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Volo.Abp.Uow; using Volo.Abp.Uow;
using Win_in.Sfs.Basedata.Application.Contracts; using Win_in.Sfs.Basedata.Application.Contracts;
@ -183,6 +184,8 @@ public class KittingIssueJobEventHandler :
detailInput.RecommendToLocationErpCode = detail.RecommendToLocationErpCode; detailInput.RecommendToLocationErpCode = detail.RecommendToLocationErpCode;
detailInput.RecommendToWarehouseCode = detail.RecommendToWarehouseCode; detailInput.RecommendToWarehouseCode = detail.RecommendToWarehouseCode;
input.Details = new EditableList<TransferLibRequestDetailInput>() { detailInput };
await _transferLibRequestAppService.CreateAsync(input).ConfigureAwait(false); await _transferLibRequestAppService.CreateAsync(input).ConfigureAwait(false);
} }
} }

Loading…
Cancel
Save