类型:填报问题 严重性:严重 状态:2.2.开发中(复测不通过)
| 问题描述 | 新型储能类型,计划并网提交后,用户在OMS2.0进行回退,然后再回到五区重新提交时报错 |
|---|---|
| 一级模块 | 项目信息填报 |
| 二级模块 | / |
| 涉及类型 | 新型储能 |
| 所属区域 | 五区 |
| 是否阻断流程 | 是 |
| 处理人员 | 周小龙 |
| 复测情况 | 复测不通过(待调整) |
"在OMS2.0进行回退"这一步操作本身发生在 OMS2.0(南网调度侧内网系统),不属于 xnybw5f/xnybw5b 代码范围,无法在本仓库中核实其回退逻辑。以下定位聚焦于"回到五区重新提交"这一步——这部分代码在 xnybw5f/xnybw5b 范围内,且确认存在明确的逻辑缺口。
src/views/projectNew/components/planInfo/jhbwDetail.vue 第789-1030行 handleSave(index):校验通过后调用 projectPlanApi.saveAndCreateFlow(impl) 发起"保存并提交审核"src/main/java/cn/csg/so/oms/in/newenergy/project/appservice/JhbwAppService.java 第340-396行 saveAndCreateFlow(NePjImplVO impl):
if (ProjectTypeConstant.isZYFBSXNY(impl.getType()) || ProjectTypeConstant.isSWZ(impl.getType())) {
// 中压、生物质:有专门的"重启流程"分支
...
if (StrUtil.isEmpty(impl.getFlowStatus())) {
FlowAppService.createFlow(FlowEnum.FlowType.计划并网流程, impl.getId(), params); // 第一次提交
} else if (StrUtil.equals(impl.getFlowStatusStr(), "已审核")) {
FlowAppService.reStartFlow(FlowEnum.FlowType.计划并网流程, impl.getId()); // 归档后重新提交 —— 有对应处理
}
} else {
// 新型储能等其它类型走这个分支,缺少"已有flowStatus但需要重启"的对应处理
if (StrUtil.equals(bakPstatus, "0")) {
saveDetailAdjust(impl);
if (StrUtil.isEmpty(impl.getFlowStatus())) {
FlowAppService.createFlow(FlowEnum.FlowType.计划并网流程, impl.getId(), params); // 只处理"从未提交过"
}
// 若 impl.getFlowStatus() 非空(即此前已提交过、流程已存在),这里什么都不做,直接跳过
} else {
delPlan(impl);
savePlanAndCreateFlow(impl, params);
}
}JhbwAppService.java 第363-368行(else 分支,非中压/生物质类型的 bakPstatus=='0' 处理逻辑)根本原因:中压分布式(ZYFBSXNY)和生物质(SWZ)类型的提交逻辑里,专门处理了"该记录之前已经提交过流程、现在要再次提交"的场景(flowStatusStr=="已审核" 时调用 FlowAppService.reStartFlow() 重启流程);但新型储能等其它类型走的是紧邻的 else 分支,只处理了"impl.getFlowStatus() 为空即从未提交过"的全新提交场景,没有对应"该记录已有 flowStatus、需要重新发起"的分支。当 OMS2.0 侧执行"回退"操作后,如果五区这边该 impl 记录的 flow_status 字段没有被同步清空(回退是在 OMS2.0 内网系统完成的,跨系统状态同步是否完整无法在本仓库确认),再次点击"保存并提交审核"时,代码会因为 impl.getFlowStatus() 非空而直接跳过 createFlow(),既不创建新流程也不重启旧流程,导致后续发送流程(sendByImplId)时找不到有效可用的流程实例而报错。
} else {
if (StrUtil.equals(bakPstatus, "0")) {
saveDetailAdjust(impl);
if (StrUtil.isEmpty(impl.getFlowStatus())) {
FlowAppService.createFlow(FlowEnum.FlowType.计划并网流程, impl.getId(), params);
} else if (StrUtil.equals(impl.getFlowStatusStr(), "已审核")
|| StrUtil.equals(impl.getFlowStatusStr(), "已退回")) {
// 修复:补齐"已提交过、经外部系统回退/审核完成后再次提交"的重启分支,
// 与中压/生物质分支保持一致,避免既不建流程也不重启
FlowAppService.reStartFlow(FlowEnum.FlowType.计划并网流程, impl.getId());
}
} else {
delPlan(impl);
savePlanAndCreateFlow(impl, params);
}
}
OmsReceiverApiController(xnybw5b / 730backup,负责接收 OMS 侧回调的接口,其中同样存在一份"复制自 jhbw/saveAndCreateFlow"的 saveAndCreateFlow 实现,第53-58行)实测或联调确认回退后该字段的真实取值,再据此调整上面 else if 的具体条件判断。