51 lines
1.1 KiB
MySQL
51 lines
1.1 KiB
MySQL
|
|
||
|
DROP procedure IF EXISTS vn.`zoneClosure_recalc`;
|
||
|
|
||
|
DELIMITER $$
|
||
|
CREATE DEFINER=`root`@`%` PROCEDURE vn.`zoneClosure_recalc`()
|
||
|
proc: BEGIN
|
||
|
/**
|
||
|
* Recalculates the delivery time (hour) for every zone in days + scope in future
|
||
|
*/
|
||
|
DECLARE vScope INT;
|
||
|
DECLARE vCounter INT DEFAULT 0;
|
||
|
DECLARE vShipped DATE DEFAULT CURDATE();
|
||
|
|
||
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||
|
BEGIN
|
||
|
DO RELEASE_LOCK('vn.zoneClosure_recalc');
|
||
|
RESIGNAL;
|
||
|
END;
|
||
|
|
||
|
IF NOT GET_LOCK('vn.zoneClosure_recalc', 0) THEN
|
||
|
LEAVE proc;
|
||
|
END IF;
|
||
|
|
||
|
SELECT scope INTO vScope
|
||
|
FROM zoneConfig;
|
||
|
|
||
|
DROP TEMPORARY TABLE IF EXISTS tmp.zone;
|
||
|
CREATE TEMPORARY TABLE tmp.zone
|
||
|
(INDEX (id))
|
||
|
ENGINE = MEMORY
|
||
|
SELECT id FROM zone;
|
||
|
|
||
|
TRUNCATE TABLE zoneClosure;
|
||
|
|
||
|
REPEAT
|
||
|
CALL zone_getOptionsForShipment(vShipped);
|
||
|
INSERT INTO zoneClosure(zoneFk, dated, `hour`)
|
||
|
SELECT zoneFk, vShipped, `hour` FROM tmp.zoneOption;
|
||
|
|
||
|
SET vCounter = vCounter + 1;
|
||
|
SET vShipped = TIMESTAMPADD(DAY, 1, vShipped);
|
||
|
UNTIL vCounter > vScope
|
||
|
END REPEAT;
|
||
|
|
||
|
DROP TEMPORARY TABLE tmp.zone;
|
||
|
DO RELEASE_LOCK('vn.zoneClosure_recalc');
|
||
|
END$$
|
||
|
|
||
|
DELIMITER ;
|
||
|
|