From cd035b439f2b372843e1822f29b6901d088eeb49 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Sat, 28 Mar 2026 00:40:50 +0800 Subject: [PATCH] update --- .../jobOrder/service/JobOrderService.kt | 18 +++++----- .../service/PickExecutionIssueService.kt | 2 +- .../pickOrder/service/PickOrderService.kt | 35 ++++++++++--------- .../stock/entity/StockOutRepository.kt | 1 + .../stock/service/StockOutLineService.kt | 3 +- .../stock/service/SuggestedPickLotService.kt | 17 ++++++--- 6 files changed, 44 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt index fbbc950..6168c61 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt @@ -607,6 +607,14 @@ open class JobOrderService( pickOrderEntity.consoCode = consoCode pickOrderEntity.status = com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus.RELEASED pickOrderRepository.saveAndFlush(pickOrderEntity) + // Create stock out record and pre-create stock out lines + val stockOut = StockOut().apply { + this.type = "job" + this.consoPickOrderCode = consoCode + this.status = StockOutStatus.PENDING.status + this.handler = SecurityUtils.getUser().getOrNull()?.id + } + val savedStockOut = stockOutRepository.saveAndFlush(stockOut) // 添加 suggested pick lots 创建逻辑 val lines = pickOrderLineRepository.findAllByPickOrderId(pickOrderEntity.id!!) @@ -646,15 +654,7 @@ open class JobOrderService( } inventoryLotLineRepository.saveAll(inventoryLotLines) - // Create stock out record and pre-create stock out lines - val stockOut = StockOut().apply { - this.type = "job" - this.consoPickOrderCode = consoCode - this.status = StockOutStatus.PENDING.status - this.handler = SecurityUtils.getUser().getOrNull()?.id - } - val savedStockOut = stockOutRepository.saveAndFlush(stockOut) - + // Pre-create stock out lines for suggested lots saveSuggestedPickLots.forEach { lot -> val polId = lot.pickOrderLine?.id 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 432675b..2d8c348 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 @@ -400,7 +400,7 @@ private fun checkAndCompletePickOrder(consoCode: String) { println("consoCode: $consoCode") // 1. 查找 StockOut - val stockOut = stockOutRepository.findByConsoPickOrderCode(consoCode).orElse(null) + val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(consoCode) if (stockOut == null) { println("❌ No stock_out found for consoCode: $consoCode") return 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 c99a01f..e88489d 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 @@ -1192,7 +1192,8 @@ open class PickOrderService( println("=== DEBUG: completeStockOut ===") println("consoCode: $consoCode") - val stockOut = stockOutRepository.findByConsoPickOrderCode(consoCode).orElseThrow() + val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(consoCode) + ?: throw NoSuchElementException("No stock_out found for consoCode: $consoCode") println("StockOut ID: ${stockOut.id}") // FIXED: 直接通过 consoCode 查找相关的 stock out lines,而不依赖 stockOutId 关联 @@ -1307,7 +1308,7 @@ open class PickOrderService( doPickOrderIds.forEach { doPickOrderId -> val dpo = doPickOrderRepository.findById(doPickOrderId).orElse(null) if (dpo == null) { - println("⚠️ WARNING: do_pick_order $doPickOrderId not found, skipping") + println(" WARNING: do_pick_order $doPickOrderId not found, skipping") return@forEach } @@ -2401,14 +2402,14 @@ open class PickOrderService( val consoCode = pickOrder.consoCode if (consoCode == null) { println(" Checking pick order ${pickOrder.code} (consoCode: null)") - println(" ⚠️ No consoCode - considering as active") + println(" No consoCode - considering as active") true // No consoCode means not completed } else { - val stockOut = stockOutRepository.findByConsoPickOrderCode(consoCode).orElse(null) - println("�� Checking pick order ${pickOrder.code} (consoCode: $consoCode)") + val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(consoCode) + println(" Checking pick order ${pickOrder.code} (consoCode: $consoCode)") if (stockOut == null) { - println(" ⚠️ No stock_out record found - considering as active") + println(" No stock_out record found - considering as active") true // No stock_out record means not completed } else { println(" 📦 Stock_out status: ${stockOut.status}") @@ -2835,7 +2836,7 @@ open class PickOrderService( """, mapOf("shopId" to shop.id) ).orElse(null) } catch (e: Exception) { - println("⚠️ No truck found for shop ${shop.id}: ${e.message}") + println(" No truck found for shop ${shop.id}: ${e.message}") null } } else null @@ -3047,12 +3048,12 @@ open class PickOrderService( selectedTruck } catch (e: Exception) { - println("⚠️ Error querying truck repository for shop ${shop.id}: ${e.message}") + println(" Error querying truck repository for shop ${shop.id}: ${e.message}") e.printStackTrace() null } } else { - println("⚠️ Shop ID is null") + println(" Shop ID is null") null } val ticketNo = try { @@ -3061,14 +3062,14 @@ open class PickOrderService( println(" Found ticket number: $ticketNo for pick order $pickOrderId") ticketNo } catch (e: Exception) { - println("⚠️ Error getting ticket number for pick order $pickOrderId: ${e.message}") + println(" Error getting ticket number for pick order $pickOrderId: ${e.message}") "" } val dpoStoreId = try { val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId) doPickOrders.firstOrNull()?.storeId ?: "" } catch (e: Exception) { - println("⚠️ Error getting storeId for pick order $pickOrderId: ${e.message}") + println(" Error getting storeId for pick order $pickOrderId: ${e.message}") "" } val result = mapOf( @@ -3159,12 +3160,12 @@ open class PickOrderService( selectedTruck } catch (e: Exception) { - println("⚠️ Error querying truck repository for shop ${shop.id}: ${e.message}") + println(" Error querying truck repository for shop ${shop.id}: ${e.message}") e.printStackTrace() null } } else { - println("⚠️ Shop ID is null") + println(" Shop ID is null") null } val ticketNo = try { @@ -3173,14 +3174,14 @@ open class PickOrderService( println(" Found ticket number: $ticketNo for pick order $pickOrderId") ticketNo } catch (e: Exception) { - println("⚠️ Error getting ticket number for pick order $pickOrderId: ${e.message}") + println(" Error getting ticket number for pick order $pickOrderId: ${e.message}") "" } val dpoStoreId = try { val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId) doPickOrders.firstOrNull()?.storeId ?: "" } catch (e: Exception) { - println("⚠️ Error getting storeId for pick order $pickOrderId: ${e.message}") + println(" Error getting storeId for pick order $pickOrderId: ${e.message}") "" } val result = mapOf( @@ -3478,7 +3479,7 @@ ORDER BY ) } } catch (e: Exception) { - println("⚠️ Error getting router info for inventoryLotId $inventoryLotId: ${e.message}") + println(" Error getting router info for inventoryLotId $inventoryLotId: ${e.message}") mapOf( "routerIndex" to 0, "routerRoute" to "", @@ -4422,7 +4423,7 @@ println("DEBUG sol polIds in linesResults: " + linesResults.mapNotNull { it["sto // 备用方案:如果 lineRecords 中没有 pickOrderId,尝试使用 DoPickOrderRecord.pickOrderId if (pickOrderIds.isEmpty() && dpor.pickOrderId != null) { - println("⚠️ WARNING: No pickOrderIds in lineRecords, using DoPickOrderRecord.pickOrderId=${dpor.pickOrderId}") + println(" WARNING: No pickOrderIds in lineRecords, using DoPickOrderRecord.pickOrderId=${dpor.pickOrderId}") pickOrderIds = listOf(dpor.pickOrderId!!) } diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutRepository.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutRepository.kt index 902e5a4..bbf67a8 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockOutRepository.kt @@ -10,4 +10,5 @@ interface StockOutRepository: AbstractRepository { // consoPickOrderCode 可能在 DB 中存在重复,避免 single-result exception fun findFirstByConsoPickOrderCodeOrderByIdDesc(consoPickOrderCode: String): StockOut? fun findByStockTakeIdAndDeletedFalse(stockTakeId: Long): StockOut? + } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt index bf2264e..34f9c09 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockOutLineService.kt @@ -166,7 +166,8 @@ val existingStockOutLine = stockOutLineRepository.findByPickOrderLineIdAndInvent allStockOuts.forEach { stockOut -> println("StockOut ID: ${stockOut.id}, consoPickOrderCode: ${stockOut.consoPickOrderCode}") } - val stockOut = stockOutRepository.findByConsoPickOrderCode(request.consoCode).orElseThrow() + val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(request.consoCode) + ?: throw NoSuchElementException("StockOut not found for consoCode: ${request.consoCode}") println("Found stockOut: ${stockOut.id} with consoCode: ${stockOut.consoPickOrderCode}") val pickOrderLine = pickOrderLineRepository.saveAndFlush( pickOrderLineRepository.findById(request.pickOrderLineId).orElseThrow() diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt index e64f238..fa96c32 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt @@ -470,7 +470,8 @@ open class SuggestedPickLotService( } // Get or create StockOut - val stockOut = stockOutRepository.findByConsoPickOrderCode(pickOrder.consoCode ?: "") + /* + val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(pickOrder.consoCode ?: "") .orElseGet { val handlerId = pickOrder.assignTo?.id ?: SecurityUtils.getUser().orElse(null)?.id require(handlerId != null) { "Cannot create StockOut: handlerId is null" } @@ -482,6 +483,8 @@ open class SuggestedPickLotService( } stockOutRepository.save(newStockOut) } + */ + val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(pickOrder.consoCode ?: "") val item = pickOrderLine.item ?: itemRepository.findById(pickOrderLine.item!!.id!!).orElseThrow() // Create stock out line with inventoryLotLineId = null val stockOutLine = StockOutLine().apply { @@ -512,9 +515,9 @@ open class SuggestedPickLotService( println("Stock out line already exists for pickOrderLineId: ${pickOrderLine.id}, inventoryLotLineId: ${suggestedLotLine.id}") return existingStockOutLine.first() } - + /* // Get or create StockOut - val stockOut = stockOutRepository.findByConsoPickOrderCode(pickOrder.consoCode ?: "") + val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(pickOrder.consoCode ?: "") .orElseGet { // Create new StockOut if it doesn't exist val newStockOut = StockOut().apply { @@ -524,7 +527,13 @@ open class SuggestedPickLotService( } stockOutRepository.save(newStockOut) } - + */ + val stockOut = stockOutRepository.findFirstByConsoPickOrderCodeOrderByIdDesc(pickOrder.consoCode ?: "") + if (stockOut == null) { + println("⚠️ StockOut not found for consoCode=${pickOrder.consoCode}, skip creating stockOutLine") + return null + } + // Update pick order line status to PICKING val updatedPickOrderLine = pickOrderLineRepository.saveAndFlush( pickOrderLine.apply {