|
|
@ -2,7 +2,6 @@ using System.Collections.Generic; |
|
|
|
using System.Linq; |
|
|
|
using System.Text.Json; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using AutoMapper.Internal; |
|
|
|
using Castle.Components.DictionaryAdapter; |
|
|
|
using Volo.Abp; |
|
|
|
using Volo.Abp.EventBus; |
|
|
@ -36,7 +35,7 @@ public class KittingIssueRequestEventHandler |
|
|
|
ILocationAppService locationAppService, |
|
|
|
IBalanceAppService balanceAppService, IProductionLineItemAppService productionLineItemAppService |
|
|
|
//, IKittingIssueRequestManager kittingIssueRequestManager
|
|
|
|
) |
|
|
|
) |
|
|
|
{ |
|
|
|
_kittingIssueJobAppService = kittingIssueJobAppService; |
|
|
|
_productionLineAppService = productionLineAppService; |
|
|
@ -223,11 +222,11 @@ public class KittingIssueRequestEventHandler |
|
|
|
detail.PositionCode = kittingIssueRequestDetail.PositionCode; |
|
|
|
detail.RecommendType = kittingIssueRequestDetail.RecommendType; |
|
|
|
detail.Uom = balance.Uom; |
|
|
|
detail.ItemCode= balance.ItemCode; |
|
|
|
detail.ItemDesc2= balance.ItemDesc2; |
|
|
|
detail.ItemDesc1= balance.ItemDesc1; |
|
|
|
detail.ItemName= balance.ItemName; |
|
|
|
detail.ProdLine= kittingIssueRequestDetail.ProdLine; |
|
|
|
detail.ItemCode = balance.ItemCode; |
|
|
|
detail.ItemDesc2 = balance.ItemDesc2; |
|
|
|
detail.ItemDesc1 = balance.ItemDesc1; |
|
|
|
detail.ItemName = balance.ItemName; |
|
|
|
detail.ProdLine = kittingIssueRequestDetail.ProdLine; |
|
|
|
detail.RequestQty = balance.Qty; |
|
|
|
detail.StdPackQty = kittingIssueRequestDetail.StdPackQty; |
|
|
|
detail.Status = balance.Status; |
|
|
@ -247,8 +246,8 @@ public class KittingIssueRequestEventHandler |
|
|
|
detail.RecommendFromProduceDate = balance.ProduceDate; |
|
|
|
detail.RecommendFromArriveDate = balance.ArriveDate; |
|
|
|
detail.RecommendFromQty = balance.Qty; |
|
|
|
detail.RecommendFromContainerCode= balance.ContainerCode; |
|
|
|
detail.RecommendFromPackingCode= balance.PackingCode; |
|
|
|
detail.RecommendFromContainerCode = balance.ContainerCode; |
|
|
|
detail.RecommendFromPackingCode = balance.PackingCode; |
|
|
|
|
|
|
|
detail.RecommendToPackingCode = balance.PackingCode; |
|
|
|
detail.RecommendToContainerCode = balance.ContainerCode; |
|
|
@ -283,7 +282,7 @@ public class KittingIssueRequestEventHandler |
|
|
|
detail.TransferLibFromProduceDate = balance.ProduceDate; |
|
|
|
detail.TransferLibFromArriveDate = balance.ArriveDate; |
|
|
|
detail.TransferLibFromQty = balance.Qty; |
|
|
|
detail.TransferLibFromContainerCode= balance.ContainerCode; |
|
|
|
detail.TransferLibFromContainerCode = balance.ContainerCode; |
|
|
|
detail.TransferLibFromPackingCode = balance.PackingCode; |
|
|
|
|
|
|
|
detail.TransferLibToPackingCode = balance.PackingCode; |
|
|
@ -294,7 +293,7 @@ public class KittingIssueRequestEventHandler |
|
|
|
detail.TransferLibToLot = balance.Lot; |
|
|
|
detail.TransferLibToProduceDate = balance.ProduceDate; |
|
|
|
detail.TransferLibToArriveDate = balance.ArriveDate; |
|
|
|
detail.TransferLibToQty = balance.Qty; |
|
|
|
detail.TransferLibToQty = balance.Qty; |
|
|
|
detail.TransferLibToPackingCode = balance.PackingCode; |
|
|
|
|
|
|
|
detail.TransferLibFromLocationArea = balance.LocationArea; |
|
|
@ -334,7 +333,7 @@ public class KittingIssueRequestEventHandler |
|
|
|
List<BalanceDTO> useBalanceList) |
|
|
|
{ |
|
|
|
var inputJobs = new List<KittingIssueJobEditInput>(); |
|
|
|
|
|
|
|
|
|
|
|
//已用的库存的集合
|
|
|
|
useBalanceList = useBalanceList; |
|
|
|
|
|
|
@ -343,7 +342,7 @@ public class KittingIssueRequestEventHandler |
|
|
|
//当前零件的集合
|
|
|
|
var inputDetails = kittingIssueRequestDetailList; |
|
|
|
//获取请求下 这个零件和这个库位一个需要多少箱
|
|
|
|
var sumBoxQty = inputDetails.Sum(p => p.BoxQty-p.IssuedQty); |
|
|
|
var sumBoxQty = inputDetails.Sum(p => p.BoxQty - p.IssuedQty); |
|
|
|
//获取生产线
|
|
|
|
var productionLineDto = await _productionLineAppService |
|
|
|
.GetByLocationCodeAsync(inputDetails.First().ToLocationCode).ConfigureAwait(false); |
|
|
@ -521,33 +520,32 @@ public class KittingIssueRequestEventHandler |
|
|
|
{ |
|
|
|
var usableLocationCode = |
|
|
|
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.RawLocationCodeListJson); |
|
|
|
if (!usableLocationCode.Any()) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
//获取可用库存
|
|
|
|
var input = new RecommendBalanceRequestInput |
|
|
|
if (usableLocationCode.Any()) |
|
|
|
{ |
|
|
|
ItemCode = kittingIssueRequestDetail.ItemCode, |
|
|
|
Qty = decimal.MaxValue, |
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
Locations = |
|
|
|
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.RawLocationCodeListJson), |
|
|
|
IsPackingCode = true |
|
|
|
}; |
|
|
|
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); |
|
|
|
|
|
|
|
//因为是按箱叫料 先把值赋值给箱数量上
|
|
|
|
kittingIssueRequestDetail.BoxQty = kittingIssueRequestDetail.Qty; |
|
|
|
|
|
|
|
if (usableList.Any()) |
|
|
|
{ |
|
|
|
//因为是原料所以按箱叫料
|
|
|
|
kittingIssueJobEditInputs.AddRange( |
|
|
|
await CreateKittingIssueJobWithBoxQtyTypeAsync(kittingIssueRequest, |
|
|
|
new EditableList<KittingIssueRequestDetail> { kittingIssueRequestDetail }, usableList, |
|
|
|
useBalanceList).ConfigureAwait(false)); |
|
|
|
//获取可用库存
|
|
|
|
var input = new RecommendBalanceRequestInput |
|
|
|
{ |
|
|
|
ItemCode = kittingIssueRequestDetail.ItemCode, |
|
|
|
Qty = decimal.MaxValue, |
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
Locations = |
|
|
|
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.RawLocationCodeListJson), |
|
|
|
IsPackingCode = true |
|
|
|
}; |
|
|
|
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); |
|
|
|
|
|
|
|
//因为是按箱叫料 先把值赋值给箱数量上
|
|
|
|
kittingIssueRequestDetail.BoxQty = kittingIssueRequestDetail.Qty; |
|
|
|
|
|
|
|
if (usableList.Any()) |
|
|
|
{ |
|
|
|
//因为是原料所以按箱叫料
|
|
|
|
kittingIssueJobEditInputs.AddRange( |
|
|
|
await CreateKittingIssueJobWithBoxQtyTypeAsync(kittingIssueRequest, |
|
|
|
new EditableList<KittingIssueRequestDetail> { kittingIssueRequestDetail }, |
|
|
|
usableList, |
|
|
|
useBalanceList).ConfigureAwait(false)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -556,56 +554,57 @@ public class KittingIssueRequestEventHandler |
|
|
|
{ |
|
|
|
var usableLocationCode = |
|
|
|
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.ProductLocationCodeListJson); |
|
|
|
if (!usableLocationCode.Any()) |
|
|
|
if (usableLocationCode.Any()) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
//获取可用库存
|
|
|
|
var input = new RecommendBalanceRequestInput |
|
|
|
{ |
|
|
|
ItemCode = groupbyItemCodeAndProdLine.Key.ItemCode, |
|
|
|
Qty = kittingIssueRequestDetail.Qty, |
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
Locations = |
|
|
|
JsonSerializer.Deserialize<List<string>>(productionLineItemDto.ProductLocationCodeListJson), |
|
|
|
IsPackingCode = false |
|
|
|
}; |
|
|
|
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); |
|
|
|
var temp = usableList.ToList(); |
|
|
|
|
|
|
|
foreach (var balanceDto in usableList) //计算已经用过的库存
|
|
|
|
{ |
|
|
|
var useBalanceDto = useBalanceList.Where(p => |
|
|
|
p.ItemCode == balanceDto.ItemCode && p.LocationCode == balanceDto.LocationCode && |
|
|
|
p.Lot == balanceDto.Lot && p.Status == balanceDto.Status && |
|
|
|
p.PackingCode == balanceDto.PackingCode); |
|
|
|
if (useBalanceDto.Any()) //如果不为NULL,就是用过了的库存 需要减去使用量
|
|
|
|
//获取可用库存
|
|
|
|
var input = new RecommendBalanceRequestInput |
|
|
|
{ |
|
|
|
ItemCode = groupbyItemCodeAndProdLine.Key.ItemCode, |
|
|
|
Qty = kittingIssueRequestDetail.Qty, |
|
|
|
Statuses = new EditableList<EnumInventoryStatus> { EnumInventoryStatus.OK }, |
|
|
|
Locations = |
|
|
|
JsonSerializer.Deserialize<List<string>>(productionLineItemDto |
|
|
|
.ProductLocationCodeListJson), |
|
|
|
IsPackingCode = false |
|
|
|
}; |
|
|
|
var usableList = await _balanceAppService.GetUsableListAsync(input).ConfigureAwait(false); |
|
|
|
var temp = usableList.ToList(); |
|
|
|
|
|
|
|
foreach (var balanceDto in usableList) //计算已经用过的库存
|
|
|
|
{ |
|
|
|
balanceDto.Qty -= useBalanceDto.Sum(p => p.Qty); |
|
|
|
if (balanceDto.Qty <= 0) |
|
|
|
var useBalanceDto = useBalanceList.Where(p => |
|
|
|
p.ItemCode == balanceDto.ItemCode && p.LocationCode == balanceDto.LocationCode && |
|
|
|
p.Lot == balanceDto.Lot && p.Status == balanceDto.Status && |
|
|
|
p.PackingCode == balanceDto.PackingCode); |
|
|
|
if (useBalanceDto.Any()) //如果不为NULL,就是用过了的库存 需要减去使用量
|
|
|
|
{ |
|
|
|
temp.Remove(balanceDto); |
|
|
|
balanceDto.Qty -= useBalanceDto.Sum(p => p.Qty); |
|
|
|
if (balanceDto.Qty <= 0) |
|
|
|
{ |
|
|
|
temp.Remove(balanceDto); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
usableList = temp; |
|
|
|
usableList = temp; |
|
|
|
|
|
|
|
kittingIssueJobEditInputs.AddRange( |
|
|
|
await CreateKittingIssueJobWithQtyTypeAsync(kittingIssueRequest, |
|
|
|
new List<KittingIssueRequestDetail> { kittingIssueRequestDetail }, temp, |
|
|
|
useBalanceList).ConfigureAwait(false)); |
|
|
|
kittingIssueJobEditInputs.AddRange( |
|
|
|
await CreateKittingIssueJobWithQtyTypeAsync(kittingIssueRequest, |
|
|
|
new List<KittingIssueRequestDetail> { kittingIssueRequestDetail }, temp, |
|
|
|
useBalanceList).ConfigureAwait(false)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (kittingIssueJobEditInputs.Count > 0)//有库存 可以创建任务
|
|
|
|
if (kittingIssueJobEditInputs.Count > 0) //有库存 可以创建任务
|
|
|
|
{ |
|
|
|
//新增任务
|
|
|
|
var addKittingIssueJobDtos= await _kittingIssueJobAppService.CreateManyAsync(kittingIssueJobEditInputs).ConfigureAwait(false); |
|
|
|
var addKittingIssueJobDtos = await _kittingIssueJobAppService.CreateManyAsync(kittingIssueJobEditInputs) |
|
|
|
.ConfigureAwait(false); |
|
|
|
|
|
|
|
await UpdateKittingIssueRequestDetailQtyAsync(kittingIssueRequest, addKittingIssueJobDtos).ConfigureAwait(false); |
|
|
|
await UpdateKittingIssueRequestDetailQtyAsync(kittingIssueRequest, addKittingIssueJobDtos) |
|
|
|
.ConfigureAwait(false); |
|
|
|
|
|
|
|
return addKittingIssueJobDtos; |
|
|
|
} |
|
|
@ -614,15 +613,17 @@ public class KittingIssueRequestEventHandler |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 修改请求的 已发 已收数量
|
|
|
|
/// 修改请求的 已发 已收数量
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="kittingIssueRequest"></param>
|
|
|
|
/// <param name="addKittingIssueJobDtos"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task UpdateKittingIssueRequestDetailQtyAsync(KittingIssueRequest kittingIssueRequest, List<KittingIssueJobDTO> addKittingIssueJobDtos) |
|
|
|
private async Task UpdateKittingIssueRequestDetailQtyAsync(KittingIssueRequest kittingIssueRequest, |
|
|
|
List<KittingIssueJobDTO> addKittingIssueJobDtos) |
|
|
|
{ |
|
|
|
//原有任务
|
|
|
|
var existKittingIssueJobDtos = await _kittingIssueJobAppService.GetByRequestNumberAsync(kittingIssueRequest.Number) |
|
|
|
var existKittingIssueJobDtos = await _kittingIssueJobAppService |
|
|
|
.GetByRequestNumberAsync(kittingIssueRequest.Number) |
|
|
|
.ConfigureAwait(false); |
|
|
|
|
|
|
|
//新增的任务和已有的任务总和
|
|
|
|