RO20250126008-update-progress-fix.sql 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. -- ==========================================
  2. -- 工单RO20250126008更新进度按钮修复脚本
  3. -- 功能:针对具体工单RO20250126008和维修人员zwc007的权限问题修复
  4. -- 时间:2025-06-30 18:45:00
  5. -- 说明:精准定位和修复特定工单的显示问题
  6. -- ==========================================
  7. -- 第一部分:工单RO20250126008诊断查询
  8. -- ==========================================
  9. -- 1. 检查工单RO20250126008的基本信息和当前状态
  10. SELECT '=== 工单RO20250126008基本信息 ===' as message;
  11. SELECT
  12. ro.id,
  13. ro.order_no,
  14. ro.title,
  15. ro.order_status,
  16. CASE ro.order_status
  17. WHEN '1' THEN '待分派'
  18. WHEN '2' THEN '已分派 ✓ (应显示更新进度按钮)'
  19. WHEN '3' THEN '进行中'
  20. WHEN '4' THEN '已完成'
  21. WHEN '5' THEN '已评价'
  22. WHEN '6' THEN '已归档'
  23. WHEN '9' THEN '已取消'
  24. ELSE CONCAT('未知状态: ', ro.order_status)
  25. END as status_description,
  26. ro.assignee_id,
  27. u_assignee.user_name as assignee_name,
  28. u_assignee.nick_name as assignee_nick_name,
  29. ro.assign_time,
  30. ro.create_time,
  31. ro.repair_location,
  32. ro.priority_level
  33. FROM pm_repair_order ro
  34. LEFT JOIN sys_user u_assignee ON ro.assignee_id = u_assignee.user_id
  35. WHERE ro.order_no = 'RO20250126008';
  36. -- 2. 检查zwc007用户信息
  37. SELECT '=== 用户zwc007信息检查 ===' as message;
  38. SELECT
  39. u.user_id,
  40. u.user_name,
  41. u.nick_name,
  42. u.status as user_status,
  43. CASE u.status WHEN '0' THEN '正常' WHEN '1' THEN '停用' ELSE '未知' END as status_text
  44. FROM sys_user u
  45. WHERE u.user_name = 'zwc007';
  46. -- 3. 检查当前分派情况匹配性
  47. SELECT '=== 工单分派匹配性检查 ===' as message;
  48. SELECT
  49. ro.order_no,
  50. ro.assignee_id as current_assignee_id,
  51. u_current.user_name as current_assignee_name,
  52. u_zwc.user_id as zwc007_user_id,
  53. u_zwc.user_name as zwc007_name,
  54. CASE
  55. WHEN ro.assignee_id = u_zwc.user_id THEN '✓ zwc007是负责人'
  56. WHEN ro.assignee_id IS NULL THEN '✗ 工单未分派'
  57. ELSE CONCAT('✗ 工单分派给其他人: ', u_current.user_name)
  58. END as assignment_status,
  59. CASE
  60. WHEN ro.order_status = '2' AND ro.assignee_id = u_zwc.user_id THEN '✅ 应显示更新进度按钮'
  61. WHEN ro.order_status != '2' THEN CONCAT('❌ 工单状态不是已分派: ', ro.order_status)
  62. WHEN ro.assignee_id != u_zwc.user_id THEN '❌ zwc007不是负责人'
  63. ELSE '❌ 不满足显示条件'
  64. END as button_display_status
  65. FROM pm_repair_order ro
  66. LEFT JOIN sys_user u_current ON ro.assignee_id = u_current.user_id
  67. CROSS JOIN (SELECT user_id, user_name FROM sys_user WHERE user_name = 'zwc007') u_zwc
  68. WHERE ro.order_no = 'RO20250126008';
  69. -- 4. 检查zwc007的角色和权限
  70. SELECT '=== zwc007角色和权限检查 ===' as message;
  71. SELECT
  72. u.user_name,
  73. r.role_name,
  74. r.role_key,
  75. CASE WHEN r.role_key = 'maintenance_worker' THEN '✓ 维修人员角色' ELSE '其他角色' END as role_type
  76. FROM sys_user u
  77. JOIN sys_user_role ur ON u.user_id = ur.user_id
  78. JOIN sys_role r ON ur.role_id = r.role_id
  79. WHERE u.user_name = 'zwc007'
  80. ORDER BY r.role_key;
  81. -- 检查关键权限
  82. SELECT '=== zwc007更新进度权限检查 ===' as message;
  83. SELECT
  84. m.menu_name,
  85. m.perms,
  86. m.menu_type,
  87. CASE WHEN m.perms = 'pm:repairOrder:updateProgress' THEN '*** 关键权限 ***' ELSE '' END as importance
  88. FROM sys_user u
  89. JOIN sys_user_role ur ON u.user_id = ur.user_id
  90. JOIN sys_role r ON ur.role_id = r.role_id
  91. JOIN sys_role_menu rm ON r.role_id = rm.role_id
  92. JOIN sys_menu m ON rm.menu_id = m.menu_id
  93. WHERE u.user_name = 'zwc007'
  94. AND m.perms = 'pm:repairOrder:updateProgress';
  95. -- 第二部分:问题修复操作
  96. -- ==========================================
  97. -- 修复1:确保zwc007有维修人员角色(如果没有)
  98. INSERT IGNORE INTO sys_user_role (user_id, role_id)
  99. SELECT u.user_id, r.role_id
  100. FROM sys_user u, sys_role r
  101. WHERE u.user_name = 'zwc007'
  102. AND r.role_key = 'maintenance_worker'
  103. AND NOT EXISTS (
  104. SELECT 1 FROM sys_user_role ur2
  105. WHERE ur2.user_id = u.user_id AND ur2.role_id = r.role_id
  106. );
  107. -- 修复2:确保updateProgress权限存在
  108. INSERT INTO sys_menu (
  109. menu_id, menu_name, parent_id, order_num, path, component,
  110. query_param, is_frame, is_cache, menu_type, visible, status,
  111. perms, icon, create_by, create_time, update_by, update_time, remark
  112. )
  113. SELECT
  114. 2117, '更新进度', 2110, 6, '', '',
  115. '', 1, 0, 'F', '0', '0',
  116. 'pm:repairOrder:updateProgress', '#', 1, now(), 1, now(), '更新工单进度权限'
  117. WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'pm:repairOrder:updateProgress');
  118. -- 修复3:为维修人员角色分配权限
  119. INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
  120. SELECT r.role_id, m.menu_id
  121. FROM sys_role r, sys_menu m
  122. WHERE r.role_key = 'maintenance_worker'
  123. AND m.perms = 'pm:repairOrder:updateProgress';
  124. -- 修复4:将工单RO20250126008分派给zwc007(关键修复)
  125. UPDATE pm_repair_order
  126. SET
  127. assignee_id = (SELECT user_id FROM sys_user WHERE user_name = 'zwc007'),
  128. assign_time = CASE WHEN assign_time IS NULL THEN now() ELSE assign_time END,
  129. order_status = '2', -- 设置为已分派状态
  130. update_time = now(),
  131. update_by = 1
  132. WHERE order_no = 'RO20250126008'
  133. AND EXISTS (SELECT 1 FROM sys_user WHERE user_name = 'zwc007');
  134. -- 修复5:记录分派操作到进度表
  135. INSERT INTO pm_repair_progress (
  136. order_id, progress_type, progress_status, progress_detail,
  137. progress_time, location_info, remark,
  138. tenant_id, create_dept, create_by, create_time, update_by, update_time, deleted
  139. )
  140. SELECT
  141. ro.id,
  142. '2', -- 分派类型
  143. '已分派给维修人员',
  144. CONCAT('工单已分派给维修人员zwc007,负责处理报修问题'),
  145. now(),
  146. ro.repair_location,
  147. '系统自动分派 - 修复更新进度按钮显示问题',
  148. '000000', 103, 1, now(), 1, now(), 0
  149. FROM pm_repair_order ro
  150. WHERE ro.order_no = 'RO20250126008'
  151. AND NOT EXISTS (
  152. SELECT 1 FROM pm_repair_progress pp
  153. WHERE pp.order_id = ro.id
  154. AND pp.progress_type = '2'
  155. AND pp.progress_detail LIKE '%zwc007%'
  156. );
  157. -- 第三部分:修复后验证
  158. -- ==========================================
  159. -- 验证1:确认工单状态和分派
  160. SELECT '=== 修复后:工单状态验证 ===' as message;
  161. SELECT
  162. ro.order_no,
  163. ro.title,
  164. ro.order_status,
  165. CASE ro.order_status
  166. WHEN '2' THEN '✅ 已分派状态 - 应显示更新进度按钮'
  167. ELSE CONCAT('❌ 状态异常: ', ro.order_status)
  168. END as status_check,
  169. ro.assignee_id,
  170. u.user_name as assignee_name,
  171. u.nick_name as assignee_nick_name,
  172. CASE
  173. WHEN u.user_name = 'zwc007' THEN '✅ zwc007是负责人'
  174. ELSE '❌ 负责人不是zwc007'
  175. END as assignee_check,
  176. ro.assign_time
  177. FROM pm_repair_order ro
  178. LEFT JOIN sys_user u ON ro.assignee_id = u.user_id
  179. WHERE ro.order_no = 'RO20250126008';
  180. -- 验证2:确认zwc007权限配置
  181. SELECT '=== 修复后:zwc007权限验证 ===' as message;
  182. SELECT
  183. '维修人员角色' as permission_type,
  184. CASE
  185. WHEN COUNT(*) > 0 THEN '✅ 已配置'
  186. ELSE '❌ 未配置'
  187. END as status
  188. FROM sys_user u
  189. JOIN sys_user_role ur ON u.user_id = ur.user_id
  190. JOIN sys_role r ON ur.role_id = r.role_id
  191. WHERE u.user_name = 'zwc007' AND r.role_key = 'maintenance_worker'
  192. UNION ALL
  193. SELECT
  194. '更新进度权限' as permission_type,
  195. CASE
  196. WHEN COUNT(*) > 0 THEN '✅ 已配置'
  197. ELSE '❌ 未配置'
  198. END as status
  199. FROM sys_user u
  200. JOIN sys_user_role ur ON u.user_id = ur.user_id
  201. JOIN sys_role r ON ur.role_id = r.role_id
  202. JOIN sys_role_menu rm ON r.role_id = rm.role_id
  203. JOIN sys_menu m ON rm.menu_id = m.menu_id
  204. WHERE u.user_name = 'zwc007'
  205. AND m.perms = 'pm:repairOrder:updateProgress';
  206. -- 验证3:确认按钮显示条件
  207. SELECT '=== 修复后:按钮显示条件验证 ===' as message;
  208. SELECT
  209. ro.order_no,
  210. '工单状态 = 2 (已分派)' as condition_1,
  211. CASE WHEN ro.order_status = '2' THEN '✅ 满足' ELSE '❌ 不满足' END as check_1,
  212. '用户是维修负责人' as condition_2,
  213. CASE WHEN ro.assignee_id = u.user_id THEN '✅ 满足' ELSE '❌ 不满足' END as check_2,
  214. '用户有maintenance_worker角色' as condition_3,
  215. CASE WHEN role_count.cnt > 0 THEN '✅ 满足' ELSE '❌ 不满足' END as check_3,
  216. '用户有updateProgress权限' as condition_4,
  217. CASE WHEN perm_count.cnt > 0 THEN '✅ 满足' ELSE '❌ 不满足' END as check_4,
  218. CASE
  219. WHEN ro.order_status = '2'
  220. AND ro.assignee_id = u.user_id
  221. AND role_count.cnt > 0
  222. AND perm_count.cnt > 0
  223. THEN '🎉 所有条件满足 - 应显示更新进度按钮'
  224. ELSE '❌ 条件不满足 - 按钮不会显示'
  225. END as final_result
  226. FROM pm_repair_order ro
  227. JOIN sys_user u ON u.user_name = 'zwc007'
  228. LEFT JOIN (
  229. SELECT ur.user_id, COUNT(*) as cnt
  230. FROM sys_user_role ur
  231. JOIN sys_role r ON ur.role_id = r.role_id
  232. WHERE r.role_key = 'maintenance_worker'
  233. GROUP BY ur.user_id
  234. ) role_count ON role_count.user_id = u.user_id
  235. LEFT JOIN (
  236. SELECT ur.user_id, COUNT(*) as cnt
  237. FROM sys_user_role ur
  238. JOIN sys_role_menu rm ON ur.role_id = rm.role_id
  239. JOIN sys_menu m ON rm.menu_id = m.menu_id
  240. WHERE m.perms = 'pm:repairOrder:updateProgress'
  241. GROUP BY ur.user_id
  242. ) perm_count ON perm_count.user_id = u.user_id
  243. WHERE ro.order_no = 'RO20250126008';
  244. -- 第四部分:操作指导和确认
  245. -- ==========================================
  246. SELECT '=== 修复完成提示 ===' as message,
  247. '1. 工单RO20250126008已分派给zwc007' as step1,
  248. '2. 工单状态已设置为已分派(状态码2)' as step2,
  249. '3. zwc007已配置维修人员角色和权限' as step3,
  250. '4. 请重启前后端服务清除权限缓存' as step4,
  251. '5. 使用zwc007账号登录查看该工单' as step5,
  252. '6. 确认更新进度按钮是否显示' as step6;
  253. -- 显示需要重启服务的提醒
  254. SELECT '⚠️ 重要提醒' as alert_title,
  255. '权限配置修改后必须重启前后端服务' as alert_message,
  256. '用户需要重新登录以刷新权限缓存' as additional_note;