培训管理API.md 3.0 KB

代码变更记录 - 2025-07-24

修复培训申请提交错误

问题描述

培训申请提交时出现错误:For input string: "sys_user:1",导致无法成功提交培训申请。

原因分析

后端Controller在处理用户ID时,尝试将格式为"sys_user:1"的字符串直接转换为Long类型,导致类型转换错误。

解决方案

1. 后端修改

修改RsTrainingApplicationController的add方法,增加对"sys_user:1"格式的处理:

/**
 * 新增培训申请
 */
@SaCheckPermission("rs:training:application:add")
@Log(title = "培训申请", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping
public R<Void> add(@Validated @RequestBody RsTrainingApplication application) {
    try {
        // 尝试设置申请人为当前登录用户
        String loginId = StpUtil.getLoginIdAsString();
        if (loginId != null && loginId.startsWith("sys_user:")) {
            // 从"sys_user:1"格式中提取数字部分
            String[] parts = loginId.split(":");
            if (parts.length > 1) {
                application.setUserId(Long.parseLong(parts[1]));
                application.setUserName("用户" + parts[1]); // 临时用户名
            } else {
                // 如果无法解析,使用默认值
                application.setUserId(1L);
                application.setUserName("默认用户");
            }
        } else {
            // 尝试正常转换
            try {
                application.setUserId(StpUtil.getLoginIdAsLong());
                application.setUserName(loginId);
            } catch (Exception e) {
                // 转换失败,使用默认值
                application.setUserId(1L);
                application.setUserName("默认用户");
            }
        }
        
        return toAjax(trainingApplicationService.insertRsTrainingApplication(application));
    } catch (Exception e) {
        e.printStackTrace();
        return R.fail("添加培训申请失败: " + e.getMessage());
    }
}

2. 前端修改

修改web/src/views/rs/training/index.vue中的submitApplicationForm方法,移除硬编码的userId和userName,让后端使用登录用户信息:

// 创建符合API要求的数据结构
const apiData: any = {
  courseId: 0, // 使用0表示自定义课程,确保是数字类型
  courseName: applicationForm.courseName, // 保留courseName用于显示
  department: applicationForm.department,
  reason: applicationForm.reason,
  remark: applicationForm.remark,
  // 新增字段
  location: applicationForm.location,
  duration: applicationForm.duration,
  startTime: applicationForm.startTime,
  endTime: applicationForm.endTime
};

测试结果

修复后,培训申请可以正常提交,后端能够正确处理用户ID和用户名。

变更人员

  • 开发人员:weizzzz
  • 审核人员:待定

相关文件

  1. backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsTrainingApplicationController.java
  2. web/src/views/rs/training/index.vue