From 8de3aac2e7cbe7b5212247535942f2b8a295cb21 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Wed, 21 Jan 2026 00:58:33 +0800 Subject: [PATCH] update stock ledger --- .../stock/entity/StockLedgerRepository.kt | 11 +++++------ .../stock/service/StockInLineService.kt | 18 ++++++++++++------ .../stock/service/StockOutLineService.kt | 4 ++-- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockLedgerRepository.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockLedgerRepository.kt index 4c9b8e5..e48a921 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockLedgerRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockLedgerRepository.kt @@ -52,10 +52,9 @@ interface StockLedgerRepository: AbstractRepository { @Query(""" - SELECT sl FROM StockLedger sl - WHERE sl.itemId = :itemId - AND sl.deleted = false - ORDER BY sl.date DESC, sl.id DESC - """) - fun findLatestByItemId(@Param("itemId") itemId: Long): StockLedger? + SELECT sl FROM StockLedger sl + WHERE sl.itemId = :itemId AND sl.deleted = false + ORDER BY sl.date DESC, sl.id DESC +""") +fun findLatestByItemId(@Param("itemId") itemId: Long): List } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt index 40aad0d..4c38d41 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt @@ -718,23 +718,29 @@ open class StockInLineService( private fun createStockLedgerForStockIn(stockInLine: StockInLine) { val item = stockInLine.item ?: return val inventory = inventoryRepository.findByItemId(item.id!!).orElse(null) ?: return - + val inQty = stockInLine.acceptedQty?.toDouble() ?: 0.0 - // 直接使用 inventory.onHandQty 作为 balance(已经是更新后的值) - val newBalance = (inventory.onHandQty ?: BigDecimal.ZERO).toDouble() - + + // ✅ 修复:查询最新的 stock_ledger 记录,基于前一笔 balance 计算 + val latestLedger = stockLedgerRepository.findLatestByItemId(item.id!!).firstOrNull() + + val previousBalance = latestLedger?.balance + ?: (inventory.onHandQty ?: BigDecimal.ZERO).toDouble() + + val newBalance = previousBalance + inQty + val stockLedger = StockLedger().apply { this.stockInLine = stockInLine this.inventory = inventory this.inQty = inQty this.outQty = null - this.balance = newBalance + this.balance = newBalance this.type = stockInLine.type this.itemId = item.id this.itemCode = item.code this.date = LocalDate.now() } - + stockLedgerRepository.saveAndFlush(stockLedger) } 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 d3c76bc..6d7bdb6 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 @@ -1272,8 +1272,8 @@ private fun createStockLedgerForStockOut(stockOutLine: StockOutLine) { val inventory = inventoryRepository.findAllByItemIdAndDeletedIsFalse(item.id!!) .firstOrNull() ?: return - - val latestLedger = stockLedgerRepository.findLatestByItemId(item.id!!) + + val latestLedger = stockLedgerRepository.findLatestByItemId(item.id!!).firstOrNull() val previousBalance = latestLedger?.balance ?: (inventory.onHandQty ?: BigDecimal.ZERO).toDouble()