From b2087123da861b2b19337da1ea9a58f41f3efafa Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Fri, 26 Sep 2025 18:41:38 +0800 Subject: [PATCH] update --- .../deliveryOrder/entity/DoPickOrder.kt | 3 + .../pickOrder/service/PickOrderService.kt | 155 ++++++++++++++++-- .../pickOrder/web/PickOrderController.kt | 17 ++ .../01_altertable_enson.sql | 5 + 4 files changed, 170 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/db/changelog/changes/202510926_01_enson/01_altertable_enson.sql diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrder.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrder.kt index 7db8d11..4e0f860 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrder.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrder.kt @@ -62,6 +62,9 @@ class DoPickOrder { @Column(name = "deleted") var deleted: Boolean = false + + @Column(name = "hide", nullable = false) + var hide: Boolean = false // Default constructor for Hibernate constructor() 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 29f9ac5..d62a548 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 @@ -80,7 +80,9 @@ open class PickOrderService( private val doPickOrderService: DoPickOrderService, private val routerRepository: RouterRepository, private val doPickOrderRecordRepository: DoPickOrderRecordRepository, - private val doPickOrderRepository: DoPickOrderRepository + private val doPickOrderRepository: DoPickOrderRepository, + private val userRepository: UserRepository + ) : AbstractBaseEntityService(jdbcDao, pickOrderRepository) { @@ -2765,15 +2767,18 @@ if (existingRecords.isNotEmpty()) { println("❌ Pick order not found with ID: $pickOrderId") return emptyList() } - + if (doPickOrderRepository.findByPickOrderId(pickOrderId).firstOrNull()?.hide == true) { + println("🔍 Pick order $pickOrderId is hidden, returning empty list") + return emptyList() + } println("🔍 Found pick order: ${pickOrder.code}, type: ${pickOrder.type?.value}, status: ${pickOrder.status?.value}") if (pickOrder.type?.value != "do") { println("❌ Pick order is not of type 'do': ${pickOrder.type?.value}") return emptyList() } - - if (pickOrder.status?.value !in listOf("assigned", "released", "picking")) { + val allowedstatuses= listOf("assigned", "released", "picking", "completed") + if (pickOrder.status?.value !in allowedstatuses) { println("❌ Pick order status is not in allowed states: ${pickOrder.status?.value}") return emptyList() } @@ -3164,19 +3169,21 @@ open fun getAllPickOrderLotsWithDetailsHierarchical(userId: Long): Map + val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrder.id!!) + doPickOrders.none { it.hide } // 只显示 hide = false 的订单 + } // ✅ NEW LOGIC: Filter based on assignment and status - val filteredPickOrders = if (allAssignedPickOrders.isNotEmpty()) { + val filteredPickOrders = if (visiblePickOrders.isNotEmpty()) { // Check if there are any RELEASED orders assigned to this user (active work) val assignedReleasedOrders = allAssignedPickOrders.filter { it.status == PickOrderStatus.RELEASED && it.assignTo?.id == userId @@ -3666,4 +3673,132 @@ open fun confirmLotSubstitution(req: LotSubstitutionConfirmRequest): MessageResp errorPosition = null ) } -} \ No newline at end of file +open fun updateDoPickOrderHideStatus(pickOrderId: Long, hide: Boolean): MessageResponse { + return try { + // ✅ 修复:根据 pickOrderId 查找 do_pick_order 记录 + val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId) + if (doPickOrders.isEmpty()) { + MessageResponse( + id = null, + name = "Pick order not found", + code = "ERROR", + type = "pickorder", + message = "No do_pick_order found for pickOrderId $pickOrderId", + errorPosition = "pickOrderId" + ) + } else { + // ✅ 更新所有相关的 do_pick_order 记录 + doPickOrders.forEach { doPickOrder -> + doPickOrder.hide = hide + doPickOrderRepository.save(doPickOrder) + } + + MessageResponse( + id = null, + name = "Hide status updated", + code = "SUCCESS", + type = "pickorder", + message = "Updated hide status for ${doPickOrders.size} do_pick_order records to $hide", + errorPosition = null + ) + } + } catch (e: Exception) { + println("❌ Error in updateDoPickOrderHideStatus: ${e.message}") + e.printStackTrace() + MessageResponse( + id = null, + name = "Failed to update hide status", + code = "ERROR", + type = "pickorder", + message = "Failed to update hide status: ${e.message}", + errorPosition = null + ) + } +} +open fun getCompletedDoPickOrders( + userId: Long, + pickOrderCode: String?, + shopName: String?, + deliveryNo: String?, + ticketNo: String? +): List> { + return try { + println("=== getCompletedDoPickOrders ===") + println("userId: $userId") + println("pickOrderCode: $pickOrderCode") + println("shopName: $shopName") + println("deliveryNo: $deliveryNo") + println("ticketNo: $ticketNo") + + // ✅ 修复:使用正确的方法获取已完成的 pick orders + val user = userRepository.findById(userId).orElse(null) + if (user == null) { + println("User not found: $userId") + return emptyList() + } + + // ✅ 修复:使用正确的方法获取已完成的 pick orders + val completedPickOrders = pickOrderRepository.findAllByAssignToIdAndStatusIn( + userId, + listOf(PickOrderStatus.COMPLETED) + ) + + println("Found ${completedPickOrders.size} completed pick orders for user $userId") + + val result = mutableListOf>() + + for (pickOrder in completedPickOrders) { + // 获取该 pick order 的 FG pick orders + val fgPickOrders = getFgPickOrdersByPickOrderId(pickOrder.id!!) + + if (fgPickOrders.isNotEmpty()) { + val firstFgOrder = fgPickOrders[0] as Map // ✅ 修复:转换为 Map + + // ✅ 修复:使用正确的属性名进行搜索过滤,并处理空值 + val matchesSearch = when { + pickOrderCode != null && !(pickOrder.code?.contains(pickOrderCode, ignoreCase = true) ?: false) -> false + shopName != null && !((firstFgOrder["shopName"] as? String)?.contains(shopName, ignoreCase = true) ?: false) -> false + deliveryNo != null && !((firstFgOrder["deliveryNo"] as? String)?.contains(deliveryNo, ignoreCase = true) ?: false) -> false + ticketNo != null && !((firstFgOrder["ticketNo"] as? String)?.contains(ticketNo, ignoreCase = true) ?: false) -> false + else -> true + } + + if (matchesSearch) { + result.add(mapOf( + "id" to pickOrder.id, + "pickOrderId" to pickOrder.id, + "pickOrderCode" to pickOrder.code, + "pickOrderConsoCode" to pickOrder.consoCode, + "pickOrderStatus" to pickOrder.status.toString(), + "deliveryOrderId" to firstFgOrder["deliveryOrderId"], + "deliveryNo" to firstFgOrder["deliveryNo"], + "deliveryDate" to firstFgOrder["deliveryDate"], + "shopId" to firstFgOrder["shopId"], + "shopCode" to firstFgOrder["shopCode"], + "shopName" to firstFgOrder["shopName"], + "shopAddress" to firstFgOrder["shopAddress"], + "ticketNo" to firstFgOrder["ticketNo"], + "shopPoNo" to firstFgOrder["shopPoNo"], + "numberOfCartons" to firstFgOrder["numberOfCartons"], + "truckNo" to firstFgOrder["truckNo"], + "storeId" to firstFgOrder["storeId"], + "completedDate" to (pickOrder.completeDate?.toString() ?: pickOrder.modified?.toString()), + "fgPickOrders" to fgPickOrders + )) + } + } + } + + // 按完成时间倒序排列 + result.sortByDescending { it["completedDate"] as String? } + + println("Returning ${result.size} completed DO pick orders") + result + + } catch (e: Exception) { + println("❌ Error in getCompletedDoPickOrders: ${e.message}") + e.printStackTrace() + emptyList() + } +} +} 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 962a4ae..fc7624d 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 @@ -287,4 +287,21 @@ fun getPickOrdersByStore(@PathVariable storeId: String): Map { fun confirmLotSubstitution(@RequestBody req: LotSubstitutionConfirmRequest): MessageResponse { return pickOrderService.confirmLotSubstitution(req) } +@PostMapping("/update-hide-status/{pickOrderId}") +fun updatePickOrderHideStatus( + @PathVariable pickOrderId: Long, + @RequestParam hide: Boolean +): MessageResponse { + return pickOrderService.updateDoPickOrderHideStatus(pickOrderId, hide) +} +@GetMapping("/completed-do-pick-orders/{userId}") +fun getCompletedDoPickOrders( + @PathVariable userId: Long, + @RequestParam(required = false) pickOrderCode: String?, + @RequestParam(required = false) shopName: String?, + @RequestParam(required = false) deliveryNo: String?, + @RequestParam(required = false) ticketNo: String? +): List> { + return pickOrderService.getCompletedDoPickOrders(userId, pickOrderCode, shopName, deliveryNo, ticketNo) +} } \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/202510926_01_enson/01_altertable_enson.sql b/src/main/resources/db/changelog/changes/202510926_01_enson/01_altertable_enson.sql new file mode 100644 index 0000000..73d5693 --- /dev/null +++ b/src/main/resources/db/changelog/changes/202510926_01_enson/01_altertable_enson.sql @@ -0,0 +1,5 @@ +-- liquibase formatted sql +-- changeset enson:altertable_enson + + ALTER TABLE `fpsmsdb`.`do_pick_order` + ADD COLUMN `hide` TINYINT NULL DEFAULT '0' AFTER `deleted`;