From 00f4e4fc6e53a26cf3dc67d57d8b00536634d707 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 26 十二月 2025 17:36:11 +0800
Subject: [PATCH] 优化了注册账号
---
src/denglu/Denglu.java | 263 ++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 210 insertions(+), 53 deletions(-)
diff --git a/src/denglu/Denglu.java b/src/denglu/Denglu.java
index 9db2124..469f0b5 100644
--- a/src/denglu/Denglu.java
+++ b/src/denglu/Denglu.java
@@ -3,6 +3,13 @@
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 login.LoginVerifier;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@@ -339,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);
}
});
@@ -430,10 +434,23 @@
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");
+ 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);
+ });
+ }
}
}
@@ -449,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,
"璇疯緭鍏ョ敤鎴峰悕鎴栭偖绠�",
"杈撳叆閿欒",
@@ -471,49 +488,126 @@
return;
}
- // 楠岃瘉鐢ㄦ埛鍚嶅拰瀵嗙爜
- if (validateLogin(username, password)) {
- JOptionPane.showMessageDialog(this,
- "鐧诲綍鎴愬姛锛�",
- "鎴愬姛",
- JOptionPane.INFORMATION_MESSAGE);
-
- // 鏇存柊鏈�鍚庣櫥褰曟椂闂�
- UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
-
- // 濡傛灉璁颁綇鎴戣閫変腑锛屼繚瀛樼敤鎴峰悕
- if (rememberMe.isSelected()) {
- UserChuShiHua.updateProperty("userName", username);
+ // 鑾峰彇閭鍦板潃锛堝鏋滆緭鍏ョ殑鏄敤鎴峰悕锛屼粠閰嶇疆鏂囦欢涓幏鍙栧搴旂殑閭锛�
+ 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("鏅鸿兘鍓茶崏绯荤粺");
@@ -522,15 +616,20 @@
Shouye homePanel = new Shouye();
mainFrame.setContentPane(homePanel);
- mainFrame.pack();
- int targetWidth = Math.max(mainFrame.getWidth(), 480);
- int targetHeight = Math.max(mainFrame.getHeight(), 800);
- mainFrame.setSize(targetWidth, targetHeight);
+ // 璁剧疆涓庣櫥褰曢〉闈㈢浉鍚岀殑灏哄
+ 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);
- dispose();
- System.out.println("鐧诲綍绐楀彛宸插叧闂紝涓诲簲鐢ㄧ▼搴忓凡鍚姩");
+ System.out.println("涓诲簲鐢ㄧ▼搴忓凡鍚姩");
+
+ // 鍚姩鍚庤繛鎺QTT
+ new Thread(() -> {
+ System.out.println("姝e湪杩炴帴MQTT鏈嶅姟鍣�...");
+ Client.lianjiemqqt();
+ }).start();
});
}
@@ -540,5 +639,63 @@
RegistrationFrame registerFrame = new RegistrationFrame(this, currentLanguageCode);
registerFrame.setVisible(true);
}
+
+ /**
+ * 绋嬪簭鍏ュ彛鐐�
+ * 闆嗘垚Homein绫荤殑鍒濆鍖栭�昏緫
+ */
+ public static void main(String[] args) {
+ // 妫�鏌ョ▼搴忔槸鍚﹀凡缁忚繍琛�
+ 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"));
+
+ // 鍚姩鐧诲綍鐣岄潰锛堣嚜鍔ㄧ櫥褰曢�昏緫鍦� loadUserPreferences 涓鐞嗭級
+ 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