From 4171bcec257d1de32383c98150d9612142d51d2b Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Tue, 2 Sep 2025 21:36:26 +0800 Subject: [PATCH] update ratio --- .../pickOrder/service/PickOrderService.kt | 29 +++++++++++-------- .../stock/service/SuggestedPickLotService.kt | 2 +- .../stock/web/SuggestedPickLotController.kt | 11 +++++++ 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt index f00fa94..c3b8236 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt @@ -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, -- ✅ 检查单位不一致问题 diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt index ee98b12..aa7ada5 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt @@ -88,7 +88,7 @@ open class SuggestedPickLotService( pols.forEach { line -> val salesUnit = line.item?.id?.let { itemUomService.findSalesUnitByItemId(it) } val lotLines = availableInventoryLotLines[line.item?.id].orEmpty() - val ratio = (salesUnit?.ratioN ?: one).divide(salesUnit?.ratioD ?: one, 10, RoundingMode.HALF_UP) + val ratio = one // (salesUnit?.ratioN ?: one).divide(salesUnit?.ratioD ?: one, 10, RoundingMode.HALF_UP) // ✅ 修复:remainingQty 应该是销售单位,不需要乘以 ratio var remainingQty = line.qty ?: zero diff --git a/src/main/java/com/ffii/fpsms/modules/stock/web/SuggestedPickLotController.kt b/src/main/java/com/ffii/fpsms/modules/stock/web/SuggestedPickLotController.kt index 4cd9141..80e7ee2 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/web/SuggestedPickLotController.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/web/SuggestedPickLotController.kt @@ -11,6 +11,10 @@ import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController import com.ffii.fpsms.modules.master.web.models.MessageResponse +import com.ffii.fpsms.modules.pickOrder.entity.PickOrder +import com.ffii.fpsms.modules.stock.web.model.SuggestedPickLotForPolRequest +import kotlin.jvm.optionals.getOrDefault +import kotlin.jvm.optionals.getOrNull @RequestMapping("/suggestedPickLot") @RestController @@ -25,6 +29,13 @@ class SuggestedPickLotController( // return suggestedPickLotService.suggestionForPickOrderLines(test1) // } + @GetMapping("/test/{pickOrderId}") + fun test(@PathVariable pickOrderId: Long): Any { + val test1 = pickOrderRepository.findById(pickOrderId).getOrDefault(PickOrder()) + + return suggestedPickLotService.suggestionForPickOrderLines(SuggestedPickLotForPolRequest(pickOrderLines = test1.pickOrderLines)) + } + @PostMapping("/resuggest/{pickOrderId}") fun resuggestPickOrder(@PathVariable pickOrderId: Long): MessageResponse { return suggestedPickLotService.resuggestPickOrder(pickOrderId)