|
|
@ -94,20 +94,17 @@ public class UnplannedIssueJobAppService |
|
|
|
throw new UserFriendlyException($"请求单号{requestDto.Number},无推荐库位请检查是否又库存!"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -144,6 +141,15 @@ public class UnplannedIssueJobAppService |
|
|
|
dto.InjectFrom(item); |
|
|
|
dto.Qty = availableToDeduct; |
|
|
|
balanceDTOs.Add(dto); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (enumLocationType == EnumLocationType.RAW) |
|
|
|
{ |
|
|
|
|
|
|
@ -195,6 +201,8 @@ public class UnplannedIssueJobAppService |
|
|
|
var first=locationCodes.FirstOrDefault(); |
|
|
|
var locationDto = await _locationAppService.GetByCodeAsync(first.Code).ConfigureAwait(false); |
|
|
|
var input = new RecommendBalanceRequestInput(); |
|
|
|
|
|
|
|
|
|
|
|
switch (locationDto.Type) |
|
|
|
{ |
|
|
|
case EnumLocationType.RAW: |
|
|
@ -339,19 +347,63 @@ public class UnplannedIssueJobAppService |
|
|
|
// Errors.Add($"{"非生产领料"+requestDto.Number+"零件号:"+requestDtoDetail.ItemCode + "库存不够" + requestDtoDetail.Qty.ToString()}");
|
|
|
|
continue; |
|
|
|
} |
|
|
|
foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationCode)) |
|
|
|
foreach (var balanceDtoGroup in useBalances.GroupBy(p => p.LocationErpCode)) |
|
|
|
{ |
|
|
|
//var locationDto = await _locationAppService.GetByCodeAsync(balanceDtoGroup.Key).ConfigureAwait(false);
|
|
|
|
var job = new UnplannedIssueJob(); |
|
|
|
if (locationDto.Type==EnumLocationType.RAW) |
|
|
|
{ |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
|
} |
|
|
|
else |
|
|
|
|
|
|
|
|
|
|
|
switch (locationDto.Type) |
|
|
|
{ |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Wip; |
|
|
|
case EnumLocationType.SEMI: |
|
|
|
job.IsHasPackingCode = false; |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
|
break; |
|
|
|
case EnumLocationType.CUST: |
|
|
|
job.IsHasPackingCode = false; |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
|
break; |
|
|
|
case EnumLocationType.FG: |
|
|
|
job.IsHasPackingCode = false; |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
|
break; |
|
|
|
case EnumLocationType.RAW: |
|
|
|
job.IsHasPackingCode = true; |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
|
break; |
|
|
|
case EnumLocationType.THIRDPARTY: |
|
|
|
job.IsHasPackingCode = false; |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
|
break; |
|
|
|
case EnumLocationType.OUTSIDE: |
|
|
|
job.IsHasPackingCode = false; |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
|
break; |
|
|
|
case EnumLocationType.DimensionalStorehouse: |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Raw; |
|
|
|
job.IsHasPackingCode = false; |
|
|
|
break; |
|
|
|
|
|
|
|
case EnumLocationType.KittingWip: |
|
|
|
job.IsHasPackingCode = false; |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Wip; |
|
|
|
break; |
|
|
|
case EnumLocationType.WIP: |
|
|
|
job.IsHasPackingCode = false; |
|
|
|
job.UnplannedIssueType = EnumUnplannedIssueType.Wip; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
job.ItemCode = requestDtoDetail.ItemCode; |
|
|
|
job.ItemName = requestDtoDetail.ItemName; |
|
|
|
job.ItemDesc1 =requestDtoDetail.ItemDesc1; |
|
|
|
job.ItemDesc2 = requestDtoDetail.ItemDesc2; |
|
|
|
job.FromErpLocationCode = requestDtoDetail.LocationErpCode; |
|
|
|
job.Qty = requestDtoDetail.Qty; |
|
|
|
|
|
|
|
|
|
|
|
job.SetId(GuidGenerator.Create()); |
|
|
|
job.UnplannedIssueRequestNumber= requestDto.Number; |
|
|
|
job.JobType = EnumJobType.UnplannedIssueJob; |
|
|
@ -412,10 +464,10 @@ public class UnplannedIssueJobAppService |
|
|
|
jobfacDetail.Status = balanceDto.Status; |
|
|
|
jobfacDetail.HandledQty = balanceDto.Qty; |
|
|
|
jobfacDetail.Uom = balanceDto.Uom; |
|
|
|
|
|
|
|
//job.Details.Add(jobDetail);
|
|
|
|
job.FacDetails.Add(jobfacDetail); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (locationDto.Type == EnumLocationType.DimensionalStorehouse)//如果是立库的
|
|
|
|
{ |
|
|
|
await SendDimensionalStorehouseAsync().ConfigureAwait(false); |
|
|
@ -503,11 +555,11 @@ public class UnplannedIssueJobAppService |
|
|
|
var job = await _repository.GetAsync(id).ConfigureAwait(false); |
|
|
|
var facQuery=job.FacDetails.GroupBy(p => new { p.ItemCode }).Select(p=>new {ItemCode= p.Key.ItemCode,Qty= p.Sum(itm=>itm.RecommendQty) }); |
|
|
|
var query=dto.Details.GroupBy(p => new { p.ItemCode }).Select(p => new { ItemCode = p.Key.ItemCode, Qty = p.Sum(itm => itm.HandledQty) }); |
|
|
|
var errorQuery = from itm in facQuery join itm1 in query on itm.ItemCode equals itm1.ItemCode where itm1.Qty < itm.Qty select itm.ItemCode ; |
|
|
|
var errorQuery = from itm in facQuery join itm1 in query on itm.ItemCode equals itm1.ItemCode where itm1.Qty > itm.Qty select itm.ItemCode ; |
|
|
|
var errorList = errorQuery.ToList(); |
|
|
|
if (errorList.Count > 0) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException($"零件{string.Join(",",errorList)}实际数量大于推荐数量!"); |
|
|
|
throw new UserFriendlyException($"零件{string.Join(",",errorList)}实际数量不能大于推荐数量!"); |
|
|
|
} |
|
|
|
|
|
|
|
var handleDto = new UnplannedIssueJobDTO(); |
|
|
|