From c9b1d33979b3972fe6a82fa427b4ba9a20989112 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期三, 24 十二月 2025 18:56:28 +0800
Subject: [PATCH] 新增mqtt相关功能

---
 src/denglu/Denglu.java |  235 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 172 insertions(+), 63 deletions(-)

diff --git a/src/denglu/Denglu.java b/src/denglu/Denglu.java
index 93078df..98117a5 100644
--- a/src/denglu/Denglu.java
+++ b/src/denglu/Denglu.java
@@ -1,6 +1,14 @@
 package denglu;
 
 import homein.WenJianSuo;
+import ui.UIConfig;
+import zhuye.Shouye;
+import gecaoji.Device;
+import chuankou.SerialPortNativeLoader;
+import set.Setsys;
+import udpdell.UDPServer;
+import user.Usrdell;
+import Mqttmessage.Client;
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
@@ -35,7 +43,7 @@
 
     private void initializeTranslations() {
         translations = new HashMap<>();
-        
+
         // 涓枃缈昏瘧
         Map<String, String> zh = new HashMap<>();
         zh.put("username_label", "鐢ㄦ埛鍚嶆垨閭");
@@ -45,7 +53,9 @@
         zh.put("login_button", "鐧诲綍");
         zh.put("no_account", "杩樻病鏈夎处鎴凤紵");
         zh.put("sign_up", "绔嬪嵆娉ㄥ唽");
-        zh.put("app_info", "AutoMow 漏 2023 - 鏅鸿兘鍓茶崏瑙e喅鏂规");
+        zh.put("app_title", "鏅鸿兘鍓茶崏绯荤粺");
+        zh.put("window_title", "鏅鸿兘鍓茶崏绯荤粺 - 鐧诲綍");
+        zh.put("app_info", "鏅鸿兘鍓茶崏绯荤粺 漏 2023 - 鏅鸿兘鍓茶崏瑙e喅鏂规");
         zh.put("register_button", "娉ㄥ唽鏂拌处鎴�");
         translations.put("zh", zh);
 
@@ -58,7 +68,9 @@
         en.put("login_button", "Sign In");
         en.put("no_account", "Don't have an account?");
         en.put("sign_up", "Sign Up");
-        en.put("app_info", "AutoMow 漏 2023 - Smart Mowing Solutions");
+        en.put("app_title", "Smart Mowing System");
+        en.put("window_title", "Smart Mowing System - Login");
+        en.put("app_info", "Smart Mowing System 漏 2023 - Intelligent Lawn Care");
         en.put("register_button", "Create New Account");
         translations.put("en", en);
 
@@ -71,7 +83,9 @@
         es.put("login_button", "Iniciar Sesi贸n");
         es.put("no_account", "驴No tienes una cuenta?");
         es.put("sign_up", "Reg铆strate");
-        es.put("app_info", "AutoMow 漏 2023 - Soluciones de Corte Inteligente");
+        es.put("app_title", "Sistema de Corte Inteligente");
+        es.put("window_title", "Sistema de Corte Inteligente - Iniciar Sesi贸n");
+        es.put("app_info", "Sistema de Corte Inteligente 漏 2023 - Soluciones Inteligentes");
         es.put("register_button", "Crear Nueva Cuenta");
         translations.put("es", es);
 
@@ -84,8 +98,10 @@
         fr.put("login_button", "Se connecter");
         fr.put("no_account", "Vous n'avez pas de compte?");
         fr.put("sign_up", "S'inscrire");
-        fr.put("app_info", "AutoMow 漏 2023 - Solutions de Tonte Intelligente");
-        es.put("register_button", "Cr茅er un Nouveau Compte");
+        fr.put("app_title", "Syst猫me de Tonte Intelligent");
+        fr.put("window_title", "Syst猫me de Tonte Intelligent - Connexion");
+        fr.put("app_info", "Syst猫me de Tonte Intelligent 漏 2023 - Solutions de Tonte");
+        fr.put("register_button", "Cr茅er un Nouveau Compte");
         translations.put("fr", fr);
 
         // 寰疯缈昏瘧
@@ -97,18 +113,20 @@
         de.put("login_button", "Anmelden");
         de.put("no_account", "Sie haben noch kein Konto?");
         de.put("sign_up", "Registrieren");
-        de.put("app_info", "AutoMow 漏 2023 - Intelligente M盲h-L枚sungen");
+        de.put("app_title", "Intelligentes M盲hsystem");
+        de.put("window_title", "Intelligentes M盲hsystem - Anmeldung");
+        de.put("app_info", "Intelligentes M盲hsystem 漏 2023 - M盲hl枚sungen");
         de.put("register_button", "Neues Konto Erstellen");
         translations.put("de", de);
     }
 
     private void initializeUI() {
-        setTitle("AutoMow - 鐧诲綍");
+        setTitle(getTranslationValue(currentLanguageCode, "window_title", "绯荤粺鐧诲綍"));
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         // 璁剧疆绱у噾甯冨眬灏哄
-        setSize(320, 520);
-        setMinimumSize(new Dimension(300, 500));
+        setSize(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT);
+        setMinimumSize(new Dimension(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT));
         setResizable(false);
         
         setupCompactLayout();
@@ -159,11 +177,6 @@
         ));
         
         // 鐧诲綍鏍囬
