6.7 KiB
学生信息审核通过API接口开发记录
变更基本信息
- 变更时间: 2025-01-27 20:15:30
- 变更人员: cursor
- 变更类型: 新增功能
- 影响范围: 后端API接口
需求描述
在XgStudentMsgBatchController.java中增加一个API接口/studentMsgBatch/studentMsgBatch/approveStudentMsg,用于审核通过学生完善的个人信息。
接口设计
API路径
POST /studentMsgBatch/studentMsgBatch/approveStudentMsg
请求参数
batchId(Long): 批次ID,必填userId(Long): 用户ID,必填remark(String): 审核备注,可选
业务逻辑
- 第0步: 查询并验证要审核的学生信息批次数据
- 校验逻辑: 参考
XgStudentMsgController.edit方法- 验证学号作为用户名的唯一性
- 验证手机号唯一性(如果提供)
- 验证邮箱唯一性(如果提供)
- 第一步: 更新
xg_student_msg_batch表remark= 入参的remarkinfo_status= '5' (已审核通过)update_time= 当前时间update_by= 当前登录人ID
- 第二步: 将
xg_student_msg_batch的数据更新到xg_student_msg表 - 第三步: 自动更新
sys_user表(通过xgStudentMsgService.updateByBo方法)
技术实现
1. Controller层修改
文件: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgStudentMsgBatchController.java
/**
* 审核通过学生信息提交
*
* @param batchId 批次ID
* @param userId 用户ID
* @param remark 审核备注
*/
@SaCheckPermission("studentMsgBatch:studentMsgBatch:edit")
@Log(title = "审核通过学生信息提交", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/approveStudentMsg")
public R<Void> approveStudentMsg(@RequestParam @NotNull(message = "批次ID不能为空") Long batchId,
@RequestParam @NotNull(message = "用户ID不能为空") Long userId,
@RequestParam(required = false) String remark) {
return toAjax(xgStudentMsgBatchService.approveStudentMsg(batchId, userId, remark));
}
2. Service接口层修改
文件: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgStudentMsgBatchService.java
/**
* 审核通过学生信息提交
*
* @param batchId 批次ID
* @param userId 用户ID
* @param remark 审核备注
* @return 是否审核通过成功
*/
Boolean approveStudentMsg(Long batchId, Long userId, String remark);
3. Service实现层修改
文件: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgStudentMsgBatchServiceImpl.java
- 新增依赖注入:
ISysUserService、IXgStudentMsgService - 实现完整的
approveStudentMsg方法 - 包含事务管理、数据校验、异常处理
4. Mapper层修改
文件: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgStudentMsgBatchMapper.java
/**
* 审核通过学生信息提交
* 更新 xg_student_msg_batch 表中指定批次和用户的记录
*
* @param batchId 批次ID
* @param userId 用户ID
* @param remark 审核备注
* @param currentUserId 当前登录人ID
* @return 更新记录数
*/
int approveStudentMsgByBatchIdAndUserId(@Param("batchId") Long batchId,
@Param("userId") Long userId,
@Param("remark") String remark,
@Param("currentUserId") Long currentUserId);
5. SQL实现
文件: backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/studentMsgBatch/XgStudentMsgBatchMapper.xml
<!-- 审核通过学生信息提交 -->
<update id="approveStudentMsgByBatchIdAndUserId">
UPDATE xg_student_msg_batch
SET remark = #{remark},
info_status = '5',
update_by = #{currentUserId},
update_time = NOW()
WHERE batch_id = #{batchId}
AND id = #{userId}
AND deleted = 0
</update>
功能特性
安全性
- 权限控制:
@SaCheckPermission("studentMsgBatch:studentMsgBatch:edit") - 防重复提交:
@RepeatSubmit() - 参数验证: 必填参数验证
可靠性
- 事务管理:
@Transactional(rollbackFor = Exception.class) - 数据完整性: 查询验证 → 更新批次表 → 更新学生表 → 更新用户表
- 异常处理: 完整的try-catch和异常抛出
可维护性
- 详细日志: 记录操作过程和异常信息
- 操作记录:
@Log(title = "审核通过学生信息提交", businessType = BusinessType.UPDATE)
数据库影响
表结构变更
无新增表结构,使用现有表:
xg_student_msg_batch: 更新审核状态和备注xg_student_msg: 同步学生信息数据sys_user: 同步用户信息数据
数据状态变更
info_status: '3'(审核中) → '5'(已审核通过)
测试建议
功能测试
- 正常流程: 提供有效的batchId和userId,验证审核通过成功
- 参数验证: 测试必填参数为空的情况
- 数据验证: 测试学号、手机号、邮箱重复的情况
- 权限验证: 测试无权限用户访问的情况
异常测试
- 数据不存在: 提供不存在的batchId或userId
- 并发测试: 多用户同时审核同一条记录
- 事务回滚: 模拟第二步或第三步失败的情况
相关文档
API文档更新
需要在以下文档中补充新接口说明:
docs/开发文档/API/学生信息批次收集API.mddocs/开发文档/API/API文档总览.md
相关接口
- 驳回接口:
POST /studentMsgBatch/studentMsgBatch/rejectStudentMsg - 查询接口:
GET /studentMsgBatch/studentMsgBatch/history/{batchId}/{userId}
验收标准
接口调用成功标准
- 返回状态码200
- 返回数据格式:
{"code": 200, "msg": "操作成功"} - 数据库
xg_student_msg_batch表info_status更新为'5' xg_student_msg表数据同步成功sys_user表数据同步成功
日志记录标准
- 成功日志: "成功审核通过学生信息提交,批次ID: {}, 用户ID: {}, 操作人: {}, 审核备注: {}"
- 异常日志: "审核通过学生信息提交时发生异常,批次ID: {}, 用户ID: {}, 异常信息: {}"
总结
成功实现了学生信息审核通过API接口,包含完整的业务逻辑、数据校验、事务管理和异常处理。该接口与现有的驳回接口形成完整的审核流程,为学生信息管理系统提供了完善的审核功能。
关键改进点:
- 参考现有edit方法的校验逻辑,确保数据一致性
- 使用事务管理,确保数据操作的原子性
- 完整的日志记录,便于问题排查和操作审计
- 统一的异常处理和返回格式
下一步工作:
- 补充API文档说明
- 编写接口测试用例
- 前端页面集成测试