Browse Source

修改 退料

dev_DY_CC
郑勃旭 7 months ago
parent
commit
55bce6fdf5
  1. 130
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs
  2. 136
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs

130
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedIssueJobs/UnplannedIssueJobAppService.cs

@ -37,4 +37,134 @@ public class UnplannedIssueJobAppService
await _unplannedIssueJobManager.CancelAsync(entity).ConfigureAwait(false); await _unplannedIssueJobManager.CancelAsync(entity).ConfigureAwait(false);
} }
} }
///// <summary>
///// 根据储位推荐
///// </summary>
///// <returns></returns>
//[HttpPost("create-by-recommend")]
//public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto)
//{
// List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>();
// var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false);
// await _repository.InsertManyAsync(jobs).ConfigureAwait(false);
// var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false);
// await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false);
//}
//private async Task<List<UnplannedReceiptJob>> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List<BalanceDTO> useBalancesOut)
//{
// List<UnplannedReceiptJob> jobs = new EditableList<UnplannedReceiptJob>();
// foreach (var requestDtoDetail in requestDto.Details)
// {
// var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.ErpLocationCode)).ConfigureAwait(false);
// var input = new RecommendBalanceRequestInput
// {
// ItemCode = requestDtoDetail.ItemCode,
// Qty = requestDtoDetail.Qty,
// Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
// Locations = locationCodes.Select(p => p.Code).ToList(),
// IsPackingCode = false
// };
// var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false);
// usableList = usableList
// .OrderBy(p => p.Lot)
// .ThenBy(p => p.PutInTime)
// .ThenBy(p => p.Qty) //2023-9-14 苑静雯 从小数开始发料
// .ThenBy(p => p.LocationCode)
// .ThenBy(p => p.PackingCode)
// .ToList();
// decimal qty = 0;
// //实际要用库存
// List<BalanceDTO> useBalances = new List<BalanceDTO>();
// foreach (var balanceDto in usableList)
// {
// if (qty >= requestDtoDetail.Qty)
// {
// break;
// }
// if (qty + balanceDto.Qty > requestDtoDetail.Qty)
// {
// qty += requestDtoDetail.Qty - balanceDto.Qty;
// }
// else
// {
// qty += balanceDto.Qty;
// }
// useBalances.Add(balanceDto);
// useBalancesOut.Add(balanceDto);
// }
// foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode))
// {
// var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false);
// var job = new UnplannedReceiptJob();
// job.UnplannedReceiptRequestNumber = requestDto.Number;
// job.JobType = EnumJobType.UnplannedReceiptJob;
// job.JobStatus = EnumJobStatus.Open;
// job.IsAutoComplete = false;
// job.OANumber = requestDto.OANumber;
// job.Details = new List<UnplannedReceiptJobDetail>();
// job.WarehouseCode = balanceDtoGroup.First().WarehouseCode;
// foreach (var balanceDto in balanceDtoGroup)
// {
// var jobDetail = new UnplannedReceiptJobDetail();
// jobDetail.CaseCode = requestDtoDetail.CaseCode;
// jobDetail.Explain = requestDtoDetail.Explain;
// jobDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode;
// jobDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode;
// jobDetail.ReasonCode = requestDtoDetail.ReasonCode;
// jobDetail.ItemCode = requestDtoDetail.ItemCode;
// jobDetail.ItemDesc1 = requestDtoDetail.ItemDesc1;
// jobDetail.ItemDesc2 = requestDtoDetail.ItemDesc2;
// jobDetail.ItemName = requestDtoDetail.ItemName;
// jobDetail.RecommendArriveDate = balanceDto.ArriveDate;
// jobDetail.RecommendContainerCode = string.Empty;
// jobDetail.RecommendExpireDate = balanceDto.ExpireDate;
// jobDetail.RecommendLot = balanceDto.Lot;
// jobDetail.RecommendPackingCode = balanceDto.PackingCode;
// jobDetail.RecommendProduceDate = balanceDto.ProduceDate;
// jobDetail.RecommendQty = balanceDto.Qty;
// jobDetail.RecommendSupplierBatch = balanceDto.SupplierBatch;
// jobDetail.RecommendToLocationArea = balanceDto.LocationArea;
// jobDetail.RecommendToLocationCode = balanceDto.LocationCode;
// jobDetail.RecommendToLocationErpCode = balanceDto.LocationErpCode;
// jobDetail.RecommendToLocationGroup = balanceDto.LocationGroup;
// jobDetail.RecommendToWarehouseCode = balanceDto.WarehouseCode;
// job.Details.Add(jobDetail);
// }
// if (locationDto.Type == EnumLocationType.DimensionalStorehouse)//如果是立库的
// {
// await SendDimensionalStorehouseAsync().ConfigureAwait(false);
// job.JobStatus = EnumJobStatus.Wait;
// }
// jobs.Add(job);
// }
// }
// return jobs;
//}
//private async Task<List<ExpectOutEditInput>> BuildExpectOutAsync(List<BalanceDTO> balanceDtos)
//{
// return ObjectMapper.Map<List<BalanceDTO>, List<ExpectOutEditInput>>(balanceDtos);
//}
///// <summary>
///// 给立体库发送
///// </summary>
///// <returns></returns>
//public async Task SendDimensionalStorehouseAsync()
//{
// throw new System.NotImplementedException();
//}
} }