-        JLabel loginTitle = new JLabel("AutoMow", SwingConstants.CENTER);
-        loginTitle.setFont(new Font("PingFang SC", Font.BOLD, 24));
-        loginTitle.setForeground(THEME_COLOR);
-        loginTitle.setAlignmentX(Component.CENTER_ALIGNMENT);
-        
         // 鐢ㄦ埛鍚嶈緭鍏�
         usernameLabel = new JLabel("鐢ㄦ埛鍚嶆垨閭", SwingConstants.CENTER);
         usernameLabel.setFont(new Font("PingFang SC", Font.BOLD, 13));
@@ -212,7 +225,7 @@
         rememberForgotPanel.add(rememberMe, BorderLayout.WEST);
         rememberForgotPanel.add(forgotPassword, BorderLayout.EAST);
         
-        // 鐧诲綍鎸夐挳 - 姘村钩灞呬腑锛岄暱搴︿笌鏂囨湰妗嗙浉鍚�
+        // 鐧诲綍鎸夐挳 - 姘村钩灞呬腑锛岄暱搴︿笌鏂囨湰妗嗗搴︿繚鎸佺浉杩�
         JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
         buttonPanel.setBackground(Color.WHITE);
         buttonPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 50));
@@ -221,8 +234,8 @@
         loginButton.setBackground(THEME_COLOR);
         loginButton.setForeground(Color.WHITE);
         loginButton.setFont(new Font("PingFang SC", Font.BOLD, 15));
-        // 璁剧疆鐧诲綍鎸夐挳闀垮害涓庢枃鏈鐩稿悓
-        loginButton.setPreferredSize(new Dimension(260, 42));
+        // 璁剧疆鐧诲綍鎸夐挳闀垮害鎺ヨ繎鏂囨湰妗嗗搴�
+        loginButton.setPreferredSize(new Dimension(300, 48));
         loginButton.setBorderPainted(false);
         loginButton.setFocusPainted(false);
         loginButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
@@ -248,7 +261,7 @@
         registerButton.setBackground(Color.WHITE);
         registerButton.setForeground(THEME_COLOR);
         registerButton.setFont(new Font("PingFang SC", Font.BOLD, 14));
