PC原材料调拨出库与PDA签收逻辑完善

This commit is contained in:
2024-08-20 01:26:44 +08:00
parent 06610549b0
commit 29fd420bb2
9 changed files with 248 additions and 24 deletions

View File

@@ -96,8 +96,18 @@ namespace Tnb.WarehouseMgr
WmsRawmatTransferoutstockD wmsRawmatTransferoutstockD = await _db.Queryable<WmsRawmatTransferoutstockD>().FirstAsync(it => it.id == input.source_id);
WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = await _db.Queryable<WmsRawmatTransferoutstockH>().FirstAsync(it => it.id == wmsRawmatTransferoutstockD.bill_id);
List<WmsCarryH> items = await _db.Queryable<WmsCarryH>().Where(r => input.carrys.Contains(r.carry_code)).ToListAsync();
List<WmsCarryH> _items = await _db.Queryable<WmsCarryH>().Where(r => input.carrys.Select(c => c.carry_code).Contains(r.carry_code)).ToListAsync();
List<WmsCarryCode> wmsCarryCodes = await _db.Queryable<WmsCarryCode>().Where(r => _items.Select(c => c.id).Contains(r.carry_id)
&& r.material_id == wmsRawmatTransferoutstockD.matcode_id && r.code_batch == wmsRawmatTransferoutstockD.code_batch).ToListAsync();
List<WmsCarryH> items = new List<WmsCarryH>();
foreach (var carry in input.carrys.Select(c => c.carry_code))
{
items.Add(_items.Where(r => r.carry_code == carry).First());
}
foreach (var item in items)
{
if (item.is_lock == 1)
@@ -111,13 +121,20 @@ namespace Tnb.WarehouseMgr
}
}
List<WmsCarryCode> wmsCarryCodes = await _db.Queryable<WmsCarryCode>().Where(r => items.Select(c => c.id).Contains(r.carry_id)
&& r.material_id == wmsRawmatTransferoutstockD.matcode_id && r.code_batch == wmsRawmatTransferoutstockD.code_batch).ToListAsync();
decimal? sign_qty = 0;
decimal qty = wmsCarryCodes.Sum(c => c.codeqty);
if (wmsRawmatTransferoutstockD.actual_qty + qty > wmsRawmatTransferoutstockD.qty)
{
throw new AppFriendlyException($"本次出库数量{qty}已超过可出库数量{wmsRawmatTransferoutstockD.qty - wmsRawmatTransferoutstockD.actual_qty}", 500);
// 最后一个托盘的数量
decimal lastCarryQty = wmsCarryCodes.Where(r => r.carry_id == items[items.Count - 1].id).Sum(r => r.codeqty);
// 如果最后一个托盘数量小于超出的出库数量
if (lastCarryQty < wmsRawmatTransferoutstockD.actual_qty + qty - wmsRawmatTransferoutstockD.qty)
{
throw new AppFriendlyException($"本次出库数量{qty}已超过可出库数量{wmsRawmatTransferoutstockD.qty - wmsRawmatTransferoutstockD.actual_qty} 且无需选择{items[items.Count - 1].carry_code}", 500);
}
// 签收数量
sign_qty = lastCarryQty - (wmsRawmatTransferoutstockD.actual_qty + qty - wmsRawmatTransferoutstockD.qty);
}
await _db.Ado.BeginTranAsync();
@@ -145,6 +162,23 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException($@"没有可用的终点库位!请检查终点库位的锁定和占用状态", 500);
}
WmsRawmatTransferoutstockC wmsRawmatTransferoutstockC = new WmsRawmatTransferoutstockC();
wmsRawmatTransferoutstockC.bill_id = wmsRawmatTransferoutstockH.id;
wmsRawmatTransferoutstockC.mat_bill_id = wmsRawmatTransferoutstockD.id;
wmsRawmatTransferoutstockC.carry_id = wmsCarryH.id;
wmsRawmatTransferoutstockC.carry_code = wmsCarryH.carry_code;
wmsRawmatTransferoutstockC.create_id = input.create_id;
wmsRawmatTransferoutstockC.create_time = DateTime.Now;
wmsRawmatTransferoutstockC.startlocation_id = startLocation.id;
wmsRawmatTransferoutstockC.startlocation_code = startLocation.location_code;
wmsRawmatTransferoutstockC.endlocation_id = endLocation.id;
wmsRawmatTransferoutstockC.endlocation_code = endLocation.location_code;
decimal carryQty = wmsCarryCodes.Where(r => r.carry_id == wmsCarryH.id).Sum(r => r.codeqty);
wmsRawmatTransferoutstockC.qty = carryQty;
wmsRawmatTransferoutstockC.sign_qty = wmsCarryH.id == items[items.Count - 1].id && sign_qty > 0 ? sign_qty : carryQty;
await _db.Insertable(wmsRawmatTransferoutstockC).ExecuteCommandAsync();
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
commonCreatePretaskInput.startlocation_id = startLocation.id;
commonCreatePretaskInput.endlocation_id = endLocation.id;