Browse Source

修改 kitting叫料

dev_DY_CC
郑勃旭 1 year ago
parent
commit
5bdd2f1ebf
  1. 157
      be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/KittingIssueRequestEventHandler.cs

157
be/Modules/Store/src/Win_in.Sfs.Wms.Store.Event/Requests/KittingIssueRequestEventHandler.cs

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

Loading…
Cancel
Save