84 lines
2.3 KiB
MySQL
84 lines
2.3 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `srt`.`expedition_arrived`(vExpeditionFk INT, vBufferFk INT, OUT vTypeFk INT)
|
||
|
BEGIN
|
||
|
/**
|
||
|
* La expedición ha entrado en un buffer, superando fc2
|
||
|
*
|
||
|
* @param vExpeditionFk Identificador de srt.expedition
|
||
|
* @param vBufferFk Identificador de srt.buffer
|
||
|
*
|
||
|
* @return vTypeFk Identificador de srt.bufferType
|
||
|
*
|
||
|
*/
|
||
|
DECLARE vComingBoxes INT;
|
||
|
DECLARE vHasWorkerWaiting BOOL;
|
||
|
DECLARE vIsRandomMoving BOOL;
|
||
|
DECLARE vState VARCHAR(15);
|
||
|
DECLARE vType VARCHAR(15);
|
||
|
DECLARE visBufferWhithoutBoxesCount BOOL;
|
||
|
|
||
|
IF vBufferFk = 1 THEN
|
||
|
SET vBufferFk = 0;
|
||
|
END IF;
|
||
|
|
||
|
INSERT INTO srt.expeditionLog (expeditionFk, bufferFk, `action`)
|
||
|
VALUES(vExpeditionFk, vBufferFk, 'ARR');
|
||
|
|
||
|
SELECT COUNT(*) INTO vComingBoxes
|
||
|
FROM srt.moving m
|
||
|
WHERE m.bufferToFk = vBufferFk
|
||
|
AND m.expeditionFk != vExpeditionFk;
|
||
|
|
||
|
SELECT b.hasWorkerWaiting,
|
||
|
c.isRandomMoving ,
|
||
|
(bt.typeName = 'STRAPPING') OR vBufferFk IN (c.bufferNoLabels, c.bufferTwoLabels, c.bufferDefault)
|
||
|
INTO vHasWorkerWaiting,
|
||
|
vIsRandomMoving,
|
||
|
visBufferWhithoutBoxesCount
|
||
|
FROM srt.buffer b
|
||
|
JOIN srt.bufferType bt ON bt.id = b.typeFk
|
||
|
JOIN srt.config c
|
||
|
WHERE b.id = vBufferFk
|
||
|
LIMIT 1;
|
||
|
|
||
|
SET vState = IF(srt.buffer_isFull(vBufferFk), 'FULL', 'FREE');
|
||
|
|
||
|
SET vType = IF(vHasWorkerWaiting
|
||
|
AND NOT vComingBoxes
|
||
|
AND NOT vIsRandomMoving
|
||
|
AND vState = 'FULL', 'UNLOADING', 'ACCUMULATION');
|
||
|
|
||
|
IF NOT visBufferWhithoutBoxesCount THEN
|
||
|
CALL srt.buffer_setStateType(vBufferFk,vState,vType);
|
||
|
END IF;
|
||
|
|
||
|
UPDATE srt.expedition e
|
||
|
JOIN srt.expeditionState es ON es.description = 'STORED'
|
||
|
SET e.bufferFk = IF(visBufferWhithoutBoxesCount,0,vBufferFk),
|
||
|
e.`position` = 0,
|
||
|
e.stateFk = es.id
|
||
|
WHERE e.id = vExpeditionFk;
|
||
|
|
||
|
UPDATE srt.expedition e
|
||
|
SET e.`position` = e.`position` + 1
|
||
|
WHERE e.bufferFk = vBufferFk
|
||
|
AND e.bufferFk > 0;
|
||
|
|
||
|
INSERT INTO srt.movingLog(expeditionFk, bufferFromFk, bufferToFk, stateFk, isColliding, movingFk, `action`)
|
||
|
SELECT expeditionFk, bufferFromFk, bufferToFk, stateFk, isColliding, id, 'ARRIVED'
|
||
|
FROM srt.moving
|
||
|
WHERE expeditionFk = vExpeditionFk
|
||
|
ORDER BY id DESC
|
||
|
LIMIT 1;
|
||
|
|
||
|
DELETE FROM srt.moving
|
||
|
WHERE expeditionFk = vExpeditionFk;
|
||
|
|
||
|
SELECT bt.id INTO vTypeFk
|
||
|
FROM srt.bufferType bt
|
||
|
JOIN srt.buffer b ON b.typeFk = bt.id
|
||
|
WHERE b.id = vBufferFk;
|
||
|
|
||
|
END$$
|
||
|
DELIMITER ;
|