From db4f81de85600a3393503b616f5fc162d35c9360 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Tue, 13 Oct 2026 12:01:21 +0800 Subject: [PATCH] 1.0 fix also fix lot line out qty --- .../ledgerfix/StockLedgerFixBackfillService.kt | 5 ++++- .../service/ledgerfix/StockLedgerFixInventorySql.kt | 12 ++++++++++++ .../master/web/models/StockLedgerFixModels.kt | 1 + .../01_update_lot_line_outQty_null.sql | 9 +++------ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ledgerfix/StockLedgerFixBackfillService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ledgerfix/StockLedgerFixBackfillService.kt index d3613ed5..faae1256 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/ledgerfix/StockLedgerFixBackfillService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/ledgerfix/StockLedgerFixBackfillService.kt @@ -29,6 +29,7 @@ open class StockLedgerFixBackfillService( val patchedStockUomId = patchedFromUom + patchedSingleLot val inserted = support.jdbcDao.executeUpdate(StockLedgerFixInventorySql.INSERT_MISSING_INVENTORY_SQL) val orphansDeleted = support.jdbcDao.executeUpdate(StockLedgerFixInventorySql.SOFT_DELETE_ORPHAN_NULL_STOCK_UOM_SQL) + val outQtyNulledToZero = support.jdbcDao.executeUpdate(StockLedgerFixInventorySql.ZERO_NULL_OUT_QTY_SQL) val updated = support.jdbcDao.executeUpdate(StockLedgerFixInventorySql.UPDATE_INVENTORY_QTY_SQL) val missingAfter = support.toInt( support.jdbcDao.queryForList(StockLedgerFixInventorySql.MISSING_UOM_PAIR_COUNT_SQL).firstOrNull()?.get("c"), @@ -37,10 +38,11 @@ open class StockLedgerFixBackfillService( support.jdbcDao.queryForList(StockLedgerFixInventorySql.NULL_STOCK_UOM_COUNT_SQL).firstOrNull()?.get("c"), ) log.info( - "stock-ledger-fix inventory-1.0 patchedStockUomId={} inserted={} orphansDeleted={} updated={} missingAfter={} nullStockUomIdAfter={}", + "stock-ledger-fix inventory-1.0 patchedStockUomId={} inserted={} orphansDeleted={} outQtyNulledToZero={} updated={} missingAfter={} nullStockUomIdAfter={}", patchedStockUomId, inserted, orphansDeleted, + outQtyNulledToZero, updated, missingAfter, nullStockUomIdAfter, @@ -52,6 +54,7 @@ open class StockLedgerFixBackfillService( patchedStockUomId = patchedStockUomId, nullStockUomIdAfter = nullStockUomIdAfter, orphansDeleted = orphansDeleted, + outQtyNulledToZero = outQtyNulledToZero, ) } finally { support.unlock(StockLedgerFixSupport.INVENTORY_LOCK) diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ledgerfix/StockLedgerFixInventorySql.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ledgerfix/StockLedgerFixInventorySql.kt index f8719ab5..51aa5672 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/ledgerfix/StockLedgerFixInventorySql.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/ledgerfix/StockLedgerFixInventorySql.kt @@ -207,6 +207,18 @@ internal object StockLedgerFixInventorySql { AND i.stockUomId IS NULL """ + /** + * Putaway used to insert outQty as NULL. The lot-line trigger sums + * `inQty - outQty`, and NULL drops the row. Zero those lines before + * [UPDATE_INVENTORY_QTY_SQL] rewrites the buckets. + */ + internal const val ZERO_NULL_OUT_QTY_SQL = """ + UPDATE inventory_lot_line + SET outQty = 0 + WHERE outQty IS NULL + AND IFNULL(deleted, 0) = 0 + """ + internal const val UPDATE_INVENTORY_QTY_SQL = """ UPDATE inventory i LEFT JOIN ( diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/StockLedgerFixModels.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/StockLedgerFixModels.kt index 45f53287..723ed87c 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/web/models/StockLedgerFixModels.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/web/models/StockLedgerFixModels.kt @@ -80,6 +80,7 @@ data class StockLedgerFixInventoryResponse( val patchedStockUomId: Int, val nullStockUomIdAfter: Int, val orphansDeleted: Int = 0, + val outQtyNulledToZero: Int = 0, ) data class StockLedgerFixSearchInventoryHit( diff --git a/src/main/resources/db/changelog/changes/20261013_update_lot_line_outQty_null/01_update_lot_line_outQty_null.sql b/src/main/resources/db/changelog/changes/20261013_update_lot_line_outQty_null/01_update_lot_line_outQty_null.sql index e0507b7b..f3cb84ba 100644 --- a/src/main/resources/db/changelog/changes/20261013_update_lot_line_outQty_null/01_update_lot_line_outQty_null.sql +++ b/src/main/resources/db/changelog/changes/20261013_update_lot_line_outQty_null/01_update_lot_line_outQty_null.sql @@ -1,8 +1,5 @@ --liquibase formatted sql ---changeset fpsms:update_lot_line_outQty_null_v2 ---comment: Update inventory lot line outQty to 0 if it is null -UPDATE inventory_lot_line -SET outQty = 0 -WHERE outQty IS NULL - AND deleted = 0; +-- Data fix moved to POST /stock-ledger-fix/inventory (inventory 1.0). +-- Do not UPDATE inventory_lot_line from this changelog. +-- The previous changeset fpsms:update_lot_line_outQty_null is already MARK_RAN and did not change rows.