75 lines
2.0 KiB
MySQL
75 lines
2.0 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `srt`.`moving_next`()
|
||
|
BEGIN
|
||
|
|
||
|
DECLARE vExpeditionFk INT;
|
||
|
DECLARE vMovingFk INT;
|
||
|
DECLARE vSecondsFromLastRFIDReading INT;
|
||
|
|
||
|
CALL srt.randomMoving_Launch();
|
||
|
|
||
|
CALL srt.moving_GroupOut();
|
||
|
|
||
|
CALL srt.moving_CollidingSet();
|
||
|
|
||
|
SELECT TIME_TO_SEC((TIMEDIFF(util.VN_NOW(),MAX(lr.created))))
|
||
|
INTO vSecondsFromLastRFIDReading
|
||
|
FROM srt.lastRFID lr;
|
||
|
|
||
|
|
||
|
SELECT m.id INTO vMovingFk
|
||
|
FROM srt.moving m
|
||
|
JOIN srt.expedition e ON e.id = m.expeditionFk
|
||
|
JOIN srt.movingState ms ON ms.id = m.stateFk
|
||
|
JOIN srt.buffer b ON b.id = m.bufferToFk
|
||
|
JOIN srt.buffer b2 ON b2.id = m.bufferFromFk
|
||
|
JOIN srt.bufferType bt ON bt.id = b.typeFk
|
||
|
JOIN srt.bufferState bs ON bs.id = b.stateFk
|
||
|
JOIN srt.config c
|
||
|
WHERE NOT ms.isInterfering
|
||
|
AND NOT m.isColliding
|
||
|
AND (c.isEnteringBlocked = FALSE OR m.bufferFromFk > 0)
|
||
|
AND (e.`position` = 1 OR m.bufferFromFk = 0)
|
||
|
AND (vSecondsFromLastRFIDReading > c.enteringSecondsReserve OR m.bufferFromFk = 0)
|
||
|
AND (bs.description != 'FULL' OR m.bufferFromFk = 0)
|
||
|
ORDER BY (m.bufferFromFk = 0) DESC,
|
||
|
m.bufferFromFk DESC
|
||
|
LIMIT 1;
|
||
|
|
||
|
SELECT m.expeditionFk
|
||
|
INTO vExpeditionFk
|
||
|
FROM moving m
|
||
|
WHERE m.id = vMovingFk;
|
||
|
|
||
|
IF vExpeditionFk THEN
|
||
|
|
||
|
SELECT m.expeditionFk,
|
||
|
m.bufferFromFk,
|
||
|
m.bufferToFk
|
||
|
FROM moving m
|
||
|
WHERE m.id = vMovingFk;
|
||
|
|
||
|
UPDATE expedition e
|
||
|
JOIN expeditionState es ON es.description = 'MOVING'
|
||
|
SET e.stateFk = es.id
|
||
|
WHERE e.id = vExpeditionFk;
|
||
|
|
||
|
UPDATE srt.moving m
|
||
|
JOIN srt.movingState ms ON ms.description = 'MOVING'
|
||
|
SET m.stateFk = ms.id
|
||
|
WHERE m.id = vMovingFk;
|
||
|
|
||
|
INSERT INTO srt.movingLog(expeditionFk, bufferFromFk, bufferToFk, stateFk, isColliding, movingFk, `action`)
|
||
|
SELECT expeditionFk, bufferFromFk, bufferToFk, stateFk, isColliding, id, 'NEXT'
|
||
|
FROM srt.moving
|
||
|
WHERE id = vMovingFk;
|
||
|
|
||
|
ELSE
|
||
|
|
||
|
SELECT 0 expeditionFk, 0 bufferFromFk, 0 bufferToFk;
|
||
|
|
||
|
END IF;
|
||
|
|
||
|
END$$
|
||
|
DELIMITER ;
|