指派人员数据未更新问题诊断SQL.sql 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. -- ==========================================
  2. -- 指派人员数据未更新问题诊断脚本
  3. -- 功能:诊断维修人员角色配置和分派功能相关问题
  4. -- 时间:2025-06-30 18:55:00
  5. -- 说明:完整分析维修人员查询和分派功能的问题
  6. -- ==========================================
  7. -- 第一部分:检查维修人员角色配置
  8. -- ==========================================
  9. -- 1. 查询所有可能的维修相关角色
  10. SELECT
  11. role_id,
  12. role_name,
  13. role_key,
  14. status,
  15. del_flag,
  16. create_time,
  17. remark
  18. FROM sys_role
  19. WHERE (role_name LIKE '%维修%'
  20. OR role_key LIKE '%maintenance%'
  21. OR role_key LIKE '%worker%'
  22. OR role_name LIKE '%工人%'
  23. OR role_name LIKE '%技工%')
  24. AND del_flag = '0'
  25. ORDER BY role_id;
  26. -- 2. 查询角色ID=5的角色信息(XML中可能使用的角色)
  27. SELECT
  28. role_id,
  29. role_name,
  30. role_key,
  31. status,
  32. remark
  33. FROM sys_role
  34. WHERE role_id = 5;
  35. -- 3. 查询所有拥有维修相关角色的用户
  36. SELECT
  37. u.user_id,
  38. u.user_name,
  39. u.nick_name,
  40. u.status as user_status,
  41. r.role_id,
  42. r.role_name,
  43. r.role_key,
  44. d.dept_name
  45. FROM sys_user u
  46. JOIN sys_user_role ur ON u.user_id = ur.user_id
  47. JOIN sys_role r ON ur.role_id = r.role_id
  48. LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
  49. WHERE (r.role_name LIKE '%维修%'
  50. OR r.role_key LIKE '%maintenance%'
  51. OR r.role_key LIKE '%worker%'
  52. OR r.role_id = 5)
  53. AND u.del_flag = '0'
  54. AND r.del_flag = '0'
  55. ORDER BY u.user_id;
  56. -- 第二部分:测试当前维修人员查询SQL
  57. -- ==========================================
  58. -- 4. 测试原始SQL(可能有问题的版本)
  59. SELECT
  60. u.user_id as value,
  61. u.nick_name as label,
  62. u.user_name as userName,
  63. d.dept_name as deptName
  64. FROM sys_user u
  65. LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
  66. INNER JOIN sys_user_role ur ON u.user_id = ur.user_id
  67. INNER JOIN sys_role r ON ur.role_id = r.role_id
  68. WHERE r.role_name = '维修人员'
  69. AND u.status = '0'
  70. AND u.del_flag = '0'
  71. ORDER BY u.user_id;
  72. -- 5. 测试修复后的SQL(支持多种角色匹配)
  73. SELECT
  74. u.user_id as value,
  75. u.nick_name as label,
  76. u.user_name as userName,
  77. d.dept_name as deptName
  78. FROM sys_user u
  79. LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
  80. INNER JOIN sys_user_role ur ON u.user_id = ur.user_id
  81. INNER JOIN sys_role r ON ur.role_id = r.role_id
  82. WHERE (r.role_key = 'maintenance_worker'
  83. OR r.role_name = '维修人员'
  84. OR r.role_id = 5
  85. OR r.role_name LIKE '%维修%'
  86. OR r.role_key LIKE '%worker%')
  87. AND u.status = '0'
  88. AND u.del_flag = '0'
  89. ORDER BY u.user_id;
  90. -- 第三部分:检查分派相关数据
  91. -- ==========================================
  92. -- 6. 查询最近的分派记录,检查数据完整性
  93. SELECT
  94. id,
  95. order_no,
  96. title,
  97. order_status,
  98. assignee_id,
  99. assignee_name, -- 检查此字段是否为空
  100. assign_time,
  101. assign_remark, -- 检查备注是否保存
  102. create_time,
  103. update_time
  104. FROM pm_repair_order
  105. WHERE assign_time IS NOT NULL
  106. OR assignee_id IS NOT NULL
  107. ORDER BY COALESCE(assign_time, update_time) DESC
  108. LIMIT 10;
  109. -- 7. 查询待分派的工单(用于测试)
  110. SELECT
  111. id,
  112. order_no,
  113. title,
  114. order_status,
  115. assignee_id,
  116. assignee_name,
  117. reporter_name,
  118. create_time
  119. FROM pm_repair_order
  120. WHERE order_status = '1' -- 待分派
  121. AND deleted = 0
  122. ORDER BY create_time DESC
  123. LIMIT 5;
  124. -- 第四部分:创建测试数据(如果需要)
  125. -- ==========================================
  126. -- 8. 创建维修人员角色(如果不存在)
  127. INSERT INTO sys_role (
  128. role_id, tenant_id, role_name, role_key, role_sort, data_scope,
  129. menu_check_strictly, dept_check_strictly, status, del_flag,
  130. create_by, create_time, remark
  131. )
  132. SELECT
  133. 5, '000000', '维修人员', 'maintenance_worker', 5, '1',
  134. 1, 1, '0', '0', 1, NOW(), '物业维修人员角色'
  135. WHERE NOT EXISTS (
  136. SELECT 1 FROM sys_role
  137. WHERE role_key = 'maintenance_worker' OR role_id = 5
  138. );
  139. -- 9. 为测试用户zwc007分配维修人员角色
  140. INSERT IGNORE INTO sys_user_role (user_id, role_id)
  141. SELECT u.user_id, 5
  142. FROM sys_user u
  143. WHERE u.user_name = 'zwc007'
  144. AND EXISTS (SELECT 1 FROM sys_role WHERE role_id = 5);
  145. -- 第五部分:验证修复结果
  146. -- ==========================================
  147. -- 10. 验证维修人员角色分配
  148. SELECT
  149. '维修人员角色验证' as check_type,
  150. COUNT(*) as count,
  151. GROUP_CONCAT(u.user_name) as users
  152. FROM sys_user u
  153. JOIN sys_user_role ur ON u.user_id = ur.user_id
  154. JOIN sys_role r ON ur.role_id = r.role_id
  155. WHERE (r.role_key = 'maintenance_worker' OR r.role_id = 5)
  156. AND u.status = '0' AND u.del_flag = '0';
  157. -- 11. 验证维修人员查询结果
  158. SELECT
  159. '维修人员查询验证' as check_type,
  160. COUNT(*) as total_workers,
  161. MAX(u.user_name) as sample_user
  162. FROM sys_user u
  163. LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
  164. INNER JOIN sys_user_role ur ON u.user_id = ur.user_id
  165. INNER JOIN sys_role r ON ur.role_id = r.role_id
  166. WHERE (r.role_key = 'maintenance_worker'
  167. OR r.role_name = '维修人员'
  168. OR r.role_id = 5)
  169. AND u.status = '0'
  170. AND u.del_flag = '0';
  171. -- 结束
  172. SELECT '诊断脚本执行完成' as status, NOW() as execution_time;