fix: refs #4409 clean frozen sales and lost reserves
gitea/salix/pipeline/pr-dev There was a failure building this commit Details

This commit is contained in:
Juan Ferrer 2025-02-24 18:50:25 +01:00
parent 5e630562ce
commit 7049933c6e
6 changed files with 77 additions and 5 deletions

View File

@ -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 ;

View File

@ -1,8 +1,8 @@
DELIMITER $$ DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `stock`.`stock_sync` CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `stock`.`stock_sync`
ON SCHEDULE EVERY 5 SECOND ON SCHEDULE EVERY 5 SECOND
STARTS '2017-06-27 17:15:02.000' STARTS '2025-01-01 00:00:00.000'
ON COMPLETION NOT PRESERVE ON COMPLETION PRESERVE
DISABLE DISABLE
DO CALL stock_sync$$ DO CALL stock_sync$$
DELIMITER ; DELIMITER ;

View File

@ -5,13 +5,15 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refreshSale
BEGIN BEGIN
DECLARE vAliveDate DATE; 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 CREATE OR REPLACE TEMPORARY TABLE tLotStatus
ENGINE = MEMORY ENGINE = MEMORY
SELECT lotFk, SELECT lotFk,
s.quantity < 0 isExcluded, s.quantity < 0 isExcluded,
t.landed >= vAliveDate isAlive t.shipped >= vAliveDate isAlive
FROM vn.sale s FROM vn.sale s
JOIN vn.ticket t ON t.id = s.ticketFk JOIN vn.ticket t ON t.id = s.ticketFk
WHERE WHERE

View File

@ -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 ;

View File

@ -3,7 +3,6 @@ RENAME TABLE IF EXISTS stock.outbound TO stock.buyOut;
ALTER TABLE stock.buyOut ALTER TABLE stock.buyOut
CHANGE tableName source enum('buy','sale','orderRow') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, CHANGE tableName source enum('buy','sale','orderRow') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
CHANGE id outFk int(10) UNSIGNED NOT NULL, CHANGE id outFk int(10) UNSIGNED NOT NULL,
DROP INDEX source,
DROP COLUMN tableId, DROP COLUMN tableId,
DROP INDEX expired, DROP INDEX expired,
DROP COLUMN expired; DROP COLUMN expired;

View File

@ -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);