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

① 基本信息

问题描述外网测提交计划并网信息,经内网回退,外网侧重新提交后,内网侧看不到待审核信息
一级模块计划并网流程
二级模块计划并网审核
涉及类型集中式新能源
严重性严重
当前状态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 回退后实际写入的状态值核实调整,这里仅指出缺失分支的位置和修复思路。