|
|
|
@@ -871,7 +871,8 @@ open class PickOrderService( |
|
|
|
CASE |
|
|
|
WHEN ill.status != 'available' THEN 'unavailable' |
|
|
|
WHEN (il.expiryDate IS NOT NULL AND il.expiryDate < CURDATE()) THEN 'expired' |
|
|
|
WHEN (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) < (spl.qty * (sales_iu.ratioN / sales_iu.ratioD)) THEN 'insufficient_stock' |
|
|
|
-- WHEN (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) < (spl.qty * (sales_iu.ratioN / sales_iu.ratioD)) THEN 'insufficient_stock' |
|
|
|
WHEN (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) < (spl.qty) THEN 'insufficient_stock' |
|
|
|
ELSE 'available' |
|
|
|
END as lotAvailability |
|
|
|
FROM fpsmsdb.suggested_pick_lot spl |
|
|
|
@@ -1014,7 +1015,7 @@ open class PickOrderService( |
|
|
|
) |
|
|
|
|
|
|
|
val saveSuggestedPickLots = suggestedPickLotService.saveAll(suggestions.suggestedList) |
|
|
|
|
|
|
|
|
|
|
|
pickOrderRepository.saveAll(pickOrders) |
|
|
|
|
|
|
|
val inventoryLotLines = inventoryLotLineRepository.findAllByIdIn( |
|
|
|
@@ -1243,11 +1244,12 @@ open class PickOrderService( |
|
|
|
(COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) as baseAvailableQty, |
|
|
|
sales_iu.ratioN, |
|
|
|
sales_iu.ratioD, |
|
|
|
CASE |
|
|
|
WHEN sales_iu.ratioN IS NOT NULL AND sales_iu.ratioD IS NOT NULL AND sales_iu.ratioD != 0 |
|
|
|
THEN (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) / (sales_iu.ratioN / sales_iu.ratioD) |
|
|
|
ELSE (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) |
|
|
|
END as convertedAvailableQty |
|
|
|
-- CASE |
|
|
|
-- WHEN sales_iu.ratioN IS NOT NULL AND sales_iu.ratioD IS NOT NULL AND sales_iu.ratioD != 0 |
|
|
|
-- THEN (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) / (sales_iu.ratioN / sales_iu.ratioD) |
|
|
|
-- ELSE (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) |
|
|
|
-- END as convertedAvailableQty |
|
|
|
COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0) as convertedAvailableQty |
|
|
|
FROM fpsmsdb.suggested_pick_lot spl |
|
|
|
JOIN fpsmsdb.inventory_lot_line ill ON ill.id = spl.suggestedLotLineId |
|
|
|
JOIN fpsmsdb.inventory_lot il ON il.id = ill.inventoryLotId |
|
|
|
@@ -1281,12 +1283,15 @@ open class PickOrderService( |
|
|
|
COUNT(CASE WHEN ill.status != 'available' THEN 1 END) as unavailableLots, |
|
|
|
COUNT(CASE WHEN (il.expiryDate IS NOT NULL AND il.expiryDate < CURDATE()) THEN 1 END) as expiredLots, |
|
|
|
-- ✅ 修复:使用销售单位进行比较 |
|
|
|
-- COUNT(CASE WHEN |
|
|
|
-- CASE |
|
|
|
-- WHEN sales_iu.ratioN IS NOT NULL AND sales_iu.ratioD IS NOT NULL AND sales_iu.ratioD != 0 |
|
|
|
-- THEN (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) / (sales_iu.ratioN / sales_iu.ratioD) |
|
|
|
-- ELSE (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) |
|
|
|
-- END < spl.qty |
|
|
|
-- THEN 1 END) as insufficientStockLots, |
|
|
|
COUNT(CASE WHEN |
|
|
|
CASE |
|
|
|
WHEN sales_iu.ratioN IS NOT NULL AND sales_iu.ratioD IS NOT NULL AND sales_iu.ratioD != 0 |
|
|
|
THEN (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) / (sales_iu.ratioN / sales_iu.ratioD) |
|
|
|
ELSE (COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) |
|
|
|
END < spl.qty |
|
|
|
(COALESCE(ill.inQty, 0) - COALESCE(ill.outQty, 0) - COALESCE(ill.holdQty, 0)) < spl.qty |
|
|
|
THEN 1 END) as insufficientStockLots, |
|
|
|
COUNT(CASE WHEN sol.status IN ('rejected', 'lot-change', 'determine1') THEN 1 END) as problematicStockOutLines, |
|
|
|
-- ✅ 检查单位不一致问题 |
|
|
|
|