5.8 KiB
5.8 KiB
班级干部离任API接口实现变更记录
变更日期: 2025-01-28
变更人员: Cursor AI
变更类型: 功能新增
影响范围: 后端API、前端调用、数据库操作
📋 变更概述
在 XgClassPosMsgController.java 中新增学生干部离任接口,实现以下功能:
- 通过任期开始日期和任期结束日期计算任期时长(月)
- 更新班级干部信息到数据库
- 删除
sys_user_role表中的关联数据
🔧 具体变更内容
1. 后端Service接口扩展
文件: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgClassPosMsgService.java
新增方法:
/**
* 学生干部离任
*
* @param id 班级干部信息ID
* @param termEndDate 任期结束日期
* @param cadreStatus 学生职务任职状态
* @param dismissalReason 离任原因
* @return 是否离任成功
*/
Boolean dismissCadre(Long id, java.util.Date termEndDate, String cadreStatus, String dismissalReason);
2. 后端Service实现
文件: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgClassPosMsgServiceImpl.java
新增功能:
dismissCadre()方法实现calculateTermDuration()私有方法实现任期时长计算- 事务管理确保数据一致性
- 删除
sys_user_role关联数据
核心逻辑:
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean dismissCadre(Long id, Date termEndDate, String cadreStatus, String dismissalReason) {
// 1. 查询班级干部信息
// 2. 计算任期时长(月)
// 3. 更新班级干部信息
// 4. 删除sys_user_role表中的关联数据
}
任期时长计算逻辑:
private Long calculateTermDuration(Date startDate, Date endDate) {
// 使用Calendar计算年差和月差
// 考虑天数差异进行精确计算
// 返回总月数
}
3. 后端Controller接口
文件: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgClassPosMsgController.java
新增接口:
/**
* 学生干部离任
*/
@SaCheckPermission("xgClassPosMsg:xgClassPosMsg:edit")
@Log(title = "学生干部离任", businessType = BusinessType.UPDATE)
@PostMapping("/dismiss/{id}")
public R<Void> dismissCadre(
@NotNull(message = "班级干部信息ID不能为空") @PathVariable Long id,
@NotNull(message = "任期结束日期不能为空") @RequestParam Date termEndDate,
@NotBlank(message = "学生职务任职状态不能为空") @RequestParam String cadreStatus,
@NotBlank(message = "离任原因不能为空") @RequestParam String dismissalReason)
接口特点:
- 使用
@PathVariable接收ID参数 - 使用
@RequestParam接收其他参数 - 包含完整的参数验证
- 记录操作日志
4. 前端API调用
文件: web/src/api/xgClassPosMsg/xgClassPosMsg/index.ts
新增方法:
/**
* 学生干部离任
*/
export const dismissCadre = (id: string | number, termEndDate: string, cadreStatus: string, dismissalReason: string) => {
return request({
url: '/xgClassPosMsg/xgClassPosMsg/dismiss/' + id,
method: 'post',
params: {
termEndDate,
cadreStatus,
dismissalReason
}
});
};
5. 前端组件更新
文件: web/src/views/xgClassPosMsg/xgClassPosMsg/index.vue
更新内容:
- 导入新的
dismissCadreAPI方法 - 更新
submitDismissalForm()方法使用新接口 - 移除原有的
updateXgClassPosMsg调用
🗄️ 数据库操作
更新操作
- 表:
xg_class_pos_msg - 更新字段:
term_end_date: 任期结束日期term_duration: 任期时长(月)cadre_status: 学生职务任职状态dismissal_reason: 离任原因dismissal_date: 离任日期is_current: 设置为0(非现任)
删除操作
- 表:
sys_user_role - 删除条件:
role_id = 班级干部ID AND user_id = 学生ID
🔍 业务逻辑
任期时长计算规则
- 计算年差和月差
- 转换为总月数
- 考虑天数差异进行精确计算
- 如果结束日期的天数小于开始日期的天数,且不是整月,则减去1个月
- 确保至少为0个月
状态变更规则
is_current: 1 → 0(现任 → 非现任)cadre_status: 1(在任)→ 2/3/4/5/6(其他状态)
🧪 测试验证
API接口测试
- URL:
POST /xgClassPosMsg/xgClassPosMsg/dismiss/{id} - 参数验证: 所有必填参数都有验证
- 权限验证: 需要
xgClassPosMsg:xgClassPosMsg:edit权限 - 事务验证: 确保数据一致性
测试用例
- 正常离任: 任期届满,状态改为"到期"
- 辞职离任: 个人原因,状态改为"辞职"
- 免职离任: 违纪原因,状态改为"免职"
- 异常处理: 无效ID、参数缺失等
📝 注意事项
- 事务管理: 使用
@Transactional确保数据一致性 - 异常处理: 完善的异常捕获和日志记录
- 权限控制: 需要相应的编辑权限
- 数据验证: 前端和后端都有参数验证
- 日志记录: 记录所有关键操作
🔄 后续优化建议
- 批量离任: 支持批量处理多个干部的离任
- 离任审批: 增加离任审批流程
- 历史记录: 保存离任历史记录
- 通知机制: 离任时发送通知给相关人员
- 数据统计: 增加离任原因统计分析
✅ 验证清单
- 后端Service接口定义
- 后端Service实现逻辑
- 后端Controller接口
- 前端API调用方法
- 前端组件更新
- 参数验证
- 权限控制
- 事务管理
- 异常处理
- 日志记录
- 数据库操作
- 任期时长计算
变更完成时间: 2025-01-28
变更状态: ✅ 已完成
测试状态: 🔄 待测试
部署状态: 🔄 待部署