培训申请提交时出现错误:For input string: "sys_user:1",导致无法成功提交培训申请。
后端Controller在处理用户ID时,尝试将格式为"sys_user:1"的字符串直接转换为Long类型,导致类型转换错误。
修改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());
}
}
修改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和用户名。
backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsTrainingApplicationController.javaweb/src/views/rs/training/index.vue