From ef7bcca120401f955c614854d93fad551f18bb5c Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Mon, 13 Jul 2026 14:01:16 +0800 Subject: [PATCH] Cancel Pick Order --- .../pickOrder/service/PickOrderService.kt | 63 +++++++++++++++++++ .../pickOrder/web/PickOrderController.kt | 6 ++ 2 files changed, 69 insertions(+) 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 4f0bee0..a8eb5b2 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 @@ -296,6 +296,69 @@ open class PickOrderService( } } + open fun cancelPickOrders(pickOrderIds: List): MessageResponse { + try { + if (pickOrderIds.isEmpty()) { + return MessageResponse( + id = null, + name = "No pick orders selected", + code = "ERROR", + type = "pickorder", + message = "No pick orders selected", + errorPosition = null + ) + } + + val pickOrders = pickOrderRepository.findAllById(pickOrderIds) + if (pickOrders.isEmpty()) { + return MessageResponse( + id = null, + name = "Pick orders not found", + code = "ERROR", + type = "pickorder", + message = "Pick orders not found", + errorPosition = null + ) + } + + val notPending = pickOrders.filter { it.status != PickOrderStatus.PENDING } + if (notPending.isNotEmpty()) { + val codes = notPending.mapNotNull { it.code }.joinToString(", ") + return MessageResponse( + id = null, + name = "Only pending pick orders can be cancelled", + code = "ERROR", + type = "pickorder", + message = "Only pending pick orders can be cancelled: $codes", + errorPosition = null + ) + } + + pickOrders.forEach { pickOrder -> + pickOrder.deleted = true + } + pickOrderRepository.saveAll(pickOrders) + + return MessageResponse( + id = null, + name = "Pick orders cancelled successfully", + code = "SUCCESS", + type = "pickorder", + message = "Pick orders cancelled successfully", + errorPosition = null + ) + } catch (e: Exception) { + return MessageResponse( + id = null, + name = "Failed to cancel pick orders", + code = "ERROR", + type = "pickorder", + message = "Failed to cancel pick orders: ${e.message}", + errorPosition = null + ) + } + } + open fun releasePickOrders(pickOrderIds: List, assignTo: Long): MessageResponse { try { val pickOrders = pickOrderRepository.findAllById(pickOrderIds) diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt index 3434cc9..f154a4d 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt @@ -81,6 +81,12 @@ class PickOrderController( return pickOrderService.assignPickOrders(pickOrderIds, assignTo) } + @PostMapping("/cancel") + fun cancelPickOrders(@RequestBody request: Map): MessageResponse { + val pickOrderIds = (request["pickOrderIds"] as List<*>).map { it.toString().toLong() } + return pickOrderService.cancelPickOrders(pickOrderIds) + } + @PostMapping("/workbench/assign-v2") fun assignPickOrdersWorkbenchV2(@RequestBody request: Map): MessageResponse { val pickOrderIds = (request["pickOrderIds"] as List<*>).map { it.toString().toLong() }