Files
hzdyjs/test/维修人员角色接口修改完成报告.md
T
2025-06-30 20:33:58 +08:00

8.6 KiB
Raw Blame History

维修人员角色接口修改完成报告

📅 修改概览

修改时间: 2025-06-30 14:05:00
修改人员: wuzilong
修改目标: 将报修管理界面中的维修人员选择改为只显示拥有"维修人员"角色的用户

🎯 修改内容

🔧 后端修改

1. Controller 层新增接口

文件: backend/ruoyi-admin/src/main/java/org/dromara/zhxy/controller/PmRepairOrderController.java

新增方法:

/**
 * 获取维修人员选项
 * 返回拥有"维修人员"角色的用户列表
 */
@SaCheckPermission("pm:repairOrder:assign")
@GetMapping("/maintenance-workers")
public R<List<java.util.Map<String, Object>>> getMaintenanceWorkers() {
    return R.ok(repairOrderService.getMaintenanceWorkers());
}

2. Service 接口新增方法

文件: backend/ruoyi-admin/src/main/java/org/dromara/zhxy/service/IPmRepairOrderService.java

新增方法:

/**
 * 获取维修人员选项
 * 返回拥有"维修人员"角色的用户列表
 *
 * @return 维修人员选项列表
 */
List<java.util.Map<String, Object>> getMaintenanceWorkers();

3. Service 实现类新增方法

文件: backend/ruoyi-admin/src/main/java/org/dromara/zhxy/service/impl/PmRepairOrderServiceImpl.java

新增方法:

/**
 * 获取维修人员选项
 * 返回拥有"维修人员"角色的用户列表
 *
 * @return 维修人员选项列表
 */
@Override
public List<java.util.Map<String, Object>> getMaintenanceWorkers() {
    // 查询拥有"维修人员"角色(role_id = 5)的用户
    return baseMapper.selectMaintenanceWorkers();
}

4. Mapper 接口新增方法

文件: backend/ruoyi-admin/src/main/java/org/dromara/zhxy/mapper/PmRepairOrderMapper.java

新增方法:

/**
 * 查询拥有"维修人员"角色的用户列表
 *
 * @return 维修人员选项列表
 */
List<Map<String, Object>> selectMaintenanceWorkers();

5. XML 映射文件新增 SQL

文件: backend/ruoyi-admin/src/main/resources/mapper/pm/PmRepairOrderMapper.xml

新增 SQL 查询:

<!-- 查询拥有"维修人员"角色的用户列表 -->
<select id="selectMaintenanceWorkers" resultType="java.util.Map">
    SELECT
        u.user_id as value,
        u.nick_name as label,
        u.user_name as userName,
        d.dept_name as deptName
    FROM sys_user u
    LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
    INNER JOIN sys_user_role ur ON u.user_id = ur.user_id
    INNER JOIN sys_role r ON ur.role_id = r.role_id
    WHERE r.role_name = '维修人员'
    AND u.status = '0'
    AND u.del_flag = '0'
    ORDER BY u.user_id
</select>

🎨 前端修改

1. API 接口新增方法

文件: web/src/api/pm/repairOrder.ts

新增方法:

/**
 * 获取维修人员选项
 * 返回拥有"维修人员"角色的用户列表
 */
export const getMaintenanceWorkers = (): AxiosPromise<
    Array<{ value: string | number; label: string; userName?: string; deptName?: string }>
> => {
    return request({
        url: '/pm/repairOrder/maintenance-workers',
        method: 'get',
    });
};

2. 页面组件修改

文件: web/src/views/pm/repairOrder/index.vue

修改内容:

  1. 导入新的 API 方法
  2. 将硬编码的维修人员选项改为空数组
  3. 新增获取维修人员选项的函数
  4. 在组件加载时调用获取维修人员选项

修改前(硬编码):

const workerOptions = ref([
    { value: '2001', label: '王师傅' },
    { value: '2002', label: '刘师傅' },
    { value: '2003', label: '张师傅' },
    { value: '2004', label: '李师傅' },
]);

修改后(动态获取):

const workerOptions = ref([]);

/** 获取维修人员选项 */
const getWorkerOptions = async () => {
    try {
        const res = await getMaintenanceWorkers();
        workerOptions.value = res.data;
    } catch (error) {
        console.error('获取维修人员选项失败:', error);
    }
};

onMounted(() => {
    getList();
    getStatistics();
    getCategoryOptions();
    getWorkerOptions(); // 新增调用
});

🧪 测试文件

创建测试脚本

文件: test/test-maintenance-workers-api.js