-        registerButton.setPreferredSize(new Dimension(140, 38));
+        registerButton.setPreferredSize(new Dimension(180, 42));
         registerButton.setBorder(BorderFactory.createCompoundBorder(
             BorderFactory.createLineBorder(THEME_COLOR),
             BorderFactory.createEmptyBorder(5, 15, 5, 15)
@@ -282,12 +295,11 @@
         signupPanel.add(signupLink);
         
         // 缁勮琛ㄥ崟
-        formPanel.add(loginTitle);
-        formPanel.add(Box.createRigidArea(new Dimension(0, 25)));
+    formPanel.add(Box.createRigidArea(new Dimension(0, 15)));
         formPanel.add(usernameLabel);
         formPanel.add(Box.createRigidArea(new Dimension(0, 5)));
         formPanel.add(usernameField);
-        formPanel.add(Box.createRigidArea(new Dimension(0, 15)));
+    formPanel.add(Box.createRigidArea(new Dimension(0, 30)));
         formPanel.add(passwordLabel);
         formPanel.add(Box.createRigidArea(new Dimension(0, 5)));
         formPanel.add(passwordField);
@@ -307,7 +319,9 @@
         JPanel appInfoPanel = new JPanel();
         appInfoPanel.setBackground(Color.WHITE);
         appInfoPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 5, 0));
-        appInfoLabel = new JLabel("AutoMow 漏 2023 - 鏅鸿兘鍓茶崏瑙e喅鏂规");
+        appInfoLabel = new JLabel(
+            getTranslationValue(currentLanguageCode, "app_info", "鏅鸿兘鍓茶崏绯荤粺 漏 2023")
+        );
         appInfoLabel.setFont(new Font("PingFang SC", Font.PLAIN, 10));
         appInfoLabel.setForeground(new Color(150, 150, 150));
         appInfoPanel.add(appInfoLabel);
@@ -331,10 +345,7 @@
         // 蹇樿瀵嗙爜鐐瑰嚮浜嬩欢
         forgotPassword.addMouseListener(new MouseAdapter() {
             public void mouseClicked(MouseEvent e) {
-                JOptionPane.showMessageDialog(Denglu.this, 
-                    "璇疯仈绯荤鐞嗗憳閲嶇疆瀵嗙爜", 
-                    "蹇樿瀵嗙爜", 
-                    JOptionPane.INFORMATION_MESSAGE);
+                new user.ZhaohuiMima(Denglu.this).setVisible(true);
             }
         });
         
@@ -356,20 +367,20 @@
         
         if (translation != null) {
             // 鏇存柊鎵�鏈夌晫闈㈡枃鏈�
-            usernameLabel.setText(translation.get("username_label"));
-            passwordLabel.setText(translation.get("password_label"));
-            rememberMe.setText(translation.get("remember_me"));
-            forgotPassword.setText(translation.get("forgot_password"));
-            loginButton.setText(translation.get("login_button"));
-            noAccountLabel.setText(translation.get("no_account"));
-            signupLink.setText(translation.get("sign_up"));
-            appInfoLabel.setText(translation.get("app_info"));
-            
+            usernameLabel.setText(getTranslationValue(langCode, "username_label", usernameLabel.getText()));
+            passwordLabel.setText(getTranslationValue(langCode, "password_label", passwordLabel.getText()));
+            rememberMe.setText(getTranslationValue(langCode, "remember_me", rememberMe.getText()));
+            forgotPassword.setText(getTranslationValue(langCode, "forgot_password", forgotPassword.getText()));
+            loginButton.setText(getTranslationValue(langCode, "login_button", loginButton.getText()));
+            noAccountLabel.setText(getTranslationValue(langCode, "no_account", noAccountLabel.getText()));
+            signupLink.setText(getTranslationValue(langCode, "sign_up", signupLink.getText()));
+            appInfoLabel.setText(getTranslationValue(langCode, "app_info", appInfoLabel.getText()));
+
             // 鏇存柊娉ㄥ唽鎸夐挳鏂囨湰
-            registerButton.setText(translation.get("register_button"));
-            
+            registerButton.setText(getTranslationValue(langCode, "register_button", registerButton.getText()));
+
             // 鏇存柊绐楀彛鏍囬
-            setTitle("AutoMow - " + (langCode.equals("zh") ? "鐧诲綍" : "Login"));
+            setTitle(getTranslationValue(langCode, "window_title", getTitle()));
             
             // 鏇存柊璇█璁剧疆鍒版枃浠�
             updateLanguagePreference(langCode);
@@ -387,6 +398,17 @@
         }
     }
 
