DELIMITER // CREATE OR REPLACE PROCEDURE bpm_sign_pass ( IN p_token VARCHAR(100), IN p_functiontag VARCHAR(100), -- 單別(* 表示全部) IN p_sdate VARCHAR(10), -- 日期區間(* 表示全部) IN p_edate VARCHAR(10) ) /* Function : 配合 amis 的 bpm, 取得 [經辦事項清單] Description: 所有曾經簽核過, 但是尚未結案的 flow Build Date : 2022/11/16 Modify History Item Who Date Modify Docs ==== ========== ========== ================================================ 1 Michael 2022/11/16 2 Michael 2022/12/04 新增 @functiontag 的 where filter */ BEGIN -- token 轉 userid DECLARE v_userid VARCHAR(20); -- 根據傳入的 token 取得 userid, 並會判斷 token 是否仍有效(無效傳回空白) main_block: BEGIN IF v_userid = '' THEN LEAVE main_block; -- 結束程序 END IF; -- 處理參數(TDB) IF IFNULL(p_functiontag, '') = '' THEN SET p_functiontag = '*'; END IF; -- 回傳狀態 SELECT 0 AS code, 'ok' AS msg; -- 判斷原單已結案? 沒有 P 應該就是已結案 WITH data AS ( SELECT flow_id, sourceid, COUNT(*) AS not_end FROM bpm_flow_sign WHERE sign_status = 'P' GROUP BY flow_id, sourceid ) SELECT b.functiontag, b.flow_name, a.sourceid, a.sourceid AS billno, a.sign_note, a.sign_status, KV.keyvalue AS sign_status_name, d.departmentcname, a.signerid, p.personcname, a.stepName, cloud_addtime(a.create_date) AS create_date FROM bpm_flow_sign A LEFT JOIN bpm_list B ON A.flow_id = B.flow_id LEFT JOIN basperson P ON A.signerid = P.personid LEFT JOIN basdepartment D ON D.departmentid = P.departmentid LEFT JOIN zen_keyvalue KV ON KV.fieldname = 'sign_status' AND KV.keyid = A.sign_status LEFT JOIN data X ON X.flow_id = A.flow_id AND X.sourceid = A.sourceid WHERE FIND_IN_SET(a.sign_status, 'A,R,C') > 0 -- 已簽核過, 但尚未結案 AND CASE WHEN p_functiontag = '*' THEN p_functiontag ELSE b.functiontag END = p_functiontag AND IFNULL(x.not_end, 0) > 0 AND a.signerid = v_userid; END; END // DELIMITER ;