Files
hzdyjs/test/zwc007-update-progress-diagnosis.sql
T
2025-06-30 20:33:58 +08:00

212 lines
7.4 KiB
SQL

-- ==========================================
-- 维修人员zwc007更新进度按钮问题诊断和修复
-- 功能:诊断和修复维修人员看不见更新进度按钮的问题
-- 时间:2025-06-30 18:35:00
-- 说明:全面检查角色、权限、工单状态等因素
-- ==========================================
-- 第一部分:问题诊断查询
-- ==========================================
-- 1. 检查zwc007用户信息和角色分配
SELECT '=== 用户zwc007基本信息检查 ===' as message;
SELECT
u.user_id,
u.user_name,
u.nick_name,
u.status as user_status,
GROUP_CONCAT(r.role_name) as role_names,
GROUP_CONCAT(r.role_key) as role_keys
FROM sys_user u
LEFT JOIN sys_user_role ur ON u.user_id = ur.user_id
LEFT JOIN sys_role r ON ur.role_id = r.role_id
WHERE u.user_name = 'zwc007'
GROUP BY u.user_id;
-- 2. 检查zwc007是否有maintenance_worker角色
SELECT '=== 维修人员角色检查 ===' as message;
SELECT
CASE
WHEN COUNT(*) > 0 THEN 'zwc007具有维修人员角色'
ELSE 'zwc007缺少维修人员角色!'
END as role_status
FROM sys_user u
JOIN sys_user_role ur ON u.user_id = ur.user_id
JOIN sys_role r ON ur.role_id = r.role_id
WHERE u.user_name = 'zwc007' AND r.role_key = 'maintenance_worker';
-- 3. 检查zwc007的权限配置
SELECT '=== zwc007权限配置检查 ===' as message;
SELECT DISTINCT
m.menu_name,
m.perms,
m.menu_type,
CASE WHEN m.perms = 'pm:repairOrder:updateProgress' THEN '*** 关键权限 ***' ELSE '' END as important
FROM sys_user u
JOIN sys_user_role ur ON u.user_id = ur.user_id
JOIN sys_role r ON ur.role_id = r.role_id
JOIN sys_role_menu rm ON r.role_id = rm.role_id
JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE u.user_name = 'zwc007'
AND m.perms LIKE 'pm:repairOrder:%'
ORDER BY m.perms;
-- 4. 检查工单分派情况(查看zwc007是否为任何工单的负责人)
SELECT '=== 工单分派情况检查 ===' as message;
SELECT
ro.id,
ro.order_no,
ro.title,
ro.order_status,
CASE ro.order_status
WHEN '1' THEN '待分派'
WHEN '2' THEN '已分派'
WHEN '3' THEN '进行中'
WHEN '4' THEN '已完成'
ELSE '其他状态'
END as status_text,
ro.assignee_id,
u_assignee.user_name as assignee_name,
CASE
WHEN u_zwc.user_id = ro.assignee_id THEN '是负责人 ✓'
ELSE '非负责人 ✗'
END as is_assignee
FROM pm_repair_order ro
LEFT JOIN sys_user u_assignee ON ro.assignee_id = u_assignee.user_id
CROSS JOIN (SELECT user_id FROM sys_user WHERE user_name = 'zwc007') u_zwc
WHERE ro.assignee_id IS NOT NULL
ORDER BY ro.create_time DESC
LIMIT 10;
-- 5. 检查状态为"已分派"且zwc007为负责人的工单(这些工单应该显示更新进度按钮)
SELECT '=== 应显示更新进度按钮的工单 ===' as message;
SELECT
ro.id,
ro.order_no,
ro.title,
ro.order_status,
'应该显示更新进度按钮' as expected_button
FROM pm_repair_order ro
JOIN sys_user u ON ro.assignee_id = u.user_id
WHERE u.user_name = 'zwc007'
AND ro.order_status = '2' -- 已分派状态
ORDER BY ro.create_time DESC;
-- 第二部分:问题修复方案
-- ==========================================
-- 修复1:确保zwc007有维修人员角色
INSERT IGNORE INTO sys_user_role (user_id, role_id)
SELECT u.user_id, r.role_id
FROM sys_user u, sys_role r
WHERE u.user_name = 'zwc007'
AND r.role_key = 'maintenance_worker'
AND NOT EXISTS (
SELECT 1 FROM sys_user_role ur2
WHERE ur2.user_id = u.user_id AND ur2.role_id = r.role_id
);
-- 修复2:确保维修人员角色有updateProgress权限
INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
SELECT r.role_id, m.menu_id
FROM sys_role r, sys_menu m
WHERE r.role_key = 'maintenance_worker'
AND m.perms = 'pm:repairOrder:updateProgress'
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu rm2
WHERE rm2.role_id = r.role_id AND rm2.menu_id = m.menu_id
);
-- 修复3:如果updateProgress权限不存在,则创建该权限
INSERT INTO sys_menu (
menu_id, menu_name, parent_id, order_num, path, component,
query_param, is_frame, is_cache, menu_type, visible, status,
perms, icon, create_by, create_time, update_by, update_time, remark
)
SELECT
2117, '更新进度', 2110, 6, '', '',
'', 1, 0, 'F', '0', '0',
'pm:repairOrder:updateProgress', '#', 1, now(), 1, now(), '更新工单进度权限'
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'pm:repairOrder:updateProgress');
-- 修复4:为维修人员角色分配新创建的updateProgress权限
INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
SELECT r.role_id, m.menu_id
FROM sys_role r, sys_menu m
WHERE r.role_key = 'maintenance_worker'
AND m.perms = 'pm:repairOrder:updateProgress';
-- 修复5:创建测试工单,确保zwc007为负责人且状态为已分派
INSERT INTO pm_repair_order (
id, order_no, title, description, repair_location, category_id,
priority_level, order_status, reporter_name, reporter_phone,
reporter_dept, assignee_id, assign_time, expected_finish_time,
tenant_id, create_dept, create_by, create_time, update_by, update_time, deleted
)
SELECT
9999, 'RO-TEST-20250630-001', 'zwc007测试工单-更新进度',
'用于测试zwc007更新进度按钮显示的测试工单', '测试楼101', 1,
2, '2', '测试报修人', '13800138000',
'测试部门', u.user_id, now(), DATE_ADD(now(), INTERVAL 7 DAY),
'000000', 103, 1, now(), 1, now(), 0
FROM sys_user u
WHERE u.user_name = 'zwc007'
AND NOT EXISTS (SELECT 1 FROM pm_repair_order WHERE order_no = 'RO-TEST-20250630-001');
-- 第三部分:修复后验证
-- ==========================================
-- 验证1:确认zwc007角色和权限
SELECT '=== 修复后:zwc007角色和权限验证 ===' as message;
SELECT
u.user_name,
r.role_name,
r.role_key,
COUNT(DISTINCT m.menu_id) as permission_count,
GROUP_CONCAT(DISTINCT m.perms ORDER BY m.perms) as permissions
FROM sys_user u
JOIN sys_user_role ur ON u.user_id = ur.user_id
JOIN sys_role r ON ur.role_id = r.role_id
JOIN sys_role_menu rm ON r.role_id = rm.role_id
JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE u.user_name = 'zwc007'
AND m.perms LIKE 'pm:repairOrder:%'
GROUP BY u.user_id, r.role_id
ORDER BY r.role_key;
-- 验证2:确认updateProgress权限是否正确配置
SELECT '=== 修复后:updateProgress权限配置验证 ===' as message;
SELECT
r.role_name,
r.role_key,
m.menu_name,
m.perms,
'权限已配置' as status
FROM sys_role r
JOIN sys_role_menu rm ON r.role_id = rm.role_id
JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE m.perms = 'pm:repairOrder:updateProgress'
AND r.role_key IN ('maintenance_worker', 'property_maintenance_admin');
-- 验证3:确认zwc007负责的已分派工单
SELECT '=== 修复后:zwc007负责的已分派工单 ===' as message;
SELECT
ro.id,
ro.order_no,
ro.title,
ro.order_status,
'应显示更新进度按钮' as expected_result
FROM pm_repair_order ro
JOIN sys_user u ON ro.assignee_id = u.user_id
WHERE u.user_name = 'zwc007'
AND ro.order_status = '2'
ORDER BY ro.create_time DESC;
-- 第四部分:操作指导
-- ==========================================
SELECT '=== 操作指导 ===' as message,
'1. 执行以上SQL脚本完成修复' as step1,
'2. 重启前后端服务清除缓存' as step2,
'3. 使用zwc007账号重新登录系统' as step3,
'4. 查看已分派状态且自己为负责人的工单' as step4,
'5. 确认更新进度按钮是否显示' as step5;