From f54b0dff8157c7ef2547ac912d70cab63de50626 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期三, 09 九月 2026 20:47:18 +0800
Subject: [PATCH] 按需读取化成旧报表摘要与循环曲线

---
 battery-business/src/main/java/com/battery/business/report/FormationReportService.java |   30 +++++++++++++++++++++++++-----
 1 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/battery-business/src/main/java/com/battery/business/report/FormationReportService.java b/battery-business/src/main/java/com/battery/business/report/FormationReportService.java
index 209da86..4944949 100644
--- a/battery-business/src/main/java/com/battery/business/report/FormationReportService.java
+++ b/battery-business/src/main/java/com/battery/business/report/FormationReportService.java
@@ -56,12 +56,11 @@
     /** 列表来源名称取自已保存版本,测试删除后仍保留筛选与识别信息。 */
     public List<Summary> list()
     {
-        return reports.listWithSnapshots().stream().map(summary -> {
-            // 最新快照由一次列表 SQL 带出,避免每份报表再执行一次版本查询。
-            var sources = items(JSON.parseObject(summary.snapshotJson()));
+        return reports.listSources().stream().map(row -> {
+            var summary = row.report();
             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()), summary.versionNo());
+                    String.join("、", row.sources().stream().map(source -> Objects.toString(source.get("name"), "")).distinct().toList()),
+                    String.join("、", row.sources().stream().map(source -> Objects.toString(source.get("batteryGroup"), "")).distinct().toList()), row.versionNo());
         }).toList();
     }
 
@@ -131,6 +130,27 @@
     public Map<String, Object> get(long id, Integer versionNo)
     {
         var version = reports.get(id, versionNo);
+        return versionResponse(id, version);
+    }
+
+    /** 已保存详情先返回表格与版本身份,曲线通过同一版本的循环接口加载。 */
+    public Map<String, Object> page(long id, Integer versionNo) {
+        var version = reports.page(id, versionNo);
+        var result = versionResponse(id, version);
+        result.put("items", reports.pageItems(id, version.versionNo()));
+        result.put("curvesDeferred", true);
+        return result;
+    }
+
+    /** 只读固定版本的一个实际循环;不存在的报表、版本或循环必须明确拒绝。 */
+    public List<FormationReportRepository.CycleCurve> cycleCurves(long id, int versionNo, int cycleNo) {
+        var version = reports.page(id, versionNo);
+        var cycles = JSON.parseObject(version.snapshotJson()).getList("cycleNos", Integer.class);
+        if (cycleNo < 1 || cycles == null || !cycles.contains(cycleNo)) throw new ServiceException("报表版本中不存在该循环");
+        return reports.cycleCurves(id, versionNo, cycleNo);
+    }
+
+    private Map<String,Object> versionResponse(long id, ReportVersionRepository.Version version) {
         var result = JSON.parseObject(version.snapshotJson());
         result.put("id", id); result.put("versionNo", version.versionNo());
         result.put("creator", version.report().creator()); result.put("createdAt", version.report().createdAt());

--
Gitblit v1.7.1