zwc007-update-progress-diagnosis.sql 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. -- ==========================================
  2. -- 维修人员zwc007更新进度按钮问题诊断和修复
  3. -- 功能:诊断和修复维修人员看不见更新进度按钮的问题
  4. -- 时间:2025-06-30 18:35:00
  5. -- 说明:全面检查角色、权限、工单状态等因素
  6. -- ==========================================
  7. -- 第一部分:问题诊断查询
  8. -- ==========================================
  9. -- 1. 检查zwc007用户信息和角色分配
  10. SELECT '=== 用户zwc007基本信息检查 ===' as message;
  11. SELECT
  12. u.user_id,
  13. u.user_name,
  14. u.nick_name,
  15. u.status as user_status,
  16. GROUP_CONCAT(r.role_name) as role_names,
  17. GROUP_CONCAT(r.role_key) as role_keys
  18. FROM sys_user u
  19. LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id
  20. LEFT JOIN sys_role r ON ur.role_id = r.role_id
  21. WHERE u.user_name = 'zwc007'
  22. GROUP BY u.user_id;
  23. -- 2. 检查zwc007是否有maintenance_worker角色
  24. SELECT '=== 维修人员角色检查 ===' as message;
  25. SELECT
  26. CASE
  27. WHEN COUNT(*) > 0 THEN 'zwc007具有维修人员角色'
  28. ELSE 'zwc007缺少维修人员角色!'
  29. END as role_status
  30. FROM sys_user u
  31. JOIN sys_user_role ur ON u.user_id = ur.user_id
  32. JOIN sys_role r ON ur.role_id = r.role_id
  33. WHERE u.user_name = 'zwc007' AND r.role_key = 'maintenance_worker';
  34. -- 3. 检查zwc007的权限配置
  35. SELECT '=== zwc007权限配置检查 ===' as message;
  36. SELECT DISTINCT
  37. m.menu_name,
  38. m.perms,
  39. m.menu_type,
  40. CASE WHEN m.perms = 'pm:repairOrder:updateProgress' THEN '*** 关键权限 ***' ELSE '' END as important
  41. FROM sys_user u
  42. JOIN sys_user_role ur ON u.user_id = ur.user_id
  43. JOIN sys_role r ON ur.role_id = r.role_id
  44. JOIN sys_role_menu rm ON r.role_id = rm.role_id
  45. JOIN sys_menu m ON rm.menu_id = m.menu_id
  46. WHERE u.user_name = 'zwc007'
  47. AND m.perms LIKE 'pm:repairOrder:%'
  48. ORDER BY m.perms;
  49. -- 4. 检查工单分派情况(查看zwc007是否为任何工单的负责人)
  50. SELECT '=== 工单分派情况检查 ===' as message;
  51. SELECT
  52. ro.id,
  53. ro.order_no,
  54. ro.title,
  55. ro.order_status,
  56. CASE ro.order_status
  57. WHEN '1' THEN '待分派'
  58. WHEN '2' THEN '已分派'
  59. WHEN '3' THEN '进行中'
  60. WHEN '4' THEN '已完成'
  61. ELSE '其他状态'
  62. END as status_text,
  63. ro.assignee_id,
  64. u_assignee.user_name as assignee_name,
  65. CASE
  66. WHEN u_zwc.user_id = ro.assignee_id THEN '是负责人 ✓'
  67. ELSE '非负责人 ✗'
  68. END as is_assignee
  69. FROM pm_repair_order ro
  70. LEFT JOIN sys_user u_assignee ON ro.assignee_id = u_assignee.user_id
  71. CROSS JOIN (SELECT user_id FROM sys_user WHERE user_name = 'zwc007') u_zwc
  72. WHERE ro.assignee_id IS NOT NULL
  73. ORDER BY ro.create_time DESC
  74. LIMIT 10;
  75. -- 5. 检查状态为"已分派"且zwc007为负责人的工单(这些工单应该显示更新进度按钮)
  76. SELECT '=== 应显示更新进度按钮的工单 ===' as message;
  77. SELECT
  78. ro.id,
  79. ro.order_no,
  80. ro.title,
  81. ro.order_status,
  82. '应该显示更新进度按钮' as expected_button
  83. FROM pm_repair_order ro
  84. JOIN sys_user u ON ro.assignee_id = u.user_id
  85. WHERE u.user_name = 'zwc007'
  86. AND ro.order_status = '2' -- 已分派状态
  87. ORDER BY ro.create_time DESC;
  88. -- 第二部分:问题修复方案
  89. -- ==========================================
  90. -- 修复1:确保zwc007有维修人员角色
  91. INSERT IGNORE INTO sys_user_role (user_id, role_id)
  92. SELECT u.user_id, r.role_id
  93. FROM sys_user u, sys_role r
  94. WHERE u.user_name = 'zwc007'
  95. AND r.role_key = 'maintenance_worker'
  96. AND NOT EXISTS (
  97. SELECT 1 FROM sys_user_role ur2
  98. WHERE ur2.user_id = u.user_id AND ur2.role_id = r.role_id
  99. );
  100. -- 修复2:确保维修人员角色有updateProgress权限
  101. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  102. SELECT r.role_id, m.menu_id
  103. FROM sys_role r, sys_menu m
  104. WHERE r.role_key = 'maintenance_worker'
  105. AND m.perms = 'pm:repairOrder:updateProgress'
  106. AND NOT EXISTS (
  107. SELECT 1 FROM sys_role_menu rm2
  108. WHERE rm2.role_id = r.role_id AND rm2.menu_id = m.menu_id
  109. );
  110. -- 修复3:如果updateProgress权限不存在,则创建该权限
  111. INSERT INTO sys_menu (
  112. menu_id, menu_name, parent_id, order_num, path, component,
  113. query_param, is_frame, is_cache, menu_type, visible, status,
  114. perms, icon, create_by, create_time, update_by, update_time, remark
  115. )
  116. SELECT
  117. 2117, '更新进度', 2110, 6, '', '',
  118. '', 1, 0, 'F', '0', '0',
  119. 'pm:repairOrder:updateProgress', '#', 1, now(), 1, now(), '更新工单进度权限'
  120. WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'pm:repairOrder:updateProgress');
  121. -- 修复4:为维修人员角色分配新创建的updateProgress权限
  122. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  123. SELECT r.role_id, m.menu_id
  124. FROM sys_role r, sys_menu m
  125. WHERE r.role_key = 'maintenance_worker'
  126. AND m.perms = 'pm:repairOrder:updateProgress';
  127. -- 修复5:创建测试工单,确保zwc007为负责人且状态为已分派
  128. INSERT INTO pm_repair_order (
  129. id, order_no, title, description, repair_location, category_id,
  130. priority_level, order_status, reporter_name, reporter_phone,
  131. reporter_dept, assignee_id, assign_time, expected_finish_time,
  132. tenant_id, create_dept, create_by, create_time, update_by, update_time, deleted
  133. )
  134. SELECT
  135. 9999, 'RO-TEST-20250630-001', 'zwc007测试工单-更新进度',
  136. '用于测试zwc007更新进度按钮显示的测试工单', '测试楼101', 1,
  137. 2, '2', '测试报修人', '13800138000',
  138. '测试部门', u.user_id, now(), DATE_ADD(now(), INTERVAL 7 DAY),
  139. '000000', 103, 1, now(), 1, now(), 0
  140. FROM sys_user u
  141. WHERE u.user_name = 'zwc007'
  142. AND NOT EXISTS (SELECT 1 FROM pm_repair_order WHERE order_no = 'RO-TEST-20250630-001');
  143. -- 第三部分:修复后验证
  144. -- ==========================================
  145. -- 验证1:确认zwc007角色和权限
  146. SELECT '=== 修复后:zwc007角色和权限验证 ===' as message;
  147. SELECT
  148. u.user_name,
  149. r.role_name,
  150. r.role_key,
  151. COUNT(DISTINCT m.menu_id) as permission_count,
  152. GROUP_CONCAT(DISTINCT m.perms ORDER BY m.perms) as permissions
  153. FROM sys_user u
  154. JOIN sys_user_role ur ON u.user_id = ur.user_id
  155. JOIN sys_role r ON ur.role_id = r.role_id
  156. JOIN sys_role_menu rm ON r.role_id = rm.role_id
  157. JOIN sys_menu m ON rm.menu_id = m.menu_id
  158. WHERE u.user_name = 'zwc007'
  159. AND m.perms LIKE 'pm:repairOrder:%'
  160. GROUP BY u.user_id, r.role_id
  161. ORDER BY r.role_key;
  162. -- 验证2:确认updateProgress权限是否正确配置
  163. SELECT '=== 修复后:updateProgress权限配置验证 ===' as message;
  164. SELECT
  165. r.role_name,
  166. r.role_key,
  167. m.menu_name,
  168. m.perms,
  169. '权限已配置' as status
  170. FROM sys_role r
  171. JOIN sys_role_menu rm ON r.role_id = rm.role_id
  172. JOIN sys_menu m ON rm.menu_id = m.menu_id
  173. WHERE m.perms = 'pm:repairOrder:updateProgress'
  174. AND r.role_key IN ('maintenance_worker', 'property_maintenance_admin');
  175. -- 验证3:确认zwc007负责的已分派工单
  176. SELECT '=== 修复后:zwc007负责的已分派工单 ===' as message;
  177. SELECT
  178. ro.id,
  179. ro.order_no,
  180. ro.title,
  181. ro.order_status,
  182. '应显示更新进度按钮' as expected_result
  183. FROM pm_repair_order ro
  184. JOIN sys_user u ON ro.assignee_id = u.user_id
  185. WHERE u.user_name = 'zwc007'
  186. AND ro.order_status = '2'
  187. ORDER BY ro.create_time DESC;
  188. -- 第四部分:操作指导
  189. -- ==========================================
  190. SELECT '=== 操作指导 ===' as message,
  191. '1. 执行以上SQL脚本完成修复' as step1,
  192. '2. 重启前后端服务清除缓存' as step2,
  193. '3. 使用zwc007账号重新登录系统' as step3,
  194. '4. 查看已分派状态且自己为负责人的工单' as step4,
  195. '5. 确认更新进度按钮是否显示' as step5;