@@ -199,20 +244,23 @@ open class StockLotDayCloseService(
INNER JOIN stock_ledger lastSl ON lastSl.id = x.lastId
LEFT JOIN inventory_lot_line ill ON ill.id = x.inventoryLotLineId
LEFT JOIN inventory_lot il ON il.id = ill.inventoryLotId
ON DUPLICATE KEY UPDATE
itemId = VALUES(itemId),
itemCode = VALUES(itemCode),
uomId = VALUES(uomId),
lotNo = VALUES(lotNo),
opening = VALUES(opening),
inQty = VALUES(inQty),
outQty = VALUES(outQty),
closing = VALUES(closing),
modified = NOW(),
modifiedBy = VALUES(modifiedBy),
version = stock_lot_day.version + 1,
deleted = 0
""".trimIndent()
LEFT JOIN stock_lot_day cur
ON cur.inventoryLotLineId = x.inventoryLotLineId
AND cur.date = :day
WHERE cur.inventoryLotLineId IS NULL
OR IFNULL(cur.deleted, 0) <> 0
OR NOT (
cur.opening <=> firstSl.lotQtyBefore
AND cur.inQty <=> x.inQty
AND cur.outQty <=> x.outQty
AND cur.closing <=> lastSl.lotQtyAfter
AND cur.itemId <=> x.itemId
AND cur.uomId <=> x.uomId
AND IFNULL(cur.itemCode, '') <=> IFNULL(x.itemCode, '')
AND IFNULL(cur.lotNo, '') <=> IFNULL(il.lotNo, '')
)
$ON_DUP
"""
private val CARRY_SQL = """
INSERT INTO stock_lot_day (
@@ -233,28 +281,30 @@ open class StockLotDayCloseService(
0,
prev.closing
FROM stock_lot_day prev
LEFT JOIN tmp_sld_lots_today t
ON t.inventoryLotLineId = prev.inventoryLotLineId
LEFT JOIN stock_lot_day cur
ON cur.inventoryLotLineId = prev.inventoryLotLineId
AND cur.date = :day
WHERE prev.date = :prevDay
AND IFNULL(prev.deleted, 0) = 0
AND prev.closing > 0
AND NOT EXISTS (
SELECT 1 FROM stock_ledger sl
WHERE sl.deleted = 0
AND sl.date >= :day AND sl.date < :dayNext
AND sl.inventoryLotLineId = prev.inventoryLotLineId
AND t.inventoryLotLineId IS NULL
AND (
cur.inventoryLotLineId IS NULL
OR IFNULL(cur.deleted, 0) <> 0
OR NOT (
cur.opening <=> prev.closing
AND cur.inQty <=> 0
AND cur.outQty <=> 0
AND cur.closing <=> prev.closing
AND cur.itemId <=> prev.itemId
AND cur.uomId <=> prev.uomId
AND IFNULL(cur.itemCode, '') <=> IFNULL(prev.itemCode, '')
AND IFNULL(cur.lotNo, '') <=> IFNULL(prev.lotNo, '')
)
)
ON DUPLICATE KEY UPDATE
itemId = VALUES(itemId),
itemCode = VALUES(itemCode),
uomId = VALUES(uomId),
lotNo = VALUES(lotNo),
opening = VALUES(opening),
inQty = VALUES(inQty),
outQty = VALUES(outQty),
closing = VALUES(closing),
modified = NOW(),
modifiedBy = VALUES(modifiedBy),
version = stock_lot_day.version + 1,
deleted = 0
""".trimIndent()
$ON_DUP
"""
}
}
+ 1- 1
src/main/resources/db/changelog/changes/20260814_stock_lot_day/01_create_stock_lot_day.sqlVoir le fichier
@@ -2,7 +2,7 @@
--changeset fpsms:create_stock_lot_day
--comment: Daily lot stock card (主錨). Month-end report aggregates this table.
--precondition onFail:MARK_RAN
--preconditions onFail:MARK_RAN
--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'stock_lot_day'