修正 bug
This commit is contained in:
@@ -2,89 +2,76 @@ DELIMITER //
|
||||
|
||||
CREATE OR REPLACE FUNCTION bpmm02_udf_spread_signer(
|
||||
p_uuid VARCHAR(100),
|
||||
p_personid VARCHAR(20), -- 起單人
|
||||
p_source_pk_value 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_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_role_users TEXT;
|
||||
DECLARE v_notes VARCHAR(600);
|
||||
DECLARE v_crlf VARCHAR(2);
|
||||
|
||||
SET v_crlf = CHAR(10);
|
||||
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;
|
||||
|
||||
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
|
||||
|
||||
-- 修正:使用 INSERT ... SELECT 單一語句,避免分號造成的執行錯誤
|
||||
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);'
|
||||
'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_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)'
|
||||
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_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, ''''
|
||||
-- 處理角色多人的情況
|
||||
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;
|
||||
|
||||
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
|
||||
-- 處理用戶類型
|
||||
-- 修正:補齊 sign_status 欄位
|
||||
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);'
|
||||
'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;
|
||||
|
||||
Reference in New Issue
Block a user