From 8b56cb3ee558a24b1c2d729ac34eb9c1904fa8dd Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Tue, 17 Mar 2026 09:45:32 +0800 Subject: [PATCH] update --- .../service/PickExecutionIssueService.kt | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt index 88ab492..e78d813 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt @@ -144,7 +144,41 @@ open class PickExecutionIssueService( val missQty = request.missQty ?: BigDecimal.ZERO val badItemQty = request.badItemQty ?: BigDecimal.ZERO val badReason = request.badReason ?: "quantity_problem" - + val stockOutLines = stockOutLineRepository + .findByPickOrderLineIdAndInventoryLotLineIdAndDeletedFalse( + request.pickOrderLineId, + request.lotId ?: 0L + ) + + val currentStatus = stockOutLines.firstOrNull()?.status ?: "" + + if (currentStatus.equals("pending", ignoreCase = true) + && actualPickQty > BigDecimal.ZERO + && missQty == BigDecimal.ZERO + && badItemQty == BigDecimal.ZERO + ) { + return MessageResponse( + id = null, + name = "Invalid issue for pending stock out line", + code = "ERROR", + type = "pick_execution_issue", + message = "Cannot submit only actual pick qty when stock out line is pending. Please rescan the lot or use normal pick flow.", + errorPosition = null + ) + } + val lotRemainAvailable = bookQty // 当前 lot 剩余 + val maxAllowed = requiredQty + lotRemainAvailable + + if (actualPickQty > maxAllowed) { + return MessageResponse( + id = null, + name = "Actual pick qty too large", + code = "ERROR", + type = "pick_execution_issue", + message = "Actual pick qty cannot exceed required qty plus lot remaining available.", + errorPosition = null + ) + } println("=== Quantity Summary ===") println(" Required Qty: $requiredQty") println(" Actual Pick Qty: $actualPickQty")