201 lines
6.7 KiB
SQL
201 lines
6.7 KiB
SQL
-- 修复审批记录数据脚本
|
|
-- 问题:审批人设置错误(使用申报人作为审批人)
|
|
-- 解决:删除错误记录,为submitted和approving状态的申报重新创建审批记录
|
|
|
|
-- ============================================
|
|
-- 1. 备份现有错误数据(可选)
|
|
-- ============================================
|
|
/*
|
|
CREATE TABLE cw_approval_record_backup_20250801 AS
|
|
SELECT * FROM cw_approval_record WHERE 1=1;
|
|
*/
|
|
|
|
-- ============================================
|
|
-- 2. 删除错误的审批记录
|
|
-- ============================================
|
|
-- 删除审批人是申报人自己的错误记录
|
|
DELETE ar FROM cw_approval_record ar
|
|
INNER JOIN cw_project_application pa ON ar.application_id = pa.id
|
|
WHERE ar.approver_id = pa.create_by;
|
|
|
|
SELECT '删除错误审批记录完成' as status;
|
|
|
|
-- ============================================
|
|
-- 3. 检查需要重新创建审批记录的申报
|
|
-- ============================================
|
|
SELECT
|
|
id,
|
|
application_no,
|
|
project_name,
|
|
approval_status,
|
|
department_id,
|
|
'需要重新创建审批记录' as note
|
|
FROM cw_project_application
|
|
WHERE approval_status IN ('submitted', 'approving')
|
|
AND deleted = 0
|
|
ORDER BY submit_time DESC;
|
|
|
|
-- ============================================
|
|
-- 4. 为教务处申报创建正确的审批记录(jwc001作为部门审批人)
|
|
-- ============================================
|
|
|
|
-- 获取需要处理的申报ID
|
|
SET @dept_id = 1938484570826956801; -- 教务处
|
|
SET @dept_approver_id = 2101; -- jwc001 (教务处处长江建)
|
|
SET @finance_approver_id = 1; -- admin (临时财务审批人)
|
|
SET @leader_approver_id = 1; -- admin (临时领导审批人)
|
|
|
|
-- 为每个submitted状态的申报创建审批记录
|
|
INSERT INTO cw_approval_record (
|
|
id, application_id, application_no, node_code, node_name, node_order,
|
|
approver_id, approver_name, is_delegate, original_approver_id, original_approver_name,
|
|
node_status, approve_action, approve_opinion, start_time, end_time, expect_finish_time,
|
|
is_overtime, config_id, config_snapshot, create_by, create_time, update_by, update_time,
|
|
create_dept, tenant_id
|
|
)
|
|
SELECT
|
|
-- 为部门审批记录生成ID
|
|
CONCAT(pa.id, '01') as id,
|
|
pa.id as application_id,
|
|
pa.application_no,
|
|
'dept_approve' as node_code,
|
|
'部门审批' as node_name,
|
|
1 as node_order,
|
|
@dept_approver_id as approver_id,
|
|
'教务处处长江建' as approver_name,
|
|
0 as is_delegate,
|
|
NULL as original_approver_id,
|
|
NULL as original_approver_name,
|
|
'waiting' as node_status,
|
|
NULL as approve_action,
|
|
NULL as approve_opinion,
|
|
NOW() as start_time,
|
|
NULL as end_time,
|
|
NULL as expect_finish_time,
|
|
0 as is_overtime,
|
|
NULL as config_id,
|
|
NULL as config_snapshot,
|
|
pa.create_by as create_by,
|
|
NOW() as create_time,
|
|
pa.create_by as update_by,
|
|
NOW() as update_time,
|
|
pa.create_dept as create_dept,
|
|
'000000' as tenant_id
|
|
FROM cw_project_application pa
|
|
WHERE pa.department_id = @dept_id
|
|
AND pa.approval_status IN ('submitted', 'approving')
|
|
AND pa.deleted = 0;
|
|
|
|
-- 为每个申报创建财务审批记录(pending状态)
|
|
INSERT INTO cw_approval_record (
|
|
id, application_id, application_no, node_code, node_name, node_order,
|
|
approver_id, approver_name, is_delegate, original_approver_id, original_approver_name,
|
|
node_status, approve_action, approve_opinion, start_time, end_time, expect_finish_time,
|
|
is_overtime, config_id, config_snapshot, create_by, create_time, update_by, update_time,
|
|
create_dept, tenant_id
|
|
)
|
|
SELECT
|
|
-- 为财务审批记录生成ID
|
|
CONCAT(pa.id, '02') as id,
|
|
pa.id as application_id,
|
|
pa.application_no,
|
|
'finance_approve' as node_code,
|
|
'财务审批' as node_name,
|
|
2 as node_order,
|
|
@finance_approver_id as approver_id,
|
|
'系统管理员' as approver_name,
|
|
0 as is_delegate,
|
|
NULL as original_approver_id,
|
|
NULL as original_approver_name,
|
|
'pending' as node_status,
|
|
NULL as approve_action,
|
|
NULL as approve_opinion,
|
|
NOW() as start_time,
|
|
NULL as end_time,
|
|
NULL as expect_finish_time,
|
|
0 as is_overtime,
|
|
NULL as config_id,
|
|
NULL as config_snapshot,
|
|
pa.create_by as create_by,
|
|
NOW() as create_time,
|
|
pa.create_by as update_by,
|
|
NOW() as update_time,
|
|
pa.create_dept as create_dept,
|
|
'000000' as tenant_id
|
|
FROM cw_project_application pa
|
|
WHERE pa.department_id = @dept_id
|
|
AND pa.approval_status IN ('submitted', 'approving')
|
|
AND pa.deleted = 0;
|
|
|
|
-- 为每个申报创建领导审批记录(pending状态)
|
|
INSERT INTO cw_approval_record (
|
|
id, application_id, application_no, node_code, node_name, node_order,
|
|
approver_id, approver_name, is_delegate, original_approver_id, original_approver_name,
|
|
node_status, approve_action, approve_opinion, start_time, end_time, expect_finish_time,
|
|
is_overtime, config_id, config_snapshot, create_by, create_time, update_by, update_time,
|
|
create_dept, tenant_id
|
|
)
|
|
SELECT
|
|
-- 为领导审批记录生成ID
|
|
CONCAT(pa.id, '03') as id,
|
|
pa.id as application_id,
|
|
pa.application_no,
|
|
'leader_approve' as node_code,
|
|
'领导审批' as node_name,
|
|
3 as node_order,
|
|
@leader_approver_id as approver_id,
|
|
'系统管理员' as approver_name,
|
|
0 as is_delegate,
|
|
NULL as original_approver_id,
|
|
NULL as original_approver_name,
|
|
'pending' as node_status,
|
|
NULL as approve_action,
|
|
NULL as approve_opinion,
|
|
NOW() as start_time,
|
|
NULL as end_time,
|
|
NULL as expect_finish_time,
|
|
0 as is_overtime,
|
|
NULL as config_id,
|
|
NULL as config_snapshot,
|
|
pa.create_by as create_by,
|
|
NOW() as create_time,
|
|
pa.create_by as update_by,
|
|
NOW() as update_time,
|
|
pa.create_dept as create_dept,
|
|
'000000' as tenant_id
|
|
FROM cw_project_application pa
|
|
WHERE pa.department_id = @dept_id
|
|
AND pa.approval_status IN ('submitted', 'approving')
|
|
AND pa.deleted = 0;
|
|
|
|
-- ============================================
|
|
-- 5. 验证修复结果
|
|
-- ============================================
|
|
|
|
-- 检查审批记录是否正确创建
|
|
SELECT
|
|
ar.application_id,
|
|
ar.application_no,
|
|
ar.node_code,
|
|
ar.node_name,
|
|
ar.node_status,
|
|
ar.approver_id,
|
|
ar.approver_name,
|
|
pa.approval_status
|
|
FROM cw_approval_record ar
|
|
INNER JOIN cw_project_application pa ON ar.application_id = pa.id
|
|
WHERE pa.department_id = @dept_id
|
|
AND pa.approval_status IN ('submitted', 'approving')
|
|
ORDER BY ar.application_id, ar.node_order;
|
|
|
|
-- 统计修复结果
|
|
SELECT
|
|
'修复完成' as status,
|
|
COUNT(DISTINCT ar.application_id) as fixed_applications,
|
|
COUNT(*) as total_approval_records
|
|
FROM cw_approval_record ar
|
|
INNER JOIN cw_project_application pa ON ar.application_id = pa.id
|
|
WHERE pa.department_id = @dept_id
|
|
AND pa.approval_status IN ('submitted', 'approving');
|
|
|
|
SELECT '数据修复脚本执行完成' as result; |