78 lines
1.9 KiB
MySQL
78 lines
1.9 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `srt`.`expedition_get`(vAntennaFk INT, OUT vExpeditionOutFk INT )
|
||
|
BEGIN
|
||
|
|
||
|
DECLARE vId INT;
|
||
|
DECLARE vCount INT;
|
||
|
DECLARE vCreatedMin DATETIME;
|
||
|
DECLARE vCreatedMax DATETIME;
|
||
|
DECLARE vSecondsScope INT DEFAULT 30;
|
||
|
|
||
|
START TRANSACTION;
|
||
|
|
||
|
SELECT count(DISTINCT lr.code) INTO vCount
|
||
|
FROM srt.lastRFID lr
|
||
|
WHERE lr.antennaFk = vAntennaFk
|
||
|
AND NOT isConsulted;
|
||
|
|
||
|
CASE vCount
|
||
|
|
||
|
WHEN 0 THEN
|
||
|
|
||
|
SET vExpeditionOutFk = srt.expedition_check(vCount);
|
||
|
|
||
|
WHEN 1 THEN
|
||
|
|
||
|
SELECT CAST(code AS DECIMAL(10,0)), lr.id
|
||
|
INTO vExpeditionOutFk, vId
|
||
|
FROM srt.lastRFID lr
|
||
|
WHERE lr.antennaFk = vAntennaFk
|
||
|
AND NOT isConsulted
|
||
|
ORDER BY lr.seenCount DESC, lr.peakRssi
|
||
|
LIMIT 1;
|
||
|
|
||
|
ELSE
|
||
|
|
||
|
-- Descartamos aquellas lecturas que se han producido unos segundos antes.
|
||
|
SELECT MIN(created), MAX(created) INTO vCreatedMin, vCreatedMax
|
||
|
FROM srt.lastRFID lr
|
||
|
WHERE lr.antennaFk = vAntennaFk
|
||
|
AND NOT isConsulted;
|
||
|
|
||
|
UPDATE srt.lastRFID lr
|
||
|
JOIN (SELECT id, code
|
||
|
FROM srt.lastRFID
|
||
|
WHERE created
|
||
|
BETWEEN TIMESTAMPADD(SECOND, - vSecondsScope, vCreatedMin)
|
||
|
AND TIMESTAMPADD(SECOND, -1, vCreatedMin)
|
||
|
AND isChoosed = 1#
|
||
|
) sub ON sub.code = lr.code AND sub.id != lr.id
|
||
|
SET lr.isConsulted = TRUE
|
||
|
WHERE lr.created BETWEEN vCreatedMin AND vCreatedMax
|
||
|
AND lr.antennaFk = vAntennaFk;
|
||
|
|
||
|
SELECT CAST(code AS DECIMAL(10,0)), lr.id
|
||
|
INTO vExpeditionOutFk, vId
|
||
|
FROM srt.lastRFID lr
|
||
|
WHERE lr.antennaFk = vAntennaFk
|
||
|
AND NOT isConsulted
|
||
|
ORDER BY lr.peakRssi DESC, lr.seenCount DESC #
|
||
|
LIMIT 1;
|
||
|
|
||
|
END CASE;
|
||
|
|
||
|
UPDATE srt.lastRFID
|
||
|
SET isChoosed = TRUE
|
||
|
WHERE id = vId;
|
||
|
|
||
|
UPDATE srt.lastRFID
|
||
|
SET isConsulted = TRUE
|
||
|
WHERE antennaFk = vAntennaFk
|
||
|
AND NOT isConsulted;
|
||
|
|
||
|
COMMIT;
|
||
|
|
||
|
INSERT INTO srt.expeditionLog (expeditionFk, bufferFk, `action`, antennaFk) VALUES(vExpeditionOutFk, 0, 'DIM', vAntennaFk);
|
||
|
END$$
|
||
|
DELIMITER ;
|