68 lines
2.4 KiB
Plaintext
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 ; |