salix/db/routines/stock/procedures/buyOut_refreshOrder.sql

64 lines
1.4 KiB
MySQL
Raw Normal View History

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `stock`.`buyOut_refreshOrder`(
`vTable` VARCHAR(255),
`vId` INT)
BEGIN
DECLARE vExpired DATETIME;
SELECT SUBTIME(util.VN_NOW(), reserveTime)
INTO vExpired
FROM hedera.orderConfig LIMIT 1;
CREATE OR REPLACE TEMPORARY TABLE tOutOld
ENGINE = MEMORY
SELECT rowFk tableId
FROM buyOutOrder
WHERE
(vTable = 'order' AND orderFk = vId)
OR (vTable = 'orderRow' AND rowFk = vId);
CREATE OR REPLACE TEMPORARY TABLE tOutNew
ENGINE = MEMORY
SELECT
o.id orderFk,
r.id tableId,
r.warehouseFk,
r.shipment dated,
r.itemFk,
r.amount quantity,
r.created,
FALSE isPicked
FROM hedera.orderRow r
JOIN hedera.`order` o ON o.id = r.orderFk
WHERE !o.confirmed
AND r.created >= vExpired
AND r.amount > 0
AND (
(vTable = 'order' AND o.id = vId)
OR (vTable = 'orderRow' AND r.id = vId)
);
CREATE OR REPLACE TEMPORARY TABLE tOutDel
ENGINE = MEMORY
SELECT tableId FROM tOutOld o
2025-02-14 10:34:35 +00:00
LEFT JOIN hedera.orderRow r ON r.id = o.tableId
WHERE r.id IS NULL;
START TRANSACTION;
CALL buyOut_refresh('orderRow', vId);
DELETE o FROM buyOutOrder o
JOIN tOutPrune d ON d.tableId = o.rowFk;
INSERT INTO buyOutOrder (orderFk, rowFk)
SELECT orderFk, tableId FROM tOutNew
ON DUPLICATE KEY UPDATE
orderFk = VALUES(orderFk);
COMMIT;
DROP TEMPORARY TABLE tOutNew, tOutOld, tOutPrune, tOutDel;
END$$
DELIMITER ;