136
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Application/Jobs/UnplannedReceiptJobs/UnplannedReceiptJobAppService.cs

@ -2,9 +2,11 @@ using System.Collections.Generic;
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;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
using Volo.Abp.ObjectMapping; using Volo.Abp.ObjectMapping;
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.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;
@ -63,116 +65,60 @@ public class UnplannedReceiptJobAppService
} }
/// <summary> /// <summary>
/// 根据储位推荐 /// 根据储位任意退料
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPost("create-by-recommend")] [HttpPost("create-by-free")]
public async Task CreateByRecommendAsync(UnplannedReceiptRequestDTO requestDto) public async Task CreateByFreeAsync(UnplannedReceiptRequestDTO requestDto)
{ {
List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>(); var jobs=await BuildUnplannedIssueJobAsync(requestDto).ConfigureAwait(false);
var jobs=await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false);
await _repository.InsertManyAsync(jobs).ConfigureAwait(false); await _repository.InsertManyAsync(jobs).ConfigureAwait(false);
var outEditInputs=await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false);
await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false);
} }
private async Task<List<UnplannedReceiptJob>> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto, List<BalanceDTO> useBalancesOut) private async Task<List<UnplannedReceiptJob>> BuildUnplannedIssueJobAsync(UnplannedReceiptRequestDTO requestDto)
{ {
List<UnplannedReceiptJob> jobs = new EditableList<UnplannedReceiptJob>(); List<UnplannedReceiptJob> jobs = new EditableList<UnplannedReceiptJob>();
foreach (var requestDtoDetail in requestDto.Details) foreach (var requestDtoDetail in requestDto.Details)
{ {
var locationCodes=await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.ErpLocationCode)).ConfigureAwait(false); var locationDtos = await _locationAppService.GetListByErpLocationCodes(new List<string>{ requestDtoDetail.ErpLocationCode }).ConfigureAwait(false);
var input = new RecommendBalanceRequestInput var job = new UnplannedReceiptJob();
{
ItemCode = requestDtoDetail.ItemCode, job.UnplannedReceiptRequestNumber = requestDto.Number;
Qty = requestDtoDetail.Qty, job.JobType = EnumJobType.UnplannedReceiptJob;
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, job.JobStatus = EnumJobStatus.Open;
Locations = locationCodes.Select(p=>p.Code).ToList(), job.IsAutoComplete = false;
IsPackingCode = false job.OANumber = requestDto.OANumber;
}; job.Details = new List<UnplannedReceiptJobDetail>();
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); job.WarehouseCode = requestDtoDetail.WarehouseCode;
usableList = usableList switch (locationDtos.First().Type)
.OrderBy(p => p.Lot)
.ThenBy(p => p.PutInTime)
.ThenBy(p => p.Qty) //2023-9-14 苑静雯 从小数开始发料
.ThenBy(p => p.LocationCode)
.ThenBy(p => p.PackingCode)
.ToList();
decimal qty = 0;
//实际要用库存
List<BalanceDTO> useBalances = new List<BalanceDTO>();
foreach (var balanceDto in usableList)
{ {
if (qty >= requestDtoDetail.Qty) case EnumLocationType.RAW:
{ job.UnplannedReceiptType = EnumUnplannedReceiptType.Raw;
break;
case EnumLocationType.FG:
case EnumLocationType.DimensionalStorehouse:
case EnumLocationType.CUST:
case EnumLocationType.KittingWip:
case EnumLocationType.OUTSIDE:
case EnumLocationType.SEMI:
case EnumLocationType.WIP:
case EnumLocationType.THIRDPARTY:
job.UnplannedReceiptType = EnumUnplannedReceiptType.Wip;
break; break;
}
if (qty + balanceDto.Qty > requestDtoDetail.Qty)
{
qty += requestDtoDetail.Qty - balanceDto.Qty;
}
else
{
qty += balanceDto.Qty;
}
useBalances.Add(balanceDto);
useBalancesOut.Add(balanceDto);
} }
foreach (var balanceDtoGroup in useBalances.GroupBy(p=>p.LocationCode)) var jobDetail = new UnplannedReceiptJobDetail();
{ jobDetail.CaseCode = requestDtoDetail.CaseCode;
var locationDto=await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); jobDetail.Explain = requestDtoDetail.Explain;
var job = new UnplannedReceiptJob(); jobDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode;
jobDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode;
job.UnplannedReceiptRequestNumber = requestDto.Number; jobDetail.ReasonCode = requestDtoDetail.ReasonCode;
job.JobType = EnumJobType.UnplannedReceiptJob; jobDetail.ItemCode = requestDtoDetail.ItemCode;
job.JobStatus = EnumJobStatus.Open; jobDetail.ItemDesc1 = requestDtoDetail.ItemDesc1;
job.IsAutoComplete = false; jobDetail.ItemDesc2 = requestDtoDetail.ItemDesc2;
job.OANumber = requestDto.OANumber; jobDetail.ItemName = requestDtoDetail.ItemName;
job.Details = new List<UnplannedReceiptJobDetail>(); job.Details.Add(jobDetail);
job.WarehouseCode = balanceDtoGroup.First().WarehouseCode;
foreach (var balanceDto in balanceDtoGroup)
{
var jobDetail = new UnplannedReceiptJobDetail();
jobDetail.CaseCode = requestDtoDetail.CaseCode;
jobDetail.Explain = requestDtoDetail.Explain;
jobDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode;
jobDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode;
jobDetail.ReasonCode = requestDtoDetail.ReasonCode;
jobDetail.ItemCode = requestDtoDetail.ItemCode;
jobDetail.ItemDesc1 = requestDtoDetail.ItemDesc1;
jobDetail.ItemDesc2 = requestDtoDetail.ItemDesc2;
jobDetail.ItemName = requestDtoDetail.ItemName;
jobDetail.RecommendArriveDate = balanceDto.ArriveDate;
jobDetail.RecommendContainerCode = string.Empty;
jobDetail.RecommendExpireDate = balanceDto.ExpireDate;
jobDetail.RecommendLot = balanceDto.Lot;
jobDetail.RecommendPackingCode = balanceDto.PackingCode;
jobDetail.RecommendProduceDate = balanceDto.ProduceDate;
jobDetail.RecommendQty = balanceDto.Qty;
jobDetail.RecommendSupplierBatch = balanceDto.SupplierBatch;
jobDetail.RecommendToLocationArea = balanceDto.LocationArea;
jobDetail.RecommendToLocationCode = balanceDto.LocationCode;
jobDetail.RecommendToLocationErpCode = balanceDto.LocationErpCode;
jobDetail.RecommendToLocationGroup = balanceDto.LocationGroup;
jobDetail.RecommendToWarehouseCode = balanceDto.WarehouseCode;
job.Details.Add(jobDetail);
}
if (locationDto.Type==EnumLocationType.DimensionalStorehouse)//如果是立库的
{
await SendDimensionalStorehouseAsync().ConfigureAwait(false);
job.JobStatus = EnumJobStatus.Wait;
}
jobs.Add(job);
}
} }
return jobs; return jobs;

Loading…
Cancel
Save