From 4be7c97572b89232496159f8c77fd91d5f457634 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Thu, 20 Nov 2025 18:43:48 +0800 Subject: [PATCH] update --- .../jobOrder/entity/JoPickOrderRepository.kt | 1 + .../entity/projections/ProductProcessInfo.kt | 8 +++++-- .../service/ProductProcessService.kt | 23 +++++++++++++++++-- .../web/model/SaveProductProcessRequest.kt | 2 ++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JoPickOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JoPickOrderRepository.kt index 8765dfe..109c222 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JoPickOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JoPickOrderRepository.kt @@ -16,4 +16,5 @@ interface JoPickOrderRepository : JpaRepository { fun findByPickOrderId(pickOrderId: Long): List fun findByPickOrderIdAndItemId(pickOrderId: Long, itemId: Long): java.util.Optional + fun findByJobOrderId(jobOrderId: Long): JoPickOrder? } \ No newline at end of file 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 759288e..9893999 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 @@ -64,8 +64,10 @@ data class ProductProcessLineInfo( @JsonFormat(pattern = "yyyy-MM-dd") val startTime: LocalDateTime?, @JsonFormat(pattern = "yyyy-MM-dd") - val endTime: LocalDateTime? + val endTime: LocalDateTime?, ) + + data class jobOrderLineInfo( val id: Long?, val itemId: Long?, @@ -75,5 +77,7 @@ data class jobOrderLineInfo( val stockQty: Int?, val uom: String?, val shortUom: String?, - val availableStatus: String? + val availableStatus: String?, + val bomProcessId: Long?, + val bomProcessSeqNo: Long? ) \ No newline at end of file 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 58e5349..0bd7c76 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 @@ -36,6 +36,8 @@ import com.ffii.fpsms.modules.stock.entity.enum.InventoryLotLineStatus import com.ffii.fpsms.modules.jobOrder.enums.JobOrderStatus import com.ffii.fpsms.modules.stock.service.StockInLineService import com.ffii.fpsms.modules.stock.web.model.SaveStockInLineRequest +import com.ffii.fpsms.modules.master.entity.BomProcessMaterialRepository +import com.ffii.fpsms.modules.master.entity.BomMaterialRepository @Service @Transactional open class ProductProcessService( @@ -53,6 +55,8 @@ open class ProductProcessService( private val inventoryLotLineRepository: InventoryLotLineRepository, private val productionScheduleLineRepository: ProductionScheduleLineRepository, private val stockInLineService: StockInLineService, + private val bomProcessMaterialRepository: BomProcessMaterialRepository, + private val bomMaterialRepository: BomMaterialRepository, ) { open fun findAll(pageable: Pageable): Page { @@ -473,6 +477,7 @@ open class ProductProcessService( val bomProcess = bomProcessRepository.findByBomId(jobOrder?.bom?.id?:0L) // get bom materials val bomMaterials = jobOrderBomMaterialRepository.findAllByJobOrderId(jobOrder?.id?:0) + val bomProcessIds = bomProcess.mapNotNull { it.id } val itemIds = bomMaterials.mapNotNull { it.item?.id } // calculate each item's available stock @@ -591,6 +596,7 @@ open class ProductProcessService( outputFromProcessUom = line.outputFromProcessUom?:"", startTime = line.startTime, endTime = line.endTime + ) }, jobOrderLines = bomMaterials.map { line -> @@ -598,7 +604,16 @@ open class ProductProcessService( val stockQty = stockQtyMap[itemId]?.toInt() ?: 0 val uom = line.uom val shortUom = uom?.udfShortDesc ?: uom?.udfudesc ?: "" - + // 首先通过 bomId 和 itemId 找到 BomMaterial + val bomMaterial = bom?.id?.let { bomId -> + bomMaterialRepository.findByBomIdAndItemId(bomId, itemId) + } + // 然后遍历 bomProcessIds 找到第一个匹配的 BomProcessMaterial + val bomProcessMaterial = bomMaterial?.id?.let { bomMaterialId -> + bomProcessIds.firstNotNullOfOrNull { bomProcessId -> + bomProcessMaterialRepository.findByBomProcessIdAndBomMaterialId(bomProcessId, bomMaterialId) + } + } // 计算 availableStatus val availableStatus = if (stockQty >= (line.reqQty?.toInt() ?: 0)) { "available" @@ -615,7 +630,9 @@ open class ProductProcessService( stockQty = stockQty, uom = uom?.udfudesc ?: "", shortUom = shortUom, - availableStatus = availableStatus + availableStatus = availableStatus, + bomProcessId = bomProcessMaterial?.bomProcess?.id?:0, + bomProcessSeqNo = bomProcessMaterial?.bomProcess?.seqNo?:0 ) } ) @@ -750,6 +767,7 @@ open class ProductProcessService( operatorId = productProcessLine.operator?.id?:0, operatorName = productProcessLine.operator?.name?:"", handlerId = productProcessLine.handler?.id?:0, + durationInMinutes = productProcessLine.bomProcess?.durationInMinute?:0, seqNo = productProcessLine.seqNo?:0, name = productProcessLine.name?:"", description = productProcessLine.description?:"", @@ -883,6 +901,7 @@ open fun updateProductProcessLineQty(request: UpdateProductProcessLineQtyRequest status = productProcesses.status.value, startTime = productProcesses.startTime, endTime = productProcesses.endTime, + RequiredQty = jobOrder?.reqQty?.toInt() ?: 0, date = productProcesses.date, bomId = productProcesses.bom?.id, itemName = productProcesses.item?.name, 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 3b361fc..2a2071a 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 @@ -114,6 +114,7 @@ data class JobOrderProcessLineDetailResponse( val equipmentType: String?, val operatorName: String?, val handlerId: Long?, + val durationInMinutes: Int?, val seqNo: Long?, val name: String?, val description: String?, @@ -143,6 +144,7 @@ data class AllJoborderProductProcessInfoResponse( val date: LocalDate?, val bomId: Long?, val itemName: String?, + val RequiredQty: Int?, val jobOrderId: Long?, val jobOrderCode: String?, val productProcessLineCount: Int,