salix/db/routines/vn/procedures/vehicle_notifyEvents.sql

52 lines
1.1 KiB
SQL

DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`vehicle_notifyEvents`()
proc:BEGIN
/**
* Query the vehicleEvent table to see if there are any events that need to be notified.
*
*/
DECLARE vEventEarlyDays INT;
DECLARE vHasEvents INT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
SELECT eventEarlyDays INTO vEventEarlyDays
FROM vehicleConfig;
DROP TEMPORARY TABLE IF EXISTS tEvents;
CREATE TEMPORARY TABLE tEvents
SELECT e.id
FROM vehicleEvent e
JOIN vehicleState s ON e.vehicleStateFk = s.id
WHERE e.finished BETWEEN util.VN_CURDATE() AND TIMESTAMPADD(DAY, vEventEarlyDays, util.VN_CURDATE())
AND e.notified IS NULL
AND s.hasToNotify;
SELECT COUNT(id) INTO vHasEvents FROM tEvents;
IF NOT vHasEvents THEN
LEAVE proc;
END IF;
START TRANSACTION;
SELECT util.notification_send('vehicle-event-expired',
JSON_OBJECT('eventIds', JSON_ARRAYAGG(id)),
account.myUser_getId()
)
FROM tEvents;
UPDATE vehicleEvent e
JOIN tEvents s ON e.id = s.id
SET e.notified = util.VN_NOW()
WHERE e.id = s.id;
COMMIT;
DROP TEMPORARY TABLE IF EXISTS tEvents;
END$$
DELIMITER ;