| @@ -433,6 +433,7 @@ open class StockTakeRecordService( | |||||
| val result = mutableListOf<AllPickedStockTakeListReponse>() | val result = mutableListOf<AllPickedStockTakeListReponse>() | ||||
| var idCounter = 1L | var idCounter = 1L | ||||
| val globalLatestRoundKey = resolveGlobalLatestStockTakeRoundKey() | |||||
| // 3. 为每个 stockTakeSection 创建一个卡片 | // 3. 为每个 stockTakeSection 创建一个卡片 | ||||
| distinctSections.forEach { stockTakeSection -> | distinctSections.forEach { stockTakeSection -> | ||||
| @@ -455,8 +456,10 @@ open class StockTakeRecordService( | |||||
| val lastStockTakeDate = completedStockTakes.firstOrNull()?.actualEnd | 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) { | val status = if (latestStockTake != null) { | ||||
| latestStockTake.status?.value ?: "pending" | latestStockTake.status?.value ?: "pending" | ||||
| @@ -575,6 +578,31 @@ open class StockTakeRecordService( | |||||
| return result.sortedBy { it.stockTakeSession } | return result.sortedBy { it.stockTakeSession } | ||||
| } | } | ||||
| /** | |||||
| * 區域內用於卡片展示的 stock_take:若該區域參與全系統最新輪次,優先取該輪次內最新一筆; | |||||
| * 否則退回區域內 planStart/actualStart 最新一筆(供未開 onlyLatestRound 時顯示舊輪)。 | |||||
| */ | |||||
| private fun resolveLatestStockTakeForSection( | |||||
| stockTakesForSection: List<StockTake>, | |||||
| globalLatestRoundKey: Long? | |||||
| ): StockTake? { | |||||
| if (stockTakesForSection.isEmpty()) return null | |||||
| val byActivity = compareBy<StockTake> { | |||||
| 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 最新一筆。 | * 全系統最新盤點輪次 id(MAX(stockTakeRoundId));舊資料無 roundId 時退回 planStart 最新一筆。 | ||||
| */ | */ | ||||