From 8b1129e0fc329b5d69428e2a813baec64bee1625 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 27 四月 2026 10:44:42 +0800
Subject: [PATCH] fix: preserve unlimited station task limits in snapshot

---
 src/main/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImpl.java |   47 +++++++++++++++++++++++++++++++++--------------
 1 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImpl.java b/src/main/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImpl.java
index 9578f23..0eabf21 100644
--- a/src/main/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImpl.java
+++ b/src/main/java/com/zy/ai/service/impl/AutoTuneSnapshotServiceImpl.java
@@ -212,11 +212,13 @@
                 "aiAutoTuneIntervalMinutes",
                 DEFAULT_AI_AUTO_TUNE_INTERVAL_MINUTES
         ));
+        List<BasCrnp> crnList = loadCrnList();
+        List<BasDualCrnp> dualCrnList = loadDualCrnList();
         snapshot.setStationOutTaskLimits(loadStationOutTaskLimits());
-        snapshot.setCrnMaxOutTask(loadCrnMaxOutTask());
-        snapshot.setCrnMaxInTask(loadCrnMaxInTask());
-        snapshot.setDualCrnMaxOutTask(loadDualCrnMaxOutTask());
-        snapshot.setDualCrnMaxInTask(loadDualCrnMaxInTask());
+        snapshot.setCrnMaxOutTask(buildCrnMaxOutTask(crnList));
+        snapshot.setCrnMaxInTask(buildCrnMaxInTask(crnList));
+        snapshot.setDualCrnMaxOutTask(buildDualCrnMaxOutTask(dualCrnList));
+        snapshot.setDualCrnMaxInTask(buildDualCrnMaxInTask(dualCrnList));
         return snapshot;
     }
 
@@ -242,41 +244,58 @@
         }
         QueryWrapper<BasStation> wrapper = new QueryWrapper<>();
         wrapper.orderByAsc("station_id");
-        for (BasStation station : safeList(basStationService.list(wrapper))) {
+        return buildStationOutTaskLimitMap(basStationService.list(wrapper));
+    }
+
+    Map<String, Integer> buildStationOutTaskLimitMap(List<BasStation> stationList) {
+        Map<String, Integer> result = new LinkedHashMap<>();
+        for (BasStation station : safeList(stationList)) {
             if (station != null && station.getStationId() != null) {
-                result.put(String.valueOf(station.getStationId()), defaultInt(station.getOutTaskLimit()));
+                result.put(String.valueOf(station.getStationId()), station.getOutTaskLimit());
             }
         }
         return result;
     }
 
-    private Map<String, Integer> loadCrnMaxOutTask() {
+    private Map<String, Integer> buildCrnMaxOutTask(List<BasCrnp> crnList) {
         Map<String, Integer> result = new LinkedHashMap<>();
-        for (BasCrnp crn : loadCrnList()) {
+        for (BasCrnp crn : safeList(crnList)) {
+            if (crn == null || crn.getCrnNo() == null) {
+                continue;
+            }
             result.put(String.valueOf(crn.getCrnNo()), defaultInt(crn.getMaxOutTask()));
         }
         return result;
     }
 
-    private Map<String, Integer> loadCrnMaxInTask() {
+    private Map<String, Integer> buildCrnMaxInTask(List<BasCrnp> crnList) {
         Map<String, Integer> result = new LinkedHashMap<>();
-        for (BasCrnp crn : loadCrnList()) {
+        for (BasCrnp crn : safeList(crnList)) {
+            if (crn == null || crn.getCrnNo() == null) {
+                continue;
+            }
             result.put(String.valueOf(crn.getCrnNo()), defaultInt(crn.getMaxInTask()));
         }
         return result;
     }
 
-    private Map<String, Integer> loadDualCrnMaxOutTask() {
+    private Map<String, Integer> buildDualCrnMaxOutTask(List<BasDualCrnp> dualCrnList) {
         Map<String, Integer> result = new LinkedHashMap<>();
-        for (BasDualCrnp dualCrn : loadDualCrnList()) {
+        for (BasDualCrnp dualCrn : safeList(dualCrnList)) {
+            if (dualCrn == null || dualCrn.getCrnNo() == null) {
+                continue;
+            }
             result.put(String.valueOf(dualCrn.getCrnNo()), defaultInt(dualCrn.getMaxOutTask()));
         }
         return result;
     }
 
-    private Map<String, Integer> loadDualCrnMaxInTask() {
+    private Map<String, Integer> buildDualCrnMaxInTask(List<BasDualCrnp> dualCrnList) {
         Map<String, Integer> result = new LinkedHashMap<>();
-        for (BasDualCrnp dualCrn : loadDualCrnList()) {
+        for (BasDualCrnp dualCrn : safeList(dualCrnList)) {
+            if (dualCrn == null || dualCrn.getCrnNo() == null) {
+                continue;
+            }
             result.put(String.valueOf(dualCrn.getCrnNo()), defaultInt(dualCrn.getMaxInTask()));
         }
         return result;

--
Gitblit v1.9.1