diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockTakeRecordService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockTakeRecordService.kt index 79a4281..fffbe62 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockTakeRecordService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockTakeRecordService.kt @@ -433,6 +433,7 @@ open class StockTakeRecordService( val result = mutableListOf() var idCounter = 1L + val globalLatestRoundKey = resolveGlobalLatestStockTakeRoundKey() // 3. 为每个 stockTakeSection 创建一个卡片 distinctSections.forEach { stockTakeSection -> @@ -455,8 +456,10 @@ open class StockTakeRecordService( val lastStockTakeDate = completedStockTakes.firstOrNull()?.actualEnd - val latestStockTake = stockTakesForSection - .maxByOrNull { it.actualStart ?: it.planStart ?: LocalDateTime.MIN } + val latestStockTake = resolveLatestStockTakeForSection( + stockTakesForSection, + globalLatestRoundKey + ) val status = if (latestStockTake != null) { latestStockTake.status?.value ?: "pending" @@ -575,6 +578,31 @@ open class StockTakeRecordService( return result.sortedBy { it.stockTakeSession } } + /** + * 區域內用於卡片展示的 stock_take:若該區域參與全系統最新輪次,優先取該輪次內最新一筆; + * 否則退回區域內 planStart/actualStart 最新一筆(供未開 onlyLatestRound 時顯示舊輪)。 + */ + private fun resolveLatestStockTakeForSection( + stockTakesForSection: List, + globalLatestRoundKey: Long? + ): StockTake? { + if (stockTakesForSection.isEmpty()) return null + val byActivity = compareBy { + it.actualStart ?: it.planStart ?: LocalDateTime.MIN + }.thenBy { it.id ?: 0L } + + return if (globalLatestRoundKey != null && globalLatestRoundKey > 0L) { + val inGlobalRound = stockTakesForSection.filter { st -> + val rk = st.stockTakeRoundId ?: st.id + rk == globalLatestRoundKey + } + inGlobalRound.maxWithOrNull(byActivity) + ?: stockTakesForSection.maxWithOrNull(byActivity) + } else { + stockTakesForSection.maxWithOrNull(byActivity) + } + } + /** * 全系統最新盤點輪次 id(MAX(stockTakeRoundId));舊資料無 roundId 時退回 planStart 最新一筆。 */