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

View File

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

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

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