diff --git a/db/routines/stock/events/stock_clean.sql b/db/routines/stock/events/stock_clean.sql new file mode 100644 index 0000000000..86f8a15fc8 --- /dev/null +++ b/db/routines/stock/events/stock_clean.sql @@ -0,0 +1,8 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `stock`.`stock_clean` + ON SCHEDULE EVERY 60 SECOND + STARTS '2025-01-01 00:00:00.000' + ON COMPLETION PRESERVE + ENABLE +DO CALL stock_clean$$ +DELIMITER ; diff --git a/db/routines/stock/events/stock_sync.sql b/db/routines/stock/events/stock_sync.sql index 9287198a96..d598cfc81a 100644 --- a/db/routines/stock/events/stock_sync.sql +++ b/db/routines/stock/events/stock_sync.sql @@ -1,8 +1,8 @@ DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `stock`.`stock_sync` ON SCHEDULE EVERY 5 SECOND - STARTS '2017-06-27 17:15:02.000' - ON COMPLETION NOT PRESERVE + STARTS '2025-01-01 00:00:00.000' + ON COMPLETION PRESERVE DISABLE DO CALL stock_sync$$ DELIMITER ; diff --git a/db/routines/stock/procedures/buyOut_refreshSale.sql b/db/routines/stock/procedures/buyOut_refreshSale.sql index 795f477a24..bb490d7ef8 100644 --- a/db/routines/stock/procedures/buyOut_refreshSale.sql +++ b/db/routines/stock/procedures/buyOut_refreshSale.sql @@ -5,13 +5,15 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refreshSale BEGIN DECLARE vAliveDate DATE; - SET vAliveDate = CURDATE() - INTERVAL 1 MONTH; + SELECT util.VN_CURDATE() - INTERVAL saleLife MONTH + INTO vAliveDate + FROM config LIMIT 1; CREATE OR REPLACE TEMPORARY TABLE tLotStatus ENGINE = MEMORY SELECT lotFk, s.quantity < 0 isExcluded, - t.landed >= vAliveDate isAlive + t.shipped >= vAliveDate isAlive FROM vn.sale s JOIN vn.ticket t ON t.id = s.ticketFk WHERE diff --git a/db/routines/stock/procedures/stock_clean.sql b/db/routines/stock/procedures/stock_clean.sql new file mode 100644 index 0000000000..5cd21cb85c --- /dev/null +++ b/db/routines/stock/procedures/stock_clean.sql @@ -0,0 +1,52 @@ +DELIMITER $$ +CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`stock_clean`() +BEGIN +/** + * Cleans current time dependent cache records. + */ + DECLARE vExpired DATETIME; + DECLARE vAliveDate DATE; + + -- Expired order reserves + + SELECT SUBTIME(util.VN_NOW(), reserveTime) + INTO vExpired + FROM hedera.orderConfig LIMIT 1; + + CREATE OR REPLACE TEMPORARY TABLE tOutDelete + SELECT outFk FROM buyOut + WHERE source = 'orderRow' + AND created < vExpired; + + START TRANSACTION; + + UPDATE buyLot l + JOIN buyPick p ON p.lotFk = l.lotFk + JOIN tOutDelete od ON od.outFk = p.outFk + SET l.isSync = FALSE, + l.available = l.available + p.quantity; + + DELETE p FROM buyPick p + JOIN tOutDelete od USING(outFk); + + COMMIT; + + -- Frozen old sales + + SELECT util.VN_CURDATE() - INTERVAL saleLife MONTH + INTO vAliveDate + FROM config LIMIT 1; + + CREATE OR REPLACE TEMPORARY TABLE tOutDelete + SELECT outFk FROM buyOut + WHERE source = 'sale' + AND dated < vAliveDate; + + DELETE p FROM buyPick p + JOIN tOutDelete od USING(outFk); + + -- Clean + + DROP TEMPORARY TABLE tOutDelete; +END$$ +DELIMITER ; diff --git a/db/versions/11009-tealRuscus/04-buyOut.sql b/db/versions/11009-tealRuscus/04-buyOut.sql index d7867ad99b..5d0d82ad43 100644 --- a/db/versions/11009-tealRuscus/04-buyOut.sql +++ b/db/versions/11009-tealRuscus/04-buyOut.sql @@ -3,7 +3,6 @@ RENAME TABLE IF EXISTS stock.outbound TO stock.buyOut; ALTER TABLE stock.buyOut CHANGE tableName source enum('buy','sale','orderRow') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, CHANGE id outFk int(10) UNSIGNED NOT NULL, - DROP INDEX source, DROP COLUMN tableId, DROP INDEX expired, DROP COLUMN expired; diff --git a/db/versions/11009-tealRuscus/05-stockConfig.sql b/db/versions/11009-tealRuscus/05-stockConfig.sql new file mode 100644 index 0000000000..466a419cac --- /dev/null +++ b/db/versions/11009-tealRuscus/05-stockConfig.sql @@ -0,0 +1,11 @@ +CREATE TABLE stock.config ( + id INT UNSIGNED auto_increment NOT NULL, + saleLife INT UNSIGNED NOT NULL COMMENT 'Maximum sales cache lifetime in days', + CONSTRAINT config_pk PRIMARY KEY (id) +) +ENGINE=InnoDB +DEFAULT CHARSET=utf8mb3 +COLLATE=utf8mb3_general_ci; + +INSERT INTO stock.config (id, saleLife) + VALUES (1, 90);