生成时间: 2026-08-02 · 数据来源: xnybw平台需求及工作计划.xlsx(南网在线绿能云缺陷跟踪表)· 仅针对 backup730/730backup 分支代码

实际并网容量“保存并提交审核”出现“运行时异常,请联系管理员”

Excel 第 20 行 · 新能源并网五区(xnybw5)
严重性:严重 状态:5.1.已关闭(复测通过)

1基本信息

问题描述实际并网容量点击保存并提交审核出现“运行时异常,请联系管理员”
一级模块实际并网信息
二级模块实际并网容量信息
涉及类型未特别标注(截图为集中式新能源-风电场站)
严重性严重
当前状态5.1.已关闭
研发处理人员陈文琛
复测情况复测通过

2问题截图

点击保存并提交审核后页面顶部弹出运行时异常,请联系管理员
图1:场站基本信息 + 发电单元信息页面点击“保存并提交审核”后,页面顶部提示“运行时异常,请联系管理员!”

3旧代码涉及的项目文件名及对应行数(backup730 / 730backup)

前端:xnybw5f / src/views/projectNew/components/actualInfo/components/tabItem.vue(第 560-606 行 saveInfo 方法)
“保存并提交审核”按钮触发 saveInfo(),最终调用 projectActualApi.updatePlant(this.station) 提交到后端 /newenergy/sjbw/updatePlant
后端:xnybw5b / src/main/java/cn/csg/so/oms/in/newenergy/project/appservice/SjbwAppService.java(第 968-1049 行 updatePlant 方法)
该方法内多处直接对请求 Map 取值并调用 .toString(),未做空值防御,是触发该端点“运行时异常”的典型代码模式。

4修复代码涉及的项目文件名及行数

5修复方案

说明:本条缺陷当前状态为“已关闭 / 复测通过”,即在当前 backup730/730backup 快照的基础上已经可以正常保存。但代码走读发现 updatePlant() 方法内仍保留着与该问题高度吻合的不安全写法——多处直接对 Map 取值后无判空就调用 .toString(),一旦前端传参里缺失某个字段(例如 type/cnlx 均为空,或 plantId 取值时机不对),就会抛出 NullPointerException,而该异常未被 updatePlant() 自身捕获,会一路冒泡到全局异常处理器,被转换成截图里看到的通用提示“运行时异常,请联系管理员!”,把具体原因完全掩盖掉。为避免同类问题再次出现,建议在这批直接取值的地方补齐防御性判断:

修改前(第 969 行)
String type = ObjectUtil.isNotEmpty(map.get("cnlx"))
    ? map.get("cnlx").toString()
    : map.get("type").toString();
修改后(建议)
String type = ObjectUtil.isNotEmpty(map.get("cnlx"))
    ? map.get("cnlx").toString()
    : Objects.toString(map.get("type"), "");
if (StrUtil.isEmpty(type)) {
    throw new ServiceException("提交数据缺少项目类型(type/cnlx),请刷新页面重试");
}
修改前(第 1039 行附近)
String plantId = map.get("plantId").toString();
修改后(建议,复用已有的安全解析结果)
String plantId = plantId1;
同时建议:全局异常处理器针对业务校验类异常(如上面新增的 ServiceException)应直接把 e.getMessage() 原样返回给前端,而不是统一替换成“运行时异常,请联系管理员”,否则即便补齐了判空,用户依然看不到具体是哪个字段缺失,不利于自助定位问题(该问题在 Excel 第 22 行“发电单元信息导入报错”中同样出现,属于本系统的共性缺陷,建议一并排查全局异常处理逻辑)。