Browse Source

修改 预计出 kitting 各种状态

dev_DY_CC
郑勃旭 12 months ago
parent
commit
aee4578ce3
  1. 23
      be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Inventories/BalanceController.cs
  2. 2
      be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs
  3. 7
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/IKittingIssueJobAppService.cs
  4. 327
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/IssueJobs/KittingIssueJobs/KittingIssueJobAppService.cs
  5. 69
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Requests/IssuelRequests/KittingIssueRequests/KittingIssueRequestAppService.cs
  6. 4
      build/src/docker/publish/conf/settings/appsettings.Development.json

23
be/Hosts/WmsPda.Host/Win_in.Sfs.Wms.Pda.Host/Controllers/Inventories/BalanceController.cs

@ -492,21 +492,36 @@ public class BalanceController : AbpController
/// </summary> /// </summary>
/// <param name="itemCode"></param> /// <param name="itemCode"></param>
/// <param name="productLine"></param> /// <param name="productLine"></param>
/// <param name="isPackingCode"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost("get-recommend-balance")] [HttpPost("get-recommend-balance")]
public async Task<List<SortBalance>> GetRecommendBalance(string itemCode,string productLine) public async Task<List<SortBalance>> GetRecommendBalance(string itemCode,string productLine,bool isPackingCode)
{ {
var productionLineItemDto = await _productionLineItemAppService.GetByProductLineCodeAndItemCodeAsync(productLine, itemCode).ConfigureAwait(false); var productionLineItemDto = await _productionLineItemAppService.GetByProductLineCodeAndItemCodeAsync(productLine, itemCode).ConfigureAwait(false);
var locationList = new List<string>();
if (productionLineItemDto.RawLocationCodeListJson != null&&
productionLineItemDto.RawLocationCodeListJson.Length > 0)
{
var temp=JsonSerializer.Deserialize<List<string>>(productionLineItemDto.RawLocationCodeListJson);
locationList.AddRange(temp);
}
if (productionLineItemDto.ProductLocationCodeListJson != null &&
productionLineItemDto.ProductLocationCodeListJson.Length > 0)
{
var temp = JsonSerializer.Deserialize<List<string>>(productionLineItemDto.ProductLocationCodeListJson);
locationList.AddRange(temp);
}
//获取可用库存 //获取可用库存
var input = new RecommendBalanceRequestInput var input = new RecommendBalanceRequestInput
{ {
ItemCode = itemCode, ItemCode = itemCode,
Qty = decimal.MaxValue, Qty = decimal.MaxValue,
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
Locations = Locations = locationList,
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.RawLocationCodeListJson), IsPackingCode = isPackingCode
IsPackingCode = true
}; };
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);

2
be/Modules/Inventory/src/Win_in.Sfs.Wms.Inventory.Application/ExpectOuts/ExpectOutAppService.cs

@ -64,7 +64,7 @@ public class ExpectOutAppService
if (expectOut != null) if (expectOut != null)
{ {
expectOut.Qty -= qty; expectOut.Qty -= qty;
if (expectOut.Qty == 0) if (expectOut.Qty <= 0)
{ {
await _repository.DeleteAsync(expectOut).ConfigureAwait(false); await _repository.DeleteAsync(expectOut).ConfigureAwait(false);
} }

7
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application.Contracts/Jobs/IssueJobs/KittingIssueJobs/IKittingIssueJobAppService.cs

@ -20,4 +20,11 @@ public interface IKittingIssueJobAppService
Task ExecuteDetailAsync(Guid masterId,Guid detailId, KittingIssueJobDetailDTO issueJobDetailDto); Task ExecuteDetailAsync(Guid masterId,Guid detailId, KittingIssueJobDetailDTO issueJobDetailDto);
Task CompleteAsync(Guid id); Task CompleteAsync(Guid id);
/// <summary>
/// 请求点了完成,任务全部都完成
/// </summary>
/// <param name="requestNumber"></param>
/// <returns></returns>
Task CompleteByRequestNumberAsync(string requestNumber);
} }

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

