diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JoPickOrderRecordRepository.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JoPickOrderRecordRepository.kt index dc1e1ed..df2f755 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JoPickOrderRecordRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JoPickOrderRecordRepository.kt @@ -8,9 +8,10 @@ import org.springframework.data.jpa.repository.Query import org.springframework.stereotype.Repository import java.io.Serializable import java.time.LocalDateTime - +import java.util.Optional @Repository interface JoPickOrderRecordRepository : JpaRepository { fun findByPickOrderId(pickOrderId: Long): List //fun findByTicketNoStartingWith(ticketPrefix: String): List + fun findByPickOrderIdAndItemId(pickOrderId: Long, itemId: Long): Optional } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt index 32c394c..eea33ef 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt @@ -452,9 +452,9 @@ open class JoPickOrderService( "routerArea" to row["routerArea"], "routerRoute" to row["routerRoute"], "uomShortDesc" to row["uomShortDesc"], - "match_status" to row["match_status"], - "match_by" to row["match_by"], - "match_qty" to row["match_qty"] + "matchStatus" to row["match_status"], + "matchBy" to row["match_by"], + "matchQty" to row["match_qty"] ) } ) @@ -727,9 +727,9 @@ open fun getCompletedJobOrderLotsHierarchical(userId: Long): Map { "routerArea" to row["routerArea"], "routerRoute" to row["routerRoute"], "uomShortDesc" to row["uomShortDesc"], - "match_status" to row["match_status"], - "match_by" to row["match_by"], - "match_qty" to row["match_qty"] + "matchStatus" to row["match_status"], + "matchBy" to row["match_by"], + "matchQty" to row["match_qty"] ) } ) @@ -905,50 +905,65 @@ open fun assignJobOrderPickOrderToUser(pickOrderId: Long, userId: Long): Message } } // ✅ Fix the updateMatchStatus method -open fun updateMatchStatus(pickOrderId: Long, itemId: Long): MessageResponse { - try { - println("=== Debug: updateMatchStatus ===") - println("pickOrderId: $pickOrderId, itemId: $itemId") - - val joPickOrder = joPickOrderRepository.findByPickOrderIdAndItemId(pickOrderId, itemId) - - if (joPickOrder.isEmpty) { + open fun updateMatchStatus(pickOrderId: Long, itemId: Long, userId: Long, qty: Int): MessageResponse { + try { + println("=== Debug: updateMatchStatus ===") + println("pickOrderId: $pickOrderId, itemId: $itemId, userId: $userId, qty: $qty") + + val joPickOrder = joPickOrderRepository.findByPickOrderIdAndItemId(pickOrderId, itemId) + + if (joPickOrder.isEmpty) { + return MessageResponse( + id = null, + name = null, + code = "ERROR", + type = "NOT_FOUND", + message = "Job Order Pick Order not found for pickOrderId: $pickOrderId, itemId: $itemId", + errorPosition = null + ) + } + + val joPickOrderEntity = joPickOrder.get() + + // ✅ 设置扫描状态和相关字段 + joPickOrderEntity.matchStatus = JoPickOrderStatus.scanned + joPickOrderEntity.matchBy = userId + joPickOrderEntity.matchQty = qty // ✅ 使用传递的 qty + joPickOrderRepository.save(joPickOrderEntity) + + // ✅ 同时更新 jo_pick_order_record + val joPickOrderRecord = joPickOrderRecordRepository.findByPickOrderIdAndItemId(pickOrderId, itemId) + if (joPickOrderRecord.isPresent) { + val recordEntity = joPickOrderRecord.get() + recordEntity.matchStatus = JoPickOrderStatus.scanned + recordEntity.matchBy = userId + recordEntity.matchQty = qty // ✅ 使用相同的 qty + joPickOrderRecordRepository.save(recordEntity) + } + + println("✅ Updated match status: pickOrderId=$pickOrderId, itemId=$itemId, matchQty=$qty") + + return MessageResponse( + id = null, + name = null, + code = "SUCCESS", + type = "UPDATED", + message = "Second QR scan status updated to scanned with quantity $qty", + errorPosition = null + ) + + } catch (e: Exception) { + println("❌ Error updating second QR scan status: ${e.message}") return MessageResponse( id = null, name = null, code = "ERROR", - type = "NOT_FOUND", - message = "Job Order Pick Order not found for pickOrderId: $pickOrderId, itemId: $itemId", + type = "EXCEPTION", + message = "Error updating second QR scan status: ${e.message}", errorPosition = null ) } - - val joPickOrderEntity = joPickOrder.get() - joPickOrderEntity.matchStatus = JoPickOrderStatus.scanned // ✅ Use enum instead of string - joPickOrderRepository.save(joPickOrderEntity) - - return MessageResponse( - id = null, - name = null, - code = "SUCCESS", - type = "UPDATED", - message = "Second QR scan status updated to checked", - errorPosition = null - ) - - } catch (e: Exception) { - println("❌ Error updating second QR scan status: ${e.message}") - return MessageResponse( - id = null, - name = null, - code = "ERROR", - type = "EXCEPTION", - message = "Error updating second QR scan status: ${e.message}", - errorPosition = null - ) } -} - open fun submitSecondScanQty(request: SecondScanSubmitRequest): MessageResponse { try { println("=== Debug: submitSecondScanQty ===") diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt index 119aa02..a3e3757 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt @@ -32,7 +32,8 @@ import org.springframework.context.NoSuchMessageException import java.io.OutputStream import java.io.UnsupportedEncodingException import java.text.ParseException - +import org.springframework.web.bind.annotation.* +import org.springframework.web.bind.annotation.RequestParam @RestController @RequestMapping("/jo") class JobOrderController( @@ -116,12 +117,14 @@ class JobOrderController( return joPickOrderService.assignJobOrderPickOrderToUser(pickOrderId, userId) } - @PostMapping("/second-scan-qr/{pickOrderId}/{itemId}") - fun updateMatchStatus( - @PathVariable pickOrderId: Long, - @PathVariable itemId: Long - ): MessageResponse { - return joPickOrderService.updateMatchStatus(pickOrderId, itemId) + @PostMapping("/update-match-status") + fun updateMatchStatus(@RequestBody request: UpdateMatchStatusRequest): MessageResponse { + return joPickOrderService.updateMatchStatus( + request.pickOrderId, + request.itemId, + request.userId, + request.qty + ) } @PostMapping("/second-scan-submit/{pickOrderId}/{itemId}") diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/UpdateMatchStatusRequest.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/UpdateMatchStatusRequest.kt new file mode 100644 index 0000000..85ce31e --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/UpdateMatchStatusRequest.kt @@ -0,0 +1,10 @@ +package com.ffii.fpsms.modules.jobOrder.web.model + +import jakarta.validation.constraints.NotNull + +data class UpdateMatchStatusRequest( + val pickOrderId: Long, + val itemId: Long, + val userId: Long, + val qty: Int +) \ 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/20250926_01_enson/01_altertable_enson.sql similarity index 100% rename from src/main/resources/db/changelog/changes/202510926_01_enson/01_altertable_enson.sql rename to src/main/resources/db/changelog/changes/20250926_01_enson/01_altertable_enson.sql diff --git a/src/main/resources/db/changelog/changes/202510927_01_enson/01_altertable_enson.sql b/src/main/resources/db/changelog/changes/20250927_01_enson/01_altertable_enson.sql similarity index 100% rename from src/main/resources/db/changelog/changes/202510927_01_enson/01_altertable_enson.sql rename to src/main/resources/db/changelog/changes/20250927_01_enson/01_altertable_enson.sql diff --git a/src/main/resources/db/changelog/changes/202510927_01_enson/02_altertable_enson.sql b/src/main/resources/db/changelog/changes/20250927_01_enson/02_altertable_enson.sql similarity index 100% rename from src/main/resources/db/changelog/changes/202510927_01_enson/02_altertable_enson.sql rename to src/main/resources/db/changelog/changes/20250927_01_enson/02_altertable_enson.sql diff --git a/src/main/resources/db/changelog/changes/202510927_01_enson/03_fix_bug.sql b/src/main/resources/db/changelog/changes/20250927_01_enson/03_fix_bug.sql similarity index 100% rename from src/main/resources/db/changelog/changes/202510927_01_enson/03_fix_bug.sql rename to src/main/resources/db/changelog/changes/20250927_01_enson/03_fix_bug.sql diff --git a/src/main/resources/db/changelog/changes/202511005_01_enson/01_altertable_enson.sql b/src/main/resources/db/changelog/changes/20251005_01_enson/01_altertable_enson.sql similarity index 100% rename from src/main/resources/db/changelog/changes/202511005_01_enson/01_altertable_enson.sql rename to src/main/resources/db/changelog/changes/20251005_01_enson/01_altertable_enson.sql diff --git a/src/main/resources/db/changelog/changes/202511005_01_enson/02_altertable_enson.sql b/src/main/resources/db/changelog/changes/20251005_01_enson/02_altertable_enson.sql similarity index 100% rename from src/main/resources/db/changelog/changes/202511005_01_enson/02_altertable_enson.sql rename to src/main/resources/db/changelog/changes/20251005_01_enson/02_altertable_enson.sql diff --git a/src/main/resources/db/changelog/changes/202511005_08_enson/01_altertable_enson1.sql b/src/main/resources/db/changelog/changes/20251005_08_enson/01_altertable_enson1.sql similarity index 100% rename from src/main/resources/db/changelog/changes/202511005_08_enson/01_altertable_enson1.sql rename to src/main/resources/db/changelog/changes/20251005_08_enson/01_altertable_enson1.sql