Files
Omni_bpm.db/bpmm02_udf_spread_signer.txt
T
2026-03-16 00:38:53 +08:00

82 lines
3.3 KiB
Plaintext

DELIMITER //
CREATE OR REPLACE FUNCTION bpmm02_udf_spread_signer(
p_uuid VARCHAR(100),
p_personid VARCHAR(20),
p_source_pk_value VARCHAR(100),
p_stepId VARCHAR(100),
p_typeName VARCHAR(20),
p_nodeName VARCHAR(20),
p_filterSet TEXT,
p_step INT
)
RETURNS TEXT
BEGIN
DECLARE v_sql TEXT DEFAULT '';
DECLARE v_tablename VARCHAR(100);
DECLARE v_source_pk VARCHAR(100);
DECLARE v_stepName VARCHAR(100);
DECLARE v_roleName VARCHAR(100);
DECLARE v_source_note VARCHAR(100);
DECLARE v_userid VARCHAR(100);
DECLARE v_status CHAR(1);
-- 設定初始狀態:第一關為 'P' (簽核中),其餘為 'N' (待簽)
SET v_status = CASE WHEN p_step = 1 THEN 'P' ELSE 'N' END;
IF p_nodeName = 'nodeNode' THEN
SELECT source_table, source_pk, source_note
INTO v_tablename, v_source_pk, v_source_note
FROM bpm_list WHERE flow_id = p_uuid;
SELECT roleName, stepName
INTO v_roleName, v_stepName
FROM bpm_setup WHERE flow_id = p_uuid AND stepId = p_stepId;
-- 修正:使用 INSERT ... SELECT 單一語句,避免分號造成的執行錯誤
IF p_typeName = 'fields' THEN
SET v_sql = CONCAT(
'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note) ',
'SELECT ''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', ',
v_roleName, ', ''', v_status, ''', NOW(), ', v_source_note,
' FROM ', v_tablename, ' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''''
);
ELSEIF p_typeName = 'roles' THEN
IF v_roleName = 'manager' THEN
SELECT bossid INTO v_userid FROM sys_users WHERE userid = p_personid;
SET v_userid = IFNULL(v_userid, '4734');
SET v_sql = CONCAT(
'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note) ',
'SELECT ''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', ',
'''', v_userid, ''', ''', v_status, ''', NOW(), ', v_source_note,
' FROM ', v_tablename, ' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''''
);
ELSE
-- 處理角色多人的情況
SET v_sql = CONCAT(
'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note) ',
'SELECT ''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', ',
'UR.userid, ''', v_status, ''', NOW(), T.', v_source_note,
' FROM sys_userroles UR ',
' CROSS JOIN ', v_tablename, ' T ',
' WHERE UR.roleid = ''', v_roleName, ''' AND T.', v_source_pk, ' = ''', p_source_pk_value, ''''
);
END IF;
ELSEIF p_typeName = 'users' THEN
-- 修正:補齊 sign_status 欄位
SET v_sql = CONCAT(
'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note) ',
'SELECT ''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', ',
'''', v_roleName, ''', ''', v_status, ''', NOW(), ', v_source_note,
' FROM ', v_tablename, ' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''''
);
END IF;
END IF;
RETURN v_sql;
END //
DELIMITER ;