| 问题描述 | 发电单元信息导入报错 |
|---|---|
| 一级模块 | 实际并网信息 |
| 二级模块 | 实际并网容量信息 |
| 涉及类型 | 全部类型 |
| 严重性 | 严重 |
| 当前状态 | 2.1.待开发(待调整,需要前端配合) |
| 研发处理人员 | 周小龙 |
| 复测情况 | 暂无(待开发中) |
importFddy 返回 {"msg":"运行时异常,请联系管理员!","code":500}ServiceException 又重新包装成了通用的 RuntimeException。ServiceException,解析失败也会包成 ServiceException("解析发电单元导入文件失败,请检查文件格式")。SjbwController.java 第 194-202 行 importFddy 方法validateFirstColumnIdHeader(第 3138 行)要求的“发电单元ID”完全一致根因分析:截图中浏览器网络面板已经直接证实,导入失败时后端返回的是通用错误码 500、通用文案“运行时异常,请联系管理员!”,而不是任何具体原因。走读 SjbwAppService.parseFileFdgfswzPower() 可以看到,后端其实已经为“表头缺少发电单元ID列”“文件格式解析失败”等情况准备了明确的业务提示语(ServiceException("导入文件第一列必须为发电单元ID") / ServiceException("解析发电单元导入文件失败,请检查文件格式"))。但这些有意义的提示在 Controller 层被“好心办坏事”地统一吞掉了:
@PostMapping("/importFddy")
public Map importFddy(@ModelAttribute SjbwDto dto,
@RequestParam("file") MultipartFile file){
try {
return sjbwFacade.importFddy(dto,file);
}catch (Exception e){
throw new RuntimeException("导入发电单元出错:" + e.getMessage(),e);
}
}
@PostMapping("/importFddy")
public Map importFddy(@ModelAttribute SjbwDto dto,
@RequestParam("file") MultipartFile file){
try {
return sjbwFacade.importFddy(dto,file);
} catch (ServiceException se) {
// 业务校验异常:原样透传给前端展示,不再包装成通用运行时异常
throw se;
} catch (Exception e) {
LOGGER.error("导入发电单元出错", e);
throw new ServiceException("导入发电单元失败,请检查文件内容或联系管理员");
}
}
修复后,用户上传格式不符的文件会看到“导入文件第一列必须为发电单元ID”或“解析发电单元导入文件失败,请检查文件格式”这样可操作的提示,而不是一律显示“运行时异常,请联系管理员”。
validateFirstColumnIdHeader 要求的“发电单元ID”不完全一致(例如多了空格、列顺序不同、或使用了旧模板)。这部分需要前端与后端共同核对“导入模版下载”按钮生成的模板结构,确保它与后端解析逻辑严格一致,属于前后端模板对齐问题,不是单纯后端可以独立修复的缺陷,因此才会归入本例。