yeg
2026-09-09 b837cc1f88e6fa14442f66eecb59c45464dd7bb3
battery-business/src/main/java/com/battery/business/report/FormationReportService.java
@@ -56,12 +56,12 @@
    /** 列表来源名称取自已保存版本,测试删除后仍保留筛选与识别信息。 */
    public List<Summary> list()
    {
        return reports.list().stream().map(summary -> {
            var version = reports.get(summary.id());
            var sources = items(JSON.parseObject(version.snapshotJson()));
        return reports.listWithSnapshots().stream().map(summary -> {
            // 最新快照由一次列表 SQL 带出,避免每份报表再执行一次版本查询。
            var sources = items(JSON.parseObject(summary.snapshotJson()));
            return new Summary(summary.id(), summary.name(), summary.creator(), summary.createdAt(),
                    String.join("、", sources.stream().map(item -> item.source().name()).distinct().toList()),
                    String.join("、", sources.stream().map(item -> item.source().batteryGroup()).distinct().toList()), version.versionNo());
                    String.join("、", sources.stream().map(item -> item.source().batteryGroup()).distinct().toList()), summary.versionNo());
        }).toList();
    }
@@ -99,7 +99,8 @@
            var actual = Stream.of(rows, realtime,
                    batteryRows(steps.computeIfAbsent(selection.testId(), data::steps), battery)).flatMap(List::stream)
                    .map(this::cycleNo).filter(no -> no > 0).distinct().sorted().toList();
            items.add(new Item(candidate(test, battery), actual, rows, metrics(rows, actual), battery.getFields(), chargeSteps(steps.get(selection.testId()), realtime, battery, actual), curves(realtime, actual), stepCurves(realtime, actual)));
            // 图表只需按循环共享的曲线;逐工步曲线会重复保存同一批采样,造成详情响应膨胀。
            items.add(new Item(candidate(test, battery), actual, rows, metrics(rows, actual), battery.getFields(), chargeSteps(steps.get(selection.testId()), realtime, battery, actual), curves(realtime, actual), null));
        }
        return new Matrix(items, items.stream().flatMap(item -> item.cycleNos().stream()).distinct().sorted().toList());
    }