From dc3f9cc91759823ce59486f19b138be4b296a0f1 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 28 四月 2026 09:43:28 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/ai/domain/autotune/AutoTuneRuleDefinition.java |  149 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 130 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/zy/ai/domain/autotune/AutoTuneRuleDefinition.java b/src/main/java/com/zy/ai/domain/autotune/AutoTuneRuleDefinition.java
index bff033e..1b3cd79 100644
--- a/src/main/java/com/zy/ai/domain/autotune/AutoTuneRuleDefinition.java
+++ b/src/main/java/com/zy/ai/domain/autotune/AutoTuneRuleDefinition.java
@@ -6,6 +6,12 @@
 
 public final class AutoTuneRuleDefinition {
 
+    private static final String DEFAULT_RULE_NOTE = "鍗曟璋冩暣骞呭害涓嶈兘瓒呰繃 maxStep銆�";
+    private static final String STATION_OUT_TASK_LIMIT_DYNAMIC_MAX_SOURCE =
+            "currentParameterSnapshot.stationOutBufferCapacities[targetId]";
+    private static final String STATION_OUT_TASK_LIMIT_NOTE =
+            "鍗曟璋冩暣骞呭害涓嶈兘瓒呰繃 maxStep锛涘澶ф椂涓嶅緱瓒呰繃瀵瑰簲绔欑偣 outBufferCapacity銆�";
+
     private static final Map<String, Rule> RULE_MAP = buildRuleMap();
 
     private AutoTuneRuleDefinition() {
@@ -24,27 +30,58 @@
 
     private static Map<String, Rule> buildRuleMap() {
         LinkedHashMap<String, Rule> ruleMap = new LinkedHashMap<>();
-        add(ruleMap, AutoTuneTargetType.SYS_CONFIG, "aiAutoTuneIntervalMinutes", 5, 60, 5, 30, false);
-        add(ruleMap, AutoTuneTargetType.SYS_CONFIG, "conveyorStationTaskLimit", 5, 200, 5, 20, false);
-        add(ruleMap, AutoTuneTargetType.SYS_CONFIG, "crnOutBatchRunningLimit", 1, 20, 3, 20, false);
-        add(ruleMap, AutoTuneTargetType.STATION, "outTaskLimit", 0, null, 3, 10, true);
-        add(ruleMap, AutoTuneTargetType.CRN, "maxOutTask", 0, 10, 3, 10, false);
-        add(ruleMap, AutoTuneTargetType.CRN, "maxInTask", 0, 10, 3, 10, false);
-        add(ruleMap, AutoTuneTargetType.DUAL_CRN, "maxOutTask", 0, 10, 3, 10, false);
-        add(ruleMap, AutoTuneTargetType.DUAL_CRN, "maxInTask", 0, 10, 3, 10, false);
+        add(ruleMap, rule(AutoTuneTargetType.SYS_CONFIG, "aiAutoTuneIntervalMinutes")
+                .minValue(5)
+                .maxValue(60)
+                .maxStep(5)
+                .cooldownMinutes(30));
+        add(ruleMap, rule(AutoTuneTargetType.SYS_CONFIG, "conveyorStationTaskLimit")
+                .minValue(5)
+                .maxValue(200)
+                .maxStep(5)
+                .cooldownMinutes(20));
+        add(ruleMap, rule(AutoTuneTargetType.SYS_CONFIG, "crnOutBatchRunningLimit")
+                .minValue(1)
+                .maxValue(20)
+                .maxStep(3)
+                .cooldownMinutes(20));
+        add(ruleMap, rule(AutoTuneTargetType.STATION, "outTaskLimit")
+                .minValue(0)
+                .maxStep(3)
+                .cooldownMinutes(10)
+                .dynamicMaxSource(STATION_OUT_TASK_LIMIT_DYNAMIC_MAX_SOURCE)
+                .note(STATION_OUT_TASK_LIMIT_NOTE));
+        add(ruleMap, rule(AutoTuneTargetType.CRN, "maxOutTask")
+                .minValue(0)
+                .maxValue(10)
+                .maxStep(3)
+                .cooldownMinutes(10));
+        add(ruleMap, rule(AutoTuneTargetType.CRN, "maxInTask")
+                .minValue(0)
+                .maxValue(10)
+                .maxStep(3)
+                .cooldownMinutes(10));
+        add(ruleMap, rule(AutoTuneTargetType.DUAL_CRN, "maxOutTask")
+                .minValue(0)
+                .maxValue(10)
+                .maxStep(3)
+                .cooldownMinutes(10));
+        add(ruleMap, rule(AutoTuneTargetType.DUAL_CRN, "maxInTask")
+                .minValue(0)
+                .maxValue(10)
+                .maxStep(3)
+                .cooldownMinutes(10));
+
         return Collections.unmodifiableMap(ruleMap);
     }
 
-    private static void add(LinkedHashMap<String, Rule> ruleMap,
-                            AutoTuneTargetType targetType,
-                            String targetKey,
-                            Integer minValue,
-                            Integer maxValue,
-                            int maxStep,
-                            int cooldownMinutes,
-                            boolean dynamicMaxValue) {
-        Rule rule = new Rule(targetType, targetKey, minValue, maxValue, maxStep, cooldownMinutes, dynamicMaxValue);
-        ruleMap.put(buildKey(targetType.getCode(), targetKey), rule);
+    private static RuleSpec rule(AutoTuneTargetType targetType, String targetKey) {
+        return new RuleSpec(targetType, targetKey);
+    }
+
+    private static void add(LinkedHashMap<String, Rule> ruleMap, RuleSpec ruleSpec) {
+        Rule rule = ruleSpec.toRule();
+        ruleMap.put(buildKey(rule.getTargetType().getCode(), rule.getTargetKey()), rule);
     }
 
     private static String buildKey(String targetType, String targetKey) {
@@ -59,6 +96,8 @@
         private final int maxStep;
         private final int cooldownMinutes;
         private final boolean dynamicMaxValue;
+        private final String dynamicMaxSource;
+        private final String note;
 
         private Rule(AutoTuneTargetType targetType,
                      String targetKey,
@@ -66,7 +105,9 @@
                      Integer maxValue,
                      int maxStep,
                      int cooldownMinutes,
-                     boolean dynamicMaxValue) {
+                     boolean dynamicMaxValue,
+                     String dynamicMaxSource,
+                     String note) {
             this.targetType = targetType;
             this.targetKey = targetKey;
             this.minValue = minValue;
@@ -74,6 +115,8 @@
             this.maxStep = maxStep;
             this.cooldownMinutes = cooldownMinutes;
             this.dynamicMaxValue = dynamicMaxValue;
+            this.dynamicMaxSource = dynamicMaxSource;
+            this.note = note;
         }
 
         public AutoTuneTargetType getTargetType() {
@@ -103,5 +146,73 @@
         public boolean isDynamicMaxValue() {
             return dynamicMaxValue;
         }
+
+        public String getDynamicMaxSource() {
+            return dynamicMaxSource;
+        }
+
+        public String getNote() {
+            return note;
+        }
+    }
+
+    private static final class RuleSpec {
+        private final AutoTuneTargetType targetType;
+        private final String targetKey;
+        private Integer minValue;
+        private Integer maxValue;
+        private int maxStep;
+        private int cooldownMinutes;
+        private String dynamicMaxSource;
+        private String note = DEFAULT_RULE_NOTE;
+
+        private RuleSpec(AutoTuneTargetType targetType, String targetKey) {
+            this.targetType = targetType;
+            this.targetKey = targetKey;
+        }
+
+        private RuleSpec minValue(Integer minValue) {
+            this.minValue = minValue;
+            return this;
+        }
+
+        private RuleSpec maxValue(Integer maxValue) {
+            this.maxValue = maxValue;
+            return this;
+        }
+
+        private RuleSpec maxStep(int maxStep) {
+            this.maxStep = maxStep;
+            return this;
+        }
+
+        private RuleSpec cooldownMinutes(int cooldownMinutes) {
+            this.cooldownMinutes = cooldownMinutes;
+            return this;
+        }
+
+        private RuleSpec dynamicMaxSource(String dynamicMaxSource) {
+            this.dynamicMaxSource = dynamicMaxSource;
+            return this;
+        }
+
+        private RuleSpec note(String note) {
+            this.note = note;
+            return this;
+        }
+
+        private Rule toRule() {
+            return new Rule(
+                    targetType,
+                    targetKey,
+                    minValue,
+                    maxValue,
+                    maxStep,
+                    cooldownMinutes,
+                    dynamicMaxSource != null,
+                    dynamicMaxSource,
+                    note
+            );
+        }
     }
 }

--
Gitblit v1.9.1