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

① 基本信息

问题描述计划并网审核通过之后,在项目基本信息页面修改批次的"本批次预计首台机组接入电网时间、本批次预计末台机组接入电网时间"调整后增加了跨年,计划并网信息页面的年度没有增加
一级模块计划并网信息
二级模块/
涉及类型全部类型
所属区域不确定或共性
严重性严重
当前状态2.1.待开发
研发处理人冷柏烨
处理说明已调整待验证

② 问题截图

项目基本信息-批次时间调整跨年
项目基本信息页面调整批次"预计首台/末台机组接入电网时间",新时间区间跨到下一年度
计划并网信息页面年度列表未出现新年度
切换到"计划并网容量信息"页面,年度列表仍只有旧年度,未出现批次调整后新增的年度

③ 旧代码涉及的项目文件及行数

xnybw5b / src/main/java/cn/csg/so/oms/in/newenergy/project/appservice/JhbwAppService.java 第 762-795 行 findDetailMap(计划并网信息年度列表的核心计算方法,决定跨年后是否补齐新年度)
public Map<String, List<NePjImplDetailVO>> findDetailMap(List<NePjImplVO> implList) {
    for (NePjImplVO impl : implList) {
        List<NePjImplDetailVO> detailList = new ArrayList<>();
        String bakPstatus = impl.getBakPstatus();   // 项目状态:无效项目0 有效项目1
        String type = impl.getType();
        if (StrUtil.equals(bakPstatus, "0")|| ProjectTypeConstant.isZYFBSXNY(type) || ProjectTypeConstant.isSWZ(type)) {
            // 只有"无效项目" 或 类型=中压分布式新能源 或 类型=生物质,才会执行下面的"按新批次年月补齐缺失年度"逻辑
            List<NePjImplDetAdjVO> adjustList = NePjImplDetAdjAppService.listByImplId(impl.getId());
            ...
            List<String> batchYearMonthList = impl.getBatchYearMonthList();
            for (String yearMonth : batchYearMonthList) {
                String year = yearMonth.substring(0, 4);
                List<NePjImplDetailVO> filterDetailList = detailList.stream()
                    .filter(detail -> StrUtil.equals(detail.getYear(), year)).collect(Collectors.toList());
                if (CollectionUtil.isEmpty(filterDetailList)) {
                    NePjImplDetailVO detail = new NePjImplDetailVO();
                    detail.setImplId(implId);
                    detail.setYear(year);
                    detailList.add(detail);         // 补齐新年度的行,只在上面条件成立时才会走到这里
                }
            }
        } else {
            detailList = NePjImplDetailAppService.listByImplId(impl.getId());   // 直接返回历史已存的年度列表,不做任何"跨年补齐"
        }
        detailMap.put(implId, detailList);
    }
    return detailMap;
}
定位结论:findDetailMap 里"按新批次时间补齐年度列表"的逻辑,只在 bakPstatus=="0"(无效项目/草稿态)项目类型为"中压分布式新能源""生物质"这三种条件之一成立时才会执行。而本条问题描述的场景是"计划并网审核通过之后"——审核通过意味着项目状态大概率已经从"无效项目(0)"流转为"有效项目(1)";此时如果项目类型又不属于中压分布式新能源或生物质(比如集中式新能源、新型储能、海上风电等),代码会直接落入 else 分支(第789-791行),只返回数据库里已经存在的历史年度记录,完全不会比对新的 batchYearMonthList 去补齐跨年后新增的年度。这正好解释了"审核通过后调整批次时间跨年,年度没有增加",同时也解释了该记录 involved_type=全部类型——因为除中压分布式/生物质外的所有其他类型,在"有效项目"状态下都会命中这个逻辑缺口。

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

xnybw5b / src/main/java/cn/csg/so/oms/in/newenergy/project/appservice/JhbwAppService.java 第 770 行判断条件:去掉"项目状态/类型"的限定,改为对所有类型、所有项目状态统一执行"按批次年月补齐年度"逻辑
-if (StrUtil.equals(bakPstatus, "0")|| ProjectTypeConstant.isZYFBSXNY(type) || ProjectTypeConstant.isSWZ(type)) {
+// 不再按项目状态/类型限定,"审核通过后调整批次时间跨年"对所有类型都应补齐新年度
+{
    List<NePjImplDetAdjVO> adjustList = NePjImplDetAdjAppService.listByImplId(impl.getId());
    if (CollectionUtil.isNotEmpty(adjustList)) {
        detailList = BeanUtil.copyToList(adjustList, NePjImplDetailVO.class);
    } else {
        detailList = NePjImplDetailAppService.listByImplId(impl.getId());
    }
    List<String> batchYearMonthList = impl.getBatchYearMonthList();
    for (String yearMonth : batchYearMonthList) {
        String year = yearMonth.substring(0, 4);
        List<NePjImplDetailVO> filterDetailList = detailList.stream()
            .filter(detail -> StrUtil.equals(detail.getYear(), year)).collect(Collectors.toList());
        if (CollectionUtil.isEmpty(filterDetailList)) {
            NePjImplDetailVO detail = new NePjImplDetailVO();
            detail.setImplId(implId);
            detail.setYear(year);
            detailList.add(detail);
        }
    }
-} else {
-    detailList = NePjImplDetailAppService.listByImplId(impl.getId());
-}
+}

⑤ 修复方案

根因是 JhbwAppService.findDetailMap(第762-795行)里"按批次预计接入电网时间补齐计划并网年度列表"的逻辑被限定在了"无效项目"或"中压分布式新能源/生物质"类型下才执行,其余类型在项目转为"有效项目"(审核通过后的常态)时完全跳过这段补齐逻辑,导致跨年调整后新年度不出现。

修复方式是去掉这个不合理的范围限定,让"批次年月→年度列表补齐"对所有项目状态、所有发电类型统一生效(该逻辑本身——按 batchYearMonthList 补齐 detailList 中缺失的年度——是正确、通用的,不需要重写,只需要去掉外层错误的 if 条件限制)。需要注意的是,本仓库另一条缺陷 Excel 第69行(生物质类型,时间调整后不在区间内的年份未自动删除)指向的是同一个方法里"只补齐、不剔除超出区间年份"的另一侧问题;两条问题建议在同一次修改中一并处理:既要在时间区间扩大(跨年)时补齐新年度,也要在时间区间缩小时剔除超出范围的旧年度。

修改前建议确认 NePjImplDetAdjAppService.listByImplId(有调整记录时的年度列表来源)是否也需要同步这部分"补齐"逻辑,避免只改了主 detailList 分支、遗漏调整记录分支。