Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-01-student-user-creation.md
T
2025-07-26 17:54:01 +08:00

3.7 KiB

学生信息管理用户验证逻辑修复记录

修复时间: 2025-01-01 14:30:00
修复人员: AI Assistant
影响模块: 学工管理 - 学生信息管理
修复类型: 代码错误修复

问题描述

XgStudentMsgController中的add方法存在多个代码错误:

  1. 变量名错误: 使用了未定义的user变量,应该使用参数bo
  2. 导入缺失: 缺少StringUtils和SysUserBo的导入
  3. 服务未注入: 引用了tenantService但未正确注入ISysTenantService
  4. 方法调用错误: 用户验证方法需要SysUserBo对象参数,而不是String

错误代码片段

// 错误的代码
if (!userService.checkUserNameUnique(user)) {
    return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
}

修复方案

1. 添加必要的导入

import org.dromara.common.core.utils.StringUtils;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.service.ISysTenantService;

2. 注入租户服务

private final ISysTenantService tenantService;

3. 修正用户验证逻辑

// 验证学号作为用户名的唯一性
if (StringUtils.isNotBlank(bo.getStudentNo())) {
    SysUserBo tempUser = new SysUserBo();
    tempUser.setUserName(bo.getStudentNo());
    if (!userService.checkUserNameUnique(tempUser)) {
        return R.fail("新增学生'" + bo.getName() + "'失败,学号'" + bo.getStudentNo() + "'已被使用作为登录账号");
    }
}

// 验证手机号唯一性(如果提供了手机号)
if (StringUtils.isNotBlank(bo.getPhone())) {
    SysUserBo tempUser = new SysUserBo();
    tempUser.setPhonenumber(bo.getPhone());
    if (!userService.checkPhoneUnique(tempUser)) {
        return R.fail("新增学生'" + bo.getName() + "'失败,手机号码'" + bo.getPhone() + "'已存在");
    }
}

// 验证邮箱唯一性(如果提供了邮箱)
if (StringUtils.isNotBlank(bo.getEmail())) {
    SysUserBo tempUser = new SysUserBo();
    tempUser.setEmail(bo.getEmail());
    if (!userService.checkEmailUnique(tempUser)) {
        return R.fail("新增学生'" + bo.getName() + "'失败,邮箱账号'" + bo.getEmail() + "'已存在");
    }
}

修复文件列表

  • backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgStudentMsgController.java

修复效果

  1. ✅ 编译错误解决: 消除了所有编译错误
  2. ✅ 逻辑正确: 用户验证逻辑适配学生信息的字段(学号、手机号、邮箱)
  3. ✅ 错误消息优化: 错误提示信息更加清晰和用户友好
  4. ✅ 服务注入完整: 租户服务正确注入,支持多租户用户额度检查

业务逻辑说明

此修复确保了学生信息创建时的用户验证机制正常工作:

  1. 学号唯一性: 学号将作为系统用户名,必须保证唯一性
  2. 联系方式唯一性: 手机号和邮箱在系统中必须唯一(如果提供)
  3. 租户额度检查: 在多租户环境下检查用户创建额度
  4. 自动用户创建: 通过验证后,Service层会自动为学生创建对应的系统用户账号

关联说明

该验证逻辑与XgStudentMsgServiceImpl.insertByBo方法中的用户创建逻辑配套使用,确保数据一致性和业务完整性。

测试建议

  1. 测试学号重复时的错误提示
  2. 测试手机号重复时的错误提示
  3. 测试邮箱重复时的错误提示
  4. 测试多租户环境下的用户额度限制
  5. 测试正常学生信息创建和用户账号自动生成

备注: 此次修复遵循了项目的编码规范和错误处理标准,确保了学生信息管理模块的稳定性和可靠性。