Parcourir la source

切换服务器IP

wangxichen il y a 3 jours
Parent
commit
55b5d972e2

+ 2 - 1
config/project_config.json

@@ -3,6 +3,7 @@
 	"deviceIp":"192.168.0.6",
 	"deviceIp":"192.168.0.6",
 	"stationCodeOverride":"OP220A",
 	"stationCodeOverride":"OP220A",
 	"lineSnOverride":"XT",
 	"lineSnOverride":"XT",
+	"serverIpOverride":"192.168.113.99",
 	"uiOverride":{
 	"uiOverride":{
 		"deviceRow1Enabled":true,
 		"deviceRow1Enabled":true,
 		"deviceRow1Label":"M5",
 		"deviceRow1Label":"M5",
@@ -15,5 +16,5 @@
 		"prod_params":true,
 		"prod_params":true,
 		"bottom_plate":false
 		"bottom_plate":false
 	},
 	},
-	"lastModified":1778225043639
+	"lastModified":1778235188799
 }
 }

+ 5 - 0
src/com/mes/App.java

@@ -40,6 +40,11 @@ public class App {
                 log.info("应用工位号覆盖: {} -> {}", first.getCode(), codeOverride);
                 log.info("应用工位号覆盖: {} -> {}", first.getCode(), codeOverride);
                 first.setCode(codeOverride);
                 first.setCode(codeOverride);
             }
             }
