From 1e0f0341a3a29ad97017f45f73e2d40be26ee3b3 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Thu, 13 Nov 2025 18:48:23 +0800 Subject: [PATCH] update --- .../pickOrder/service/PickOrderService.kt | 41 ++++++++++------ .../pickOrder/web/PickOrderController.kt | 10 ++-- .../web/models/SearchPickOrderRequest.kt | 5 +- .../entity/projections/ProductProcessInfo.kt | 9 ++++ .../service/ProductProcessService.kt | 49 ++++++++++++++++++- .../web/ProductProcessController.kt | 3 +- .../web/model/SaveProductProcessRequest.kt | 2 +- 7 files changed, 91 insertions(+), 28 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 0a332d8..925d548 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 @@ -4542,16 +4542,26 @@ println("DEBUG sol polIds in linesResults: " + linesResults.mapNotNull { it["sto request: GetCompletedDoPickOrdersRequest ): List { return try { - val completedRecords = doPickOrderRecordRepository - .findByHandledByAndTicketStatusAndDeletedFalse(userId, DoPickOrderStatus.completed) - .filter { record -> - val matchTicket = request.ticketNo.isNullOrBlank() || - record.ticketNo?.contains(request.ticketNo, ignoreCase = true) == true - val matchShop = request.shopName.isNullOrBlank() || - record.shopName?.contains(request.shopName, ignoreCase = true) == true - matchTicket && matchShop - } - .filter { (it.recordId ?: 0L) > 0 } + val normalizedTargetDate = request.targetDate + ?.takeIf { it.isNotBlank() } + ?.replace("-", "") + println("request.targetDate: $request.targetDate") + println("request.shopName: $request.shopName") + println("request.deliveryNoteCode: $request.deliveryNoteCode") + val completedRecords = doPickOrderRecordRepository + .findByHandledByAndTicketStatusAndDeletedFalse(userId, DoPickOrderStatus.completed) + .filter { record -> + val matchTargetDate = normalizedTargetDate.isNullOrBlank() || + record.ticketCompleteDateTime + ?.format(DateTimeFormatter.ofPattern("yyyyMMdd")) + ?.contains(normalizedTargetDate, ignoreCase = true) == true + val matchShop = request.shopName.isNullOrBlank() || + record.shopName?.contains(request.shopName, ignoreCase = true) == true + val matchDeliveryNoteCode = request.deliveryNoteCode.isNullOrBlank() || + record.deliveryNoteCode?.contains(request.deliveryNoteCode, ignoreCase = true) == true + matchTargetDate && matchShop && matchDeliveryNoteCode + } + .filter { (it.recordId ?: 0L) > 0 } if (completedRecords.isEmpty()) { return emptyList() @@ -4563,11 +4573,12 @@ println("DEBUG sol polIds in linesResults: " + linesResults.mapNotNull { it["sto val filteredRecords = completedRecords.filter { record -> val lines = lineRecordsByRecordId[record.recordId] ?: emptyList() - val matchPo = request.pickOrderCode.isNullOrBlank() || - lines.any { it.pickOrderCode?.contains(request.pickOrderCode, ignoreCase = true) == true } - val matchDelivery = request.deliveryNo.isNullOrBlank() || - lines.any { it.deliveryOrderCode?.contains(request.deliveryNo, ignoreCase = true) == true } - matchPo && matchDelivery + + val matchTargetDate = normalizedTargetDate.isNullOrBlank() || + record.ticketCompleteDateTime + ?.format(DateTimeFormatter.ofPattern("yyyyMMdd")) + ?.contains(normalizedTargetDate, ignoreCase = true) == true + matchTargetDate }.sortedByDescending { it.ticketCompleteDateTime } if (filteredRecords.isEmpty()) { 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 f518b0c..2311d20 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 @@ -296,16 +296,14 @@ fun confirmLotSubstitution(@RequestBody req: LotSubstitutionConfirmRequest): Mes @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? + @RequestParam(required = false) targetDate: String?, + @RequestParam(required = false) deliveryNoteCode: String?, ): List { val request = GetCompletedDoPickOrdersRequest( - pickOrderCode = pickOrderCode, + targetDate = targetDate, shopName = shopName, - deliveryNo = deliveryNo, - ticketNo = ticketNo + deliveryNoteCode = deliveryNoteCode ) return pickOrderService.getCompletedDoPickOrders(userId, request) } diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SearchPickOrderRequest.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SearchPickOrderRequest.kt index cafbd0f..6a1b0b5 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SearchPickOrderRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SearchPickOrderRequest.kt @@ -16,10 +16,9 @@ data class SearchPickOrderRequest ( val pageNum: Int?, ) data class GetCompletedDoPickOrdersRequest( - val pickOrderCode: String? = null, + val targetDate: String? = null, val shopName: String? = null, - val deliveryNo: String? = null, - val ticketNo: String? = null + val deliveryNoteCode: String? = null, ) data class CompletedDoPickOrderResponse( val id: Long, diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/entity/projections/ProductProcessInfo.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/entity/projections/ProductProcessInfo.kt index 3d08230..332559f 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/entity/projections/ProductProcessInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/entity/projections/ProductProcessInfo.kt @@ -16,8 +16,17 @@ data class ProductProcessInfo( val endTime: LocalDateTime?, @JsonFormat(pattern = "yyyy-MM-dd") val date: LocalDate?, + + val bomId: Long?, val jobOrderId: Long?, + val jobOrderCode: String?, + val isDark: String?, + val isDense: Int?, + val isFloat: String?, + val outputQtyUom: String?, + val outputQty: Int?, + val productProcessLines: List? ) diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt index b966d63..c4ed5f2 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt @@ -455,12 +455,34 @@ open class ProductProcessService( open fun productProcessDetailfindbyjoid(joid: Long): List { val productProcesses = productProcessRepository.findByJobOrder_Id(joid) + val jobOrder = jobOrderRepository.findById(joid).orElse(null) + val bom = bomRepository.findById(jobOrder?.bom?.id?:0L).orElse(null) + fun calculateColourScore(value: Int?): String { + return when (value) { + 0 -> "淺" + 1 -> "深" + else -> "" + } + } + fun calculateFloatScore(value: Int?): String { + return when (value) { + 0 -> "沉" + 1 -> "浮" + else -> "" + } + } //val processId = productProcess.id ?: 0 return productProcesses.map { process -> ProductProcessInfo( id = process.id?:0, bomId = process.bom?.id?:0, jobOrderId = process.jobOrder?.id?:0, + jobOrderCode = jobOrder?.code?:"", + isDark = calculateColourScore(bom?.isDark?:0), + isDense = bom?.isDense?:0, + isFloat = calculateFloatScore(bom?.isFloat?:0), + outputQtyUom = bom?.outputQtyUom?:"", + outputQty = bom?.outputQty?.toInt()?:0, productProcessCode = process.productProcessCode?:"", status = process.status?:ProductProcessStatus.PENDING, startTime = process.startTime?:LocalDateTime.now(), @@ -494,6 +516,7 @@ open class ProductProcessService( ) } } + /* open fun productProcessDetailfindbyidtest(id: Long): ProductProcessInfo { val zero = BigDecimal.ZERO val productProcess = productProcessRepository.findById(id).orElse(null) @@ -536,6 +559,7 @@ open class ProductProcessService( } ) } + */ open fun createProductProcessByJobOrderId(jobOrderId: Long): MessageResponse { val jobOrder = jobOrderRepository.findById(jobOrderId).orElse(null) val bom = bomRepository.findById(jobOrder?.bom?.id ?: 0L).orElse(null) @@ -587,6 +611,26 @@ open class ProductProcessService( val user = userRepository.findById(request.operatorId?:0L).orElse(null) val bomProcess= bomProcessRepository.findById(productProcessLine?.bomProcess?.id?:0L).orElse(null) val bomProcessEquipment=bomProcess?.equipment + if (equipmentId != null && user != null) { + // 检查 equipmentId 是否与 bomProcessEquipment 匹配 + if (equipmentId != bomProcessEquipment?.id) { + println("productProcessLine id${request.productProcessLineId}") + println("operator id${request.operatorId}") + println("user ${user?.id}") + println("bomProcess ${bomProcess?.id}") + println("not match equipment id${equipmentId} and ${bomProcessEquipment?.id}") + + // 返回错误响应 + return MessageResponse( + id = request.productProcessLineId, + code = "400", + name = "Equipment Validation Failed", + type = "error", + message = "Input Equipment ID($equipmentId) and BOM Process Equipment ID(${bomProcessEquipment?.id}) not match", + errorPosition = "equipmentId" + ) + } + } if(equipmentId != null &&( equipmentId==bomProcessEquipment?.id)) { productProcessLine?.equipment = bomProcessEquipment @@ -599,6 +643,7 @@ open class ProductProcessService( println("user ${user?.id}") println("bomProcess ${bomProcess?.id}") println("not match equipment id${equipmentId} and ${bomProcessEquipment?.id}") + } if(user != null) { productProcessLine.operator = user @@ -646,8 +691,8 @@ open class ProductProcessService( seqNo = productProcessLine.seqNo?:0, name = productProcessLine.name?:"", description = productProcessLine.description?:"", - equipmentType = productProcessLine.equipmentType?:"", - equipment = productProcessLine.equipment?.name?:"", + equipmentType = productProcessLine.equipmentType, + equipmentId = productProcessLine.equipment?.id?:0, startTime = productProcessLine.startTime?:LocalDateTime.now(), endTime = productProcessLine.endTime?:LocalDateTime.now(), status = productProcessLine.status?:"", diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt index 0211ffd..943ac1b 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/web/ProductProcessController.kt @@ -150,11 +150,12 @@ class ProductProcessController( // 修复:返回正确的 DTO return productProcessService.getLinesAsDto(entity.productProcess?.id!!).find { it.id == entity.id!! }!! } - +/* @GetMapping("/demo/{id}") fun demo(@PathVariable id: Long): ProductProcessInfo { return productProcessService.productProcessDetailfindbyidtest(id) } + */ @GetMapping("/demo/joid/{joid}") fun demojoid(@PathVariable joid: Long): List { return productProcessService.productProcessDetailfindbyjoid(joid) diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt index 998e85b..6a2c43a 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt @@ -117,7 +117,7 @@ data class JobOrderProcessLineDetailResponse( val seqNo: Long?, val name: String?, val description: String?, - val equipment: String?, + val equipmentId: Long?, val startTime: LocalDateTime?, val endTime: LocalDateTime?,