| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- -- ==========================================
- -- 工单RO20250126008更新进度按钮修复脚本
- -- 功能:针对具体工单RO20250126008和维修人员zwc007的权限问题修复
- -- 时间:2025-06-30 18:45:00
- -- 说明:精准定位和修复特定工单的显示问题
- -- ==========================================
- -- 第一部分:工单RO20250126008诊断查询
- -- ==========================================
- -- 1. 检查工单RO20250126008的基本信息和当前状态
- SELECT '=== 工单RO20250126008基本信息 ===' 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 '已完成'
- WHEN '5' THEN '已评价'
- WHEN '6' THEN '已归档'
- WHEN '9' THEN '已取消'
- ELSE CONCAT('未知状态: ', ro.order_status)
- END as status_description,
- ro.assignee_id,
- u_assignee.user_name as assignee_name,
- u_assignee.nick_name as assignee_nick_name,
- ro.assign_time,
- ro.create_time,
- ro.repair_location,
- ro.priority_level
- FROM pm_repair_order ro
- LEFT JOIN sys_user u_assignee ON ro.assignee_id = u_assignee.user_id
- WHERE ro.order_no = 'RO20250126008';
- -- 2. 检查zwc007用户信息
- SELECT '=== 用户zwc007信息检查 ===' as message;
- SELECT
- u.user_id,
- u.user_name,
- u.nick_name,
- u.status as user_status,
- CASE u.status WHEN '0' THEN '正常' WHEN '1' THEN '停用' ELSE '未知' END as status_text
- FROM sys_user u
- WHERE u.user_name = 'zwc007';
- -- 3. 检查当前分派情况匹配性
- SELECT '=== 工单分派匹配性检查 ===' as message;
- SELECT
- ro.order_no,
- ro.assignee_id as current_assignee_id,
- u_current.user_name as current_assignee_name,
- u_zwc.user_id as zwc007_user_id,
- u_zwc.user_name as zwc007_name,
- CASE
- WHEN ro.assignee_id = u_zwc.user_id THEN '✓ zwc007是负责人'
- WHEN ro.assignee_id IS NULL THEN '✗ 工单未分派'
- ELSE CONCAT('✗ 工单分派给其他人: ', u_current.user_name)
- END as assignment_status,
- CASE
- WHEN ro.order_status = '2' AND ro.assignee_id = u_zwc.user_id THEN '✅ 应显示更新进度按钮'
- WHEN ro.order_status != '2' THEN CONCAT('❌ 工单状态不是已分派: ', ro.order_status)
- WHEN ro.assignee_id != u_zwc.user_id THEN '❌ zwc007不是负责人'
- ELSE '❌ 不满足显示条件'
- END as button_display_status
- FROM pm_repair_order ro
- LEFT JOIN sys_user u_current ON ro.assignee_id = u_current.user_id
- CROSS JOIN (SELECT user_id, user_name FROM sys_user WHERE user_name = 'zwc007') u_zwc
- WHERE ro.order_no = 'RO20250126008';
- -- 4. 检查zwc007的角色和权限
- SELECT '=== zwc007角色和权限检查 ===' as message;
- SELECT
- u.user_name,
- r.role_name,
- r.role_key,
- CASE WHEN r.role_key = 'maintenance_worker' THEN '✓ 维修人员角色' ELSE '其他角色' END as role_type
- 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'
- ORDER BY r.role_key;
- -- 检查关键权限
- SELECT '=== zwc007更新进度权限检查 ===' as message;
- SELECT
- m.menu_name,
- m.perms,
- m.menu_type,
- CASE WHEN m.perms = 'pm:repairOrder:updateProgress' THEN '*** 关键权限 ***' ELSE '' END as importance
- 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 = 'pm:repairOrder:updateProgress';
- -- 第二部分:问题修复操作
- -- ==========================================
- -- 修复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 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');
- -- 修复3:为维修人员角色分配权限
- 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';
- -- 修复4:将工单RO20250126008分派给zwc007(关键修复)
- UPDATE pm_repair_order
- SET
- assignee_id = (SELECT user_id FROM sys_user WHERE user_name = 'zwc007'),
- assign_time = CASE WHEN assign_time IS NULL THEN now() ELSE assign_time END,
- order_status = '2', -- 设置为已分派状态
- update_time = now(),
- update_by = 1
- WHERE order_no = 'RO20250126008'
- AND EXISTS (SELECT 1 FROM sys_user WHERE user_name = 'zwc007');
- -- 修复5:记录分派操作到进度表
- INSERT INTO pm_repair_progress (
- order_id, progress_type, progress_status, progress_detail,
- progress_time, location_info, remark,
- tenant_id, create_dept, create_by, create_time, update_by, update_time, deleted
- )
- SELECT
- ro.id,
- '2', -- 分派类型
- '已分派给维修人员',
- CONCAT('工单已分派给维修人员zwc007,负责处理报修问题'),
- now(),
- ro.repair_location,
- '系统自动分派 - 修复更新进度按钮显示问题',
- '000000', 103, 1, now(), 1, now(), 0
- FROM pm_repair_order ro
- WHERE ro.order_no = 'RO20250126008'
- AND NOT EXISTS (
- SELECT 1 FROM pm_repair_progress pp
- WHERE pp.order_id = ro.id
- AND pp.progress_type = '2'
- AND pp.progress_detail LIKE '%zwc007%'
- );
- -- 第三部分:修复后验证
- -- ==========================================
- -- 验证1:确认工单状态和分派
- SELECT '=== 修复后:工单状态验证 ===' as message;
- SELECT
- ro.order_no,
- ro.title,
- ro.order_status,
- CASE ro.order_status
- WHEN '2' THEN '✅ 已分派状态 - 应显示更新进度按钮'
- ELSE CONCAT('❌ 状态异常: ', ro.order_status)
- END as status_check,
- ro.assignee_id,
- u.user_name as assignee_name,
- u.nick_name as assignee_nick_name,
- CASE
- WHEN u.user_name = 'zwc007' THEN '✅ zwc007是负责人'
- ELSE '❌ 负责人不是zwc007'
- END as assignee_check,
- ro.assign_time
- FROM pm_repair_order ro
- LEFT JOIN sys_user u ON ro.assignee_id = u.user_id
- WHERE ro.order_no = 'RO20250126008';
- -- 验证2:确认zwc007权限配置
- SELECT '=== 修复后:zwc007权限验证 ===' as message;
- SELECT
- '维修人员角色' as permission_type,
- CASE
- WHEN COUNT(*) > 0 THEN '✅ 已配置'
- ELSE '❌ 未配置'
- END as 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'
- UNION ALL
- SELECT
- '更新进度权限' as permission_type,
- CASE
- WHEN COUNT(*) > 0 THEN '✅ 已配置'
- ELSE '❌ 未配置'
- END as 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
- 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 = 'pm:repairOrder:updateProgress';
- -- 验证3:确认按钮显示条件
- SELECT '=== 修复后:按钮显示条件验证 ===' as message;
- SELECT
- ro.order_no,
- '工单状态 = 2 (已分派)' as condition_1,
- CASE WHEN ro.order_status = '2' THEN '✅ 满足' ELSE '❌ 不满足' END as check_1,
- '用户是维修负责人' as condition_2,
- CASE WHEN ro.assignee_id = u.user_id THEN '✅ 满足' ELSE '❌ 不满足' END as check_2,
- '用户有maintenance_worker角色' as condition_3,
- CASE WHEN role_count.cnt > 0 THEN '✅ 满足' ELSE '❌ 不满足' END as check_3,
- '用户有updateProgress权限' as condition_4,
- CASE WHEN perm_count.cnt > 0 THEN '✅ 满足' ELSE '❌ 不满足' END as check_4,
- CASE
- WHEN ro.order_status = '2'
- AND ro.assignee_id = u.user_id
- AND role_count.cnt > 0
- AND perm_count.cnt > 0
- THEN '🎉 所有条件满足 - 应显示更新进度按钮'
- ELSE '❌ 条件不满足 - 按钮不会显示'
- END as final_result
- FROM pm_repair_order ro
- JOIN sys_user u ON u.user_name = 'zwc007'
- LEFT JOIN (
- SELECT ur.user_id, COUNT(*) as cnt
- FROM sys_user_role ur
- JOIN sys_role r ON ur.role_id = r.role_id
- WHERE r.role_key = 'maintenance_worker'
- GROUP BY ur.user_id
- ) role_count ON role_count.user_id = u.user_id
- LEFT JOIN (
- SELECT ur.user_id, COUNT(*) as cnt
- FROM sys_user_role ur
- JOIN sys_role_menu rm ON ur.role_id = rm.role_id
- JOIN sys_menu m ON rm.menu_id = m.menu_id
- WHERE m.perms = 'pm:repairOrder:updateProgress'
- GROUP BY ur.user_id
- ) perm_count ON perm_count.user_id = u.user_id
- WHERE ro.order_no = 'RO20250126008';
- -- 第四部分:操作指导和确认
- -- ==========================================
- SELECT '=== 修复完成提示 ===' as message,
- '1. 工单RO20250126008已分派给zwc007' as step1,
- '2. 工单状态已设置为已分派(状态码2)' as step2,
- '3. zwc007已配置维修人员角色和权限' as step3,
- '4. 请重启前后端服务清除权限缓存' as step4,
- '5. 使用zwc007账号登录查看该工单' as step5,
- '6. 确认更新进度按钮是否显示' as step6;
- -- 显示需要重启服务的提醒
- SELECT '⚠️ 重要提醒' as alert_title,
- '权限配置修改后必须重启前后端服务' as alert_message,
- '用户需要重新登录以刷新权限缓存' as additional_note;
|