Files
Omni_bpm.db/bpmm02_sign_assign.txt
2026-02-06 14:35:36 +08:00

68 lines
2.4 KiB
Plaintext

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 ;