From 913a3b7409e08fd239a65ff7afabefe95b51865a Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 26 十二月 2025 19:44:23 +0800
Subject: [PATCH] 优化了异形有障碍物算法

---
 src/denglu/Denglu.java |  191 ++++++++++++++++++++++++++++++++++-------------
 1 files changed, 137 insertions(+), 54 deletions(-)

diff --git a/src/denglu/Denglu.java b/src/denglu/Denglu.java
index d1af97c..4a756c3 100644
--- a/src/denglu/Denglu.java
+++ b/src/denglu/Denglu.java
@@ -8,6 +8,8 @@
 import set.Setsys;
 import udpdell.UDPServer;
 import user.Usrdell;
+import Mqttmessage.Client;
+import login.LoginVerifier;
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
@@ -156,17 +158,11 @@
         // 涓昏〃鍗曞尯鍩�
         JPanel formPanel = createFormPanel();
         
-        // 鍖呰鍦ㄦ粴鍔ㄧ獥鏍间腑锛屼互闃插唴瀹规樉绀轰笉鍏�
-        JScrollPane scrollPane = new JScrollPane(formPanel);
-        scrollPane.setBorder(null);
-        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        scrollPane.getVerticalScrollBar().setUnitIncrement(16);
-        
         // 搴曢儴搴旂敤淇℃伅
         JPanel appInfoPanel = createAppInfoPanel();
         
         mainPanel.add(topPanel, BorderLayout.NORTH);
-        mainPanel.add(scrollPane, BorderLayout.CENTER);
+        mainPanel.add(formPanel, BorderLayout.CENTER);
         mainPanel.add(appInfoPanel, BorderLayout.SOUTH);
         
         add(mainPanel);
@@ -350,10 +346,7 @@
         // 蹇樿瀵嗙爜鐐瑰嚮浜嬩欢
         forgotPassword.addMouseListener(new MouseAdapter() {
             public void mouseClicked(MouseEvent e) {
-                JOptionPane.showMessageDialog(Denglu.this, 
-                    "璇疯仈绯荤鐞嗗憳閲嶇疆瀵嗙爜", 
-                    "蹇樿瀵嗙爜", 
-                    JOptionPane.INFORMATION_MESSAGE);
+                new user.ZhaohuiMima(Denglu.this).setVisible(true);
             }
         });
         
@@ -446,11 +439,17 @@
         boolean isRemember = "1".equals(rememberPwd);
         rememberMe.setSelected(isRemember);
 
-        // 濡傛灉璁颁綇鎴戣閫変腑锛屽~鍏呭瘑鐮�
+        // 濡傛灉璁颁綇鎴戣閫変腑锛屽~鍏呭瘑鐮佸苟鑷姩鐧诲綍锛堝欢杩熸墽琛岋紝纭繚绐楀彛宸叉樉绀猴級
         if (isRemember) {
              String savedPassword = UserChuShiHua.getProperty("password");
-             if (savedPassword != null && !savedPassword.equals("-1")) {
+             String savedEmail = UserChuShiHua.getProperty("email");
+             if (savedPassword != null && !savedPassword.equals("-1") && 
+                 savedEmail != null && !savedEmail.equals("-1")) {
                  passwordField.setText(savedPassword);
+                 // 寤惰繜鎵ц鑷姩鐧诲綍锛岀‘淇濈獥鍙e凡缁忔樉绀�
+                 SwingUtilities.invokeLater(() -> {
+                     performAutoLogin(savedEmail, savedPassword);
+                 });
              }
         }
     }