功能:

  • 测试新增的维修人员接口
  • 验证返回数据格式
  • 检查维修人员权限配置

📊 接口规范

🔗 新增接口详情

接口地址: GET /pm/repairOrder/maintenance-workers
权限要求: pm:repairOrder:assign
请求头: 需要 Bearer Token 认证

响应格式:

{
    "code": 200,
    "msg": "操作成功",
    "data": [
        {
            "value": "2125",
            "label": "总务处干事陆雄",
            "userName": "zwc005",
            "deptName": "总务处"
        },
        {
            "value": "2127",
            "label": "总务处干事邹凯",
            "userName": "zwc007",
            "deptName": "总务处"
        }
    ]
}

字段说明:

  • value: 用户 ID,用于表单提交
  • label: 显示名称(用户昵称)
  • userName: 用户账号
  • deptName: 所属部门名称

🎯 功能效果

✅ 修改前后对比

修改前:

  • 维修人员选项是硬编码的 4 个固定用户
  • 不能反映实际的维修人员配置
  • 无法根据角色动态更新

修改后:

  • 维修人员选项从数据库动态获取
  • 只显示拥有"维修人员"角色的用户
  • 包含用户的详细信息(部门等)
  • 支持后续扩展和管理

🔄 业务流程

  1. 页面加载:前端调用接口获取维修人员列表
  2. 权限验证:后端验证用户是否有分派权限
  3. 数据查询:查询 sys_user 表联查 sys_user_role 和 sys_role 表
  4. 结果过滤:只返回拥有"维修人员"角色且状态正常的用户
  5. 前端显示:在工单分派对话框中展示可选的维修人员

⚠️ 重要提醒

🔴 部署要求

⚠️ 后端服务需要重新编译和启动才能生效!

由于修改了 Java 代码,需要执行以下步骤:

  1. 重新编译 backend 项目
  2. 重启后端服务
  3. 测试新接口是否正常工作

📋 验证步骤

部署完成后,请按以下步骤验证:

  1. 运行测试脚本:

    cd test
    node test-maintenance-workers-api.js
    
  2. 前端界面验证:

    • 打开报修管理页面
    • 点击"分派"按钮
    • 检查维修人员下拉框是否显示实际的维修人员
  3. 数据验证:

    • 确认显示的用户都拥有"维修人员"角色
    • 确认用户信息完整(姓名、部门等)

📈 预期结果

成功标准:

  • ✅ 接口返回 200 状态码
  • ✅ 返回数据包含 zwc005(陆雄)和 zwc007(邹凯)
  • ✅ 前端下拉框正确显示维修人员
  • ✅ 工单分派功能正常工作

数据示例:

[
    {
        "value": "2125",
        "label": "总务处干事陆雄",
        "userName": "zwc005",
        "deptName": "总务处"
    },
    {
        "value": "2127",
        "label": "总务处干事邹凯",
        "userName": "zwc007",
        "deptName": "总务处"
    }
]

🚀 后续优化建议

  1. 缓存优化:考虑对维修人员列表进行缓存,减少数据库查询
  2. 权限细化:可以根据维修分类进一步过滤维修人员
  3. 状态显示:在维修人员选项中显示当前工作状态
  4. 负载均衡:可以显示每个维修人员当前的工作量

📝 相关文件

后端文件:

  • backend/ruoyi-admin/src/main/java/org/dromara/zhxy/controller/PmRepairOrderController.java
  • backend/ruoyi-admin/src/main/java/org/dromara/zhxy/service/IPmRepairOrderService.java
  • backend/ruoyi-admin/src/main/java/org/dromara/zhxy/service/impl/PmRepairOrderServiceImpl.java
  • backend/ruoyi-admin/src/main/java/org/dromara/zhxy/mapper/PmRepairOrderMapper.java
  • backend/ruoyi-admin/src/main/resources/mapper/pm/PmRepairOrderMapper.xml

前端文件:

  • web/src/api/pm/repairOrder.ts
  • web/src/views/pm/repairOrder/index.vue

测试文件:

  • test/test-maintenance-workers-api.js

文档文件:

  • test/维修人员角色接口修改完成报告.md
  • docs/变更管理/code-adjust-record-2025-06-30-wuzilong.md

✅ 总结

🎉 维修人员角色接口修改已完成!

通过本次修改,报修管理界面中的维修人员选择功能已从硬编码改为基于角色的动态获取,实现了与用户权限体系的完整集成。修改完成后,只有拥有"维修人员"角色的用户才会出现在工单分派的选择列表中,提高了系统的灵活性和准确性。