From 0f1509097818fbf48d7741d0fe0d9b973e88730d Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期六, 22 十一月 2025 17:46:43 +0800
Subject: [PATCH] 新增人脸检测暂停有卡卡槽查询
---
src/jiekou/lunxunkazhuangtai.java | 372 +++++++++++++++++++++++++++++++---------------------
1 files changed, 222 insertions(+), 150 deletions(-)
diff --git a/src/jiekou/lunxunkazhuangtai.java b/src/jiekou/lunxunkazhuangtai.java
index 49c8774..d174626 100644
--- a/src/jiekou/lunxunkazhuangtai.java
+++ b/src/jiekou/lunxunkazhuangtai.java
@@ -1,174 +1,246 @@
package jiekou;
import chushihua.SlotManager;
-import xitongshezhi.Fkj;
+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