From 7721f8e0f7ba3addf50b77f5a6e42700ce43156e Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Tue, 3 Feb 2026 16:00:45 +0800 Subject: [PATCH] update --- .../service/ProductProcessService.kt | 71 ++++++++----------- .../web/ProductProcessController.kt | 10 ++- .../web/model/SaveProductProcessRequest.kt | 6 +- 3 files changed, 42 insertions(+), 45 deletions(-) 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 859c088..4a09d90 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 @@ -11,12 +11,12 @@ import com.ffii.fpsms.modules.master.entity.EquipmentDetailRepository import com.ffii.fpsms.modules.productProcess.entity.projections.jobOrderLineInfo import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional -import java.time.LocalDate + import java.time.LocalDateTime import java.time.temporal.ChronoUnit import com.ffii.fpsms.modules.user.entity.UserRepository import com.ffii.fpsms.modules.user.entity.User -import java.time.format.DateTimeFormatter + import com.ffii.fpsms.modules.master.entity.BomRepository import com.ffii.fpsms.modules.master.entity.BomProcessRepository import com.ffii.fpsms.modules.jobOrder.entity.JobOrderRepository @@ -50,6 +50,9 @@ import com.ffii.fpsms.modules.master.entity.UomConversionRepository import com.ffii.fpsms.modules.master.entity.ItemUomRespository import com.ffii.fpsms.modules.master.web.models.* import java.math.RoundingMode +import java.time.LocalDate +import java.time.format.DateTimeFormatter + @Service @Transactional open class ProductProcessService( @@ -1783,42 +1786,35 @@ val sufficientStockQty = bomMaterials ) } -open fun getJobProcessStatus(): List { - val productProcesses = productProcessRepository.findAllByDeletedIsFalse() - .filter { it.status != ProductProcessStatus.COMPLETED } + open fun getJobProcessStatus(date: LocalDate?): List { + val productProcesses = productProcessRepository.findAllByDeletedIsFalse() + .let { list -> if (date == null) list else list.filter { it.date == date } } + return productProcesses.mapNotNull { process -> val jobOrder = jobOrderRepository.findById(process.jobOrder?.id ?: 0L).orElse(null) - - // Filter out jobOrders in PLANNING status - if (jobOrder?.status == JobOrderStatus.PLANNING) { - return@mapNotNull null - } - + + // 仍然保留:PLANNING 不显示(如你也要显示,删掉这段) + if (jobOrder?.status == JobOrderStatus.PLANNING) return@mapNotNull null + val lines = productProcessLineRepository.findByProductProcess_Id(process.id ?: 0L) .sortedBy { it.seqNo } - val bom=bomRepository.findById(process.bom?.id ?: 0L).orElse(null) - // Calculate planEndTime based on first start time + remaining processing time val firstStartTime = lines.firstOrNull { it.startTime != null }?.startTime val calculatedPlanEndTime = if (firstStartTime != null) { - // Calculate total remaining processing time (in minutes) for unfinished processes var totalRemainingMinutes = 0L lines.forEach { line -> if (line.endTime == null) { - // Process is not finished, add its processing time totalRemainingMinutes += (line.processingTime ?: 0).toLong() totalRemainingMinutes += (line.setupTime ?: 0).toLong() totalRemainingMinutes += (line.changeoverTime ?: 0).toLong() } } - // Add remaining time to first start time firstStartTime.plusMinutes(totalRemainingMinutes) } else { - // No process has started yet, use original planEndTime jobOrder?.planEnd } - + JobProcessStatusResponse( jobOrderId = jobOrder?.id ?: 0L, jobOrderCode = jobOrder?.code ?: "", @@ -1829,29 +1825,20 @@ open fun getJobProcessStatus(): List { processes = (0 until 6).map { index -> if (index < lines.size) { val line = lines[index] - val equipmentDetailId = line.equipmentDetailId - - // Use line's own data instead of indexing into bomProcesses - val equipmentCode = when { - equipmentDetailId != null -> { - equipmentDetailRepository.findById(equipmentDetailId).orElse(null)?.code ?: "" - } - line.equipment?.code != null -> { - line.equipment?.code ?: "" - } - else -> { - // Safely access bomProcess - it might be deleted - try { - line.bomProcess?.equipment?.code ?: "" - } catch (e: jakarta.persistence.EntityNotFoundException) { - // BomProcess was deleted, fallback to equipmentType - "" - }.takeIf { it.isNotEmpty() } ?: (line.equipmentType ?: "") - } + + // equipment.description + equipment_detail.name + val equipmentDescription = line.equipment?.description + ?: try { line.bomProcess?.equipment?.description } catch (_: jakarta.persistence.EntityNotFoundException) { null } + ?: line.equipmentType + + val equipmentDetailName = line.equipmentDetailId?.let { id -> + equipmentDetailRepository.findById(id).orElse(null)?.name } - + ProcessStatusInfo( - equipmentCode = equipmentCode, + processName = line.name, // ✅ 新增:工序名称 + equipmentDescription = equipmentDescription, // ✅ 替代 equipmentCode + equipmentDetailName = equipmentDetailName, // ✅ 新增 startTime = line.startTime, endTime = line.endTime, processingTime = line.processingTime, @@ -1861,13 +1848,15 @@ open fun getJobProcessStatus(): List { ) } else { ProcessStatusInfo( + processName = null, + equipmentDescription = null, + equipmentDetailName = null, startTime = null, endTime = null, processingTime = null, setupTime = null, changeoverTime = null, - isRequired = false, - equipmentCode = null, + isRequired = false ) } } 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 0f6d22b..8719763 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 @@ -9,6 +9,9 @@ import org.springframework.data.domain.Pageable import org.springframework.web.bind.annotation.* import com.ffii.fpsms.modules.productProcess.entity.projections.ProductProcessInfo import com.ffii.fpsms.modules.master.web.models.MessageResponse +import java.time.LocalDate +import java.time.format.DateTimeFormatter + @RestController @RequestMapping("/product-process") class ProductProcessController( @@ -226,8 +229,11 @@ class ProductProcessController( return productProcessService.UpdateProductProcessLineProcessingTimeSetupTimeChangeoverTime(request) } @GetMapping("/Demo/JobProcessStatus") - fun getJobProcessStatus(): List { - return productProcessService.getJobProcessStatus() + fun getJobProcessStatus(@RequestParam(required = false) date: String?): List { + val parsedDate = date?.takeIf { it.isNotBlank() }?.let { + LocalDate.parse(it, DateTimeFormatter.ISO_DATE) // yyyy-MM-dd + } + return productProcessService.getJobProcessStatus(parsedDate) } @PostMapping("/Demo/ProcessLine/delete/{lineId}") fun deleteProductProcessLine(@PathVariable lineId: Long): MessageResponse { 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 b251851..997982a 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 @@ -220,7 +220,9 @@ data class UpdateProductProcessLineProcessingTimeSetupTimeChangeoverTimeRequest( val changeoverTime: Int? ) data class ProcessStatusInfo( - val equipmentCode: String?, + val processName: String?, + val equipmentDescription: String?, + val equipmentDetailName: String?, val startTime: LocalDateTime?, val endTime: LocalDateTime?, val processingTime: Int?, @@ -235,6 +237,6 @@ data class JobProcessStatusResponse( val itemCode: String, val itemName: String, val planEndTime: LocalDateTime?, - val status: String, + val status: String, val processes: List ) \ No newline at end of file