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 98594bd..f2fb2b0 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 @@ -2346,26 +2346,26 @@ open fun getMaterialPickStatus(date: String?): List { // Count total items to pick (number of distinct pick order lines) val numberOfItemsToPick = allPickOrderLines.size - // ✅ 修复:检查所有 items 是否都已完成 - // 计算已完成的 items 数量(每个 pickOrderLine 至少有一个 completed 的 stockOutLine) - val completedItemsCount = allPickOrderLines.count { pol -> - val stockOutLinesForPol = allStockOutLines.filter { - it.pickOrderLine?.id == pol.id + // 已结束行数:有至少一条 completed,或整行全是 rejected 都算「已结束」 + val finishedItemsCount = allPickOrderLines.count { pol -> + val stockOutLinesForPol = allStockOutLines.filter { + it.pickOrderLine?.id == pol.id } - // 如果这个 pickOrderLine 有至少一个 completed 的 stockOutLine,则认为已完成 - stockOutLinesForPol.any { it.status == "completed" } + stockOutLinesForPol.any { it.status == "completed" } || + (stockOutLinesForPol.isNotEmpty() && stockOutLinesForPol.all { it.status == "rejected" }) } - // ✅ 修复:endTime = 最后一个 item 完成提料的时间 - // 只有当所有 items 都完成时,才返回 endTime - val pickEndTime = if (completedItemsCount == numberOfItemsToPick && numberOfItemsToPick > 0) { - // 所有 items 都已完成,取最晚的 endTime - allStockOutLines + // 只有当所有 items 都已结束(完成或全部拒绝)时,才返回 endTime + val pickEndTime = if (finishedItemsCount == numberOfItemsToPick && numberOfItemsToPick > 0) { + val completedEndTime = allStockOutLines .filter { it.status == "completed" } .mapNotNull { it.endTime } .maxOrNull() + // 若没有任何 completed 的 endTime(例如全部 rejected),用 pick order 的 completeDate 作为结束时间 + completedEndTime ?: pickOrderIds.mapNotNull { poId -> + pickOrderRepository.findById(poId).orElse(null)?.completeDate + }.maxOrNull() } else { - // 还有 items 未完成,返回 null null } diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt index 4ae2896..2750a86 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt @@ -1574,7 +1574,7 @@ open fun getMissItemList(issueCategory: String = "lot_issue"): List var doOrderCode: String? = null @@ -2643,7 +2653,10 @@ open fun getLotIssueDetails(lotId: Long, itemId: Long, issueType: String): LotIs itemCode = firstIssue.itemCode, itemDescription = firstIssue.itemDescription, storeLocation = firstIssue.storeLocation, - issues = issueDetails + issues = issueDetails, + bookQty = bookQty, + + uomDesc = uomDesc, ) } @@ -2970,5 +2983,16 @@ private fun checkPickOrderLineCompletion(pickOrderLineId: Long) { println("⏳ Pick order line $pickOrderLineId not completed yet - has ${unfinishedLine.size} unfinished stock out lines") } } +private fun resolveLotUomInfo(lotId: Long?): Pair { + if (lotId == null) return Pair(null, null) + + val lotLine = inventoryLotLineRepository.findById(lotId).orElse(null) + ?: return Pair(null, null) + val uom = lotLine.stockUom?.uom // ItemUom -> UomConversion + val uomCode = uom?.code + val uomDesc = uom?.udfudesc // 👈 你要的 udfudesc + + return Pair(uomCode, uomDesc) +} } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/PickExecutionIssueRequest.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/PickExecutionIssueRequest.kt index 39eff36..7691d02 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/PickExecutionIssueRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/PickExecutionIssueRequest.kt @@ -50,5 +50,6 @@ data class StockIssueResponse( val pickerName: String?, val handleStatus: String, val handleDate: LocalDate?, - val handledBy: Long? + val handledBy: Long?, + val uomDesc: String? ) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SubmitIssueRequest.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SubmitIssueRequest.kt index c5480d0..d1f67f4 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SubmitIssueRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SubmitIssueRequest.kt @@ -46,6 +46,9 @@ data class LotIssueDetailResponse( val itemCode: String?, val itemDescription: String?, val storeLocation: String?, + val bookQty: BigDecimal?, + val uomDesc: String?, + val issues: List )