|
|
@ -2,6 +2,7 @@ using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.ComponentModel.DataAnnotations; |
|
|
|
using System.Linq; |
|
|
|
using System.Reflection; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using Castle.Components.DictionaryAdapter; |
|
|
|
using Irony; |
|
|
@ -84,6 +85,68 @@ public class UnplannedIssueJobAppService |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 根据储位推荐
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
//[HttpPost("add-detail")]
|
|
|
|
//public async Task AddDetailsAsync(UnplannedIssueJobDTO jobInput)
|
|
|
|
//{
|
|
|
|
// var entity=await _repository.GetAsync(p=>p.Id==jobInput.Id).ConfigureAwait(false);
|
|
|
|
// var details=ObjectMapper.Map<List<UnplannedIssueJobDetailDTO>, List<UnplannedIssueJobDetail>>(jobInput.Details);
|
|
|
|
|
|
|
|
// var balances=new List<BalanceDTO>();
|
|
|
|
|
|
|
|
|
|
|
|
// foreach (var itm in entity.Details)
|
|
|
|
// {
|
|
|
|
// entity.RemoveDetail(itm.Id);
|
|
|
|
// }
|
|
|
|
// //var strs=GetAllFields(typeof(UnplannedIssueJobDetail));
|
|
|
|
// foreach (var detail in details)//明细
|
|
|
|
// {
|
|
|
|
// //_locationAppService.get detail.HandledFromLocationCode
|
|
|
|
// var input = new RecommendBalanceRequestInput
|
|
|
|
// {
|
|
|
|
// ItemCode = detail.ItemCode,
|
|
|
|
// Qty = detail.HandledQty,
|
|
|
|
// Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK },
|
|
|
|
// Locations = new List<string>() { detail.RecommendFromLocationCode },
|
|
|
|
// 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;
|
|
|
|
// //实际要用库存
|
|
|
|
// var returnlist = DeductInventory(usableList, detail.HandledQty);
|
|
|
|
// balances.AddRange(returnlist);
|
|
|
|
// //useBalancesOut.AddRange(returnlist);
|
|
|
|
// entity.AddDetail(detail);
|
|
|
|
// }
|
|
|
|
// var outEditInputs = await BuildExpectOutAsync(balances).ConfigureAwait(false);
|
|
|
|
// foreach (var itm in outEditInputs)
|
|
|
|
// {
|
|
|
|
// itm.JobNumber = jobInput.Number;
|
|
|
|
// }
|
|
|
|
// await _expectOutAppService.AddManyAsync(outEditInputs).ConfigureAwait(false);
|
|
|
|
//}
|
|
|
|
public static string[] GetAllFields(Type type) |
|
|
|
{ |
|
|
|
// 获取公共实例字段
|
|
|
|
var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); |
|
|
|
|
|
|
|
// 返回字段名称
|
|
|
|
return fields.Select(f => f.Name).ToArray(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<BalanceDTO> DeductInventory(List<BalanceDTO> inventory, decimal quantityToDeduct) |
|
|
|
{ |
|
|
|
List<BalanceDTO> balanceDTOs = new List<BalanceDTO>(); |
|
|
@ -110,30 +173,6 @@ public class UnplannedIssueJobAppService |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//public override async Task<UnplannedIssueJobDTO> GetAsync(Guid id)
|
|
|
|
//{
|
|
|
|
// var entity=await _repository.GetAsync(id).ConfigureAwait(false);
|
|
|
|
// var entityDTO=ObjectMapper.Map<UnplannedIssueJob, UnplannedIssueJobDTO>(entity);
|
|
|
|
// var details=ObjectMapper.Map<List<UnplannedIssueJobDetail>, List<UnplannedIssueJobDetailDTO>>(entity.Details);
|
|
|
|
// var facDetails=ObjectMapper.Map<List<UnplannedIssueJobFacDetail>, List<UnplannedIssueJobFacDetailDTO>>(entity.FacDetails);
|
|
|
|
// entityDTO.Details = details;
|
|
|
|
// entityDTO.FacDetails = facDetails;
|
|
|
|
// return entityDTO;
|
|
|
|
// // var inspectJob = await _repository.FindAsync(id).ConfigureAwait(false);
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private async Task<List<UnplannedIssueJob>> BuildUnplannedIssueJobAsync(UnplannedIssueRequest requestDto, List<BalanceDTO> useBalancesOut) |
|
|
|
{ |
|
|
|
List<UnplannedIssueJob> jobs = new EditableList<UnplannedIssueJob>(); |
|
|
@ -165,8 +204,6 @@ public class UnplannedIssueJobAppService |
|
|
|
useBalances.AddRange(returnlist); |
|
|
|
useBalancesOut.AddRange(returnlist); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//foreach (var balanceDto in usableList)
|
|
|
|
//{
|
|
|
|
// decimal availableToDeduct = Math.Min(balanceDto.Qty, balanceDto.Qty - qty);
|
|
|
@ -215,39 +252,48 @@ public class UnplannedIssueJobAppService |
|
|
|
|
|
|
|
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 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.HandledFromLocationGroup = balanceDto.LocationGroup;
|
|
|
|
//jobDetail.HandledFromLocationArea = balanceDto.LocationArea;
|
|
|
|
//jobDetail.HandledFromLocationCode = balanceDto.LocationCode;
|
|
|
|
//jobDetail.HandledFromLocationErpCode = balanceDto.LocationErpCode;
|
|
|
|
//jobDetail.HandledFromWarehouseCode = balanceDto.WarehouseCode;
|
|
|
|
//jobDetail.HandledQty = balanceDto.Qty;
|
|
|
|
//jobDetail.HandledSupplierBatch = balanceDto.Lot;
|
|
|
|
//jobDetail.HandledArriveDate = balanceDto.ArriveDate;
|
|
|
|
//jobDetail.HandledProduceDate = balanceDto.ProduceDate;
|
|
|
|
//jobDetail.HandledExpireDate = balanceDto.ExpireDate;
|
|
|
|
//jobDetail.HandledContainerCode = balanceDto.ContainerCode;
|
|
|
|
//jobDetail.HandledLot = balanceDto.Lot;
|
|
|
|
//jobDetail.HandledPackingCode = balanceDto.PackingCode;
|
|
|
|
//jobDetail.Uom = balanceDto.Uom;
|
|
|
|
|
|
|
|
var jobfacDetail = new UnplannedIssueJobFacDetail(); |
|
|
|
|
|
|
@ -272,17 +318,29 @@ public class UnplannedIssueJobAppService |
|
|
|
jobfacDetail.RecommendSupplierBatch = balanceDto.SupplierBatch; |
|
|
|
jobfacDetail.StdPackQty = requestDtoDetail.StdPackQty; |
|
|
|
jobfacDetail.RecommendPackingCode = balanceDto.PackingCode; |
|
|
|
jobfacDetail.HandledPackingCode = balanceDto.PackingCode; |
|
|
|
|
|
|
|
jobfacDetail.HandledFromLocationGroup = balanceDto.LocationGroup; |
|
|
|
jobfacDetail.HandledFromLocationArea = balanceDto.LocationArea; |
|
|
|
jobfacDetail.HandledFromLocationCode = balanceDto.LocationCode; |
|
|
|
jobfacDetail.HandledFromLocationErpCode = balanceDto.LocationErpCode; |
|
|
|
jobfacDetail.HandledFromWarehouseCode = balanceDto.WarehouseCode; |
|
|
|
jobfacDetail.HandledQty = balanceDto.Qty; |
|
|
|
jobfacDetail.HandledSupplierBatch = balanceDto.Lot; |
|
|
|
jobfacDetail.HandledArriveDate = balanceDto.ArriveDate; |
|
|
|
jobfacDetail.HandledProduceDate = balanceDto.ProduceDate; |
|
|
|
jobfacDetail.HandledExpireDate = balanceDto.ExpireDate; |
|
|
|
jobfacDetail.HandledContainerCode =balanceDto.ContainerCode ; |
|
|
|
jobfacDetail.HandledLot = balanceDto.Lot; |
|
|
|
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.Status = balanceDto.Status; |
|
|
|
jobfacDetail.HandledQty = balanceDto.Qty; |
|
|
|
jobfacDetail.Uom = balanceDto.Uom; |
|
|
|
|
|
|
|
|
|
|
|
job.Details.Add(jobDetail); |
|
|
|
//job.Details.Add(jobDetail);
|
|
|
|
job.FacDetails.Add(jobfacDetail); |
|
|
|
} |
|
|
|
if (locationDto.Type == EnumLocationType.DimensionalStorehouse)//如果是立库的
|
|
|
|