Files
hzdyjs/docs/变更管理/code-adjust-record-2025-07-22-admin.md
T
2025-07-23 15:20:48 +08:00

6.4 KiB
Raw Blame History

班级班主任关系管理功能实现方案

日期:2025-07-22 21:15:30 作者:admin 变更内容:班级管理中的班主任选择功能优化

需求背景

班级管理模块需要优化班主任选择功能,具体要求如下:

  1. 班主任需要从用户表中选取,选取的范围是角色为班主任的用户
  2. 新增一个班级和班主任对应关系管理的表,记录班级id和用户id的对应关系,以及这个对应关系是否生效的状态信息
  3. 新增或者修改班级信息的时候,如果涉及班主任发生变化,则需要向班级和班主任对应关系表新增或修改数据

实现方案

1. 数据库设计

新建班级班主任关系表 xg_class_teacher_relation:

CREATE TABLE xg_class_teacher_relation (
  id bigint(20) NOT NULL COMMENT '主键ID',
  class_id bigint(20) NOT NULL COMMENT '班级ID',
  teacher_id bigint(20) NOT NULL COMMENT '班主任用户ID',
  status char(1) NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
  start_date datetime DEFAULT NULL COMMENT '生效开始日期',
  end_date datetime DEFAULT NULL COMMENT '生效结束日期',
  remark varchar(500) DEFAULT NULL COMMENT '备注',
  create_by bigint(20) DEFAULT NULL COMMENT '创建者',
  create_time datetime DEFAULT NULL COMMENT '创建时间',
  update_by bigint(20) DEFAULT NULL COMMENT '更新者',
  update_time datetime DEFAULT NULL COMMENT '更新时间',
  tenant_id bigint(20) NOT NULL DEFAULT 0 COMMENT '租户ID',
  deleted char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 1代表删除)',
  PRIMARY KEY (id),
  KEY idx_class_id (class_id),
  KEY idx_teacher_id (teacher_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级班主任关系表';

2. 后端实现

2.1 实体类设计

创建了以下实体类:

  • XgClassTeacherRelation: 班级班主任关系实体类
  • XgClassTeacherRelationBo: 班级班主任关系业务对象
  • XgClassTeacherRelationVo: 班级班主任关系视图对象

2.2 Mapper 接口设计

创建了以下Mapper接口:

  • XgClassTeacherRelationMapper: 班级班主任关系Mapper接口
  • XgSysUserMapper: 扩展的系统用户Mapper接口,用于查询班主任角色用户

2.3 Service 接口设计

创建了以下Service接口:

  • IXgClassTeacherRelationService: 班级班主任关系Service接口

主要功能包括:

  • 查询班级班主任关系
  • 新增班级班主任关系
  • 修改班级班主任关系
  • 删除班级班主任关系
  • 创建班级班主任关系
  • 更新班级班主任关系
  • 获取班级当前班主任

2.4 Service 实现

修改了班级信息Service实现类 XgClassInfoServiceImpl:

  • 添加了获取班主任用户列表的方法 getClassTeacherOptions()
  • 修改了新增班级信息方法 insertByBo(),添加创建班级班主任关系的逻辑
  • 修改了修改班级信息方法 updateByBo(),添加更新班级班主任关系的逻辑

2.5 Controller 实现

修改了班级信息Controller XgClassInfoController:

  • 添加了获取班主任用户列表的接口 /teacherOptions

3. 前端实现(待完成)

前端需要实现以下功能:

  • 修改班级新增/编辑表单,将班主任选择改为下拉选择框
  • 调用后端API获取班主任用户列表
  • 保存班级信息时,自动处理班主任关系

4. 注意事项

  1. 班级表(xg_class_info)中仍然保留 class_teacher_id 和 class_teacher_name 字段,用于快速查询和显示
  2. 班级班主任关系表(xg_class_teacher_relation)用于记录历史关系和状态变更
  3. 班主任角色的role_key为"19",这是从数据库中查询得到的
  4. 目前编译遇到问题,需要解决SysUserVo类引入问题,可能需要添加相应的依赖或修改引用路径

下一步工作

  1. 解决编译错误,主要是SysUserVo类引入问题
  2. 完成前端实现,修改班级管理页面的班主任选择功能
  3. 添加班级班主任关系管理页面,用于查看和管理班级班主任关系历史
  4. 编写单元测试和集成测试
  5. 更新相关文档

变更记录

  1. 创建了班级班主任关系表 xg_class_teacher_relation
  2. 创建了相关实体类、Mapper、Service和Controller
  3. 修改了班级信息Service和Controller,添加了班主任选择相关功能
  4. 记录了实现方案和注意事项

编译错误修复记录

修复时间:2025-07-22 21:25:00

修复内容:

  1. 修复了包路径引用错误:

    • 将 org.dromara.system.api.domain.SysUser 改为 org.dromara.system.domain.SysUser
    • 将 org.dromara.system.api.domain.vo.SysUserVo 改为 org.dromara.system.domain.vo.SysUserVo
    • 将 org.dromara.common.user.vo.SysUserVo 改为 org.dromara.system.domain.vo.SysUserVo
  2. 修复了 BaseMapperPlus 的泛型参数错误:

    • 将 BaseMapperPlus<XgClassTeacherRelationMapper, XgClassTeacherRelation, XgClassTeacherRelationVo> 改为 BaseMapperPlus<XgClassTeacherRelation, XgClassTeacherRelationVo>
    • 将 BaseMapperPlus<XgSysUserMapper, SysUser, SysUserVo> 改为 BaseMapperPlus<SysUser, SysUserVo>

修复原因:

项目中没有 ruoyi-system-api 模块,正确的类路径应该是在 ruoyi-system 模块中。此外,BaseMapperPlus 的泛型参数应该是两个,而不是三个。

修复结果:

成功修复编译错误,项目可以正常编译。虽然还有一些关于过时 API 和未检查操作的警告,但这些不影响代码的正常运行。

后续工作:

  1. 考虑修复过时 API 的使用
  2. 考虑添加类型检查以消除未检查操作的警告

服务启动错误修复记录

修复时间:2025-07-22 21:30:00

修复内容:

  1. 修复了 XgSysUserMapper.xml 文件中的类型路径错误:
    • 将 resultMap 标签中的 type="org.dromara.system.api.domain.vo.SysUserVo" 改为 type="org.dromara.system.domain.vo.SysUserVo"

修复原因:

在之前修复编译错误时,我们只修改了 Java 代码中的包路径引用,但没有修改 XML 文件中的引用。这导致服务启动时,MyBatis 无法找到 org.dromara.system.api.domain.vo.SysUserVo 类,从而导致 sqlSessionFactory Bean 创建失败。

修复结果:

成功修复了 XML 文件中的类型路径,并重新编译安装了 ruoyi-xg-xx 模块。这应该可以解决服务启动时的错误。

后续工作:

  1. 确认服务是否能正常启动
  2. 检查是否还有其他 XML 文件中的类型路径需要修改