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 ) /* Function : bpmm02_spread 產生簽核人 SQL script for insert bpm_flow_sign Description: Build Date : 2022/11/04 Modify History Item Who Date Modify Docs ==== ========== ========== ================================================= 1 Michael 2022/11/04 Init */ RETURNS TEXT BEGIN DECLARE v_sql TEXT; 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_role_users TEXT; DECLARE v_notes VARCHAR(600); DECLARE v_crlf VARCHAR(2); SET v_crlf = CHAR(10); 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; -- 根據類型生成不同的SQL IF p_typeName = 'fields' THEN SET v_sql = CONCAT( 'SELECT @userid:=', v_roleName, ', @notes:=', v_source_note, ' FROM ', v_tablename, ' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''';', v_crlf, 'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note)', v_crlf, 'VALUES (''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', @userid, ''', CASE WHEN p_step = 1 THEN 'P' ELSE 'N' END, ''', NOW(), @notes);' ); ELSEIF p_typeName = 'roles' THEN -- 處理角色類型 IF v_roleName = 'manager' THEN SELECT bossid INTO v_userid FROM sys_users WHERE userid = p_personid; SET v_role_users = CONCAT( 'VALUES (''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', ''', IFNULL(v_userid, '4734'), ''', ''', CASE WHEN p_step = 1 THEN 'P' ELSE 'N' END, ''', NOW(), @notes)' ); ELSE SET v_role_users = CONCAT( 'SELECT ''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', userid, ''', CASE WHEN p_step = 1 THEN 'P' ELSE 'N' END, ''', NOW(), @notes ', 'FROM sys_userroles WHERE roleid = ''', v_roleName, '''' ); END IF; SET v_sql = CONCAT( 'SELECT @notes:=', v_source_note, ' FROM ', v_tablename, ' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''';', v_crlf, 'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note)', v_crlf, v_role_users, ';' ); ELSEIF p_typeName = 'users' THEN -- 處理用戶類型 SET v_sql = CONCAT( 'SELECT @notes:=', v_source_note, ' FROM ', v_tablename, ' WHERE ', v_source_pk, ' = ''', p_source_pk_value, ''';', v_crlf, 'INSERT INTO bpm_flow_sign (flow_id, sourceid, stepName, flow_level, signerid, sign_status, create_date, sign_note)', v_crlf, 'VALUES (''', p_uuid, ''', ''', p_source_pk_value, ''', ''', v_stepName, ''', ', p_step, ', ''', v_roleName, ''', NOW(), @notes);' ); END IF; END IF; RETURN v_sql; END // DELIMITER ;