Преглед изворни кода

search stock take fix

production
CANCERYS\kw093 пре 3 недеља
родитељ
комит
e67440f56f
1 измењених фајлова са 30 додато и 2 уклоњено
  1. +30
    -2
      src/main/java/com/ffii/fpsms/modules/stock/service/StockTakeRecordService.kt

+ 30
- 2
src/main/java/com/ffii/fpsms/modules/stock/service/StockTakeRecordService.kt Прегледај датотеку

@@ -433,6 +433,7 @@ open class StockTakeRecordService(

val result = mutableListOf<AllPickedStockTakeListReponse>()
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<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 最新一筆。
*/


Loading…
Откажи
Сачувај