DELIMITER //

CREATE OR REPLACE FUNCTION checktoken(
  p_token VARCHAR(200)
)
/*
  Function   : 判斷傳入的 Token 是否過期, 若未過期, 傳回 userid, 已過期傳回空白
  Description: 判斷 Token 是否過期, 若未過期, 傳回 0, 已過期傳回 9
               簡單的測試 ok
  Build Date : 2018/03/02
  
  Modify History
    Item Who        Date       Modify Docs
    ==== ========== ========== ================================================
    1    Michael    2018/01/08 開始改寫為 MySQL 版
    
*/
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
    DECLARE v_lastlogintime DATETIME;
    DECLARE v_recno INT;
    DECLARE v_diffhour INT;
    DECLARE v_statuscode INT;
    DECLARE v_errMsg VARCHAR(200);
    DECLARE v_longday INT;  -- 0: token 永久有效 其他: token 的效期天數
    DECLARE v_userid VARCHAR(100);
    
    SET v_longday = 0;  -- token 預設永久有效
    SET v_statuscode = 4;
    SET v_userid = '';
    SET v_errMsg = '帳號或密碼錯誤!';
    
    SELECT COUNT(*), userid, lastlogintime 
    INTO v_recno, v_userid, v_lastlogintime
    FROM sys_users 
    WHERE IFNULL(isstop, '') <> 'Y' 
    AND IFNULL(token, 'null') = p_token
    GROUP BY userid, lastlogintime;
    
    IF v_recno > 0 THEN
      -- 如果傳入 token
      SELECT TIMESTAMPDIFF(HOUR, v_lastlogintime, NOW()) INTO v_diffhour;
      
      IF v_diffhour >= 24 * v_longday AND v_longday > 0 THEN
          SET v_statuscode = 9;
          SET v_errMsg = 'token 已過期，請重新登入!';
          SET v_userid = '';
      ELSE
          SET v_statuscode = 0;
          SET v_errMsg = 'token 有效!';
      END IF;
    END IF;
    
    -- 回傳值 dataset[0], 前3個欄位有固定的內容
    RETURN IFNULL(v_userid, '');
END //

DELIMITER ;