@ -99,13 +99,14 @@ public class KittingIssueJobAppService
[HttpPost("invalid")] [HttpPost("invalid")]
public override async Task CancelAsync(Guid id) public override async Task CancelAsync(Guid id)
{ {
var injectionJob = await _repository.GetAsync(id).ConfigureAwait(false); var kittingJob = await _repository.GetAsync(id).ConfigureAwait(false);
if (injectionJob == null) if (kittingJob == null)
{ {
throw new UserFriendlyException($"未找到ID为 {id} 的任务"); throw new UserFriendlyException($"未找到ID为 {id} 的任务");
} }
await _expectOutAppService.RemoveByNumberAsync(kittingJob.Number).ConfigureAwait(false);
await _kittingIssueJobManager.CancelAsync(injectionJob).ConfigureAwait(false); kittingJob.JobStatus = EnumJobStatus.Cancelled;
await _repository.UpdateAsync(kittingJob).ConfigureAwait(false);
} }
[HttpPost("cancel-by-request/{requestNumber}")] [HttpPost("cancel-by-request/{requestNumber}")]
@ -210,173 +211,52 @@ public class KittingIssueJobAppService
{ {
await UpdateRequestAndjobStatusDoneAsync(kittingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false); await UpdateRequestAndjobStatusDoneAsync(kittingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false);
} }
else
{
await RemoveExpectOutAsync(kittingIssueJob, issueJobDetailDto, issueJobDetailDto.HandledToQty).ConfigureAwait(false);
}
} }
await _repository.UpdateAsync(kittingIssueJob).ConfigureAwait(false); await _repository.UpdateAsync(kittingIssueJob).ConfigureAwait(false);
} }
[HttpPost("CompleteAsync/{id}")] /// <summary>
/// 完成任务
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("Complete/{id}")]
public async Task CompleteAsync(Guid id) public async Task CompleteAsync(Guid id)
{ {
var kittingIssueJob = await _repository.FindAsync(id).ConfigureAwait(false); var kittingIssueJob = await _repository.FindAsync(id).ConfigureAwait(false);
kittingIssueJob.JobStatus = EnumJobStatus.Done; kittingIssueJob.JobStatus = EnumJobStatus.Done;
await _expectOutAppService.RemoveByNumberAndInventoryAsync(kittingIssueJob.Number,
kittingIssueJob.Details.First().ItemCode,
kittingIssueJob.Details.First().HandledToLocationCode, kittingIssueJob.Details.First().HandledToPackingCode,
kittingIssueJob.Details.First().Status, kittingIssueJob.Details.First().HandledToLot,
kittingIssueJob.Details.First().HandledToQty).ConfigureAwait(false);
await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false); await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false);
await KittingIssueRequestAppService.UpdateStatusCompletedAsync(kittingIssueJob.KittingRequestNumber).ConfigureAwait(false);
await _repository.UpdateAsync(kittingIssueJob).ConfigureAwait(false); await _repository.UpdateAsync(kittingIssueJob).ConfigureAwait(false);
} }
#region 私有
/// <summary>
/// 创建补料记录实体
/// </summary>
/// <param name="kittingIssueJobDto"></param>
/// <returns></returns>
private async Task<KittingIssueNoteEditInput> BuildKittingIssueNoteAsync(KittingIssueJobDTO kittingIssueJobDto)
{
var kittingIssueNoteCreateInput =
ObjectMapper.Map<KittingIssueJobDTO, KittingIssueNoteEditInput>(kittingIssueJobDto);
kittingIssueNoteCreateInput.JobNumber = kittingIssueJobDto.Number;
await Task.CompletedTask.ConfigureAwait(false);
return kittingIssueNoteCreateInput;
}
/// <summary> /// <summary>
/// 判断是不是在最底层 如果不是则把状态变更为等待 并把库移推荐的From和To赋值 /// 请求点了完成,任务全部都完成
/// </summary> /// </summary>
/// <param name="input"></param> /// <param name="requestNumber"></param>
/// <returns></returns> /// <returns></returns>
private async Task CheckMinRowAndSetStatusAsync(KittingIssueJobEditInput input) [HttpPost("complete-by-request/{requestNumber}")]
public async Task CompleteByRequestNumberAsync(string requestNumber)
{ {
var jobDetailInputdetail = input.Details.FirstOrDefault(); var kittingIssueJobs = await _repository.GetListAsync(p=>p.KittingRequestNumber==requestNumber).ConfigureAwait(false);
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1) foreach (var kittingIssueJob in kittingIssueJobs)
{ {
input.JobStatus = EnumJobStatus.Wait;
}
else if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode == 1)
{
jobDetailInputdetail.TransferLibFromArriveDate = jobDetailInputdetail.RecommendFromArriveDate;
jobDetailInputdetail.TransferLibFromContainerCode = jobDetailInputdetail.RecommendFromContainerCode;
jobDetailInputdetail.TransferLibFromExpireDate = jobDetailInputdetail.RecommendFromExpireDate;
jobDetailInputdetail.TransferLibFromLocationArea = jobDetailInputdetail.RecommendFromLocationArea;
jobDetailInputdetail.TransferLibFromLocationCode = jobDetailInputdetail.RecommendFromLocationCode;
jobDetailInputdetail.TransferLibFromLocationErpCode = jobDetailInputdetail.RecommendFromLocationErpCode;
jobDetailInputdetail.TransferLibFromLocationGroup = jobDetailInputdetail.RecommendFromLocationGroup;
jobDetailInputdetail.TransferLibFromLot = jobDetailInputdetail.RecommendFromLot;
jobDetailInputdetail.TransferLibFromPackingCode = jobDetailInputdetail.RecommendFromPackingCode;
jobDetailInputdetail.TransferLibFromProduceDate = jobDetailInputdetail.RecommendFromProduceDate;
jobDetailInputdetail.TransferLibFromQty = jobDetailInputdetail.RecommendFromQty;
jobDetailInputdetail.TransferLibFromSupplierBatch = jobDetailInputdetail.RecommendFromSupplierBatch;
jobDetailInputdetail.TransferLibFromWarehouseCode = jobDetailInputdetail.RecommendFromWarehouseCode;
jobDetailInputdetail.TransferLibToArriveDate = jobDetailInputdetail.RecommendToArriveDate;
jobDetailInputdetail.TransferLibToContainerCode = jobDetailInputdetail.RecommendToContainerCode;
jobDetailInputdetail.TransferLibToExpireDate = jobDetailInputdetail.RecommendToExpireDate;
jobDetailInputdetail.TransferLibToLot = jobDetailInputdetail.RecommendToLot;
jobDetailInputdetail.TransferLibToPackingCode = jobDetailInputdetail.RecommendToPackingCode;
jobDetailInputdetail.TransferLibToProduceDate = jobDetailInputdetail.RecommendToProduceDate;
jobDetailInputdetail.TransferLibToQty = jobDetailInputdetail.RecommendToQty;
jobDetailInputdetail.TransferLibToSupplierBatch = jobDetailInputdetail.RecommendToSupplierBatch;
jobDetailInputdetail.TransferLibToWarehouseCode = jobDetailInputdetail.TransferLibFromWarehouseCode;
jobDetailInputdetail.TransferLibToLocationArea = jobDetailInputdetail.TransferLibFromLocationArea;
jobDetailInputdetail.TransferLibToLocationCode = jobDetailInputdetail.TransferLibFromLocationCode;
jobDetailInputdetail.TransferLibToLocationErpCode = jobDetailInputdetail.TransferLibFromLocationErpCode;
jobDetailInputdetail.TransferLibToLocationGroup = jobDetailInputdetail.TransferLibFromLocationGroup;
}
}
/// <summary>
/// 判断是不是在立体库
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private async Task CheckDimensionalStorehouseAsync(KittingIssueJobEditInput input)
{
var jobDetailInputdetail = input.Details.FirstOrDefault();
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{
input.JobStatus = EnumJobStatus.Wait;
}
}
/// <summary>
/// 判断是不是在立体库
/// </summary>
/// <param name="kittingIssueJobDto"></param>
/// <returns></returns>
private async Task CheckDimensionalStorehouseAsync(KittingIssueJobDTO kittingIssueJobDto)
{
var jobDetailInputdetail = kittingIssueJobDto.Details.FirstOrDefault();
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{
//TODO 立体库
var ret = await SyncIssueJobStereoAsync(new List<KittingIssueJobDTO> { kittingIssueJobDto }, loctionDto.Code).ConfigureAwait(false);
if (ret.Code != "1")
{
throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}");
}
}
}
/// <summary>
/// 修改当前任务状态 和 该任务的请求状态
/// </summary>
/// <param name="kittingIssueJob"></param>
/// <param name="kittingIssueJobDetailDto"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private async Task UpdateRequestAndjobStatusDoneAsync(KittingIssueJob kittingIssueJob,
KittingIssueJobDetailDTO kittingIssueJobDetailDto,decimal handledToQty)
{
if (kittingIssueJob.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None
or EnumJobStatus.Done) //需要考虑下 多次提交的问题 所以不判断 进行中
{
throw new UserFriendlyException(
$"任务状态错误:编号为【{kittingIssueJob.Number}】的任务状态为【{kittingIssueJob.JobStatus.GetDisplayName()}】");
}
kittingIssueJob.JobStatus = EnumJobStatus.Done; kittingIssueJob.JobStatus = EnumJobStatus.Done;
await _repository.UpdateAsync(kittingIssueJob).ConfigureAwait(false);
await _expectOutAppService.RemoveByNumberAndInventoryAsync(kittingIssueJob.Number, await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false);
kittingIssueJobDetailDto.ItemCode, }
kittingIssueJobDetailDto.HandledToLocationCode, kittingIssueJobDetailDto.HandledToPackingCode,
kittingIssueJobDetailDto.Status, kittingIssueJobDetailDto.HandledToLot,
handledToQty).ConfigureAwait(false);
//await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false);
await KittingIssueRequestAppService.UpdateStatusCompletedAsync(kittingIssueJob.KittingRequestNumber)
.ConfigureAwait(false);
await Task.CompletedTask.ConfigureAwait(false);
} }
#region 立库
/// <summary> /// <summary>
/// 立体库同步 /// 立体库同步
@ -437,7 +317,8 @@ public class KittingIssueJobAppService
IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, httpclient); IssueJobToRestoClient client = new IssueJobToRestoClient(_options.Value.Address, httpclient);
ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false); ret = await client.SyncIssueJobStereoAsync(main).ConfigureAwait(false);
} }
catch(Exception ex) { catch (Exception ex)
{
ret = new ReusltObject(); ret = new ReusltObject();
ret.Code = "2"; ret.Code = "2";
ret.Message = ex.Message; ret.Message = ex.Message;
@ -527,5 +408,157 @@ public class KittingIssueJobAppService
} }
return ret; return ret;
} }
#endregion
#region 私有
/// <summary>
/// 创建补料记录实体
/// </summary>
/// <param name="kittingIssueJobDto"></param>
/// <returns></returns>
private async Task<KittingIssueNoteEditInput> BuildKittingIssueNoteAsync(KittingIssueJobDTO kittingIssueJobDto)
{
var kittingIssueNoteCreateInput =
ObjectMapper.Map<KittingIssueJobDTO, KittingIssueNoteEditInput>(kittingIssueJobDto);
kittingIssueNoteCreateInput.JobNumber = kittingIssueJobDto.Number;
await Task.CompletedTask.ConfigureAwait(false);
return kittingIssueNoteCreateInput;
}
/// <summary>
/// 判断是不是在最底层 如果不是则把状态变更为等待 并把库移推荐的From和To赋值
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private async Task CheckMinRowAndSetStatusAsync(KittingIssueJobEditInput input)
{
var jobDetailInputdetail = input.Details.FirstOrDefault();
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode != 1)
{
input.JobStatus = EnumJobStatus.Wait;
}
else if (loctionDto.Type == EnumLocationType.RAW && loctionDto.RowCode == 1)
{
jobDetailInputdetail.TransferLibFromArriveDate = jobDetailInputdetail.RecommendFromArriveDate;
jobDetailInputdetail.TransferLibFromContainerCode = jobDetailInputdetail.RecommendFromContainerCode;
jobDetailInputdetail.TransferLibFromExpireDate = jobDetailInputdetail.RecommendFromExpireDate;
jobDetailInputdetail.TransferLibFromLocationArea = jobDetailInputdetail.RecommendFromLocationArea;
jobDetailInputdetail.TransferLibFromLocationCode = jobDetailInputdetail.RecommendFromLocationCode;
jobDetailInputdetail.TransferLibFromLocationErpCode = jobDetailInputdetail.RecommendFromLocationErpCode;
jobDetailInputdetail.TransferLibFromLocationGroup = jobDetailInputdetail.RecommendFromLocationGroup;
jobDetailInputdetail.TransferLibFromLot = jobDetailInputdetail.RecommendFromLot;
jobDetailInputdetail.TransferLibFromPackingCode = jobDetailInputdetail.RecommendFromPackingCode;
jobDetailInputdetail.TransferLibFromProduceDate = jobDetailInputdetail.RecommendFromProduceDate;
jobDetailInputdetail.TransferLibFromQty = jobDetailInputdetail.RecommendFromQty;
jobDetailInputdetail.TransferLibFromSupplierBatch = jobDetailInputdetail.RecommendFromSupplierBatch;
jobDetailInputdetail.TransferLibFromWarehouseCode = jobDetailInputdetail.RecommendFromWarehouseCode;
jobDetailInputdetail.TransferLibToArriveDate = jobDetailInputdetail.RecommendToArriveDate;
jobDetailInputdetail.TransferLibToContainerCode = jobDetailInputdetail.RecommendToContainerCode;
jobDetailInputdetail.TransferLibToExpireDate = jobDetailInputdetail.RecommendToExpireDate;
jobDetailInputdetail.TransferLibToLot = jobDetailInputdetail.RecommendToLot;
jobDetailInputdetail.TransferLibToPackingCode = jobDetailInputdetail.RecommendToPackingCode;
jobDetailInputdetail.TransferLibToProduceDate = jobDetailInputdetail.RecommendToProduceDate;
jobDetailInputdetail.TransferLibToQty = jobDetailInputdetail.RecommendToQty;
jobDetailInputdetail.TransferLibToSupplierBatch = jobDetailInputdetail.RecommendToSupplierBatch;
jobDetailInputdetail.TransferLibToWarehouseCode = jobDetailInputdetail.TransferLibFromWarehouseCode;
jobDetailInputdetail.TransferLibToLocationArea = jobDetailInputdetail.TransferLibFromLocationArea;
jobDetailInputdetail.TransferLibToLocationCode = jobDetailInputdetail.TransferLibFromLocationCode;
jobDetailInputdetail.TransferLibToLocationErpCode = jobDetailInputdetail.TransferLibFromLocationErpCode;
jobDetailInputdetail.TransferLibToLocationGroup = jobDetailInputdetail.TransferLibFromLocationGroup;
}
}
/// <summary>
/// 判断是不是在立体库
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private async Task CheckDimensionalStorehouseAsync(KittingIssueJobEditInput input)
{
var jobDetailInputdetail = input.Details.FirstOrDefault();
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{
input.JobStatus = EnumJobStatus.Wait;
}
}
/// <summary>
/// 判断是不是在立体库
/// </summary>
/// <param name="kittingIssueJobDto"></param>
/// <returns></returns>
private async Task CheckDimensionalStorehouseAsync(KittingIssueJobDTO kittingIssueJobDto)
{
var jobDetailInputdetail = kittingIssueJobDto.Details.FirstOrDefault();
var loctionDto = await _locationAppService.GetByCodeAsync(jobDetailInputdetail.RecommendFromLocationCode)
.ConfigureAwait(false);
if (loctionDto.Type == EnumLocationType.DimensionalStorehouse)
{
//TODO 立体库
var ret = await SyncIssueJobStereoAsync(new List<KittingIssueJobDTO> { kittingIssueJobDto }, loctionDto.Code).ConfigureAwait(false);
if (ret.Code != "1")
{
throw new UserFriendlyException($"调用立体库不成功!原因:{ret.Message}");
}
}
}
/// <summary>
/// 修改当前任务状态 和 该任务的请求状态
/// </summary>
/// <param name="kittingIssueJob"></param>
/// <param name="kittingIssueJobDetailDto"></param>
/// <param name="handledToQty"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private async Task UpdateRequestAndjobStatusDoneAsync(KittingIssueJob kittingIssueJob,
KittingIssueJobDetailDTO kittingIssueJobDetailDto,decimal handledToQty)
{
if (kittingIssueJob.JobStatus is EnumJobStatus.Closed or EnumJobStatus.Cancelled or EnumJobStatus.None
or EnumJobStatus.Done) //需要考虑下 多次提交的问题 所以不判断 进行中
{
throw new UserFriendlyException(
$"任务状态错误:编号为【{kittingIssueJob.Number}】的任务状态为【{kittingIssueJob.JobStatus.GetDisplayName()}】");
}
kittingIssueJob.JobStatus = EnumJobStatus.Done;
await RemoveExpectOutAsync(kittingIssueJob, kittingIssueJobDetailDto, handledToQty).ConfigureAwait(false);
//await _expectOutAppService.RemoveByNumberAsync(kittingIssueJob.Number).ConfigureAwait(false);
await KittingIssueRequestAppService.UpdateStatusCompletedAsync(kittingIssueJob.KittingRequestNumber)
.ConfigureAwait(false);
await Task.CompletedTask.ConfigureAwait(false);
}
private async Task RemoveExpectOutAsync(KittingIssueJob kittingIssueJob, KittingIssueJobDetailDTO kittingIssueJobDetailDto,
decimal handledToQty)
{
await _expectOutAppService.RemoveByNumberAndInventoryAsync(kittingIssueJob.Number,
kittingIssueJobDetailDto.ItemCode,
kittingIssueJobDetailDto.HandledToLocationCode, kittingIssueJobDetailDto.HandledToPackingCode,
kittingIssueJobDetailDto.Status, kittingIssueJobDetailDto.HandledToLot,
handledToQty).ConfigureAwait(false);
}
#endregion #endregion
} }

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