+            String serverIpOverride = projectConfig.getServerIpOverride();
+            if (serverIpOverride != null && !serverIpOverride.isEmpty()) {
+                log.info("应用服务器IP覆盖: {} -> {}", config.getServerIp(), serverIpOverride);
+                config.setServerIp(serverIpOverride);
+            }
             String runtimeIp = projectConfig.getDeviceIp();
             String runtimeIp = projectConfig.getDeviceIp();
             if (runtimeIp != null && !runtimeIp.isEmpty()) {
             if (runtimeIp != null && !runtimeIp.isEmpty()) {
                 for (StationConfig.DeviceConnection conn : config.getDeviceConnections()) {
                 for (StationConfig.DeviceConnection conn : config.getDeviceConnections()) {

+ 28 - 0
src/com/mes/core/ProjectConfigManager.java

@@ -90,6 +90,7 @@ public class ProjectConfigManager {
     private String deviceIp;
     private String deviceIp;
     private String stationCodeOverride;   // 覆盖 yaml 的 stations[0].code
     private String stationCodeOverride;   // 覆盖 yaml 的 stations[0].code
     private String lineSnOverride;        // 覆盖 yaml 的 line_sn
     private String lineSnOverride;        // 覆盖 yaml 的 line_sn
+    private String serverIpOverride;      // 覆盖 yaml 的 server.ip
     private final Map<String, Boolean> featuresOverride = new LinkedHashMap<>();
     private final Map<String, Boolean> featuresOverride = new LinkedHashMap<>();
     // 设备信息行覆盖:是否启用 + label(寄存器地址不在UI改)
     // 设备信息行覆盖:是否启用 + label(寄存器地址不在UI改)
     private Boolean deviceRow1EnabledOverride;
     private Boolean deviceRow1EnabledOverride;
@@ -144,6 +145,10 @@ public class ProjectConfigManager {
             if (ls != null && !ls.trim().isEmpty()) {
             if (ls != null && !ls.trim().isEmpty()) {
                 lineSnOverride = ls.trim();
                 lineSnOverride = ls.trim();
             }
             }
+            String sIp = json.getString("serverIpOverride");
+            if (sIp != null && !sIp.trim().isEmpty()) {
+                serverIpOverride = sIp.trim();
+            }
             // 设备信息行
             // 设备信息行
             JSONObject uiObj = json.getJSONObject("uiOverride");
             JSONObject uiObj = json.getJSONObject("uiOverride");
             if (uiObj != null) {
             if (uiObj != null) {
@@ -170,6 +175,7 @@ public class ProjectConfigManager {
             root.put("deviceIp", deviceIp);
             root.put("deviceIp", deviceIp);
             if (stationCodeOverride != null) root.put("stationCodeOverride", stationCodeOverride);
             if (stationCodeOverride != null) root.put("stationCodeOverride", stationCodeOverride);
             if (lineSnOverride != null) root.put("lineSnOverride", lineSnOverride);
             if (lineSnOverride != null) root.put("lineSnOverride", lineSnOverride);
+            if (serverIpOverride != null) root.put("serverIpOverride", serverIpOverride);
             JSONObject uiObj = new JSONObject();
             JSONObject uiObj = new JSONObject();
             if (deviceRow1EnabledOverride != null) uiObj.put("deviceRow1Enabled", deviceRow1EnabledOverride);
             if (deviceRow1EnabledOverride != null) uiObj.put("deviceRow1Enabled", deviceRow1EnabledOverride);
             if (deviceRow1LabelOverride != null)   uiObj.put("deviceRow1Label", deviceRow1LabelOverride);
             if (deviceRow1LabelOverride != null)   uiObj.put("deviceRow1Label", deviceRow1LabelOverride);
@@ -311,6 +317,21 @@ public class ProjectConfigManager {
 
 
     public String getStationCodeOverride() { return stationCodeOverride; }
     public String getStationCodeOverride() { return stationCodeOverride; }
     public String getLineSnOverride() { return lineSnOverride; }
     public String getLineSnOverride() { return lineSnOverride; }
+    public String getServerIpOverride() { return serverIpOverride; }
+
+    /**
+     * 设置服务器(MES)IP 覆盖
+     */
+    public void setServerIpOverride(String ip) {
+        if (ip == null) return;
+        ip = ip.trim();
+        if (ip.isEmpty()) return;
+        if (ip.equalsIgnoreCase(this.serverIpOverride)) return;
+        this.serverIpOverride = ip;
+        save();
+        log.info("[ProjectConfig] 修改服务器IP: {}", ip);
+        fireServerIpChanged(ip);
+    }
 
 
     public Boolean getDeviceRow1EnabledOverride() { return deviceRow1EnabledOverride; }
     public Boolean getDeviceRow1EnabledOverride() { return deviceRow1EnabledOverride; }
     public String  getDeviceRow1LabelOverride()   { return deviceRow1LabelOverride; }
     public String  getDeviceRow1LabelOverride()   { return deviceRow1LabelOverride; }
@@ -374,6 +395,7 @@ public class ProjectConfigManager {
     public interface Listener {
     public interface Listener {
         default void onProjectChanged(Project project) {}
         default void onProjectChanged(Project project) {}
         default void onDeviceIpChanged(String newIp) {}
         default void onDeviceIpChanged(String newIp) {}
+        default void onServerIpChanged(String newIp) {}
         default void onFeaturesChanged() {}
         default void onFeaturesChanged() {}
         default void onStationChanged() {}
         default void onStationChanged() {}
         default void onUiChanged() {}
         default void onUiChanged() {}
@@ -399,6 +421,12 @@ public class ProjectConfigManager {
         }
         }
     }
     }
 
 
+    private void fireServerIpChanged(String ip) {
+        for (Listener l : new ArrayList<>(listeners)) {
+            try { l.onServerIpChanged(ip); } catch (Exception e) { log.warn("listener error", e); }
+        }
+    }
+
     private void fireFeaturesChanged() {
     private void fireFeaturesChanged() {
         for (Listener l : new ArrayList<>(listeners)) {
         for (Listener l : new ArrayList<>(listeners)) {
             try { l.onFeaturesChanged(); } catch (Exception e) { log.warn("listener error", e); }
             try { l.onFeaturesChanged(); } catch (Exception e) { log.warn("listener error", e); }

+ 5 - 0
src/com/mes/core/StationConfig.java

@@ -555,6 +555,11 @@ public class StationConfig {
         return serverIp;
         return serverIp;
     }
     }
 
 
+    /** 运行时覆盖服务器IP */
+    public void setServerIp(String serverIp) {
+        this.serverIp = serverIp;
+    }
+
     public int getTcpPort() {
     public int getTcpPort() {
         return tcpPort;
         return tcpPort;
     }
     }

+ 39 - 0
src/com/mes/ui/MainFrame.java

@@ -83,6 +83,7 @@ public class MainFrame extends JFrame {
     private JMenuItem switchProjectItem;
     private JMenuItem switchProjectItem;
     private JMenuItem switchStationItem;
     private JMenuItem switchStationItem;
     private JMenuItem deviceIpItem;
     private JMenuItem deviceIpItem;
+    private JMenuItem serverIpItem;
     private JMenuItem featuresItem;
     private JMenuItem featuresItem;
     private JMenuItem deviceInfoUiItem;
     private JMenuItem deviceInfoUiItem;
     // 界面布局子菜单(mes123解锁后显示)
     // 界面布局子菜单(mes123解锁后显示)
@@ -247,6 +248,12 @@ public class MainFrame extends JFrame {
         deviceIpItem.addActionListener(e -> showChangeDeviceIpDialog());
         deviceIpItem.addActionListener(e -> showChangeDeviceIpDialog());
         projectDeviceMenu.add(deviceIpItem);
         projectDeviceMenu.add(deviceIpItem);
 
 
+        serverIpItem = new JMenuItem();
+        serverIpItem.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource("/resources/image/bg/menu_setting.png"))));
+        serverIpItem.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        serverIpItem.addActionListener(e -> showChangeServerIpDialog());
+        projectDeviceMenu.add(serverIpItem);
+
         projectDeviceMenu.addSeparator();
         projectDeviceMenu.addSeparator();
 
 
         featuresItem = new JMenuItem("工艺流程配置");
         featuresItem = new JMenuItem("工艺流程配置");
@@ -1369,6 +1376,35 @@ public class MainFrame extends JFrame {
     }
     }
 
 
     /**
     /**
+     * 修改MES服务器IP(修改完提示重启生效,避免重建TCP客户端的复杂逻辑)
+     */
+    private void showChangeServerIpDialog() {
+        com.mes.core.ProjectConfigManager pc = com.mes.core.ProjectConfigManager.getInstance();
+        String currentIp = config.getServerIp();
+
+        String input = (String) JOptionPane.showInputDialog(this,
+                "请输入MES服务器IP:",
+                "修改MES服务器IP",
+                JOptionPane.PLAIN_MESSAGE,
+                null, null, currentIp);
+        if (input == null) return;
+        input = input.trim();
+        if (input.isEmpty()) return;
+        if (!isValidIp(input)) {
+            JOptionPane.showMessageDialog(this, "IP格式不正确: " + input,
+                    "错误", JOptionPane.ERROR_MESSAGE);
+            return;
+        }
+        if (input.equals(currentIp)) return;
+
+        pc.setServerIpOverride(input);
+        refreshMenuTexts();
+        JOptionPane.showMessageDialog(this,
+                "MES服务器IP已保存为:" + input + "\n请重启程序生效",
+                "修改成功", JOptionPane.INFORMATION_MESSAGE);
+    }
+
+    /**
      * 简单的IPv4格式校验
      * 简单的IPv4格式校验
      */
      */
     private boolean isValidIp(String ip) {
     private boolean isValidIp(String ip) {
@@ -1404,6 +1440,9 @@ public class MainFrame extends JFrame {
         if (deviceIpItem != null) {
         if (deviceIpItem != null) {
             deviceIpItem.setText("修改拉铆设备IP (当前: " + pc.getDeviceIp() + ")");
             deviceIpItem.setText("修改拉铆设备IP (当前: " + pc.getDeviceIp() + ")");
         }
         }
+        if (serverIpItem != null) {
+            serverIpItem.setText("修改MES服务器IP (当前: " + config.getServerIp() + ")");
+        }
     }
     }
 
 
     /**
     /**