@@ -467,11 +466,11 @@
     }
 
     private void performLogin() {
-        String username = usernameField.getText().trim();
+        String usernameOrEmail = usernameField.getText().trim();
         String password = new String(passwordField.getPassword()).trim();
         
         // 杈撳叆楠岃瘉
-        if (username.isEmpty()) {
+        if (usernameOrEmail.isEmpty()) {
             JOptionPane.showMessageDialog(this, 
                 "璇疯緭鍏ョ敤鎴峰悕鎴栭偖绠�", 
                 "杈撳叆閿欒", 
@@ -489,47 +488,126 @@
             return;
         }
         
-        // 楠岃瘉鐢ㄦ埛鍚嶅拰瀵嗙爜
-        if (validateLogin(username, password)) {
-            // 鏇存柊鏈�鍚庣櫥褰曟椂闂�
-            UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
-            
-            // 淇濆瓨璁颁綇鎴戠姸鎬�
-            if (rememberMe.isSelected()) {
-                UserChuShiHua.updateProperty("rememberPassword", "1");
-                UserChuShiHua.updateProperty("userName", username);
-            } else {
-                UserChuShiHua.updateProperty("rememberPassword", "0");
+        // 鑾峰彇閭鍦板潃锛堝鏋滆緭鍏ョ殑鏄敤鎴峰悕锛屼粠閰嶇疆鏂囦欢涓幏鍙栧搴旂殑閭锛�
+        String email = getEmailFromInput(usernameOrEmail);
+        
+        // 绂佺敤鐧诲綍鎸夐挳锛岄槻姝㈤噸澶嶇偣鍑�
+        loginButton.setEnabled(false);
+        
+        // 鍦ㄦ柊绾跨▼涓皟鐢ˋPI锛岄伩鍏嶉樆濉濽I
+        new Thread(() -> {
+            try {
+                // 璋冪敤鐧诲綍楠岃瘉API
+                LoginVerifier.LoginVerifyResponse response = LoginVerifier.verifyLogin(email, password);
+                
+                // 鍦‥DT绾跨▼涓洿鏂癠I
+                SwingUtilities.invokeLater(() -> {
+                    loginButton.setEnabled(true);
+                    
+                    if (response.isSuccess()) {
+                        // 鐧诲綍鎴愬姛
+                        // 鏇存柊鏈�鍚庣櫥褰曟椂闂�
+                        UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
+                        
+                        // 淇濆瓨璁颁綇鎴戠姸鎬�
+                        if (rememberMe.isSelected()) {
+                            UserChuShiHua.updateProperty("rememberPassword", "1");
+                            UserChuShiHua.updateProperty("userName", usernameOrEmail);
+                            UserChuShiHua.updateProperty("email", email);
+                            UserChuShiHua.updateProperty("password", password);
+                        } else {
+                            UserChuShiHua.updateProperty("rememberPassword", "0");
+                        }
+                        
+                        // 鍏抽棴鐧诲綍绐楀彛骞舵墦寮�棣栭〉
+                        openMainApplication();
+                    } else {
+                        // 鐧诲綍澶辫触锛屾樉绀洪敊璇俊鎭�
+                        String errorMessage = response.getMessage() != null ? 
+                            response.getMessage() : "鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒锛�";
+                        JOptionPane.showMessageDialog(this, 
+                            errorMessage, 
+                            "鐧诲綍澶辫触", 
+                            JOptionPane.ERROR_MESSAGE);
+                        passwordField.setText("");
+                        passwordField.requestFocus();
+                    }
+                });
+            } catch (Exception e) {
+                // 寮傚父澶勭悊锛屾仮澶嶆寜閽苟鏄剧ず閿欒
+                SwingUtilities.invokeLater(() -> {
+                    loginButton.setEnabled(true);
+                    JOptionPane.showMessageDialog(this, 
+                        "鐧诲綍鏃跺彂鐢熼敊璇�: " + e.getMessage(), 
+                        "閿欒", 
+                        JOptionPane.ERROR_MESSAGE);
+                    passwordField.setText("");
+                    passwordField.requestFocus();
+                });
             }
-            
-            // 鍏抽棴鐧诲綍绐楀彛骞舵墦寮�棣栭〉
-            openMainApplication();
-            
-        } else {
-            JOptionPane.showMessageDialog(this, 
-                "鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒锛�", 
-                "鐧诲綍澶辫触", 
-                JOptionPane.ERROR_MESSAGE);
-            passwordField.setText("");
-            passwordField.requestFocus();
-        }
+        }).start();
     }
 
-    private boolean validateLogin(String username, String password) {
-        // 浠嶶serChuShiHua鑾峰彇瀛樺偍鐨勭敤鎴锋暟鎹繘琛屾瘮杈�
-        String storedUsername = UserChuShiHua.getProperty("userName");
-        String storedPassword = UserChuShiHua.getProperty("password");
-        String storedEmail = UserChuShiHua.getProperty("email");
-        
-        // 妫�鏌ョ敤鎴峰悕/閭鍜屽瘑鐮佹槸鍚﹀尮閰�
-        boolean usernameMatch = username.equals(storedUsername) || username.equals(storedEmail);
-        boolean passwordMatch = password.equals(storedPassword);
-        
-        return usernameMatch && passwordMatch;
+    // 閭楠岃瘉鏂规硶
+    private boolean isValidEmail(String email) {
+        // 绠�鍗曠殑閭鏍煎紡楠岃瘉
+        String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
+        return email != null && email.matches(emailRegex);
+    }
+    
+    // 鑾峰彇閭鍦板潃锛堝鏋滆緭鍏ョ殑鏄敤鎴峰悕锛屽垯浠庨厤缃枃浠朵腑鑾峰彇閭锛�
+    private String getEmailFromInput(String usernameOrEmail) {
+        // 濡傛灉杈撳叆鐨勬槸閭鏍煎紡锛岀洿鎺ヨ繑鍥�
+        if (isValidEmail(usernameOrEmail)) {
+            return usernameOrEmail;
+        }
+        // 鍚﹀垯锛屼粠閰嶇疆鏂囦欢涓幏鍙栦繚瀛樼殑閭
+        String savedEmail = UserChuShiHua.getProperty("email");
+        if (savedEmail != null && !savedEmail.equals("-1")) {
+            // 妫�鏌ヨ緭鍏ョ殑鐢ㄦ埛鍚嶆槸鍚﹀尮閰嶄繚瀛樼殑鐢ㄦ埛鍚�
+            String savedUsername = UserChuShiHua.getProperty("userName");
+            if (usernameOrEmail.equals(savedUsername)) {
+                return savedEmail;
+            }
+        }
+        // 濡傛灉鎵句笉鍒伴偖绠憋紝杩斿洖杈撳叆鐨勫瓧绗︿覆锛堝彲鑳芥槸閭鏍煎紡浣嗛獙璇佸け璐ワ紝鎴栬�呯敤鎴峰悕涓嶅瓨鍦級
+        return usernameOrEmail;
+    }
+    
+    // 鑷姩鐧诲綍锛堜粠閰嶇疆鏂囦欢璇诲彇閭鍜屽瘑鐮侊級
+    private void performAutoLogin(String email, String password) {
+        // 鍦ㄦ柊绾跨▼涓皟鐢ˋPI锛岄伩鍏嶉樆濉濽I
+        new Thread(() -> {
+            try {
+                LoginVerifier.LoginVerifyResponse response = LoginVerifier.verifyLogin(email, password);
+                
+                SwingUtilities.invokeLater(() -> {
+                    if (response.isSuccess()) {
+                        // 鐧诲綍鎴愬姛锛岃烦杞埌涓婚〉
+                        openMainApplication();
+                    } else {
+                        // 鐧诲綍澶辫触锛屾竻绌哄瘑鐮佸瓧娈碉紝璁╃敤鎴烽噸鏂拌緭鍏�
+                        passwordField.setText("");
+                        usernameField.requestFocus();
+                    }
+                });
+            } catch (Exception e) {
+                // 寮傚父澶勭悊锛屾竻绌哄瘑鐮佸瓧娈�
+                SwingUtilities.invokeLater(() -> {
+                    passwordField.setText("");
+                    usernameField.requestFocus();
+                });
+            }
+        }).start();
     }
 
     private void openMainApplication() {
-        System.out.println("鐧诲綍鎴愬姛锛屽噯澶囨墦寮�涓诲簲鐢ㄧ▼搴�...");
+        launchMainApp();
+        dispose();
+    }
+
+    public static void launchMainApp() {
+        System.out.println("鍑嗗鎵撳紑涓诲簲鐢ㄧ▼搴�...");
 
         SwingUtilities.invokeLater(() -> {
             JFrame mainFrame = new JFrame("鏅鸿兘鍓茶崏绯荤粺");
@@ -541,12 +619,17 @@
             // 璁剧疆涓庣櫥褰曢〉闈㈢浉鍚岀殑灏哄
             mainFrame.setSize(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT);
             mainFrame.setMinimumSize(new Dimension(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT));
-            mainFrame.setResizable(false);
+            mainFrame.setResizable(true);
             mainFrame.setLocationRelativeTo(null);
             mainFrame.setVisible(true);
 
-            dispose();
-            System.out.println("鐧诲綍绐楀彛宸插叧闂紝涓诲簲鐢ㄧ▼搴忓凡鍚姩");
+            System.out.println("涓诲簲鐢ㄧ▼搴忓凡鍚姩");
+            
+            // 鍚姩鍚庤繛鎺QTT
+            new Thread(() -> {
+                System.out.println("姝e湪杩炴帴MQTT鏈嶅姟鍣�...");
+                Client.lianjiemqqt();
+            }).start();
         });
     }
     
@@ -593,7 +676,7 @@
             System.out.println("鍒濆鐢ㄦ埛鍚�: " + UserChuShiHua.getProperty("userName"));
             System.out.println("鍒濆瀵嗙爜: " + UserChuShiHua.getProperty("password"));
             
-            // 鍚姩鐧诲綍鐣岄潰
+            // 鍚姩鐧诲綍鐣岄潰锛堣嚜鍔ㄧ櫥褰曢�昏緫鍦� loadUserPreferences 涓鐞嗭級
             EventQueue.invokeLater(() -> {
                 try {
                     new Denglu().setVisible(true);

--
Gitblit v1.10.0