44 lines
1.4 KiB
MySQL
44 lines
1.4 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `srt`.`expedition_setDimensions`(
|
||
|
vExpeditionFk INT,
|
||
|
vWeight DECIMAL(10,2),
|
||
|
vLength INT,
|
||
|
vWidth INT,
|
||
|
vHeight INT,
|
||
|
OUT vExpeditionOutFk INT)
|
||
|
BEGIN
|
||
|
/**
|
||
|
* Actualiza las dimensiones, peso y estado de una expedición
|
||
|
*
|
||
|
* @param vExpeditionFk Identificador de expedition
|
||
|
* @param vWeight Peso en kilos
|
||
|
* @param vLength Byte con el número de fotocélulas activadas a lo largo
|
||
|
* @param vWidth Byte con el número de fotocélulas activadas a lo ancho
|
||
|
* @param vHeight Altura de la caja en cm
|
||
|
* @return vExpeditionOutFk Identificador de expedition
|
||
|
*/
|
||
|
|
||
|
DECLARE vWidthSensorsUsed INT;
|
||
|
DECLARE vLengthSensorsUsed INT;
|
||
|
|
||
|
SET vExpeditionOutFk = expedition_check(vExpeditionFk);
|
||
|
|
||
|
#primer bit a 1 a la izquierda - primer bit a 1 a la derecha
|
||
|
SET vWidthSensorsUsed = length(BIN(vWidth)) - LOG2(vWidth & -vWidth);
|
||
|
SET vLengthSensorsUsed = length(BIN(vLength)) - LOG2(vLength & -vLength);
|
||
|
|
||
|
UPDATE expedition e
|
||
|
JOIN expeditionState es ON es.`description` = 'WEIGHED'
|
||
|
JOIN config c
|
||
|
SET weight = IFNULL(vWeight, 0),
|
||
|
stateFk = es.id,
|
||
|
width = IFNULL(c.widthToFirstSensor + (c.widthSensorSpacing * vWidthSensorsUsed), 0),
|
||
|
`length` = IFNULL(c.lengthToFirstSensor + (c.lengthSensorSpacing * vLengthSensorsUsed), 0),
|
||
|
height = IFNULL(vHeight * 10, 0)
|
||
|
WHERE e.id = vExpeditionOutFk;
|
||
|
|
||
|
SET vExpeditionOutFk = vExpeditionFk;
|
||
|
|
||
|
END$$
|
||
|
DELIMITER ;
|