fix-approval-records.sql 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. -- 修复审批记录数据脚本
  2. -- 问题:审批人设置错误(使用申报人作为审批人)
  3. -- 解决:删除错误记录,为submitted和approving状态的申报重新创建审批记录
  4. -- ============================================
  5. -- 1. 备份现有错误数据(可选)
  6. -- ============================================
  7. /*
  8. CREATE TABLE cw_approval_record_backup_20250801 AS
  9. SELECT * FROM cw_approval_record WHERE 1=1;
  10. */
  11. -- ============================================
  12. -- 2. 删除错误的审批记录
  13. -- ============================================
  14. -- 删除审批人是申报人自己的错误记录
  15. DELETE ar FROM cw_approval_record ar
  16. INNER JOIN cw_project_application pa ON ar.application_id = pa.id
  17. WHERE ar.approver_id = pa.create_by;
  18. SELECT '删除错误审批记录完成' as status;
  19. -- ============================================
  20. -- 3. 检查需要重新创建审批记录的申报
  21. -- ============================================
  22. SELECT
  23. id,
  24. application_no,
  25. project_name,
  26. approval_status,
  27. department_id,
  28. '需要重新创建审批记录' as note
  29. FROM cw_project_application
  30. WHERE approval_status IN ('submitted', 'approving')
  31. AND deleted = 0
  32. ORDER BY submit_time DESC;
  33. -- ============================================
  34. -- 4. 为教务处申报创建正确的审批记录(jwc001作为部门审批人)
  35. -- ============================================
  36. -- 获取需要处理的申报ID
  37. SET @dept_id = 1938484570826956801; -- 教务处
  38. SET @dept_approver_id = 2101; -- jwc001 (教务处处长江建)
  39. SET @finance_approver_id = 1; -- admin (临时财务审批人)
  40. SET @leader_approver_id = 1; -- admin (临时领导审批人)
  41. -- 为每个submitted状态的申报创建审批记录
  42. INSERT INTO cw_approval_record (
  43. id, application_id, application_no, node_code, node_name, node_order,
  44. approver_id, approver_name, is_delegate, original_approver_id, original_approver_name,
  45. node_status, approve_action, approve_opinion, start_time, end_time, expect_finish_time,
  46. is_overtime, config_id, config_snapshot, create_by, create_time, update_by, update_time,
  47. create_dept, tenant_id
  48. )
  49. SELECT
  50. -- 为部门审批记录生成ID
  51. CONCAT(pa.id, '01') as id,
  52. pa.id as application_id,
  53. pa.application_no,
  54. 'dept_approve' as node_code,
  55. '部门审批' as node_name,
  56. 1 as node_order,
  57. @dept_approver_id as approver_id,
  58. '教务处处长江建' as approver_name,
  59. 0 as is_delegate,
  60. NULL as original_approver_id,
  61. NULL as original_approver_name,
  62. 'waiting' as node_status,
  63. NULL as approve_action,
  64. NULL as approve_opinion,
  65. NOW() as start_time,
  66. NULL as end_time,
  67. NULL as expect_finish_time,
  68. 0 as is_overtime,
  69. NULL as config_id,
  70. NULL as config_snapshot,
  71. pa.create_by as create_by,
  72. NOW() as create_time,
  73. pa.create_by as update_by,
  74. NOW() as update_time,
  75. pa.create_dept as create_dept,
  76. '000000' as tenant_id
  77. FROM cw_project_application pa
  78. WHERE pa.department_id = @dept_id
  79. AND pa.approval_status IN ('submitted', 'approving')
  80. AND pa.deleted = 0;
  81. -- 为每个申报创建财务审批记录(pending状态)
  82. INSERT INTO cw_approval_record (
  83. id, application_id, application_no, node_code, node_name, node_order,
  84. approver_id, approver_name, is_delegate, original_approver_id, original_approver_name,
  85. node_status, approve_action, approve_opinion, start_time, end_time, expect_finish_time,
  86. is_overtime, config_id, config_snapshot, create_by, create_time, update_by, update_time,
  87. create_dept, tenant_id
  88. )
  89. SELECT
  90. -- 为财务审批记录生成ID
  91. CONCAT(pa.id, '02') as id,
  92. pa.id as application_id,
  93. pa.application_no,
  94. 'finance_approve' as node_code,
  95. '财务审批' as node_name,
  96. 2 as node_order,
  97. @finance_approver_id as approver_id,
  98. '系统管理员' as approver_name,
  99. 0 as is_delegate,
  100. NULL as original_approver_id,
  101. NULL as original_approver_name,
  102. 'pending' as node_status,
  103. NULL as approve_action,
  104. NULL as approve_opinion,
  105. NOW() as start_time,
  106. NULL as end_time,
  107. NULL as expect_finish_time,
  108. 0 as is_overtime,
  109. NULL as config_id,
  110. NULL as config_snapshot,
  111. pa.create_by as create_by,
  112. NOW() as create_time,
  113. pa.create_by as update_by,
  114. NOW() as update_time,
  115. pa.create_dept as create_dept,
  116. '000000' as tenant_id
  117. FROM cw_project_application pa
  118. WHERE pa.department_id = @dept_id
  119. AND pa.approval_status IN ('submitted', 'approving')
  120. AND pa.deleted = 0;
  121. -- 为每个申报创建领导审批记录(pending状态)
  122. INSERT INTO cw_approval_record (
  123. id, application_id, application_no, node_code, node_name, node_order,
  124. approver_id, approver_name, is_delegate, original_approver_id, original_approver_name,
  125. node_status, approve_action, approve_opinion, start_time, end_time, expect_finish_time,
  126. is_overtime, config_id, config_snapshot, create_by, create_time, update_by, update_time,
  127. create_dept, tenant_id
  128. )
  129. SELECT
  130. -- 为领导审批记录生成ID
  131. CONCAT(pa.id, '03') as id,
  132. pa.id as application_id,
  133. pa.application_no,
  134. 'leader_approve' as node_code,
  135. '领导审批' as node_name,
  136. 3 as node_order,
  137. @leader_approver_id as approver_id,
  138. '系统管理员' as approver_name,
  139. 0 as is_delegate,
  140. NULL as original_approver_id,
  141. NULL as original_approver_name,
  142. 'pending' as node_status,
  143. NULL as approve_action,
  144. NULL as approve_opinion,
  145. NOW() as start_time,
  146. NULL as end_time,
  147. NULL as expect_finish_time,
  148. 0 as is_overtime,
  149. NULL as config_id,
  150. NULL as config_snapshot,
  151. pa.create_by as create_by,
  152. NOW() as create_time,
  153. pa.create_by as update_by,
  154. NOW() as update_time,
  155. pa.create_dept as create_dept,
  156. '000000' as tenant_id
  157. FROM cw_project_application pa
  158. WHERE pa.department_id = @dept_id
  159. AND pa.approval_status IN ('submitted', 'approving')
  160. AND pa.deleted = 0;
  161. -- ============================================
  162. -- 5. 验证修复结果
  163. -- ============================================
  164. -- 检查审批记录是否正确创建
  165. SELECT
  166. ar.application_id,
  167. ar.application_no,
  168. ar.node_code,
  169. ar.node_name,
  170. ar.node_status,
  171. ar.approver_id,
  172. ar.approver_name,
  173. pa.approval_status
  174. FROM cw_approval_record ar
  175. INNER JOIN cw_project_application pa ON ar.application_id = pa.id
  176. WHERE pa.department_id = @dept_id
  177. AND pa.approval_status IN ('submitted', 'approving')
  178. ORDER BY ar.application_id, ar.node_order;
  179. -- 统计修复结果
  180. SELECT
  181. '修复完成' as status,
  182. COUNT(DISTINCT ar.application_id) as fixed_applications,
  183. COUNT(*) as total_approval_records
  184. FROM cw_approval_record ar
  185. INNER JOIN cw_project_application pa ON ar.application_id = pa.id
  186. WHERE pa.department_id = @dept_id
  187. AND pa.approval_status IN ('submitted', 'approving');
  188. SELECT '数据修复脚本执行完成' as result;