|
|
|
@@ -64,6 +64,27 @@ class StockTakeRecordService( |
|
|
|
) { |
|
|
|
private val logger: Logger = LoggerFactory.getLogger(StockTakeRecordService::class.java) |
|
|
|
|
|
|
|
/** |
|
|
|
* 同一輪多 section 的 stock_take:優先用 [StockTake.stockTakeRoundId];舊資料為 null 時退回以 planStart 相同辨識一輪。 |
|
|
|
*/ |
|
|
|
private fun resolveRoundStockTakeIds(baseStockTake: StockTake): Set<Long> { |
|
|
|
val roundKey = baseStockTake.stockTakeRoundId |
|
|
|
if (roundKey != null) { |
|
|
|
return stockTakeRepository.findAllByStockTakeRoundIdAndDeletedIsFalse(roundKey) |
|
|
|
.mapNotNull { it.id } |
|
|
|
.toSet() |
|
|
|
} |
|
|
|
val planStart = baseStockTake.planStart |
|
|
|
return if (planStart != null) { |
|
|
|
stockTakeRepository.findAll() |
|
|
|
.filter { !it.deleted && it.planStart == planStart } |
|
|
|
.mapNotNull { it.id } |
|
|
|
.toSet() |
|
|
|
} else { |
|
|
|
listOfNotNull(baseStockTake.id).toSet() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
open fun AllPickedStockTakeList(): List<AllPickedStockTakeListReponse> { |
|
|
|
// 1. 获取所有不同的 stockTakeSection(从 warehouse 表) |
|
|
|
val allWarehouses = warehouseRepository.findAllByDeletedIsFalse() |
|
|
|
@@ -220,21 +241,11 @@ class StockTakeRecordService( |
|
|
|
val inventoryLotLines = inventoryLotLineRepository.findAllByWarehouseIdInAndDeletedIsFalse(warehouseIds) |
|
|
|
println("Found ${inventoryLotLines.size} inventory lot lines for ALL sections") |
|
|
|
|
|
|
|
// 3. 如果传了 stockTakeId,就把「同一轮」的所有 stockTake 找出来: |
|
|
|
// 以该 stockTake 的 planStart 作为一轮的标识,取 planStart 相同的所有记录 |
|
|
|
// 3. 如果传了 stockTakeId,就把「同一轮」的所有 stockTake 找出来(stockTakeRoundId,舊資料則 planStart) |
|
|
|
val roundStockTakeIds: Set<Long> = if (stockTakeId != null) { |
|
|
|
val baseStockTake = stockTakeRepository.findByIdAndDeletedIsFalse(stockTakeId) |
|
|
|
?: throw IllegalArgumentException("Stock take not found: $stockTakeId") |
|
|
|
val planStart = baseStockTake.planStart |
|
|
|
|
|
|
|
val roundStockTakes = if (planStart != null) { |
|
|
|
stockTakeRepository.findAll() |
|
|
|
.filter { !it.deleted && it.planStart == planStart } |
|
|
|
} else { |
|
|
|
listOf(baseStockTake) |
|
|
|
} |
|
|
|
|
|
|
|
roundStockTakes.mapNotNull { it.id }.toSet() |
|
|
|
resolveRoundStockTakeIds(baseStockTake) |
|
|
|
} else { |
|
|
|
emptySet() |
|
|
|
} |
|
|
|
@@ -1242,16 +1253,7 @@ open fun batchSaveApproverStockTakeRecordsAll( |
|
|
|
val stockTake = stockTakeRepository.findByIdAndDeletedIsFalse(request.stockTakeId) |
|
|
|
?: throw IllegalArgumentException("Stock take not found: ${request.stockTakeId}") |
|
|
|
|
|
|
|
// 以该 stockTake 的 planStart 作为一轮的标识,找到这一轮下所有的 stockTake(各个 section) |
|
|
|
val planStart = stockTake.planStart |
|
|
|
val roundStockTakeIds: Set<Long> = if (planStart != null) { |
|
|
|
stockTakeRepository.findAll() |
|
|
|
.filter { !it.deleted && it.planStart == planStart } |
|
|
|
.mapNotNull { it.id } |
|
|
|
.toSet() |
|
|
|
} else { |
|
|
|
listOfNotNull(stockTake.id).toSet() |
|
|
|
} |
|
|
|
val roundStockTakeIds: Set<Long> = resolveRoundStockTakeIds(stockTake) |
|
|
|
|
|
|
|
val stockTakeRecords = stockTakeRecordRepository.findAll() |
|
|
|
.filter { |
|
|
|
|