From f38ca8a9f8454ac2eebdc268c89efd0e436b3cf2 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期三, 09 九月 2026 19:58:40 +0800
Subject: [PATCH] 修复化成报表漏识别导入充放电工步

---
 battery-business/src/main/java/com/battery/business/report/FormationReportService.java |   22 ++++++++++++++++++----
 1 files changed, 18 insertions(+), 4 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 9fc3810..d54a620 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
@@ -353,18 +353,32 @@
             Map<Integer, ChargeStep> found = new java.util.TreeMap<>();
             // 实时记录只补充实际范围身份,不代替缺失的工步终止电压。
             for (var row : realtime) if (cycleNo(row) == cycle && number(row.get("stepNo")) > 0) {
-                String type = String.valueOf(row.getOrDefault("stepType", ""));
-                found.putIfAbsent(number(row.get("stepNo")), new ChargeStep(number(row.get("stepNo")), String.valueOf(row.getOrDefault("stepName", "")), type, null, directions.resolve(type), null));
+                String type = Objects.toString(row.get("stepType"), "");
+                String name = Objects.toString(row.get("stepName"), "");
+                found.putIfAbsent(number(row.get("stepNo")), new ChargeStep(number(row.get("stepNo")), name, type, null, stepDirection(type, name), null));
             }
             if (rows != null) for (var row : rows) if (Objects.equals(battery.getBatteryNo(), row.get("batteryNo")) && cycleNo(row) == cycle && number(row.get("stepNo")) > 0) {
-                String type = String.valueOf(row.getOrDefault("stepType", ""));
-                found.put(number(row.get("stepNo")), new ChargeStep(number(row.get("stepNo")), String.valueOf(row.getOrDefault("stepName", "")), type, decimal(row.get("endVoltage")), directions.resolve(type), decimal(row.get("capacity"))));
+                String type = Objects.toString(row.get("stepType"), "");
+                String name = Objects.toString(row.get("stepName"), "");
+                found.put(number(row.get("stepNo")), new ChargeStep(number(row.get("stepNo")), name, type, decimal(row.get("endVoltage")), stepDirection(type, name), decimal(row.get("capacity"))));
             }
             result.put(cycle, new ArrayList<>(found.values()));
         }
         return result;
     }
     private int number(Object value) { return value instanceof Number n ? n.intValue() : 0; }
+
+    private Direction stepDirection(String type, String name)
+    {
+        // 甲方 Excel 只提供工步名称;有协议类型时禁止用名称覆盖未知/混合类型。
+        if (!type.isBlank()) return directions.resolve(type);
+        return switch (name.trim()) {
+            case "恒流充电" -> Direction.CHARGE;
+            case "恒流放电" -> Direction.DISCHARGE;
+            case "搁置", "静置" -> Direction.REST;
+            default -> Direction.UNKNOWN;
+        };
+    }
     private BigDecimal decimal(Object value) { return value instanceof Number n ? new BigDecimal(n.toString()) : null; }
 
     private Set<String> valueKeys(List<FormationField> fields, List<Item> items)

--
Gitblit v1.7.1