Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-28-班级干部离任API实现.md
T
2025-07-29 16:37:42 +08:00

5.8 KiB

班级干部离任API接口实现变更记录

变更日期: 2025-01-28
变更人员: Cursor AI
变更类型: 功能新增
影响范围: 后端API、前端调用、数据库操作

📋 变更概述

在 XgClassPosMsgController.java 中新增学生干部离任接口,实现以下功能:

  1. 通过任期开始日期和任期结束日期计算任期时长(月)
  2. 更新班级干部信息到数据库
  3. 删除 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

更新内容:

  • 导入新的 dismissCadre API方法
  • 更新 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. 计算年差和月差
  2. 转换为总月数
  3. 考虑天数差异进行精确计算
  4. 如果结束日期的天数小于开始日期的天数,且不是整月,则减去1个月
  5. 确保至少为0个月

状态变更规则

  • is_current: 1 → 0(现任 → 非现任)
  • cadre_status: 1(在任)→ 2/3/4/5/6(其他状态)

🧪 测试验证

API接口测试

  • URL: POST /xgClassPosMsg/xgClassPosMsg/dismiss/{id}
  • 参数验证: 所有必填参数都有验证
  • 权限验证: 需要 xgClassPosMsg:xgClassPosMsg:edit 权限
  • 事务验证: 确保数据一致性

测试用例

  1. 正常离任: 任期届满,状态改为"到期"
  2. 辞职离任: 个人原因,状态改为"辞职"
  3. 免职离任: 违纪原因,状态改为"免职"
  4. 异常处理: 无效ID、参数缺失等

📝 注意事项

  1. 事务管理: 使用 @Transactional 确保数据一致性
  2. 异常处理: 完善的异常捕获和日志记录
  3. 权限控制: 需要相应的编辑权限
  4. 数据验证: 前端和后端都有参数验证
  5. 日志记录: 记录所有关键操作

🔄 后续优化建议

  1. 批量离任: 支持批量处理多个干部的离任
  2. 离任审批: 增加离任审批流程
  3. 历史记录: 保存离任历史记录
  4. 通知机制: 离任时发送通知给相关人员
  5. 数据统计: 增加离任原因统计分析

✅ 验证清单

  • 后端Service接口定义
  • 后端Service实现逻辑
  • 后端Controller接口
  • 前端API调用方法
  • 前端组件更新
  • 参数验证
  • 权限控制
  • 事务管理
  • 异常处理
  • 日志记录
  • 数据库操作
  • 任期时长计算

变更完成时间: 2025-01-28
变更状态: ✅ 已完成
测试状态: 🔄 待测试
部署状态: 🔄 待部署