① 基本信息
| 问题描述 | 外网测提交计划并网信息,经内网回退,外网侧重新提交后,内网侧看不到待审核信息 |
|---|---|
| 一级模块 | 计划并网流程 |
| 二级模块 | 计划并网审核 |
| 涉及类型 | 集中式新能源 |
| 严重性 | 严重 |
| 当前状态 | 2.1.待开发 |
| 研发处理人 | 李文慧 |
| 处理状态 | 待调整 |
② 问题截图
该行台账未提供截图(shot1/shot2/shot3 均为空)。
③ 旧代码涉及的项目文件及行数(730backup 分支)
xnybw5b / src/main/java/cn/csg/so/oms/in/newenergy/project/appservice/JhbwAppService.java
第 340-388 行(saveAndCreateFlow,外网保存并提交/重新提交的入口方法)
④ 代码现状与修复方案
外网侧保存并提交计划并网信息,统一走 saveAndCreateFlow(NePjImplVO impl)。这个方法按项目类型分成两条分支,"集中式新能源"(本行涉及类型)属于 else 分支(非"中压/生物质"):
if (ProjectTypeConstant.isZYFBSXNY(impl.getType()) || ProjectTypeConstant.isSWZ(impl.getType())) {
// 中压、生物质分支
...
if (CollectionUtil.isNotEmpty(capaChangeList)) {
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 {
if (StrUtil.equals(bakPstatus, "0")) {
// 计划并网(集中式新能源等其余类型走这里)
saveDetailAdjust(impl);
if (StrUtil.isEmpty(impl.getFlowStatus())) {
FlowAppService.createFlow(FlowEnum.FlowType.计划并网流程, impl.getId(), params); // 仅处理"从未提交过"这一种情况
}
// 问题:这里没有任何 else-if 分支处理"流程已存在(曾被内网回退)、需要重新触发审核"的场景!
} else {
// 计划并网调整
...
}
}
"集中式新能源"走的这条分支,触发流程的唯一条件是
StrUtil.isEmpty(impl.getFlowStatus())——也就是说只有这条记录从未提交过流程时才会调用 FlowAppService.createFlow(...) 真正把审核任务分派给内网审核人。而"外网提交→内网回退"这个操作序列会让这条记录已经存在一个处于"编制"状态的流程实例(impl.getFlowStatus() 不再为空),此时外网侧再次点击"保存并提交",代码会直接跳过 if 块里的 createFlow(...),而这条分支又没有像"中压/生物质"分支那样补一个 else if 去调用 reStartFlow(...) 重新触发流程——整个 if 块什么都不做,静默跳过。结果就是:外网侧界面上感觉"已经点了保存并提交",但审核任务实际上没有被重新分派给内网审核人,内网侧的"待审核"列表自然看不到这条记录,与台账描述完全吻合。
建议修复方式:比照"中压/生物质"分支,给"计划并网"这条分支补上"流程已存在、需要重新触发审核"的处理:
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());
}
}
具体判断条件(impl.getFlowStatusStr() 的取值)需要研发结合 backById/batchBack 回退后实际写入的状态值核实调整,这里仅指出缺失分支的位置和修复思路。