From 7be65a0428a4527889b6955c56aafdb81dda28a8 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期六, 22 十一月 2025 11:20:39 +0800
Subject: [PATCH] 开启状态线程,优化结束程序逻辑

---
 src/jiekou/lunxunkazhuangtai.java |  371 +++++++++++++++++++++++++++++++---------------------
 1 files changed, 221 insertions(+), 150 deletions(-)

diff --git a/src/jiekou/lunxunkazhuangtai.java b/src/jiekou/lunxunkazhuangtai.java
index 5ebd582..d174626 100644
--- a/src/jiekou/lunxunkazhuangtai.java
+++ b/src/jiekou/lunxunkazhuangtai.java
@@ -2,174 +2,245 @@
 import chushihua.SlotManager;
 import home.Fkj;
 
-
 /**
  * 杞鍗℃Ы鐘舵�佺被
  * 鐢ㄤ簬瀹氭湡杞骞惰緭鍑烘墍鏈夊崱妲界殑鐘舵�佷俊鎭�
  */
 public class lunxunkazhuangtai {
-	private static Thread pollThread;
-	private static volatile boolean isRunning = false;
-	private static final int POLL_INTERVAL = 30000; // 30绉掗棿闅�
+    private static Thread pollThread;
+    private static volatile boolean isRunning = false;
+    private static volatile int pollInterval = 30000; // 30绉掗棿闅旓紝鏀逛负鍙彉鐨�
+    
+    // 甯搁噺瀹氫箟锛岄伩鍏嶉噸澶嶅垱寤哄瓧绗︿覆
+    private static final String THREAD_NAME = "SlotStatusPollingThread";
+    private static final String UNKNOWN = "鏈煡";
+    private static final String NORMAL = "姝e父";
+    private static final String NULL_VALUE = "null";
+    
+    // 鐘舵�佸父閲�
+    private static final String STATUS_INVALID = "0";
+    private static final String STATUS_STANDBY = "1";
+    private static final String STATUS_CHARGING = "2";
+    private static final String STATUS_FULL = "3";
+    private static final String STATUS_FAULT = "4";
+    private static final String STATUS_AUTH_EXPIRED = "5";
+    private static final String STATUS_TIMEOUT = "6";
+    private static final String STATUS_UNKNOWN = "-1";
+    
+    // 鏁呴殰甯搁噺
+    private static final String FAULT_NORMAL = "0";
+    private static final String FAULT_CARD_ERROR = "1";
+    private static final String FAULT_OVER_CURRENT = "2";
+    private static final String FAULT_DOOR_FAULT = "3";
+    private static final String FAULT_OVER_VOLTAGE = "4";
+    private static final String FAULT_UNDER_VOLTAGE = "5";
+    private static final String FAULT_UNKNOWN = "-1";
 
-	/**
-	 * 鍚姩杞绾跨▼
-	 */
-	public static void startPolling() {
-		if (isRunning) {;
-			return;
-		}
+    /**
+     * 鍚姩杞绾跨▼
+     */
+    public static void startPolling() {
+        if (isRunning) {
+            System.out.println("杞绾跨▼宸插湪杩愯涓�");
+            return;
+        }
 
-		isRunning = true;
-		pollThread = new Thread(new PollingTask(), "SlotStatusPollingThread");
-		pollThread.setDaemon(true); // 璁剧疆涓哄畧鎶ょ嚎绋嬶紝褰撲富绾跨▼缁撴潫鏃惰嚜鍔ㄧ粨鏉�
-		pollThread.start();
-	}
+        isRunning = true;
+        pollThread = new Thread(new PollingTask(), THREAD_NAME);
+        pollThread.setDaemon(true);
+        pollThread.start();
+        System.out.println("鍗℃Ы鐘舵�佽疆璇㈢嚎绋嬪凡鍚姩锛岄棿闅�: " + pollInterval + "ms");
+    }
 
-	/**
-	 * 鍋滄杞绾跨▼
-	 */
-	public static void stopPolling() {
-		isRunning = false;
-		if (pollThread != null) {
-			pollThread.interrupt();
-			pollThread = null;
-		}
-		System.out.println("鍗℃Ы鐘舵�佽疆璇㈢嚎绋嬪凡鍋滄");
-	}
+    /**
+     * 鍋滄杞绾跨▼
+     */
+    public static void stopPolling() {
+        if (!isRunning) {
+            return;
+        }
+        
+        isRunning = false;
+        if (pollThread != null) {
+            pollThread.interrupt();
+            try {
+                // 绛夊緟绾跨▼瀹夊叏缁撴潫锛屾渶澶氱瓑寰�2绉�
+                pollThread.join(2000);
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+                System.out.println("绛夊緟杞绾跨▼鍋滄鏃惰涓柇");
+            }
+            pollThread = null;
+        }
+        System.out.println("鍗℃Ы鐘舵�佽疆璇㈢嚎绋嬪凡鍋滄");
+    }
 
-	/**
-	 * 妫�鏌ヨ疆璇㈢嚎绋嬫槸鍚﹀湪杩愯
-	 * @return 杩愯鐘舵��
-	 */
-	public static boolean isPolling() {
-		return isRunning;
-	}
+    /**
+     * 妫�鏌ヨ疆璇㈢嚎绋嬫槸鍚﹀湪杩愯
+     * @return 杩愯鐘舵��
+     */
+    public static boolean isPolling() {
+        return isRunning;
+    }
 
-	/**
-	 * 杞浠诲姟瀹炵幇
-	 */
-	private static class PollingTask implements Runnable {
-		@Override
-		public void run() {
-			while (isRunning && !Thread.currentThread().isInterrupted()) {
-				try {
-					// 杈撳嚭鎵�鏈夊崱妲界姸鎬�
-					printAllSlotsStatus();
+    /**
+     * 杞浠诲姟瀹炵幇
+     */
+    private static class PollingTask implements Runnable {
+        @Override
+        public void run() {
+            System.out.println("杞浠诲姟寮�濮嬫墽琛�");
+            
+            while (isRunning && !Thread.currentThread().isInterrupted()) {
+                try {
+                    // 杈撳嚭鎵�鏈夊崱妲界姸鎬�
+                    printAllSlotsStatus();
 
-					// 绛夊緟鎸囧畾闂撮殧
-					Thread.sleep(POLL_INTERVAL);
-				} catch (InterruptedException e) {
-					System.out.println("杞绾跨▼琚腑鏂�");
-					Thread.currentThread().interrupt();
-					break;
-				} catch (Exception e) {
-					System.err.println("杞杩囩▼涓彂鐢熼敊璇�: " + e.getMessage());
-					e.printStackTrace();
-				}
-			}
-			isRunning = false;
-		}
+                    // 浣跨敤鍔ㄦ�侀棿闅旓紝鏀寔杩愯鏃惰皟鏁�
+                    Thread.sleep(pollInterval);
+                    
+                } catch (InterruptedException e) {
+                    System.out.println("杞绾跨▼琚腑鏂紝姝e湪閫�鍑�...");
+                    Thread.currentThread().interrupt();
+                    break;
+                } catch (Exception e) {
+                    System.err.println("杞杩囩▼涓彂鐢熼敊璇�: " + e.getMessage());
+                    // 璁板綍寮傚父浣嗙户缁繍琛岋紝閬垮厤鍥犲崟娆″紓甯稿鑷存暣涓洃鎺у仠姝�
+                    e.printStackTrace();
+                    
+                    // 鍙戠敓寮傚父鏃剁煭鏆傜瓑寰呭悗鍐嶇户缁紝閬垮厤棰戠箒閿欒寰幆
+                    try {
+                        Thread.sleep(5000);
+                    } catch (InterruptedException ie) {
+                        Thread.currentThread().interrupt();
+                        break;
+                    }
+                }
+            }
+            
+            isRunning = false;
+//            System.out.println("杞浠诲姟鎵ц缁撴潫");
+        }
 
-		/**
-		 * 杈撳嚭鎵�鏈夊崱妲界姸鎬佷俊鎭�
-		 */
-		private void printAllSlotsStatus() {
-			Fkj[] slots = SlotManager.getSlotArray();
-			if (slots == null || slots.length == 0) {
-				return;
-			}
-			for (Fkj slot : slots) {
-				if (slot != null) {
-					//浣跨敤涓嬮潰鐨勬帹缁欐湇鍔″櫒鍗$殑鐘舵��
-					String kacaobianhao=safeGetValue(slot.getSlotNumber());
-					String kahao=safeGetValue(slot.getCardNumber());
-					String shifouyouka=formatHasCard(safeGetValue(slot.getHasCard()));
-					String kazhuangtai=formatWorkStatus(safeGetValue(slot.getWorkStatus()));
-					String kacaodianya=safeGetValue(slot.getVoltage());
-					String kacaodianliu=safeGetValue(slot.getCurrent());
-					String guzhangyuanyin=formatFault(safeGetValue(slot.getFault()));					
-				}
-			}
+        /**
+         * 杈撳嚭鎵�鏈夊崱妲界姸鎬佷俊鎭�
+         */
+        private void printAllSlotsStatus() {
+            Fkj[] slots = SlotManager.getSlotArray();
+            if (slots == null || slots.length == 0) {
+//                System.out.println("鏃犲崱妲芥暟鎹�");
+                return;
+            }
+            
+            // 浣跨敤StringBuilder鍑忓皯瀛楃涓叉嫾鎺ュ紑閿�
+            StringBuilder statusBuilder = new StringBuilder();
+            
+            
+            int validSlotCount = 0;
+            for (Fkj slot : slots) {
+                if (slot != null) {
+                    validSlotCount++;
+                    // 浣跨敤涓嬮潰鐨勬帹缁欐湇鍔″櫒鍗$殑鐘舵��
+                    String kacaobianhao = safeGetValue(slot.getSlotNumber());
+                    String kahao = safeGetValue(slot.getCardNumber());
+                    String shifouyouka = formatHasCard(safeGetValue(slot.getHasCard()));
+                    String kazhuangtai = formatWorkStatus(safeGetValue(slot.getWorkStatus()));
+                    String kacaodianya = safeGetValue(slot.getVoltage());
+                    String kacaodianliu = safeGetValue(slot.getCurrent());
+                    String guzhangyuanyin = formatFault(safeGetValue(slot.getFault()));
+                    
+                   
+                }
+            }            
 
-		}
+        }
 
-		/**
-		 * 瀹夊叏鑾峰彇鍊硷紝閬垮厤绌烘寚閽�
-		 */
-		private String safeGetValue(String value) {
-			return value != null ? value : "null";
-		}
+        /**
+         * 瀹夊叏鑾峰彇鍊硷紝閬垮厤绌烘寚閽�
+         */
+        private String safeGetValue(String value) {
+            return value != null ? value : NULL_VALUE;
+        }
 
-		/**
-		 * 鏍煎紡鍖栨湁鍗$姸鎬�
-		 */
-		private String formatHasCard(String hasCard) {
-			if ("1".equals(hasCard)) return "鏈夊崱";
-			if ("0".equals(hasCard)) return "鏃犲崱";
-			if ("-1".equals(hasCard)) return "鏈煡";
-			return hasCard;
-		}
+        /**
+         * 鏍煎紡鍖栨湁鍗$姸鎬�
+         */
+        private String formatHasCard(String hasCard) {
+            if ("1".equals(hasCard)) return "鏈夊崱";
+            if ("0".equals(hasCard)) return "鏃犲崱";
+            if ("-1".equals(hasCard)) return UNKNOWN;
+            return hasCard;
+        }
 
-		/**
-		 * 鏍煎紡鍖栧伐浣滅姸鎬�
-		 */
-		private String formatWorkStatus(String status) {
-			switch (status) {
-			case "0": return "鏃犳晥";
-			case "1": return "寰呮満";
-			case "2": return "鍏呯數涓�";
-			case "3": return "宸插厖婊�";
-			case "4": return "鏁呴殰";
-			case "5": return "鎺堟潈鍒版湡";
-			case "6": return "閫氫俊瓒呮椂";
-			case "-1": return "鏈煡";
-			default: return status;
-			}
-		}
+        /**
+         * 鏍煎紡鍖栧伐浣滅姸鎬�
+         */
+        private String formatWorkStatus(String status) {
+            switch (status) {
+                case STATUS_INVALID: return "鏃犳晥";
+                case STATUS_STANDBY: return "寰呮満";
+                case STATUS_CHARGING: return "鍏呯數涓�";
+                case STATUS_FULL: return "宸插厖婊�";
+                case STATUS_FAULT: return "鏁呴殰";
+                case STATUS_AUTH_EXPIRED: return "鎺堟潈鍒版湡";
+                case STATUS_TIMEOUT: return "閫氫俊瓒呮椂";
+                case STATUS_UNKNOWN: return UNKNOWN;
+                default: return status;
+            }
+        }
 
-		/**
-		 * 鏍煎紡鍖栨晠闅滅姸鎬�
-		 */
-		private String formatFault(String fault) {
-			switch (fault) {
-			case "0": return "姝e父";
-			case "1": return "鎻掑崱閿欒";
-			case "2": return "杩囨祦";
-			case "3": return "闂ㄦ帶鏁呴殰";
-			case "4": return "杩囧帇";
-			case "5": return "娆犲帇";
-			case "-1": return "鏈煡";
-			default: return fault;
-			}
-		}
-	}
+        /**
+         * 鏍煎紡鍖栨晠闅滅姸鎬�
+         */
+        private String formatFault(String fault) {
+            switch (fault) {
+                case FAULT_NORMAL: return NORMAL;
+                case FAULT_CARD_ERROR: return "鎻掑崱閿欒";
+                case FAULT_OVER_CURRENT: return "杩囨祦";
+                case FAULT_DOOR_FAULT: return "闂ㄦ帶鏁呴殰";
+                case FAULT_OVER_VOLTAGE: return "杩囧帇";
+                case FAULT_UNDER_VOLTAGE: return "娆犲帇";
+                case FAULT_UNKNOWN: return UNKNOWN;
+                default: return fault;
+            }
+        }
+    }
 
-	/**
-	 * 璁剧疆杞闂撮殧锛堝崟浣嶏細姣锛�
-	 * @param interval 闂撮殧鏃堕棿锛屾绉�
-	 */
-	public static void setPollInterval(int interval) {
-		// 娉ㄦ剰锛氳繖涓缃笉浼氱珛鍗崇敓鏁堬紝闇�瑕侀噸鍚疆璇㈢嚎绋�
-		System.out.println("鏂扮殑杞闂撮殧灏嗗湪涓嬫鍚姩鏃剁敓鏁�: " + interval + "ms");
-	}
+    /**
+     * 璁剧疆杞闂撮殧锛堝崟浣嶏細姣锛�
+     * @param interval 闂撮殧鏃堕棿锛屾绉�
+     */
+    public static void setPollInterval(int interval) {
+        if (interval <= 0) {
+            throw new IllegalArgumentException("杞闂撮殧蹇呴』澶т簬0");
+        }
+        pollInterval = interval;
+        System.out.println("杞闂撮殧宸叉洿鏂�: " + interval + "ms");
+    }
 
-	/**
-	 * 鑾峰彇褰撳墠杞闂撮殧
-	 * @return 杞闂撮殧锛堟绉掞級
-	 */
-	public static int getPollInterval() {
-		return POLL_INTERVAL;
-	}
+    /**
+     * 鑾峰彇褰撳墠杞闂撮殧
+     * @return 杞闂撮殧锛堟绉掞級
+     */
+    public static int getPollInterval() {
+        return pollInterval;
+    }
 
-	/**
-	 * 鎵嬪姩瑙﹀彂涓�娆$姸鎬佽緭鍑猴紙涓嶇瓑寰呴棿闅旓級
-	 */
-	public static void triggerManualOutput() {
-		if (isRunning) {
-			new PollingTask().printAllSlotsStatus();
-		} else {
-			System.out.println("杞绾跨▼鏈繍琛岋紝鏃犳硶鎵嬪姩瑙﹀彂杈撳嚭");
-		}
-	}
+    /**
+     * 鎵嬪姩瑙﹀彂涓�娆$姸鎬佽緭鍑猴紙涓嶇瓑寰呴棿闅旓級
+     */
+    public static void triggerManualOutput() {
+        if (isRunning && pollThread != null) {
+            new PollingTask().printAllSlotsStatus();
+        } else {
+            System.out.println("杞绾跨▼鏈繍琛岋紝鏃犳硶鎵嬪姩瑙﹀彂杈撳嚭");
+        }
+    }
+    
+    /**
+     * 瀹夊叏鍏抽棴鎵�鏈夎祫婧�
+     */
+    public static void shutdown() {
+        stopPolling();
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3