DELIMITER //

CREATE OR REPLACE FUNCTION udf_myfavor(
  p_moduleid VARCHAR(100),
  p_userid VARCHAR(20),
  p_ver_type VARCHAR(10),
  p_ip VARCHAR(100),
  p_db2 VARCHAR(100)
)
RETURNS LONGTEXT
DETERMINISTIC
/*
  function   : NǤJr,  @split Twά 2, Ǧ^ table, oOSΪk
  description: 
    Isd  SELECT udf_myfavor('eip','admin','beta','','')
  build date : 2023/11/01
  
  modify history
    item who        date       modify docs
    ==== ========== ========== ================================================
    1    michael    2023/11/01 sW
*/
BEGIN
    DECLARE v_ret_menu LONGTEXT;
    DECLARE v_imax2 INT;
    DECLARE v_y2 INT;
    DECLARE v_comma VARCHAR(1);
    DECLARE v_id2 VARCHAR(100);
    DECLARE v_name2 VARCHAR(100);
    DECLARE v_isLocalMenu VARCHAR(1);
    DECLARE v_crlf VARCHAR(2);
    
    -- Ы{ɪӦsxƾ
    DROP TEMPORARY TABLE IF EXISTS temp_menu_favor;
    CREATE TEMPORARY TABLE temp_menu_favor (
      menuid VARCHAR(100),
      caption VARCHAR(100),
      isLocalMenu VARCHAR(1),
      rowid INT AUTO_INCREMENT PRIMARY KEY
    ) ENGINE=MEMORY;
    
    -- Jƾڨ{ɪ
    INSERT INTO temp_menu_favor (menuid, caption, isLocalMenu)
    SELECT a.functiontag, b.caption, IFNULL(b.isLocalMenu, 'N') 
    FROM sys_myfavor a
    LEFT JOIN sys_menutable b ON a.functiontag = b.menuid
    WHERE module = p_moduleid AND userid = p_userid;
    
    SET v_ret_menu = '';
    SET v_crlf = CHAR(10);
    
    -- hj
    SELECT IFNULL(MAX(rowid), 0) INTO v_imax2 FROM temp_menu_favor;
    SELECT IFNULL(MIN(rowid), 0) INTO v_y2 FROM temp_menu_favor;
    
    WHILE v_y2 <= v_imax2 AND v_imax2 > 0 DO
        IF v_y2 = v_imax2 THEN
            SET v_comma = '';
        ELSE
            SET v_comma = ',';
        END IF;
        
        SELECT menuid, caption, isLocalMenu 
        INTO v_id2, v_name2, v_isLocalMenu
        FROM temp_menu_favor 
        WHERE rowid = v_y2;
        
        IF v_isLocalMenu = 'Y' THEN
            -- a json {
            SET v_ret_menu = CONCAT(
                v_ret_menu,
                '               {', v_crlf,
                '                "label": "', v_name2, '",', v_crlf,
                '                "url": "/', p_moduleid, '/', v_id2, '",', v_crlf,
                '                "schemaApi": "get:/pages/', v_id2, '.json"', v_crlf,
                '              }', v_comma, v_crlf
            );
        ELSE
            -- uʺAJ code(test ok, but wait to use)
            SET v_ret_menu = CONCAT(
                v_ret_menu,
                '               {', v_crlf,
                '                "label": "', v_name2, '",', v_crlf,
                '                "url": "/', p_moduleid, '/', v_id2, '",', v_crlf,
                '                "schemaApi": {', v_crlf,
                '                  "method": "post",', v_crlf,
                '                  "url": "', p_ip, '/xapi/v2/', p_db2, '/zen_showsource/0/",', v_crlf,
                '                  "data": {', v_crlf,
                '                    "para01": "', v_id2, '",', v_crlf,
                '                    "para02": "', p_ver_type, '",', v_crlf,
                '                    "para03": "', p_ip, '"', v_crlf,
                '                  },', v_crlf,
                '                  "dataType": "form"', v_crlf,
                '                }', v_crlf,
                '              }', v_comma, v_crlf
            );
        END IF;
        
        SET v_y2 = v_y2 + 1;
    END WHILE;
    
    IF v_ret_menu <> '' THEN
        SET v_ret_menu = CONCAT(
            '      {', v_crlf,
            '        "children": [', v_crlf,
            '           {', v_crlf,
            '            "label": "ڪ̷R",', v_crlf,
            '            "url": "/sys",', v_crlf,
            '            "icon": "fa fa-heart-o",', v_crlf,
            '            "children": [', v_crlf,
            v_ret_menu, 
            '            ]', v_crlf,
            '          }', v_crlf,
            '        ]', v_crlf,
            '      },', v_crlf
        );
    END IF;
    
    -- Mz{ɪ
    DROP TEMPORARY TABLE IF EXISTS temp_menu_favor;
    
    RETURN v_ret_menu;
END //

DELIMITER ;