DELIMITER // CREATE OR REPLACE PROCEDURE bpmm02_sign_assign ( IN p_token VARCHAR(100), -- 可轉為 userid IN p_sign_type VARCHAR(1), -- A(gree)/R(eject) IN p_uuid VARCHAR(100), -- 也可以傳入 functiontag IN p_source_pk_value VARCHAR(100) -- 單號 ) /* 功能 : 配合 vue+jsplumb 的 bpm, 配合簽核同意, 駁回時的 [指定簽核人] select 元件所需內容 描述 : 本程式用於 [指定簽核人] 建立日期 : 2022/11/27 修改歷史 項目 誰 日期 修改說明 ==== ========== ========== ================================================ 1 Michael 2022-11-27 Init */ BEGIN DECLARE v_userid VARCHAR(20); DECLARE v_id INT; -- 當前 id DECLARE v_flow_level INT; -- 當前 id 的 flow_level -- 根據傳入的 token 取得 userid, 並會判斷 token 是否仍有效(無效傳回空白) proc_label: BEGIN SELECT checktoken(p_token) INTO v_userid; IF v_userid = '' THEN LEAVE proc_label; END IF; -- 以請假單為例(由 tag 轉 uuid) IF LENGTH(p_uuid) < 20 THEN SELECT flow_id INTO p_uuid FROM bpm_list WHERE functiontag = p_uuid; END IF; -- 取得當前待簽核的 id, 及前一或後一步驟的 id SELECT id, flow_level INTO v_id, v_flow_level FROM bpm_flow_sign WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND signerid = v_userid AND sign_status = 'P'; -- 如果不符合條件, 就直接離開 IF v_id IS NULL THEN LEAVE proc_label; END IF; -- 返回基本狀態 SELECT 0 AS code, 'ok' AS msg; IF p_sign_type = 'A' THEN -- 同意, 下一關 SELECT '*' AS value, '不指派' AS label UNION SELECT s.signerid AS value, p.personcname AS label FROM bpm_flow_sign s LEFT JOIN basperson p ON s.signerid = p.personid WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level = v_flow_level + 1; ELSEIF p_sign_type = 'R' THEN -- 駁回, 前一關(駁回可以回之前任何一關), 但是必須 assign_to=Y(之前有簽過的人) SELECT '*' AS value, '不指派' AS label UNION SELECT s.signerid AS value, p.personcname AS label FROM bpm_flow_sign s LEFT JOIN basperson p ON s.signerid = p.personid WHERE flow_id = p_uuid AND sourceid = p_source_pk_value AND flow_level < v_flow_level AND assign_to = 'Y'; END IF; END; END // DELIMITER ;