+    private String getTranslationValue(String languageCode, String key, String defaultValue) {
+        Map<String, String> translation = translations.get(languageCode);
+        if (translation != null) {
+            String value = translation.get(key);
+            if (value != null && !value.trim().isEmpty()) {
+                return value;
+            }
+        }
+        return defaultValue;
+    }
+
     private void updateLanguagePreference(String languageCode) {
         String currentLanguage = UserChuShiHua.getProperty("language");
         if (!languageCode.equals(currentLanguage)) {
@@ -411,10 +433,17 @@
             usernameField.setText("");
         }
         
-        // 濡傛灉瀵嗙爜涓�-1锛屾竻绌哄瘑鐮佹
-        String savedPassword = UserChuShiHua.getProperty("password");
-        if (savedPassword != null && savedPassword.equals("-1")) {
-            passwordField.setText("");
+        // 鍔犺浇璁颁綇鎴戠姸鎬�
+        String rememberPwd = UserChuShiHua.getProperty("rememberPassword");
+        boolean isRemember = "1".equals(rememberPwd);
+        rememberMe.setSelected(isRemember);
+
+        // 濡傛灉璁颁綇鎴戣閫変腑锛屽~鍏呭瘑鐮�
+        if (isRemember) {
+             String savedPassword = UserChuShiHua.getProperty("password");
+             if (savedPassword != null && !savedPassword.equals("-1")) {
+                 passwordField.setText(savedPassword);
+             }
         }
     }
 
@@ -454,20 +483,18 @@
         
         // 楠岃瘉鐢ㄦ埛鍚嶅拰瀵嗙爜
         if (validateLogin(username, password)) {
-            JOptionPane.showMessageDialog(this, 
-                "鐧诲綍鎴愬姛锛�", 
-                "鎴愬姛", 
-                JOptionPane.INFORMATION_MESSAGE);
-            
             // 鏇存柊鏈�鍚庣櫥褰曟椂闂�
             UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
             
-            // 濡傛灉璁颁綇鎴戣閫変腑锛屼繚瀛樼敤鎴峰悕
+            // 淇濆瓨璁颁綇鎴戠姸鎬�
             if (rememberMe.isSelected()) {
+                UserChuShiHua.updateProperty("rememberPassword", "1");
                 UserChuShiHua.updateProperty("userName", username);
+            } else {
+                UserChuShiHua.updateProperty("rememberPassword", "0");
             }
             
-            // 杩欓噷鍙互娣诲姞璺宠浆鍒颁富鐣岄潰鐨勪唬鐮�
+            // 鍏抽棴鐧诲綍绐楀彛骞舵墦寮�棣栭〉
             openMainApplication();
             
         } else {
@@ -494,16 +521,35 @@
     }
 
     private void openMainApplication() {
-        // 杩欓噷鍙互鎵撳紑涓诲簲鐢ㄧ▼搴忕獥鍙�
-        System.out.println("鐧诲綍鎴愬姛锛屽噯澶囨墦寮�涓诲簲鐢ㄧ▼搴�...");
-        
-        // 婕旂ず锛�3绉掑悗鍏抽棴鐧诲綍绐楀彛
-        Timer timer = new Timer(1000, e -> {
-            dispose();
-            System.out.println("鐧诲綍绐楀彛宸插叧闂紝涓诲簲鐢ㄧ▼搴忓凡鍚姩");
+        launchMainApp();
+        dispose();
+    }
+
+    public static void launchMainApp() {
+        System.out.println("鍑嗗鎵撳紑涓诲簲鐢ㄧ▼搴�...");
+
+        SwingUtilities.invokeLater(() -> {
+            JFrame mainFrame = new JFrame("鏅鸿兘鍓茶崏绯荤粺");
+            mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+
+            Shouye homePanel = new Shouye();
+            mainFrame.setContentPane(homePanel);
+
+            // 璁剧疆涓庣櫥褰曢〉闈㈢浉鍚岀殑灏哄
+            mainFrame.setSize(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT);
+            mainFrame.setMinimumSize(new Dimension(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT));
+            mainFrame.setResizable(false);
+            mainFrame.setLocationRelativeTo(null);
+            mainFrame.setVisible(true);
+
+            System.out.println("涓诲簲鐢ㄧ▼搴忓凡鍚姩");
+            
+            // 鍚姩鍚庤繛鎺QTT
+            new Thread(() -> {
+                System.out.println("姝e湪杩炴帴MQTT鏈嶅姟鍣�...");
+                Client.lianjiemqqt();
+            }).start();
         });
-        timer.setRepeats(false);
-        timer.start();
     }
     
     // 娉ㄥ唽绐楀彛鏂规硶
@@ -512,10 +558,73 @@
         RegistrationFrame registerFrame = new RegistrationFrame(this, currentLanguageCode);
         registerFrame.setVisible(true);
     }
-
+    
+    /**
+     * 绋嬪簭鍏ュ彛鐐�
+     * 闆嗘垚Homein绫荤殑鍒濆鍖栭�昏緫
+     */
     public static void main(String[] args) {
-        SwingUtilities.invokeLater(() -> {
-            new Denglu().setVisible(true);
-        });
+        // 妫�鏌ョ▼搴忔槸鍚﹀凡缁忚繍琛�
+        if (WenJianSuo.isAlreadyRunning()) {
+            JOptionPane.showMessageDialog(null, 
+                "绋嬪簭宸茬粡鍦ㄨ繍琛屼腑锛乗n涓嶈兘鍚屾椂鎵撳紑澶氫釜瀹炰緥銆�", 
+                "璀﹀憡", 
+                JOptionPane.WARNING_MESSAGE);
+            System.exit(0);
+            return;
+        }
+        
+        // 娣诲姞鍏抽棴閽╁瓙锛岀‘淇濈▼搴忛��鍑烘椂閲婃斁閿�
+        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+            WenJianSuo.releaseLock();
+        }));
+
+        try {
+            SerialPortNativeLoader.ensureLibraryPresent();
+            // 鍒濆鍖栨暟鎹�
+            UserChuShiHua.initialize();
+            Usrdell.initialize(); // 鍒濆鍖栫敤鎴峰睘鎬�
+
+            Setsys setsys = new Setsys();
+            setsys.initializeFromProperties();
+            Device.initializeActiveDevice(setsys.getMowerId());
+
+            UDPServer.startAsync();//鍚姩鏁版嵁鎺ユ敹绾跨▼
+            
+            // 鏄剧ず鍒濆鏁版嵁
+            System.out.println("鍒濆鐢ㄦ埛鍚�: " + UserChuShiHua.getProperty("userName"));
+            System.out.println("鍒濆瀵嗙爜: " + UserChuShiHua.getProperty("password"));
+            
+            // 妫�鏌ユ槸鍚﹁浣忓瘑鐮侊紝濡傛灉鏄垯鐩存帴杩涘叆涓婚〉
+            String rememberPwd = UserChuShiHua.getProperty("rememberPassword");
+            if ("1".equals(rememberPwd)) {
+                String storedUser = UserChuShiHua.getProperty("userName");
+                if (storedUser != null && !storedUser.equals("-1")) {
+                    launchMainApp();
+                    return;
+                }
+            }
+            
+            // 鍚姩鐧诲綍鐣岄潰
+            EventQueue.invokeLater(() -> {
+                try {
+                    new Denglu().setVisible(true);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    JOptionPane.showMessageDialog(null, 
+                        "鐧诲綍鐣岄潰鍚姩澶辫触: " + e.getMessage(), 
+                        "閿欒", 
+                        JOptionPane.ERROR_MESSAGE);
+                }
+            });
+            
+        } catch (Exception e) {
+            e.printStackTrace();
+            JOptionPane.showMessageDialog(null, 
+                "绋嬪簭鍚姩澶辫触: " + e.getMessage(), 
+                "閿欒", 
+                JOptionPane.ERROR_MESSAGE);
+        }
     }
+   
 }
\ No newline at end of file

--
Gitblit v1.10.0