PC原材料调拨出库与PDA签收逻辑完善
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user