2024-01-15 11:31:03 +00:00
|
|
|
DELIMITER $$
|
2025-02-19 13:46:55 +00:00
|
|
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`stock_refreshAll`()
|
2024-01-15 11:31:03 +00:00
|
|
|
BEGIN
|
|
|
|
/**
|
|
|
|
* Recalculates the entire cache. It takes a considerable time,
|
|
|
|
* please avoid calls to this procedure from commonly used operations.
|
|
|
|
*/
|
2025-02-25 11:46:21 +00:00
|
|
|
DECLARE vDone BOOL;
|
|
|
|
DECLARE vId INT;
|
|
|
|
|
2025-02-27 18:50:54 +00:00
|
|
|
DECLARE vEntries CURSOR FOR
|
|
|
|
SELECT DISTINCT e.id
|
|
|
|
FROM vn.buy b
|
|
|
|
JOIN vn.entry e ON b.entryFk = e.id
|
|
|
|
WHERE b.isAlive;
|
2025-02-25 11:46:21 +00:00
|
|
|
|
|
|
|
DECLARE vTickets CURSOR FOR
|
2025-02-25 17:23:41 +00:00
|
|
|
SELECT id FROM vn.ticket WHERE isAlive;
|
2025-02-25 11:46:21 +00:00
|
|
|
|
2025-02-27 18:50:54 +00:00
|
|
|
DECLARE vOrderRows CURSOR FOR
|
2025-02-25 17:23:41 +00:00
|
|
|
SELECT lotFk FROM hedera.orderRow WHERE isReserved;
|
2025-02-25 11:46:21 +00:00
|
|
|
|
|
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
|
|
SET vDone = TRUE;
|
|
|
|
|
2024-01-15 11:31:03 +00:00
|
|
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
|
|
BEGIN
|
2025-02-26 08:31:36 +00:00
|
|
|
DO RELEASE_LOCK('stock.stock_refreshAll');
|
2024-01-15 11:31:03 +00:00
|
|
|
RESIGNAL;
|
|
|
|
END;
|
2024-04-08 07:11:40 +00:00
|
|
|
|
2025-02-26 08:31:36 +00:00
|
|
|
IF NOT GET_LOCK('stock.stock_refreshAll', 30) THEN
|
2024-01-15 11:31:03 +00:00
|
|
|
CALL util.throw('Lock timeout exceeded');
|
|
|
|
END IF;
|
|
|
|
|
2025-02-25 11:46:21 +00:00
|
|
|
-- Prune cache
|
|
|
|
|
2025-02-25 09:49:58 +00:00
|
|
|
DELETE p FROM buyPick p JOIN buyLot l USING(lotFk);
|
2025-02-18 14:58:38 +00:00
|
|
|
TRUNCATE TABLE buyLot;
|
|
|
|
TRUNCATE TABLE buyOut;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
2025-02-25 17:25:58 +00:00
|
|
|
-- Populate cache
|
2025-02-25 11:46:21 +00:00
|
|
|
|
2025-02-27 18:50:54 +00:00
|
|
|
OPEN vEntries;
|
2025-02-25 11:46:21 +00:00
|
|
|
buyLoop: LOOP
|
|
|
|
SET vDone = FALSE;
|
2025-02-27 18:50:54 +00:00
|
|
|
FETCH vEntries INTO vId;
|
2025-02-25 11:46:21 +00:00
|
|
|
|
|
|
|
IF vDone THEN
|
|
|
|
LEAVE buyLoop;
|
|
|
|
END IF;
|
|
|
|
|
2025-02-27 18:50:54 +00:00
|
|
|
CALL buyOut_refreshBuy('entry', vId);
|
2025-02-25 11:46:21 +00:00
|
|
|
END LOOP;
|
2025-02-27 18:50:54 +00:00
|
|
|
CLOSE vEntries;
|
2025-02-25 11:46:21 +00:00
|
|
|
|
2025-02-27 18:50:54 +00:00
|
|
|
OPEN vOrderRows;
|
2025-02-25 11:46:21 +00:00
|
|
|
orderLoop: LOOP
|
|
|
|
SET vDone = FALSE;
|
2025-02-27 18:50:54 +00:00
|
|
|
FETCH vOrderRows INTO vId;
|
2025-02-25 11:46:21 +00:00
|
|
|
|
|
|
|
IF vDone THEN
|
|
|
|
LEAVE orderLoop;
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
CALL buyOut_refreshOrder('lot', vId);
|
|
|
|
END LOOP;
|
2025-02-27 18:50:54 +00:00
|
|
|
CLOSE vOrderRows;
|
2025-02-25 11:46:21 +00:00
|
|
|
|
|
|
|
OPEN vTickets;
|
|
|
|
saleLoop: LOOP
|
|
|
|
SET vDone = FALSE;
|
|
|
|
FETCH vTickets INTO vId;
|
|
|
|
|
|
|
|
IF vDone THEN
|
|
|
|
LEAVE saleLoop;
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
CALL buyOut_refreshSale('ticket', vId);
|
|
|
|
END LOOP;
|
|
|
|
CLOSE vTickets;
|
|
|
|
|
|
|
|
-- Synchronize
|
2024-01-15 11:31:03 +00:00
|
|
|
|
2025-02-18 14:58:38 +00:00
|
|
|
UPDATE buyOut SET isSync = TRUE;
|
2025-02-19 13:46:55 +00:00
|
|
|
CALL stock_sync;
|
2024-01-15 11:31:03 +00:00
|
|
|
|
2025-02-26 08:31:36 +00:00
|
|
|
DO RELEASE_LOCK('stock.stock_refreshAll');
|
2024-01-15 11:31:03 +00:00
|
|
|
END$$
|
|
|
|
DELIMITER ;
|