|
|
@ -1,6 +1,21 @@ |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.ComponentModel.DataAnnotations; |
|
|
|
using System.Linq; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using Castle.Components.DictionaryAdapter; |
|
|
|
using Irony; |
|
|
|
using Microsoft.AspNetCore.Authorization; |
|
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
|
using Omu.ValueInjecter; |
|
|
|
using Volo.Abp; |
|
|
|
using Volo.Abp.Data; |
|
|
|
using Volo.Abp.ObjectMapping; |
|
|
|
using Win_in.Sfs.Basedata.Application.Contracts; |
|
|
|
using Win_in.Sfs.Shared.Domain.Entities; |
|
|
|
using Win_in.Sfs.Shared.Domain.Shared; |
|
|
|
using Win_in.Sfs.Shared.Domain.Shared.Enums.Store; |
|
|
|
using Win_in.Sfs.Wms.Inventory.Application.Contracts; |
|
|
|
using Win_in.Sfs.Wms.Store.Application.Contracts; |
|
|
|
using Win_in.Sfs.Wms.Store.Domain; |
|
|
|
using Win_in.Sfs.Wms.Store.Domain.Shared; |
|
|
@ -15,13 +30,21 @@ public class UnplannedIssueJobAppService |
|
|
|
IUnplannedIssueJobAppService |
|
|
|
{ |
|
|
|
|
|
|
|
private readonly IUnplannedIssueJobManager _unplannedIssueJobManager; |
|
|
|
private readonly IUnplannedIssueJobManager _unplannedIssueJobManager; |
|
|
|
private readonly ILocationAppService _locationAppService; |
|
|
|
private readonly IBalanceAppService _balanceAppService; |
|
|
|
private readonly IExpectOutAppService _expectOutAppService; |
|
|
|
|
|
|
|
public UnplannedIssueJobAppService( |
|
|
|
IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager |
|
|
|
IUnplannedIssueJobRepository repository, IUnplannedIssueJobManager unplannedIssueJobManager, ILocationAppService locationAppService, IBalanceAppService balanceAppService, IExpectOutAppService expectOutAppService |
|
|
|
) : base(repository, unplannedIssueJobManager) |
|
|
|
{ |
|
|
|
_unplannedIssueJobManager = unplannedIssueJobManager; |
|
|
|
} |
|
|
|
_locationAppService = locationAppService; |
|
|
|
_balanceAppService = balanceAppService; |
|
|
|
_expectOutAppService = expectOutAppService; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 根据申请单号作废任务
|
|
|
@ -38,133 +61,270 @@ public class UnplannedIssueJobAppService |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
///// <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();
|
|
|
|
//}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 根据储位推荐
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("create-by-recommend")] |
|
|
|
public async Task CreateByRecommendAsync(UnplannedIssueRequest requestDto) |
|
|
|
{ |
|
|
|
List<BalanceDTO> useBalancesOut = new EditableList<BalanceDTO>(); |
|
|
|
var jobs = await BuildUnplannedIssueJobAsync(requestDto, useBalancesOut).ConfigureAwait(false); |
|
|
|
await _unplannedIssueJobManager.AddManyAsync(jobs).ConfigureAwait(false); |
|
|
|
//await _repository.InsertManyAsync(jobs.ToList()).ConfigureAwait(false);
|
|
|
|
var first = jobs.FirstOrDefault(); |
|
|
|
var outEditInputs = await BuildExpectOutAsync(useBalancesOut).ConfigureAwait(false); |
|
|
|
foreach (var itm in outEditInputs) |
|
|
|
{ |
|
|
|
itm.JobNumber = first.Number; |
|
|
|
} |
|
|
|
await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<BalanceDTO> DeductInventory(List<BalanceDTO> inventory, decimal quantityToDeduct) |
|
|
|
{ |
|
|
|
List<BalanceDTO> balanceDTOs = new List<BalanceDTO>(); |
|
|
|
decimal totalDeducted = 0; |
|
|
|
foreach (var item in inventory) |
|
|
|
{ |
|
|
|
decimal availableToDeduct = Math.Min(item.Qty, quantityToDeduct - totalDeducted); |
|
|
|
item.Qty -= availableToDeduct; |
|
|
|
totalDeducted += availableToDeduct; |
|
|
|
BalanceDTO dto = new BalanceDTO(); |
|
|
|
dto.InjectFrom(item); |
|
|
|
dto.Qty = availableToDeduct; |
|
|
|
balanceDTOs.Add(dto); |
|
|
|
// 如果已经扣减达到所需数量,退出循环
|
|
|
|
if (totalDeducted >= quantityToDeduct) |
|
|
|
{ |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
// 返回实际扣减的库存数量
|
|
|
|
return balanceDTOs; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private async Task<List<UnplannedIssueJob>> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List<BalanceDTO> useBalancesOut) |
|
|
|
{ |
|
|
|
List<UnplannedIssueJob> jobs = new EditableList<UnplannedIssueJob>(); |
|
|
|
|
|
|
|
foreach (var requestDtoDetail in requestDto.Details)//非计划领料明细
|
|
|
|
{ |
|
|
|
var locationCodes = await _locationAppService.GetListByErpLocationCodes(new StringList(requestDtoDetail.LocationErpCode)).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>(); |
|
|
|
var returnlist=DeductInventory(usableList, requestDtoDetail.Qty); |
|
|
|
useBalances.AddRange(returnlist); |
|
|
|
useBalancesOut.AddRange(returnlist); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//foreach (var balanceDto in usableList)
|
|
|
|
//{
|
|
|
|
// decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty);
|
|
|
|
// balanceDto.Qty -= availableToDeduct;
|
|
|
|
// qty += availableToDeduct;
|
|
|
|
// if (qty >= balanceDto.Qty)
|
|
|
|
// break;
|
|
|
|
// if (qty >= requestDtoDetail.Qty)
|
|
|
|
// {
|
|
|
|
// break;
|
|
|
|
// }
|
|
|
|
// if (qty + balanceDto.Qty > requestDtoDetail.Qty)
|
|
|
|
// {
|
|
|
|
// qty += requestDtoDetail.Qty - balanceDto.Qty;
|
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// qty += balanceDto.Qty;
|
|
|
|
// }
|
|
|
|
// if (qty > 0)
|
|
|
|
// {
|
|
|
|
// useBalances.Add(balanceDto);
|
|
|
|
// useBalancesOut.Add(balanceDto);
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
if (returnlist.Count == 0) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException("库存余额不够!"); |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) |
|
|
|
{ |
|
|
|
var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false); |
|
|
|
var job = new UnplannedIssueJob(); |
|
|
|
job.SetId(GuidGenerator.Create()); |
|
|
|
job.UnplannedIssueRequestNumber= requestDto.Number; |
|
|
|
job.JobType = EnumJobType.UnplannedIssueJob; |
|
|
|
job.JobStatus = EnumJobStatus.Open; |
|
|
|
job.IsAutoComplete = false; |
|
|
|
job.OANumber = requestDto.OANumber; |
|
|
|
job.Number =await _unplannedIssueJobManager.GetNumber().ConfigureAwait(true); |
|
|
|
job.Details = new List<UnplannedIssueJobDetail>(); |
|
|
|
job.FacDetails = new List<UnplannedIssueJobFacDetail>(); |
|
|
|
job.WarehouseCode = balanceDtoGroup.First().WarehouseCode; |
|
|
|
|
|
|
|
foreach (var balanceDto in balanceDtoGroup) |
|
|
|
{ |
|
|
|
var jobDetail = new UnplannedIssueJobDetail(); |
|
|
|
|
|
|
|
jobDetail.Number = job.Number; |
|
|
|
jobDetail.SetIdAndNumber(GuidGenerator,job.Id,job.Number); |
|
|
|
|
|
|
|
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.StdPackQty = requestDtoDetail.StdPackQty; |
|
|
|
jobDetail.RecommendPackingCode = balanceDto.PackingCode; |
|
|
|
jobDetail.HandledPackingCode = balanceDto.PackingCode; |
|
|
|
jobDetail.RecommendFromLocationArea = balanceDto.LocationArea; |
|
|
|
jobDetail.RecommendFromLocationCode = balanceDto.LocationCode; |
|
|
|
jobDetail.RecommendFromLocationErpCode = balanceDto.LocationErpCode; |
|
|
|
jobDetail.RecommendFromLocationGroup = balanceDto.LocationGroup; |
|
|
|
jobDetail.RecommendFromWarehouseCode = balanceDto.WarehouseCode; |
|
|
|
jobDetail.HandledQty = balanceDto.Qty; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var jobfacDetail = new UnplannedIssueJobFacDetail(); |
|
|
|
|
|
|
|
jobfacDetail.Number = job.Number; |
|
|
|
jobfacDetail.SetIdAndNumber(GuidGenerator, job.Id, job.Number); |
|
|
|
jobfacDetail.CaseCode = requestDtoDetail.CaseCode; |
|
|
|
jobfacDetail.Explain = requestDtoDetail.Explain; |
|
|
|
jobfacDetail.OnceBusiCode = requestDtoDetail.OnceBusiCode; |
|
|
|
jobfacDetail.ProjCapacityCode = requestDtoDetail.ProjCapacityCode; |
|
|
|
//jobfacDetail.ReasonCode = requestDtoDetail.ReasonCode;
|
|
|
|
jobfacDetail.ItemCode = requestDtoDetail.ItemCode; |
|
|
|
jobfacDetail.ItemDesc1 = requestDtoDetail.ItemDesc1; |
|
|
|
jobfacDetail.ItemDesc2 = requestDtoDetail.ItemDesc2; |
|
|
|
jobfacDetail.ItemName = requestDtoDetail.ItemName; |
|
|
|
jobfacDetail.RecommendArriveDate = balanceDto.ArriveDate; |
|
|
|
jobfacDetail.RecommendContainerCode = string.Empty; |
|
|
|
jobfacDetail.RecommendExpireDate = balanceDto.ExpireDate; |
|
|
|
jobfacDetail.RecommendLot = balanceDto.Lot; |
|
|
|
jobfacDetail.RecommendPackingCode = balanceDto.PackingCode; |
|
|
|
jobfacDetail.RecommendProduceDate = balanceDto.ProduceDate; |
|
|
|
jobfacDetail.RecommendQty = balanceDto.Qty; |
|
|
|
jobfacDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; |
|
|
|
jobfacDetail.StdPackQty = requestDtoDetail.StdPackQty; |
|
|
|
jobfacDetail.RecommendPackingCode = balanceDto.PackingCode; |
|
|
|
jobfacDetail.HandledPackingCode = balanceDto.PackingCode; |
|
|
|
|
|
|
|
jobfacDetail.RecommendFromLocationArea = balanceDto.LocationArea; |
|
|
|
jobfacDetail.RecommendFromLocationCode = balanceDto.LocationCode; |
|
|
|
jobfacDetail.RecommendFromLocationErpCode = balanceDto.LocationErpCode; |
|
|
|
jobfacDetail.RecommendFromLocationGroup = balanceDto.LocationGroup; |
|
|
|
jobfacDetail.RecommendFromWarehouseCode = balanceDto.WarehouseCode; |
|
|
|
jobfacDetail.HandledQty = balanceDto.Qty; |
|
|
|
|
|
|
|
|
|
|
|
job.Details.Add(jobDetail); |
|
|
|
job.FacDetails.Add(jobfacDetail); |
|
|
|
} |
|
|
|
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>
|
|
|
|
private async Task SendDimensionalStorehouseAsync() |
|
|
|
{ |
|
|
|
throw new System.NotImplementedException(); |
|
|
|
} |
|
|
|
/// <summary>
|
|
|
|
/// 创建补料记录实体
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="coatingIssueJobDto"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<UnplannedIssueNoteEditInput> BuildUnplannedIssueNoteAsync(UnplannedIssueJob unplannedIssueJobDto) |
|
|
|
{ |
|
|
|
//var createInput =
|
|
|
|
// ObjectMapper.Map<UnplannedIssueJob, UnplannedIssueNoteEditInput>(unplannedIssueJobDto);
|
|
|
|
var issuenote = new UnplannedIssueNoteEditInput(); |
|
|
|
|
|
|
|
issuenote.DeptCode = unplannedIssueJobDto.DeptCode; |
|
|
|
issuenote.DeptName = unplannedIssueJobDto.DeptName; |
|
|
|
issuenote.BuildDate = unplannedIssueJobDto.BuildDate; |
|
|
|
issuenote.UnplannedIssueRequestNumber = unplannedIssueJobDto.UnplannedIssueRequestNumber; |
|
|
|
issuenote.JobNumber = unplannedIssueJobDto.Number; |
|
|
|
issuenote.UnplannedIssueType = issuenote.UnplannedIssueType; |
|
|
|
issuenote.OANumber = issuenote.OANumber; |
|
|
|
issuenote.Details = new List<UnplannedIssueNoteDetailInput>(); |
|
|
|
foreach (var detail in unplannedIssueJobDto.FacDetails) |
|
|
|
{ |
|
|
|
var entity=new UnplannedIssueNoteDetailInput(); |
|
|
|
entity.InjectFrom(detail); |
|
|
|
entity.Qty = detail.HandledQty; |
|
|
|
issuenote.Details.Add(entity); |
|
|
|
} |
|
|
|
await Task.CompletedTask.ConfigureAwait(false); |
|
|
|
return issuenote; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|