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

64 lines
1.4 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`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 outFk
FROM buyOutOrder
WHERE
(vTable = 'orderRow' AND outFk = vId)
OR (vTable = 'order' AND orderFk = vId);
CREATE OR REPLACE TEMPORARY TABLE tOutNew
ENGINE = MEMORY
SELECT
o.id orderFk,
r.outFk,
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 = 'orderRow' AND r.outFk = vId)
OR (vTable = 'order' AND o.id = vId)
);
CREATE OR REPLACE TEMPORARY TABLE tOutDel
ENGINE = MEMORY
SELECT outFk FROM tOutOld o
LEFT JOIN hedera.orderRow r USING(outFk)
WHERE r.outFk IS NULL;
START TRANSACTION;
CALL buyOut_refresh('orderRow');
DELETE o FROM buyOutOrder o
JOIN tOutPrune d USING(outFk);
INSERT INTO buyOutOrder (outFk, orderFk)
SELECT outFk, orderFk FROM tOutNew
ON DUPLICATE KEY UPDATE
orderFk = VALUES(orderFk);
COMMIT;
DROP TEMPORARY TABLE tOutNew, tOutOld, tOutPrune, tOutDel;
END$$
DELIMITER ;