@ -81,7 +81,8 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
CheckLocation(toLocationDto, detailInput.ToLocationCode); CheckLocation(toLocationDto, detailInput.ToLocationCode);
var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detailInput.ItemCode).ConfigureAwait(false); var itemBasicDto = await _itemBasicAppService.GetByCodeAsync(detailInput.ItemCode).ConfigureAwait(false);
CheckItemBasic(itemBasicDto, detailInput.ItemCode); CheckItemBasic(itemBasicDto, detailInput.ItemCode);
var productionLineDto= await _productionLineAppService.GetByLocationCodeAsync(detailInput.ToLocationCode).ConfigureAwait(false); var productionLineDto = await _productionLineAppService.GetByLocationCodeAsync(detailInput.ToLocationCode)
.ConfigureAwait(false);
CheckProductionLine(productionLineDto, detailInput.ProdLine); CheckProductionLine(productionLineDto, detailInput.ProdLine);
detailInput.ProdLine = productionLineDto.Code; detailInput.ProdLine = productionLineDto.Code;
@ -159,7 +160,18 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
} }
} }
return await base.CancelAsync(id).ConfigureAwait(false); if (request.RequestStatus == EnumRequestStatus.Partial || request.RequestStatus == EnumRequestStatus.Handling ||
request.RequestStatus == EnumRequestStatus.New)
{
request.RequestStatus = EnumRequestStatus.Cancelled;
await _repository.UpdateAsync(request).ConfigureAwait(false);
}
else
{
throw new UserFriendlyException($"【{request.RequestStatus.GetDisplayName()}】状态不允许取消");
}
return ObjectMapper.Map<KittingIssueRequest, KittingIssueRequestDTO>(request);
} }
[HttpPost("UpdateStatusCompleted")] [HttpPost("UpdateStatusCompleted")]
@ -167,9 +179,11 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
{ {
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); 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 ||
@ -177,9 +191,8 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
{ {
return; return;
} }
else
{ var flag = true;
bool flag = true;
foreach (var detail in kittingIssueRequest.Details) foreach (var detail in kittingIssueRequest.Details)
{ {
@ -197,7 +210,6 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false); await _repository.UpdateAsync(kittingIssueRequest).ConfigureAwait(false);
} }
} }
}
/// <summary> /// <summary>
/// 修改请求的 已发 已收数量 /// 修改请求的 已发 已收数量
@ -209,7 +221,8 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
List<KittingIssueJobDTO> addKittingIssueJobDtos) List<KittingIssueJobDTO> addKittingIssueJobDtos)
{ {
//原有任务 //原有任务
var existKittingIssueJobDtos = await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number) var existKittingIssueJobDtos = await _kittingIssueJobAppService
.GetByRequestNumberAsync(kittingIssueRequest.Number)
.ConfigureAwait(false); .ConfigureAwait(false);
//新增的任务和已有的任务总和 //新增的任务和已有的任务总和
@ -250,7 +263,8 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
[HttpPost("IsHasNewJob")] [HttpPost("IsHasNewJob")]
public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber) public async Task<string> IsHasNewJobAsync(string requestNumber, List<string> jobNumber)
{ {
var joblIssueJobDtos=await _kittingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false); var joblIssueJobDtos =
await _kittingIssueJobAppService.GetByRequestNumberAsync(requestNumber).ConfigureAwait(false);
if (joblIssueJobDtos != null && joblIssueJobDtos.Any()) if (joblIssueJobDtos != null && joblIssueJobDtos.Any())
{ {
var jobNumberList = joblIssueJobDtos.Select(p => p.Number); var jobNumberList = joblIssueJobDtos.Select(p => p.Number);
@ -263,15 +277,31 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
result += "的任务"; result += "的任务";
return result; return result;
} }
else
{
return "无任务生成,请检查库存"; return "无任务生成,请检查库存";
} }
return "无任务生成,请检查库存";
}
public override async Task<KittingIssueRequestDTO> CompleteAsync(Guid id)
{
var kittingIssueRequest = await _repository.GetAsync(id).ConfigureAwait(false);
if (kittingIssueRequest.RequestStatus == EnumRequestStatus.Handling ||
kittingIssueRequest.RequestStatus == EnumRequestStatus.Partial ||
kittingIssueRequest.RequestStatus == EnumRequestStatus.New)
{
kittingIssueRequest.RequestStatus = EnumRequestStatus.Completed;
} }
else else
{ {
return "无任务生成,请检查库存"; throw new UserFriendlyException($"【{kittingIssueRequest.RequestStatus.GetDisplayName()}】状态不允许完成");
} }
await _kittingIssueJobAppService.CompleteByRequestNumberAsync(kittingIssueRequest.Number).ConfigureAwait(false);
return ObjectMapper.Map<KittingIssueRequest, KittingIssueRequestDTO>(await _repository.UpdateAsync(kittingIssueRequest)
.ConfigureAwait(false));
} }
#region 校验 #region 校验
@ -297,32 +327,32 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
case EnumRequestStatus.Handling: case EnumRequestStatus.Handling:
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.Agreed, EnumRequestStatus.Partial, EnumRequestStatus.Agreed, EnumRequestStatus.Partial
}; };
break; break;
case EnumRequestStatus.Completed: case EnumRequestStatus.Completed:
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.Handling, EnumRequestStatus.Partial, EnumRequestStatus.Handling, EnumRequestStatus.Partial
}; };
break; break;
case EnumRequestStatus.Cancelled: case EnumRequestStatus.Cancelled:
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed, EnumRequestStatus.New, EnumRequestStatus.Reviewing, EnumRequestStatus.Agreed
}; };
break; break;
case EnumRequestStatus.Abort: case EnumRequestStatus.Abort:
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.Handling, EnumRequestStatus.Partial, EnumRequestStatus.Handling, EnumRequestStatus.Partial
}; };
break; break;
case EnumRequestStatus.Partial: case EnumRequestStatus.Partial:
{ {
validSourceStatuses = new List<EnumRequestStatus> validSourceStatuses = new List<EnumRequestStatus>
{ {
EnumRequestStatus.Handling, EnumRequestStatus.Partial, EnumRequestStatus.Handling, EnumRequestStatus.Partial
}; };
break; break;
} }
@ -354,7 +384,8 @@ public class KittingIssueRequestAppService : SfsStoreRequestAppServiceBase<Kitti
if (locationDto.Type != EnumLocationType.KittingWip) if (locationDto.Type != EnumLocationType.KittingWip)
{ {
throw new UserFriendlyException($"库位代码【{locationCode}】不是【{EnumLocationType.KittingWip.GetDisplayName()}】类型"); throw new UserFriendlyException(
$"库位代码【{locationCode}】不是【{EnumLocationType.KittingWip.GetDisplayName()}】类型");
} }
} }

4
build/src/docker/publish/conf/settings/appsettings.Development.json

@ -117,8 +117,8 @@
//"BaseUrl": "http://localhost:59093/" //"BaseUrl": "http://localhost:59093/"
}, },
"BaseData": { "BaseData": {
//"BaseUrl": "http://dev.ccwin-in.com:60084/" "BaseUrl": "http://dev.ccwin-in.com:60084/"
"BaseUrl": "http://localhost:59094/" //"BaseUrl": "http://localhost:59094/"
}, },
"Default": { "Default": {
"BaseUrl": "http://dev.ccwin-in.com:60083/" "BaseUrl": "http://dev.ccwin-in.com:60083/"

Loading…
Cancel
Save