From d22349714c8d199c02f336f90fba841ef8f5cd39 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 21 十一月 2025 17:46:23 +0800
Subject: [PATCH] 优化内存后最终版202511211746
---
src/publicway/ProtocolParser01.java | 346 ++++++--------
bin/publicway/ProtocolParser01$CardStatus.class | 0
bin/publicway/ProtocolParser01$FaultType.class | 0
bin/publicway/ProtocolParser01$WorkStatus.class | 0
bin/publicway/SerialProtocolParser.class | 0
src/chuankou/SerialDataReceiver.java | 144 +++--
bin/publicway/ProtocolParser01$ParseResultPool.class | 0
bin/publicway/ProtocolParser01$DoorStatus.class | 0
src/xitongshezhi/kuaisuquka.java | 7
bin/chuankou/SerialDataReceiver.class | 0
bin/xitongshezhi/kuaisuquka$4.class | 0
bin/publicway/ProtocolParser01$ParseResult.class | 0
bin/publicway/ProtocolParser01.class | 0
src/chuankou/Sendmsg.java | 157 ++++-
bin/xitongshezhi/kuaisuquka.class | 0
src/chushihua/lunxun.java | 206 ++++++-
bin/xitongshezhi/kuaisuquka$3.class | 0
src/publicway/SerialProtocolParser.java | 273 ++++++++--
bin/chushihua/lunxun.class | 0
bin/xitongshezhi/kuaisuquka$SlotButtonListener.class | 0
bin/chushihua/lunxun$PollingTask.class | 0
bin/chuankou/Sendmsg.class | 0
log.properties | 300 +-----------
bin/xitongshezhi/kuaisuquka$2.class | 0
24 files changed, 772 insertions(+), 661 deletions(-)
diff --git a/bin/chuankou/Sendmsg.class b/bin/chuankou/Sendmsg.class
index 8841258..ad5c2b2 100644
--- a/bin/chuankou/Sendmsg.class
+++ b/bin/chuankou/Sendmsg.class
Binary files differ
diff --git a/bin/chuankou/SerialDataReceiver.class b/bin/chuankou/SerialDataReceiver.class
index 20dad43..025eff0 100644
--- a/bin/chuankou/SerialDataReceiver.class
+++ b/bin/chuankou/SerialDataReceiver.class
Binary files differ
diff --git a/bin/chushihua/lunxun$PollingTask.class b/bin/chushihua/lunxun$PollingTask.class
index 0a4a6e4..5dedbf1 100644
--- a/bin/chushihua/lunxun$PollingTask.class
+++ b/bin/chushihua/lunxun$PollingTask.class
Binary files differ
diff --git a/bin/chushihua/lunxun.class b/bin/chushihua/lunxun.class
index 9e1b8eb..7e7882b 100644
--- a/bin/chushihua/lunxun.class
+++ b/bin/chushihua/lunxun.class
Binary files differ
diff --git a/bin/publicway/ProtocolParser01$CardStatus.class b/bin/publicway/ProtocolParser01$CardStatus.class
index 70ece56..c15b364 100644
--- a/bin/publicway/ProtocolParser01$CardStatus.class
+++ b/bin/publicway/ProtocolParser01$CardStatus.class
Binary files differ
diff --git a/bin/publicway/ProtocolParser01$DoorStatus.class b/bin/publicway/ProtocolParser01$DoorStatus.class
index 4e51f5a..8380e99 100644
--- a/bin/publicway/ProtocolParser01$DoorStatus.class
+++ b/bin/publicway/ProtocolParser01$DoorStatus.class
Binary files differ
diff --git a/bin/publicway/ProtocolParser01$FaultType.class b/bin/publicway/ProtocolParser01$FaultType.class
index 1e2f890..444e5eb 100644
--- a/bin/publicway/ProtocolParser01$FaultType.class
+++ b/bin/publicway/ProtocolParser01$FaultType.class
Binary files differ
diff --git a/bin/publicway/ProtocolParser01$ParseResult.class b/bin/publicway/ProtocolParser01$ParseResult.class
index be6e6af..b1d9e03 100644
--- a/bin/publicway/ProtocolParser01$ParseResult.class
+++ b/bin/publicway/ProtocolParser01$ParseResult.class
Binary files differ
diff --git a/bin/publicway/ProtocolParser01$ParseResultPool.class b/bin/publicway/ProtocolParser01$ParseResultPool.class
index cc4dacc..0b31c58 100644
--- a/bin/publicway/ProtocolParser01$ParseResultPool.class
+++ b/bin/publicway/ProtocolParser01$ParseResultPool.class
Binary files differ
diff --git a/bin/publicway/ProtocolParser01$WorkStatus.class b/bin/publicway/ProtocolParser01$WorkStatus.class
index 7a1e9fa..e9e7f5e 100644
--- a/bin/publicway/ProtocolParser01$WorkStatus.class
+++ b/bin/publicway/ProtocolParser01$WorkStatus.class
Binary files differ
diff --git a/bin/publicway/ProtocolParser01.class b/bin/publicway/ProtocolParser01.class
index 1163f05..44faf79 100644
--- a/bin/publicway/ProtocolParser01.class
+++ b/bin/publicway/ProtocolParser01.class
Binary files differ
diff --git a/bin/publicway/SerialProtocolParser.class b/bin/publicway/SerialProtocolParser.class
index 79d819d..b91af32 100644
--- a/bin/publicway/SerialProtocolParser.class
+++ b/bin/publicway/SerialProtocolParser.class
Binary files differ
diff --git a/bin/xitongshezhi/kuaisuquka$2.class b/bin/xitongshezhi/kuaisuquka$2.class
index 6db92f2..4f77d70 100644
--- a/bin/xitongshezhi/kuaisuquka$2.class
+++ b/bin/xitongshezhi/kuaisuquka$2.class
Binary files differ
diff --git a/bin/xitongshezhi/kuaisuquka$3.class b/bin/xitongshezhi/kuaisuquka$3.class
index 1e27b2a..3620c68 100644
--- a/bin/xitongshezhi/kuaisuquka$3.class
+++ b/bin/xitongshezhi/kuaisuquka$3.class
Binary files differ
diff --git a/bin/xitongshezhi/kuaisuquka$4.class b/bin/xitongshezhi/kuaisuquka$4.class
index 89f3b62..592ed95 100644
--- a/bin/xitongshezhi/kuaisuquka$4.class
+++ b/bin/xitongshezhi/kuaisuquka$4.class
Binary files differ
diff --git a/bin/xitongshezhi/kuaisuquka$SlotButtonListener.class b/bin/xitongshezhi/kuaisuquka$SlotButtonListener.class
index f614e34..a85e6b8 100644
--- a/bin/xitongshezhi/kuaisuquka$SlotButtonListener.class
+++ b/bin/xitongshezhi/kuaisuquka$SlotButtonListener.class
Binary files differ
diff --git a/bin/xitongshezhi/kuaisuquka.class b/bin/xitongshezhi/kuaisuquka.class
index faa293f..7ea37d2 100644
--- a/bin/xitongshezhi/kuaisuquka.class
+++ b/bin/xitongshezhi/kuaisuquka.class
Binary files differ
diff --git a/log.properties b/log.properties
index ba2819a..15d42da 100644
--- a/log.properties
+++ b/log.properties
@@ -1,267 +1,33 @@
-#\u64CD\u4F5C\u65E5\u5FD7\u8BB0\u5F55 - \u6700\u540E\u66F4\u65B0: Fri Nov 21 17:13:04 CST 2025
-#Fri Nov 21 17:13:04 CST 2025
-log_1763709005376_be67189d=[2025-11-21 15\:10\:05] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
-log_1763709010792_533f9544=[2025-11-21 15\:10\:10] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
-log_1763710366394_3e2ee73b=[2025-11-21 15\:32\:46] 鍙栧崱鎿嶄綔锛氬崱妲�1琚鐞嗗憳鍙栧崱
-log_1763710369073_b9adfbaf=[2025-11-21 15\:32\:49] 绠$悊鍛樺凡灏嗗叏閮ㄥ崱妲藉凡缁忔墦寮�璇峰彇鍗�
-log_1763710369761_bb324453=[2025-11-21 15\:32\:49] 鍙栧崱鎿嶄綔锛氬崱妲�2琚鐞嗗憳鍙栧崱
-log_1763710374805_729bf4a3=[2025-11-21 15\:32\:54] 鍙栧崱鎿嶄綔锛氬崱妲�3琚鐞嗗憳鍙栧崱
-log_1763710376872_53e825d5=[2025-11-21 15\:32\:56] 鍙栧崱鎿嶄綔锛氬崱妲�4琚鐞嗗憳鍙栧崱
-log_1763710377434_30d03572=[2025-11-21 15\:32\:57] 鍙栧崱鎿嶄綔锛氬崱妲�5琚鐞嗗憳鍙栧崱
-log_1763710377702_d982793b=[2025-11-21 15\:32\:57] 鍙栧崱鎿嶄綔锛氬崱妲�6琚鐞嗗憳鍙栧崱
-log_1763710378251_dcba47b6=[2025-11-21 15\:32\:58] 鍙栧崱鎿嶄綔锛氬崱妲�7琚鐞嗗憳鍙栧崱
-log_1763710378740_621c7d16=[2025-11-21 15\:32\:58] 鍙栧崱鎿嶄綔锛氬崱妲�8琚鐞嗗憳鍙栧崱
-log_1763710378945_1f90633a=[2025-11-21 15\:32\:58] 鍙栧崱鎿嶄綔锛氬崱妲�9琚鐞嗗憳鍙栧崱
-log_1763710379551_0d57ca92=[2025-11-21 15\:32\:59] 鍙栧崱鎿嶄綔锛氬崱妲�10琚鐞嗗憳鍙栧崱
-log_1763710379765_c62a1f70=[2025-11-21 15\:32\:59] 鍙栧崱鎿嶄綔锛氬崱妲�11琚鐞嗗憳鍙栧崱
-log_1763710380759_1a3f3a2d=[2025-11-21 15\:33\:00] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
-log_1763710381303_43876449=[2025-11-21 15\:33\:01] 鍙栧崱鎿嶄綔锛氬崱妲�13琚鐞嗗憳鍙栧崱
-log_1763710381490_e2f23d01=[2025-11-21 15\:33\:01] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
-log_1763710381832_64ae1479=[2025-11-21 15\:33\:01] 鍙栧崱鎿嶄綔锛氬崱妲�15琚鐞嗗憳鍙栧崱
-log_1763710382171_5447584c=[2025-11-21 15\:33\:02] 鍙栧崱鎿嶄綔锛氬崱妲�16琚鐞嗗憳鍙栧崱
-log_1763710382679_028e4b55=[2025-11-21 15\:33\:02] 鍙栧崱鎿嶄綔锛氬崱妲�17琚鐞嗗憳鍙栧崱
-log_1763710383184_87fbec0b=[2025-11-21 15\:33\:03] 鍙栧崱鎿嶄綔锛氬崱妲�18琚鐞嗗憳鍙栧崱
-log_1763710383706_a4cf4dc7=[2025-11-21 15\:33\:03] 鍙栧崱鎿嶄綔锛氬崱妲�19琚鐞嗗憳鍙栧崱
-log_1763710383969_ee1134f4=[2025-11-21 15\:33\:03] 鍙栧崱鎿嶄綔锛氬崱妲�20琚鐞嗗憳鍙栧崱
-log_1763710384261_24848bed=[2025-11-21 15\:33\:04] 鍙栧崱鎿嶄綔锛氬崱妲�21琚鐞嗗憳鍙栧崱
-log_1763710384754_dd683aa4=[2025-11-21 15\:33\:04] 鍙栧崱鎿嶄綔锛氬崱妲�22琚鐞嗗憳鍙栧崱
-log_1763710385236_cb72df23=[2025-11-21 15\:33\:05] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
-log_1763710385688_59448adc=[2025-11-21 15\:33\:05] 鍙栧崱鎿嶄綔锛氬崱妲�24琚鐞嗗憳鍙栧崱
-log_1763710385869_5cd15f66=[2025-11-21 15\:33\:05] 鍙栧崱鎿嶄綔锛氬崱妲�25琚鐞嗗憳鍙栧崱
-log_1763710386114_b27f7cdb=[2025-11-21 15\:33\:06] 鍙栧崱鎿嶄綔锛氬崱妲�26琚鐞嗗憳鍙栧崱
-log_1763710386353_207e922a=[2025-11-21 15\:33\:06] 鍙栧崱鎿嶄綔锛氬崱妲�27琚鐞嗗憳鍙栧崱
-log_1763710386567_dedb947b=[2025-11-21 15\:33\:06] 鍙栧崱鎿嶄綔锛氬崱妲�28琚鐞嗗憳鍙栧崱
-log_1763710386774_fdb60ca6=[2025-11-21 15\:33\:06] 鍙栧崱鎿嶄綔锛氬崱妲�29琚鐞嗗憳鍙栧崱
-log_1763710387277_ec9fe131=[2025-11-21 15\:33\:07] 鍙栧崱鎿嶄綔锛氬崱妲�30琚鐞嗗憳鍙栧崱
-log_1763710392318_2b9de060=[2025-11-21 15\:33\:12] 鍙栧崱鎿嶄綔锛氬崱妲�31琚鐞嗗憳鍙栧崱
-log_1763710394899_2c102a5d=[2025-11-21 15\:33\:14] 鍙栧崱鎿嶄綔锛氬崱妲�32琚鐞嗗憳鍙栧崱
-log_1763710395618_9580d0cf=[2025-11-21 15\:33\:15] 鍙栧崱鎿嶄綔锛氬崱妲�33琚鐞嗗憳鍙栧崱
-log_1763710395824_c45c4bb7=[2025-11-21 15\:33\:15] 鍙栧崱鎿嶄綔锛氬崱妲�34琚鐞嗗憳鍙栧崱
-log_1763710396024_19f89ff8=[2025-11-21 15\:33\:16] 鍙栧崱鎿嶄綔锛氬崱妲�35琚鐞嗗憳鍙栧崱
-log_1763710396205_1e9f3544=[2025-11-21 15\:33\:16] 鍙栧崱鎿嶄綔锛氬崱妲�36琚鐞嗗憳鍙栧崱
-log_1763710396395_09793aa0=[2025-11-21 15\:33\:16] 鍙栧崱鎿嶄綔锛氬崱妲�37琚鐞嗗憳鍙栧崱
-log_1763710396586_6da2a2be=[2025-11-21 15\:33\:16] 鍙栧崱鎿嶄綔锛氬崱妲�38琚鐞嗗憳鍙栧崱
-log_1763710396751_27627af1=[2025-11-21 15\:33\:16] 鍙栧崱鎿嶄綔锛氬崱妲�39琚鐞嗗憳鍙栧崱
-log_1763710396925_048a1d33=[2025-11-21 15\:33\:16] 鍙栧崱鎿嶄綔锛氬崱妲�40琚鐞嗗憳鍙栧崱
-log_1763710397700_9009fb44=[2025-11-21 15\:33\:17] 鍙栧崱鎿嶄綔锛氬崱妲�41琚鐞嗗憳鍙栧崱
-log_1763710398160_e8f79aa9=[2025-11-21 15\:33\:18] 鍙栧崱鎿嶄綔锛氬崱妲�42琚鐞嗗憳鍙栧崱
-log_1763710398344_dba27f5c=[2025-11-21 15\:33\:18] 鍙栧崱鎿嶄綔锛氬崱妲�43琚鐞嗗憳鍙栧崱
-log_1763710398527_84a6586d=[2025-11-21 15\:33\:18] 鍙栧崱鎿嶄綔锛氬崱妲�44琚鐞嗗憳鍙栧崱
-log_1763710398709_ca4898fa=[2025-11-21 15\:33\:18] 鍙栧崱鎿嶄綔锛氬崱妲�45琚鐞嗗憳鍙栧崱
-log_1763710398891_21c16b85=[2025-11-21 15\:33\:18] 鍙栧崱鎿嶄綔锛氬崱妲�46琚鐞嗗憳鍙栧崱
-log_1763710399064_7a60cb4f=[2025-11-21 15\:33\:19] 鍙栧崱鎿嶄綔锛氬崱妲�47琚鐞嗗憳鍙栧崱
-log_1763710399256_d1754fdf=[2025-11-21 15\:33\:19] 鍙栧崱鎿嶄綔锛氬崱妲�48琚鐞嗗憳鍙栧崱
-log_1763710399440_adfb38c2=[2025-11-21 15\:33\:19] 鍙栧崱鎿嶄綔锛氬崱妲�49琚鐞嗗憳鍙栧崱
-log_1763710399628_25b129e2=[2025-11-21 15\:33\:19] 鍙栧崱鎿嶄綔锛氬崱妲�50琚鐞嗗憳鍙栧崱
-log_1763710399804_bfdf1f49=[2025-11-21 15\:33\:19] 鍙栧崱鎿嶄綔锛氬崱妲�51琚鐞嗗憳鍙栧崱
-log_1763710399981_9a6fae3a=[2025-11-21 15\:33\:19] 鍙栧崱鎿嶄綔锛氬崱妲�52琚鐞嗗憳鍙栧崱
-log_1763710400191_f4c40a9a=[2025-11-21 15\:33\:20] 鍙栧崱鎿嶄綔锛氬崱妲�53琚鐞嗗憳鍙栧崱
-log_1763710400361_300e2593=[2025-11-21 15\:33\:20] 鍙栧崱鎿嶄綔锛氬崱妲�54琚鐞嗗憳鍙栧崱
-log_1763710400545_ae5dd8e4=[2025-11-21 15\:33\:20] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763710400735_0041b12f=[2025-11-21 15\:33\:20] 鍙栧崱鎿嶄綔锛氬崱妲�56琚鐞嗗憳鍙栧崱
-log_1763710401100_1951843e=[2025-11-21 15\:33\:21] 鍙栧崱鎿嶄綔锛氬崱妲�57琚鐞嗗憳鍙栧崱
-log_1763710401283_580b32ee=[2025-11-21 15\:33\:21] 鍙栧崱鎿嶄綔锛氬崱妲�58琚鐞嗗憳鍙栧崱
-log_1763710401476_d0cee988=[2025-11-21 15\:33\:21] 鍙栧崱鎿嶄綔锛氬崱妲�59琚鐞嗗憳鍙栧崱
-log_1763710401684_bfb7a541=[2025-11-21 15\:33\:21] 鍙栧崱鎿嶄綔锛氬崱妲�60琚鐞嗗憳鍙栧崱
-log_1763710738513_bc5737ed=[2025-11-21 15\:38\:58] 鍙栧崱鎿嶄綔锛氬崱妲�1琚鐞嗗憳鍙栧崱
-log_1763710739297_f16f6cbf=[2025-11-21 15\:38\:59] 绠$悊鍛樺凡灏嗗叏閮ㄥ崱妲藉凡缁忔墦寮�璇峰彇鍗�
-log_1763710743588_a44dd2b1=[2025-11-21 15\:39\:03] 鍙栧崱鎿嶄綔锛氬崱妲�2琚鐞嗗憳鍙栧崱
-log_1763710745191_e7cd7335=[2025-11-21 15\:39\:05] 鍙栧崱鎿嶄綔锛氬崱妲�3琚鐞嗗憳鍙栧崱
-log_1763710745941_38917a60=[2025-11-21 15\:39\:05] 鍙栧崱鎿嶄綔锛氬崱妲�4琚鐞嗗憳鍙栧崱
-log_1763710746428_1be0c2ec=[2025-11-21 15\:39\:06] 鍙栧崱鎿嶄綔锛氬崱妲�5琚鐞嗗憳鍙栧崱
-log_1763710746617_a7f4572b=[2025-11-21 15\:39\:06] 鍙栧崱鎿嶄綔锛氬崱妲�6琚鐞嗗憳鍙栧崱
-log_1763710746844_6dccbbfa=[2025-11-21 15\:39\:06] 鍙栧崱鎿嶄綔锛氬崱妲�7琚鐞嗗憳鍙栧崱
-log_1763710747030_7f129941=[2025-11-21 15\:39\:07] 鍙栧崱鎿嶄綔锛氬崱妲�8琚鐞嗗憳鍙栧崱
-log_1763710747475_7008b86e=[2025-11-21 15\:39\:07] 鍙栧崱鎿嶄綔锛氬崱妲�9琚鐞嗗憳鍙栧崱
-log_1763710747663_5bcece5b=[2025-11-21 15\:39\:07] 鍙栧崱鎿嶄綔锛氬崱妲�10琚鐞嗗憳鍙栧崱
-log_1763710747839_836fdc15=[2025-11-21 15\:39\:07] 鍙栧崱鎿嶄綔锛氬崱妲�11琚鐞嗗憳鍙栧崱
-log_1763710748297_819cb00d=[2025-11-21 15\:39\:08] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
-log_1763710748481_d62eee38=[2025-11-21 15\:39\:08] 鍙栧崱鎿嶄綔锛氬崱妲�13琚鐞嗗憳鍙栧崱
-log_1763710748713_7e8e1b78=[2025-11-21 15\:39\:08] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
-log_1763710748924_6eb58529=[2025-11-21 15\:39\:08] 鍙栧崱鎿嶄綔锛氬崱妲�15琚鐞嗗憳鍙栧崱
-log_1763710749180_b4f93c07=[2025-11-21 15\:39\:09] 鍙栧崱鎿嶄綔锛氬崱妲�16琚鐞嗗憳鍙栧崱
-log_1763710749430_d4374f53=[2025-11-21 15\:39\:09] 鍙栧崱鎿嶄綔锛氬崱妲�17琚鐞嗗憳鍙栧崱
-log_1763710749722_871e5938=[2025-11-21 15\:39\:09] 鍙栧崱鎿嶄綔锛氬崱妲�18琚鐞嗗憳鍙栧崱
-log_1763710749929_a7b4b17c=[2025-11-21 15\:39\:09] 鍙栧崱鎿嶄綔锛氬崱妲�19琚鐞嗗憳鍙栧崱
-log_1763710750112_41fe9c56=[2025-11-21 15\:39\:10] 鍙栧崱鎿嶄綔锛氬崱妲�20琚鐞嗗憳鍙栧崱
-log_1763710750309_c9445b6a=[2025-11-21 15\:39\:10] 鍙栧崱鎿嶄綔锛氬崱妲�21琚鐞嗗憳鍙栧崱
-log_1763710750497_dbfb3b50=[2025-11-21 15\:39\:10] 鍙栧崱鎿嶄綔锛氬崱妲�22琚鐞嗗憳鍙栧崱
-log_1763710750865_8b47fb9d=[2025-11-21 15\:39\:10] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
-log_1763710751038_58cc3a3b=[2025-11-21 15\:39\:11] 鍙栧崱鎿嶄綔锛氬崱妲�24琚鐞嗗憳鍙栧崱
-log_1763710751222_50d2ca7f=[2025-11-21 15\:39\:11] 鍙栧崱鎿嶄綔锛氬崱妲�25琚鐞嗗憳鍙栧崱
-log_1763710751396_e0d7e4d4=[2025-11-21 15\:39\:11] 鍙栧崱鎿嶄綔锛氬崱妲�26琚鐞嗗憳鍙栧崱
-log_1763710751576_c31a2bb8=[2025-11-21 15\:39\:11] 鍙栧崱鎿嶄綔锛氬崱妲�27琚鐞嗗憳鍙栧崱
-log_1763710751759_3257dff6=[2025-11-21 15\:39\:11] 鍙栧崱鎿嶄綔锛氬崱妲�28琚鐞嗗憳鍙栧崱
-log_1763710751933_5b98b5b1=[2025-11-21 15\:39\:11] 鍙栧崱鎿嶄綔锛氬崱妲�29琚鐞嗗憳鍙栧崱
-log_1763710752106_c249e495=[2025-11-21 15\:39\:12] 鍙栧崱鎿嶄綔锛氬崱妲�30琚鐞嗗憳鍙栧崱
-log_1763710752288_3473b11e=[2025-11-21 15\:39\:12] 鍙栧崱鎿嶄綔锛氬崱妲�31琚鐞嗗憳鍙栧崱
-log_1763710752478_bddf4a0f=[2025-11-21 15\:39\:12] 鍙栧崱鎿嶄綔锛氬崱妲�32琚鐞嗗憳鍙栧崱
-log_1763710752678_03b7b598=[2025-11-21 15\:39\:12] 鍙栧崱鎿嶄綔锛氬崱妲�33琚鐞嗗憳鍙栧崱
-log_1763710752882_cead4734=[2025-11-21 15\:39\:12] 鍙栧崱鎿嶄綔锛氬崱妲�34琚鐞嗗憳鍙栧崱
-log_1763710753096_3e58465d=[2025-11-21 15\:39\:13] 鍙栧崱鎿嶄綔锛氬崱妲�35琚鐞嗗憳鍙栧崱
-log_1763710753294_c8a39f42=[2025-11-21 15\:39\:13] 鍙栧崱鎿嶄綔锛氬崱妲�36琚鐞嗗憳鍙栧崱
-log_1763710753795_011f5c48=[2025-11-21 15\:39\:13] 鍙栧崱鎿嶄綔锛氬崱妲�37琚鐞嗗憳鍙栧崱
-log_1763710753999_a6bdf722=[2025-11-21 15\:39\:13] 鍙栧崱鎿嶄綔锛氬崱妲�38琚鐞嗗憳鍙栧崱
-log_1763710754230_c6b37d6c=[2025-11-21 15\:39\:14] 鍙栧崱鎿嶄綔锛氬崱妲�39琚鐞嗗憳鍙栧崱
-log_1763710754429_5a2cf0e3=[2025-11-21 15\:39\:14] 鍙栧崱鎿嶄綔锛氬崱妲�40琚鐞嗗憳鍙栧崱
-log_1763710754634_524e289c=[2025-11-21 15\:39\:14] 鍙栧崱鎿嶄綔锛氬崱妲�41琚鐞嗗憳鍙栧崱
-log_1763710754833_e252c751=[2025-11-21 15\:39\:14] 鍙栧崱鎿嶄綔锛氬崱妲�42琚鐞嗗憳鍙栧崱
-log_1763710755046_ca4fdaed=[2025-11-21 15\:39\:15] 鍙栧崱鎿嶄綔锛氬崱妲�43琚鐞嗗憳鍙栧崱
-log_1763710755245_f0a4c432=[2025-11-21 15\:39\:15] 鍙栧崱鎿嶄綔锛氬崱妲�44琚鐞嗗憳鍙栧崱
-log_1763710755433_66d05da5=[2025-11-21 15\:39\:15] 鍙栧崱鎿嶄綔锛氬崱妲�45琚鐞嗗憳鍙栧崱
-log_1763710755608_b2636ea5=[2025-11-21 15\:39\:15] 鍙栧崱鎿嶄綔锛氬崱妲�46琚鐞嗗憳鍙栧崱
-log_1763710760647_d7b2c8f0=[2025-11-21 15\:39\:20] 鍙栧崱鎿嶄綔锛氬崱妲�47琚鐞嗗憳鍙栧崱
-log_1763710765684_8d3d2ecb=[2025-11-21 15\:39\:25] 鍙栧崱鎿嶄綔锛氬崱妲�48琚鐞嗗憳鍙栧崱
-log_1763710770722_8f84c7e9=[2025-11-21 15\:39\:30] 鍙栧崱鎿嶄綔锛氬崱妲�49琚鐞嗗憳鍙栧崱
-log_1763710775759_33513110=[2025-11-21 15\:39\:35] 鍙栧崱鎿嶄綔锛氬崱妲�50琚鐞嗗憳鍙栧崱
-log_1763710780797_bca992a2=[2025-11-21 15\:39\:40] 鍙栧崱鎿嶄綔锛氬崱妲�51琚鐞嗗憳鍙栧崱
-log_1763710785835_7036b416=[2025-11-21 15\:39\:45] 鍙栧崱鎿嶄綔锛氬崱妲�52琚鐞嗗憳鍙栧崱
-log_1763710790878_14c5f190=[2025-11-21 15\:39\:50] 鍙栧崱鎿嶄綔锛氬崱妲�53琚鐞嗗憳鍙栧崱
-log_1763710795914_e6bed17f=[2025-11-21 15\:39\:55] 鍙栧崱鎿嶄綔锛氬崱妲�54琚鐞嗗憳鍙栧崱
-log_1763710800956_8dce7236=[2025-11-21 15\:40\:00] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763710805994_a2db9e8c=[2025-11-21 15\:40\:05] 鍙栧崱鎿嶄綔锛氬崱妲�56琚鐞嗗憳鍙栧崱
-log_1763710811028_a8d51351=[2025-11-21 15\:40\:11] 鍙栧崱鎿嶄綔锛氬崱妲�57琚鐞嗗憳鍙栧崱
-log_1763710816051_8e739946=[2025-11-21 15\:40\:16] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763710821079_97f443a0=[2025-11-21 15\:40\:21] 鍙栧崱鎿嶄綔锛氬崱妲�58琚鐞嗗憳鍙栧崱
-log_1763710826129_6b6a9bef=[2025-11-21 15\:40\:26] 鍙栧崱鎿嶄綔锛氬崱妲�59琚鐞嗗憳鍙栧崱
-log_1763710831168_7aa2fec2=[2025-11-21 15\:40\:31] 鍙栧崱鎿嶄綔锛氬崱妲�60琚鐞嗗憳鍙栧崱
-log_1763710836208_cbc1493c=[2025-11-21 15\:40\:36] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711168072_7a637b83=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�1琚鐞嗗憳鍙栧崱
-log_1763711168170_6eb3dca2=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�2琚鐞嗗憳鍙栧崱
-log_1763711168270_9dfe9ac0=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�3琚鐞嗗憳鍙栧崱
-log_1763711168370_0e757e2d=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�4琚鐞嗗憳鍙栧崱
-log_1763711168470_bb1dfc2f=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�5琚鐞嗗憳鍙栧崱
-log_1763711168570_6d6b4073=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�6琚鐞嗗憳鍙栧崱
-log_1763711168669_3cfb4ace=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�7琚鐞嗗憳鍙栧崱
-log_1763711168769_ba4e8f33=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�8琚鐞嗗憳鍙栧崱
-log_1763711168870_1c83d283=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�9琚鐞嗗憳鍙栧崱
-log_1763711168968_16b096e0=[2025-11-21 15\:46\:08] 鍙栧崱鎿嶄綔锛氬崱妲�10琚鐞嗗憳鍙栧崱
-log_1763711169070_d8dd15fb=[2025-11-21 15\:46\:09] 鍙栧崱鎿嶄綔锛氬崱妲�11琚鐞嗗憳鍙栧崱
-log_1763711169169_5918a8ad=[2025-11-21 15\:46\:09] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
-log_1763711169269_6149934f=[2025-11-21 15\:46\:09] 鍙栧崱鎿嶄綔锛氬崱妲�13琚鐞嗗憳鍙栧崱
-log_1763711169369_d661fd92=[2025-11-21 15\:46\:09] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
-log_1763711169470_4f7a20e7=[2025-11-21 15\:46\:09] 鍙栧崱鎿嶄綔锛氬崱妲�15琚鐞嗗憳鍙栧崱
-log_1763711169569_be376f54=[2025-11-21 15\:46\:09] 鍙栧崱鎿嶄綔锛氬崱妲�16琚鐞嗗憳鍙栧崱
-log_1763711169721_f89247f7=[2025-11-21 15\:46\:09] 鍙栧崱鎿嶄綔锛氬崱妲�17琚鐞嗗憳鍙栧崱
-log_1763711169820_361b5763=[2025-11-21 15\:46\:09] 鍙栧崱鎿嶄綔锛氬崱妲�18琚鐞嗗憳鍙栧崱
-log_1763711169918_58ac9aff=[2025-11-21 15\:46\:09] 鍙栧崱鎿嶄綔锛氬崱妲�19琚鐞嗗憳鍙栧崱
-log_1763711170019_05f162db=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�20琚鐞嗗憳鍙栧崱
-log_1763711170120_400f321f=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�21琚鐞嗗憳鍙栧崱
-log_1763711170220_f28795df=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�22琚鐞嗗憳鍙栧崱
-log_1763711170320_6c1ec7b4=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
-log_1763711170420_123cd886=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�24琚鐞嗗憳鍙栧崱
-log_1763711170518_e12bca59=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�25琚鐞嗗憳鍙栧崱
-log_1763711170619_734131eb=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�26琚鐞嗗憳鍙栧崱
-log_1763711170720_993b63cb=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�27琚鐞嗗憳鍙栧崱
-log_1763711170820_d7232328=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�28琚鐞嗗憳鍙栧崱
-log_1763711170920_c6a6fbf9=[2025-11-21 15\:46\:10] 鍙栧崱鎿嶄綔锛氬崱妲�29琚鐞嗗憳鍙栧崱
-log_1763711171020_410bcebc=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�30琚鐞嗗憳鍙栧崱
-log_1763711171170_e6790075=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�31琚鐞嗗憳鍙栧崱
-log_1763711171269_84e5843c=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�32琚鐞嗗憳鍙栧崱
-log_1763711171369_c3e6d9e3=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�33琚鐞嗗憳鍙栧崱
-log_1763711171469_2111fab1=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�34琚鐞嗗憳鍙栧崱
-log_1763711171569_fdb37f62=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�35琚鐞嗗憳鍙栧崱
-log_1763711171669_a00d8931=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�36琚鐞嗗憳鍙栧崱
-log_1763711171768_993fe6d8=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�37琚鐞嗗憳鍙栧崱
-log_1763711171869_aa296e9d=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�38琚鐞嗗憳鍙栧崱
-log_1763711171969_198e8166=[2025-11-21 15\:46\:11] 鍙栧崱鎿嶄綔锛氬崱妲�39琚鐞嗗憳鍙栧崱
-log_1763711172069_47f47189=[2025-11-21 15\:46\:12] 鍙栧崱鎿嶄綔锛氬崱妲�40琚鐞嗗憳鍙栧崱
-log_1763711172169_a0fe6996=[2025-11-21 15\:46\:12] 鍙栧崱鎿嶄綔锛氬崱妲�41琚鐞嗗憳鍙栧崱
-log_1763711172270_f829f19c=[2025-11-21 15\:46\:12] 鍙栧崱鎿嶄綔锛氬崱妲�42琚鐞嗗憳鍙栧崱
-log_1763711172368_544e99ef=[2025-11-21 15\:46\:12] 鍙栧崱鎿嶄綔锛氬崱妲�43琚鐞嗗憳鍙栧崱
-log_1763711172469_35271c30=[2025-11-21 15\:46\:12] 鍙栧崱鎿嶄綔锛氬崱妲�44琚鐞嗗憳鍙栧崱
-log_1763711172569_007a7812=[2025-11-21 15\:46\:12] 鍙栧崱鎿嶄綔锛氬崱妲�45琚鐞嗗憳鍙栧崱
-log_1763711172669_a9d07106=[2025-11-21 15\:46\:12] 鍙栧崱鎿嶄綔锛氬崱妲�46琚鐞嗗憳鍙栧崱
-log_1763711172819_70bacc6a=[2025-11-21 15\:46\:12] 鍙栧崱鎿嶄綔锛氬崱妲�47琚鐞嗗憳鍙栧崱
-log_1763711172919_b0739863=[2025-11-21 15\:46\:12] 鍙栧崱鎿嶄綔锛氬崱妲�48琚鐞嗗憳鍙栧崱
-log_1763711173020_443f36ed=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�49琚鐞嗗憳鍙栧崱
-log_1763711173120_ad2656d1=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�50琚鐞嗗憳鍙栧崱
-log_1763711173220_cb6c90a2=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�51琚鐞嗗憳鍙栧崱
-log_1763711173318_5b3b3197=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�52琚鐞嗗憳鍙栧崱
-log_1763711173419_cb609033=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�53琚鐞嗗憳鍙栧崱
-log_1763711173520_f3fbfaa3=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�54琚鐞嗗憳鍙栧崱
-log_1763711173620_a6626517=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711173720_119445bc=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�56琚鐞嗗憳鍙栧崱
-log_1763711173820_34259d08=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�57琚鐞嗗憳鍙栧崱
-log_1763711173918_9b8dd187=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711173919_78e51f34=[2025-11-21 15\:46\:13] 鍙栧崱鎿嶄綔锛氬崱妲�58琚鐞嗗憳鍙栧崱
-log_1763711174020_de1b1d16=[2025-11-21 15\:46\:14] 鍙栧崱鎿嶄綔锛氬崱妲�59琚鐞嗗憳鍙栧崱
-log_1763711174120_269ca2e6=[2025-11-21 15\:46\:14] 鍙栧崱鎿嶄綔锛氬崱妲�60琚鐞嗗憳鍙栧崱
-log_1763711174220_660bae5f=[2025-11-21 15\:46\:14] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711174519_b989bf73=[2025-11-21 15\:46\:14] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711174820_64ba2235=[2025-11-21 15\:46\:14] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711175119_4d03fcbf=[2025-11-21 15\:46\:15] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711175420_d68f2c75=[2025-11-21 15\:46\:15] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711175719_e0fd7858=[2025-11-21 15\:46\:15] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711176020_c70ee0f2=[2025-11-21 15\:46\:16] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711176319_38854f73=[2025-11-21 15\:46\:16] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711176620_41d8db8a=[2025-11-21 15\:46\:16] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763711179015_2952f952=[2025-11-21 15\:46\:19] 绠$悊鍛樺凡灏嗗叏閮ㄥ崱妲藉凡缁忔墦寮�璇峰彇鍗�
-log_1763713705096_9d5670de=[2025-11-21 16\:28\:25] DDCC0008F00C515AA55AA5027A81;type2鎺у埗鎵撳紑12鏌滈棬
-log_1763713705463_ebe6da20=[2025-11-21 16\:28\:25] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
-log_1763715591886_1ac9cc5a=[2025-11-21 16\:59\:51] DDCC0008F013515AA55AA502BB6F;type2鎺у埗鎵撳紑19鏌滈棬
-log_1763715592224_8af42a4f=[2025-11-21 16\:59\:52] 鍙栧崱鎿嶄綔锛氬崱妲�19琚鐞嗗憳鍙栧崱
-log_1763715735797_38b1a47b=[2025-11-21 17\:02\:15] DDCC0008F00D515AA55AA502BA91;type2鎺у埗鎵撳紑13鏌滈棬
-log_1763716227580_f95bc09a=[2025-11-21 17\:10\:27] DDCC0008F00C515AA55AA5027A81;type2鎺у埗鎵撳紑12鏌滈棬
-log_1763716227937_a73d3b5b=[2025-11-21 17\:10\:27] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
-log_1763716377421_6577a6ec=[2025-11-21 17\:12\:57] 鍙栧崱鎿嶄綔锛氬崱妲�1琚鐞嗗憳鍙栧崱
-log_1763716377517_f6fe46de=[2025-11-21 17\:12\:57] 鍙栧崱鎿嶄綔锛氬崱妲�2琚鐞嗗憳鍙栧崱
-log_1763716377617_d4676872=[2025-11-21 17\:12\:57] 鍙栧崱鎿嶄綔锛氬崱妲�3琚鐞嗗憳鍙栧崱
-log_1763716377717_f8ce2321=[2025-11-21 17\:12\:57] 鍙栧崱鎿嶄綔锛氬崱妲�4琚鐞嗗憳鍙栧崱
-log_1763716377817_f2002ba4=[2025-11-21 17\:12\:57] 鍙栧崱鎿嶄綔锛氬崱妲�5琚鐞嗗憳鍙栧崱
-log_1763716377916_112dc429=[2025-11-21 17\:12\:57] 鍙栧崱鎿嶄綔锛氬崱妲�6琚鐞嗗憳鍙栧崱
-log_1763716378018_4f02bd40=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�7琚鐞嗗憳鍙栧崱
-log_1763716378116_91cb3159=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�8琚鐞嗗憳鍙栧崱
-log_1763716378217_d21090a4=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�9琚鐞嗗憳鍙栧崱
-log_1763716378316_eee62d13=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�10琚鐞嗗憳鍙栧崱
-log_1763716378416_49dfa52f=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�11琚鐞嗗憳鍙栧崱
-log_1763716378516_97fd0ebf=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
-log_1763716378617_14298d78=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�13琚鐞嗗憳鍙栧崱
-log_1763716378716_89f7fe99=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
-log_1763716378867_1ee85650=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�15琚鐞嗗憳鍙栧崱
-log_1763716378968_de0d5066=[2025-11-21 17\:12\:58] 鍙栧崱鎿嶄綔锛氬崱妲�16琚鐞嗗憳鍙栧崱
-log_1763716379065_030b8980=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�17琚鐞嗗憳鍙栧崱
-log_1763716379166_2af275ec=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�18琚鐞嗗憳鍙栧崱
-log_1763716379267_b667a29e=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�19琚鐞嗗憳鍙栧崱
-log_1763716379367_2498a809=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�20琚鐞嗗憳鍙栧崱
-log_1763716379467_bfe1598a=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�21琚鐞嗗憳鍙栧崱
-log_1763716379567_cb9eb62b=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�22琚鐞嗗憳鍙栧崱
-log_1763716379666_688ebc2f=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
-log_1763716379766_0087530c=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�24琚鐞嗗憳鍙栧崱
-log_1763716379867_4611e338=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�25琚鐞嗗憳鍙栧崱
-log_1763716379967_fdaa10ff=[2025-11-21 17\:12\:59] 鍙栧崱鎿嶄綔锛氬崱妲�26琚鐞嗗憳鍙栧崱
-log_1763716380067_7066ebe8=[2025-11-21 17\:13\:00] 鍙栧崱鎿嶄綔锛氬崱妲�27琚鐞嗗憳鍙栧崱
-log_1763716380167_daa20dbf=[2025-11-21 17\:13\:00] 鍙栧崱鎿嶄綔锛氬崱妲�28琚鐞嗗憳鍙栧崱
-log_1763716380266_a7c6e4f7=[2025-11-21 17\:13\:00] 鍙栧崱鎿嶄綔锛氬崱妲�29琚鐞嗗憳鍙栧崱
-log_1763716380366_1dc8dacf=[2025-11-21 17\:13\:00] 鍙栧崱鎿嶄綔锛氬崱妲�30琚鐞嗗憳鍙栧崱
-log_1763716380516_d28c278d=[2025-11-21 17\:13\:00] 鍙栧崱鎿嶄綔锛氬崱妲�31琚鐞嗗憳鍙栧崱
-log_1763716380616_8e7dc215=[2025-11-21 17\:13\:00] 鍙栧崱鎿嶄綔锛氬崱妲�32琚鐞嗗憳鍙栧崱
-log_1763716380716_2d57a4ef=[2025-11-21 17\:13\:00] 鍙栧崱鎿嶄綔锛氬崱妲�33琚鐞嗗憳鍙栧崱
-log_1763716380817_27f8849c=[2025-11-21 17\:13\:00] 鍙栧崱鎿嶄綔锛氬崱妲�34琚鐞嗗憳鍙栧崱
-log_1763716380915_556a565a=[2025-11-21 17\:13\:00] 鍙栧崱鎿嶄綔锛氬崱妲�35琚鐞嗗憳鍙栧崱
-log_1763716381016_a66e5689=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�36琚鐞嗗憳鍙栧崱
-log_1763716381116_2f621f7e=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�37琚鐞嗗憳鍙栧崱
-log_1763716381216_8ee638c7=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�38琚鐞嗗憳鍙栧崱
-log_1763716381316_4a494195=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�39琚鐞嗗憳鍙栧崱
-log_1763716381417_d2e4fce3=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�40琚鐞嗗憳鍙栧崱
-log_1763716381516_ad2c841b=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�41琚鐞嗗憳鍙栧崱
-log_1763716381616_f769b6ee=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�42琚鐞嗗憳鍙栧崱
-log_1763716381716_749a04bd=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�43琚鐞嗗憳鍙栧崱
-log_1763716381816_36768fce=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�44琚鐞嗗憳鍙栧崱
-log_1763716381916_8dfccd10=[2025-11-21 17\:13\:01] 鍙栧崱鎿嶄綔锛氬崱妲�45琚鐞嗗憳鍙栧崱
-log_1763716382066_05896cc1=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�46琚鐞嗗憳鍙栧崱
-log_1763716382167_4f94fd40=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�47琚鐞嗗憳鍙栧崱
-log_1763716382267_e13e3734=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�48琚鐞嗗憳鍙栧崱
-log_1763716382367_b5591084=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�49琚鐞嗗憳鍙栧崱
-log_1763716382465_8b6a0f92=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�50琚鐞嗗憳鍙栧崱
-log_1763716382566_039d11f4=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�51琚鐞嗗憳鍙栧崱
-log_1763716382667_97480314=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�52琚鐞嗗憳鍙栧崱
-log_1763716382767_1ce157e6=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�53琚鐞嗗憳鍙栧崱
-log_1763716382867_2128e536=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�54琚鐞嗗憳鍙栧崱
-log_1763716382967_f3041239=[2025-11-21 17\:13\:02] 鍙栧崱鎿嶄綔锛氬崱妲�55琚鐞嗗憳鍙栧崱
-log_1763716383066_ea1f332b=[2025-11-21 17\:13\:03] 鍙栧崱鎿嶄綔锛氬崱妲�56琚鐞嗗憳鍙栧崱
-log_1763716383166_9d894f87=[2025-11-21 17\:13\:03] 鍙栧崱鎿嶄綔锛氬崱妲�57琚鐞嗗憳鍙栧崱
-log_1763716383267_b0a3c9a1=[2025-11-21 17\:13\:03] 鍙栧崱鎿嶄綔锛氬崱妲�58琚鐞嗗憳鍙栧崱
-log_1763716383368_65a77f09=[2025-11-21 17\:13\:03] 鍙栧崱鎿嶄綔锛氬崱妲�59琚鐞嗗憳鍙栧崱
-log_1763716383468_1d41c7bb=[2025-11-21 17\:13\:03] 鍙栧崱鎿嶄綔锛氬崱妲�60琚鐞嗗憳鍙栧崱
-log_1763716384559_af7c9cc7=[2025-11-21 17\:13\:04] 绠$悊鍛樺凡灏嗗叏閮ㄥ崱妲藉凡缁忔墦寮�璇峰彇鍗�
+#\u64CD\u4F5C\u65E5\u5FD7\u8BB0\u5F55 - \u6700\u540E\u66F4\u65B0: Fri Nov 21 17:44:41 CST 2025
+#Fri Nov 21 17:44:41 CST 2025
+log_1763718093181_61c0dfbe=[2025-11-21 17\:41\:33] 鍙栧崱鎿嶄綔锛氬崱妲�13琚鐞嗗憳鍙栧崱
+log_1763718093533_c3563f25=[2025-11-21 17\:41\:33] 鍙栧崱鎿嶄綔锛氬崱妲�13琚鐞嗗憳鍙栧崱
+log_1763718147310_e84a6b5b=[2025-11-21 17\:42\:27] 鍙栧崱鎿嶄綔锛氬崱妲�22琚鐞嗗憳鍙栧崱
+log_1763718150490_e2f94107=[2025-11-21 17\:42\:30] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
+log_1763718150843_c9147690=[2025-11-21 17\:42\:30] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
+log_1763718198841_27d9aa77=[2025-11-21 17\:43\:18] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
+log_1763718199155_4cd5e39f=[2025-11-21 17\:43\:19] 鍙栧崱鎿嶄綔锛氬崱妲�12琚鐞嗗憳鍙栧崱
+log_1763718207706_07760e2f=[2025-11-21 17\:43\:27] DDCC0008F003515AA55AA5027A7E;type2鎺у埗鎵撳紑3鏌滈棬
+log_1763718208053_ee80022a=[2025-11-21 17\:43\:28] 3鍙峰崱妲藉彇鍗″け璐�
+log_1763718208759_e8be3ec0=[2025-11-21 17\:43\:28] DDCC0008F003515AA55AA5027A7E;type2鎺у埗鎵撳紑3鏌滈棬
+log_1763718209104_247397ce=[2025-11-21 17\:43\:29] 鍙栧崱鎿嶄綔锛氬崱妲�3琚鐞嗗憳鍙栧崱
+log_1763718275945_e2a4d769=[2025-11-21 17\:44\:35] DDCC0008F012515AA55AA5027B7F;type2鎺у埗鎵撳紑18鏌滈棬
+log_1763718276293_034826af=[2025-11-21 17\:44\:36] 鍙栧崱鎿嶄綔锛氬崱妲�18琚鐞嗗憳鍙栧崱
+log_1763718276666_18777eee=[2025-11-21 17\:44\:36] DDCC0008F017515AA55AA5027B2A;type2鎺у埗鎵撳紑23鏌滈棬
+log_1763718276992_c9ad983a=[2025-11-21 17\:44\:36] 鍙栧崱鎿嶄綔锛氬崱妲�23琚鐞嗗憳鍙栧崱
+log_1763718277268_15912a52=[2025-11-21 17\:44\:37] DDCC0008F01C515AA55AA502BB90;type2鎺у埗鎵撳紑28鏌滈棬
+log_1763718277593_d9b897ba=[2025-11-21 17\:44\:37] 鍙栧崱鎿嶄綔锛氬崱妲�28琚鐞嗗憳鍙栧崱
+log_1763718277892_72d570bd=[2025-11-21 17\:44\:37] DDCC0008F018515AA55AA5027BD5;type2鎺у埗鎵撳紑24鏌滈棬
+log_1763718278242_75327d86=[2025-11-21 17\:44\:38] 鍙栧崱鎿嶄綔锛氬崱妲�24琚鐞嗗憳鍙栧崱
+log_1763718278782_a91dddda=[2025-11-21 17\:44\:38] DDCC0008F00E515AA55AA502BAA2;type2鎺у埗鎵撳紑14鏌滈棬
+log_1763718279143_4e4cb89a=[2025-11-21 17\:44\:39] 鍙栧崱鎿嶄綔锛氬崱妲�14琚鐞嗗憳鍙栧崱
+log_1763718279202_9c58a3b9=[2025-11-21 17\:44\:39] DDCC0008F013515AA55AA502BB6F;type2鎺у埗鎵撳紑19鏌滈棬
+log_1763718279543_9e40ceff=[2025-11-21 17\:44\:39] 鍙栧崱鎿嶄綔锛氬崱妲�19琚鐞嗗憳鍙栧崱
+log_1763718279709_4483c6c4=[2025-11-21 17\:44\:39] DDCC0008F01D515AA55AA5027B80;type2鎺у埗鎵撳紑29鏌滈棬
+log_1763718280043_06750db2=[2025-11-21 17\:44\:40] 鍙栧崱鎿嶄綔锛氬崱妲�29琚鐞嗗憳鍙栧崱
+log_1763718280658_b6288ce6=[2025-11-21 17\:44\:40] DDCC0008F00F515AA55AA5027AB2;type2鎺у埗鎵撳紑15鏌滈棬
+log_1763718280993_f6f218cc=[2025-11-21 17\:44\:40] 鍙栧崱鎿嶄綔锛氬崱妲�15琚鐞嗗憳鍙栧崱
+log_1763718281030_2d1edd96=[2025-11-21 17\:44\:41] DDCC0008F014515AA55AA5027B19;type2鎺у埗鎵撳紑20鏌滈棬
+log_1763718281392_c8b2ee8c=[2025-11-21 17\:44\:41] 鍙栧崱鎿嶄綔锛氬崱妲�20琚鐞嗗憳鍙栧崱
+log_1763718281404_56d7aa71=[2025-11-21 17\:44\:41] DDCC0008F019515AA55AA502BBC5;type2鎺у埗鎵撳紑25鏌滈棬
+log_1763718281743_12a79e45=[2025-11-21 17\:44\:41] 鍙栧崱鎿嶄綔锛氬崱妲�25琚鐞嗗憳鍙栧崱
diff --git a/src/chuankou/Sendmsg.java b/src/chuankou/Sendmsg.java
index 0b51605..79ace5c 100644
--- a/src/chuankou/Sendmsg.java
+++ b/src/chuankou/Sendmsg.java
@@ -1,6 +1,8 @@
package chuankou;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
import javax.swing.SwingWorker;
@@ -14,35 +16,55 @@
/**
* 涓插彛娑堟伅鍙戦�佸伐鍏风被
* 鎻愪緵楂樻�ц兘鐨勪覆鍙f秷鎭彂閫佸姛鑳斤紝閫傚悎楂橀璋冪敤
+ * 浼樺寲鍐呭瓨浣跨敤锛岄伩鍏嶉暱鏃堕棿杩愯鍐呭瓨娉勬紡
*/
public class Sendmsg {
// 闈欐�佷覆鍙f湇鍔″疄渚�
private static volatile SerialPortService serialService = null;
- private static volatile boolean isPortOpen = false;
+ private static final AtomicBoolean isPortOpen = new AtomicBoolean(false);
// 鏀逛负闈瀎inal锛屾敮鎸佸姩鎬佹帶鍒�
- private static boolean DEBUG_MODE = false;
+ private static volatile boolean DEBUG_MODE = false;
- // 鏃ユ湡鏍煎紡鍖�
- private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.SSS");
+ // 浣跨敤ThreadLocal淇濊瘉SimpleDateFormat绾跨▼瀹夊叏
+ private static final ThreadLocal<SimpleDateFormat> TIME_FORMATTER =
+ ThreadLocal.withInitial(() -> new SimpleDateFormat("HH:mm:ss.SSS"));
+
+ // 缂撳瓨瀛楃涓叉瀯寤哄櫒锛屽噺灏戝璞″垱寤�
+ private static final ThreadLocal<StringBuilder> STRING_BUILDER_CACHE =
+ ThreadLocal.withInitial(() -> new StringBuilder(128));
+
+ // 璁板綍娲昏穬鐨凷wingWorker锛屼究浜庣鐞�
+ private static final ConcurrentHashMap<String, SwingWorker<?, ?>> ACTIVE_WORKERS =
+ new ConcurrentHashMap<>();
/**鍙戝崱鏈嶅姟鍣ㄦ帶鍒舵墦寮�鏌愪釜鏌滈棬璋冪敤鎸囦护
* @param int slotId鏌滈棬缂栧彿1-60
* @param int type 1鏄湇鍔″櫒鍙戝崱锛�2鏄鐞嗗憳鍙戝崱*/
public static boolean opendoorzhiling(int slotId,int type) {
- lunxun.setSendChaxunzhiling(false);//鏆傚仠鏌ヨ鎸囦护
- // 璋冪敤OpenDoor鐢熸垚寮�闂ㄦ寚浠�
- String command = OpenDoor.openOneDoor(slotId, type);
- boolean sendResult = Sendmsg.sendMessage(command);
- String mes=command+";type"+type+"鎺у埗鎵撳紑"+slotId+"鏌滈棬";
- Charulog.logOperation(mes);
- if (lunxun.DEBUG_ENABLED) {
- SystemDebugDialog.appendAsciiData(mes);
+ lunxun.setSendChaxunzhiling(false);//鏆傚仠鏌ヨ鎸囦护
+
+ try {
+ // 璋冪敤OpenDoor鐢熸垚寮�闂ㄦ寚浠�
+ String command = OpenDoor.openOneDoor(slotId, type);
+ boolean sendResult = Sendmsg.sendMessage(command);
+
+ StringBuilder mesBuilder = STRING_BUILDER_CACHE.get();
+ mesBuilder.setLength(0); // 娓呯┖閲嶇敤
+ mesBuilder.append(command).append(";type").append(type).append("鎺у埗鎵撳紑").append(slotId).append("鏌滈棬");
+ String mes = mesBuilder.toString();
+
+ Charulog.logOperation(mes);
+ if (lunxun.DEBUG_ENABLED) {
+ SystemDebugDialog.appendAsciiData(mes);
+ }
+
+ return sendResult;
+ } finally {
+ // 纭繚鎭㈠鏌ヨ鎸囦护
+ lunxun.setSendChaxunzhiling(true);
}
-
- lunxun.setSendChaxunzhiling(true);//寮�濮嬫煡璇㈡寚浠�
- return sendResult;
}
/**
@@ -50,13 +72,16 @@
* @param type 鎿嶄綔绫诲瀷锛�1-鏈嶅姟鍣ㄥ彂鍗★紝2-绠$悊鍛樺彂鍗�
*/
public static void openAllSlots(int type) {
- lunxun.setSendChaxunzhiling(false);//鏆傚仠鏌ヨ鎸囦护
+ lunxun.setSendChaxunzhiling(false);//鏆傚仠鏌ヨ鎸囦护
+
+ String workerKey = "openAllSlots_" + System.currentTimeMillis();
+
// 浣跨敤SwingWorker鍦ㄥ悗鍙版墽琛岋紝閬垮厤闃诲UI
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
// 閬嶅巻鎵�鏈夊崱妲斤紙1-60锛�
- for (int slotId = 1; slotId <= 60; slotId++) {
+ for (int slotId = 1; slotId <= 60 && !isCancelled(); slotId++) {
try {
// 鐢熸垚寮�闂ㄦ寚浠�
String command = OpenDoor.openOneDoor(slotId, type);
@@ -68,12 +93,15 @@
Errlog.logOperation("鍙戦�佹寚浠ゅ埌鍗℃Ы " + slotId + " 澶辫触");
}
- // 闂撮殧100ms
+ // 闂撮殧100ms锛屼絾妫�鏌ユ槸鍚﹁鍙栨秷
Thread.sleep(100);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ break; // 琚腑鏂椂閫�鍑哄惊鐜�
} catch (Exception e) {
Errlog.logOperation("澶勭悊鍗℃Ы " + slotId + " 鏃跺彂鐢熼敊璇�: " + e.getMessage());
- e.printStackTrace();
+ // 缁х画澶勭悊涓嬩竴涓崱妲斤紝涓嶄腑鏂惊鐜�
}
}
return null;
@@ -81,22 +109,48 @@
@Override
protected void done() {
- // 鍙�夛細瀹屾垚鍚庡彲浠ユ坊鍔犲洖璋冨鐞�
- System.out.println("鍏ㄩ儴鍗℃Ы寮�闂ㄦ寚浠ゅ彂閫佸畬鎴�");
- String types="绠$悊鍛�";
- if(type==1) {
- types="鏈嶅姟鍣ㄦ寚浠�";
+ try {
+ // 娓呯悊worker寮曠敤
+ ACTIVE_WORKERS.remove(workerKey);
+
+ // 鍙�夛細瀹屾垚鍚庡彲浠ユ坊鍔犲洖璋冨鐞�
+ if (!isCancelled()) {
+ StringBuilder messageBuilder = STRING_BUILDER_CACHE.get();
+ messageBuilder.setLength(0);
+
+ String types = "绠$悊鍛�";
+ if(type == 1) {
+ types = "鏈嶅姟鍣ㄦ寚浠�";
+ }
+ messageBuilder.append(types).append("宸插皢鍏ㄩ儴鍗℃Ы宸茬粡鎵撳紑璇峰彇鍗�");
+ String message = messageBuilder.toString();
+
+ Dingshidialog.showTimedDialog(null, 5, message);
+ Charulog.logOperation(message);
+ }
+ } finally {
+ // 纭繚鎭㈠鏌ヨ鎸囦护
+ lunxun.setSendChaxunzhiling(true);
}
- String message=types+"宸插皢鍏ㄩ儴鍗℃Ы宸茬粡鎵撳紑璇峰彇鍗�";
- Dingshidialog.showTimedDialog(null,5,message);
- Charulog.logOperation(message);
}
};
+ // 璁板綍worker渚夸簬绠$悊
+ ACTIVE_WORKERS.put(workerKey, worker);
worker.execute();
- lunxun.setSendChaxunzhiling(true);//寮�濮嬫煡璇㈡寚浠�
}
+ /**
+ * 鍙栨秷鎵�鏈夋鍦ㄦ墽琛岀殑浠诲姟
+ */
+ public static void cancelAllTasks() {
+ ACTIVE_WORKERS.forEach((key, worker) -> {
+ if (!worker.isDone()) {
+ worker.cancel(true);
+ }
+ });
+ ACTIVE_WORKERS.clear();
+ }
/**
* 璁剧疆涓插彛鏈嶅姟瀹炰緥
@@ -105,7 +159,7 @@
*/
public static void setSerialService(SerialPortService service, boolean open) {
serialService = service;
- isPortOpen = open;
+ isPortOpen.set(open);
}
/**
@@ -119,7 +173,7 @@
* 鍙戦�佹秷鎭埌涓插彛锛堝甫閲嶈瘯鏈哄埗锛�
*/
public static boolean sendMessage(String message) {
- if (!isPortOpen || serialService == null) {
+ if (!isPortOpen.get() || serialService == null) {
Errlog.logOperation("[" + getCurrentTime() + "] 涓插彛鏈墦寮�锛屾棤娉曞彂閫佹暟鎹�");
return false;
}
@@ -159,17 +213,21 @@
break;
}
} else {
- Errlog.logOperation("[" + getCurrentTime() + "] 涓插彛鍙戦�佸け璐ワ紝鎸囦护: " + text.toUpperCase());
- Errlog.logOperation("[" + getCurrentTime() + "] 涓插彛鐘舵�� - 鎵撳紑: " + isPortOpen + ", 鏈嶅姟: " + (serialService != null));
- if (serialService != null) {
- Errlog.logOperation("[" + getCurrentTime() + "] 涓插彛鏈嶅姟鐘舵�� - 鏄惁鎵撳紑: " + serialService.isOpen());
+ if (DEBUG_MODE) {
+ Errlog.logOperation("[" + getCurrentTime() + "] 涓插彛鍙戦�佸け璐ワ紝鎸囦护: " + text.toUpperCase());
+ Errlog.logOperation("[" + getCurrentTime() + "] 涓插彛鐘舵�� - 鎵撳紑: " + isPortOpen.get() + ", 鏈嶅姟: " + (serialService != null));
+ if (serialService != null) {
+ Errlog.logOperation("[" + getCurrentTime() + "] 涓插彛鏈嶅姟鐘舵�� - 鏄惁鎵撳紑: " + serialService.isOpen());
+ }
}
return false;
}
}
} catch (Exception e) {
Errlog.logOperation("[" + getCurrentTime() + "] 鍙戦�佸紓甯革紝鎸囦护: " + text.toUpperCase());
- e.printStackTrace();
+ if (DEBUG_MODE) {
+ e.printStackTrace();
+ }
return false;
}
}
@@ -182,7 +240,7 @@
* @return 涓插彛鎵撳紑鐘舵��
*/
public static boolean isPortOpen() {
- boolean open = isPortOpen && serialService != null;
+ boolean open = isPortOpen.get() && serialService != null;
if (!open && DEBUG_MODE) {
Errlog.logOperation("[" + getCurrentTime() + "] 涓插彛鐘舵�佹鏌�: 鏈墦寮�");
}
@@ -229,7 +287,8 @@
return "";
}
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = STRING_BUILDER_CACHE.get();
+ sb.setLength(0);
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
@@ -241,7 +300,7 @@
* @return 鏃堕棿瀛楃涓�
*/
private static String getCurrentTime() {
- return timeFormat.format(new Date());
+ return TIME_FORMATTER.get().format(new Date());
}
/**
@@ -267,4 +326,26 @@
DEBUG_MODE = debug;
System.out.println("[" + getCurrentTime() + "] Sendmsg璋冭瘯妯″紡: " + (debug ? "鍚敤" : "绂佺敤"));
}
+
+ /**
+ * 娓呯悊璧勬簮锛岄槻姝㈠唴瀛樻硠婕�
+ */
+ public static void cleanup() {
+ cancelAllTasks();
+
+ // 娓呯悊ThreadLocal璧勬簮
+ TIME_FORMATTER.remove();
+ STRING_BUILDER_CACHE.remove();
+
+ if (DEBUG_MODE) {
+ System.out.println("[" + getCurrentTime() + "] Sendmsg璧勬簮娓呯悊瀹屾垚");
+ }
+ }
+
+ /**
+ * 鑾峰彇娲昏穬浠诲姟鏁伴噺
+ */
+ public static int getActiveTaskCount() {
+ return ACTIVE_WORKERS.size();
+ }
}
\ No newline at end of file
diff --git a/src/chuankou/SerialDataReceiver.java b/src/chuankou/SerialDataReceiver.java
index 6c5c56c..f55892d 100644
--- a/src/chuankou/SerialDataReceiver.java
+++ b/src/chuankou/SerialDataReceiver.java
@@ -6,21 +6,26 @@
public class SerialDataReceiver {
private static final int BUFFER_SIZE = 1024;
- private static byte[] staticDataBuffer = new byte[BUFFER_SIZE];
- private static int staticBufferPosition = 0;
+ private static final int MIN_PACKET_LENGTH = 9;
+ private static final byte[] START_MARKER = {(byte) 0xDD, (byte) 0xCC};
+
+ // 浣跨敤闈為潤鎬佹垚鍛橀伩鍏嶅绾跨▼鐜涓嬬殑绔炰簤鏉′欢
+ private byte[] dataBuffer = new byte[BUFFER_SIZE];
+ private int bufferPosition = 0;
+ private final List<byte[]> reusablePackets = new ArrayList<>();
/**
- * 闈欐�佹柟娉曪細鎺ユ敹涓插彛鍘熷鏁版嵁骞惰В鏋愬畬鏁存暟鎹寘
+ * 瀹炰緥鏂规硶锛氭帴鏀朵覆鍙e師濮嬫暟鎹苟瑙f瀽瀹屾暣鏁版嵁鍖�
* @param rawData 鍘熷鏁版嵁
* @param debugEnabled 鏄惁鍚敤璋冭瘯
* @param maxRawDataPrintLength 鏈�澶ф墦鍗伴暱搴�
* @return 瑙f瀽鍑虹殑瀹屾暣鏁版嵁鍖呭垪琛紝濡傛灉娌℃湁瀹屾暣鍖呭垯杩斿洖绌哄垪琛�
*/
- public static List<byte[]> receiveData(byte[] rawData, boolean debugEnabled, int maxRawDataPrintLength) {
- List<byte[]> completePackets = new ArrayList<>();
+ public List<byte[]> receiveData(byte[] rawData, boolean debugEnabled, int maxRawDataPrintLength) {
+ reusablePackets.clear();
if (rawData == null || rawData.length == 0) {
- return completePackets;
+ return reusablePackets;
}
// 鎵撳嵃鍘熷鎺ユ敹鏁版嵁锛堣皟璇曠敤锛�
@@ -28,88 +33,114 @@
printRawData("鏀跺埌涓插彛鍘熷鏁版嵁", rawData, maxRawDataPrintLength);
}
- // 灏嗘暟鎹坊鍔犲埌缂撳啿鍖�
- if (staticBufferPosition + rawData.length > staticDataBuffer.length) {
+ // 妫�鏌ョ紦鍐插尯瀹归噺锛屽姩鎬佸鐞�
+ if (!ensureBufferCapacity(rawData.length)) {
// 缂撳啿鍖轰笉瓒虫椂锛屾竻鐞嗗苟閲嶆柊寮�濮�
- System.arraycopy(staticDataBuffer, staticBufferPosition - rawData.length,
- staticDataBuffer, 0, rawData.length);
- staticBufferPosition = rawData.length;
- } else {
- System.arraycopy(rawData, 0, staticDataBuffer, staticBufferPosition, rawData.length);
- staticBufferPosition += rawData.length;
+ if (debugEnabled) {
+ System.out.println("缂撳啿鍖轰笉瓒筹紝娓呯┖缂撳啿鍖洪噸鏂板紑濮�");
+ }
+ bufferPosition = 0;
}
- // 澶勭悊缂撳啿鍖轰腑鐨勬暟鎹苟鏀堕泦瀹屾暣鍖�
- processBuffer(completePackets, debugEnabled);
+ // 灏嗘暟鎹坊鍔犲埌缂撳啿鍖�
+ System.arraycopy(rawData, 0, dataBuffer, bufferPosition, rawData.length);
+ bufferPosition += rawData.length;
- return completePackets;
+ // 澶勭悊缂撳啿鍖轰腑鐨勬暟鎹苟鏀堕泦瀹屾暣鍖�
+ processBuffer(reusablePackets, debugEnabled);
+
+ return new ArrayList<>(reusablePackets);
+ }
+
+ /**
+ * 纭繚缂撳啿鍖烘湁瓒冲瀹归噺锛屽涓嶅鍒欏皾璇曞帇缂�
+ */
+ private boolean ensureBufferCapacity(int required) {
+ if (bufferPosition + required <= dataBuffer.length) {
+ return true;
+ }
+
+ // 灏濊瘯閫氳繃鍘嬬缉缂撳啿鍖烘潵鑵惧嚭绌洪棿
+ int startIndex = findStartMarker();
+ if (startIndex > 0) {
+ compactBuffer(startIndex);
+ return bufferPosition + required <= dataBuffer.length;
+ }
+
+ return false;
}
/**
* 澶勭悊缂撳啿鍖轰腑鐨勬暟鎹紝瑙f瀽瀹屾暣鏁版嵁鍖�
*/
- private static void processBuffer(List<byte[]> completePackets, boolean debugEnabled) {
- final int MIN_PACKET_LENGTH = 9;
- final byte[] START_MARKER = {(byte) 0xDD, (byte) 0xCC};
-
- while (staticBufferPosition >= MIN_PACKET_LENGTH) {
+ private void processBuffer(List<byte[]> completePackets, boolean debugEnabled) {
+ while (bufferPosition >= MIN_PACKET_LENGTH) {
// 鏌ユ壘璧峰鏍囪
- int startIndex = findStartMarker(START_MARKER);
+ int startIndex = findStartMarker();
if (startIndex == -1) {
// 娌℃湁鎵惧埌璧峰鏍囪锛屾竻绌烘棤鏁堟暟鎹�
if (debugEnabled) {
- //System.out.println("鏈壘鍒拌捣濮嬫爣璁帮紝娓呯┖缂撳啿鍖�");
+ System.out.println("鏈壘鍒拌捣濮嬫爣璁帮紝娓呯┖缂撳啿鍖�");
}
- staticBufferPosition = 0;
+ bufferPosition = 0;
return;
}
// 妫�鏌ユ槸鍚︽湁瓒冲鐨勬暟鎹鍙栨暟鎹暱搴�
- if (startIndex + 4 > staticBufferPosition) {
+ if (startIndex + 4 > bufferPosition) {
// 鏁版嵁涓嶈冻锛岀瓑寰呮洿澶氭暟鎹�
compactBuffer(startIndex);
return;
}
// 璇诲彇鏁版嵁闀垮害 (澶х搴�)
- int dataLength = ((staticDataBuffer[startIndex + 2] & 0xFF) << 8) |
- (staticDataBuffer[startIndex + 3] & 0xFF);
+ int dataLength = ((dataBuffer[startIndex + 2] & 0xFF) << 8) |
+ (dataBuffer[startIndex + 3] & 0xFF);
int totalPacketLength = 2 + 2 + dataLength + 2; // 璧峰鏍囪2 + 鏁版嵁闀垮害2 + 鏁版嵁鍐呭 + CRC2
+ // 妫�鏌ユ暟鎹暱搴︽湁鏁堟��
+ if (dataLength < 0 || totalPacketLength > BUFFER_SIZE) {
+ if (debugEnabled) {
+ System.out.println("鏃犳晥鏁版嵁闀垮害: " + dataLength + ", 璺宠繃璧峰瀛楄妭");
+ }
+ // 璺宠繃閿欒鐨勮捣濮嬫爣璁帮紝缁х画鏌ユ壘
+ compactBuffer(startIndex + 1);
+ continue;
+ }
+
// 妫�鏌ユ槸鍚︽敹鍒板畬鏁存暟鎹寘
- if (startIndex + totalPacketLength > staticBufferPosition) {
+ if (startIndex + totalPacketLength > bufferPosition) {
// 鏁版嵁鍖呬笉瀹屾暣锛岀瓑寰呮洿澶氭暟鎹�
compactBuffer(startIndex);
return;
}
// 鎻愬彇瀹屾暣鏁版嵁鍖�
- byte[] packet = new byte[totalPacketLength];
- System.arraycopy(staticDataBuffer, startIndex, packet, 0, totalPacketLength);
+ byte[] packet = Arrays.copyOfRange(dataBuffer, startIndex, startIndex + totalPacketLength);
if (debugEnabled) {
- //System.out.println("瑙f瀽鍒板畬鏁存暟鎹寘: " + bytesToHex(packet));
+ System.out.println("瑙f瀽鍒板畬鏁存暟鎹寘: " + bytesToHex(packet));
}
// 娣诲姞鍒拌繑鍥炲垪琛�
completePackets.add(packet);
// 绉诲姩缂撳啿鍖轰綅缃�
- int remaining = staticBufferPosition - (startIndex + totalPacketLength);
+ int remaining = bufferPosition - (startIndex + totalPacketLength);
if (remaining > 0) {
- System.arraycopy(staticDataBuffer, startIndex + totalPacketLength,
- staticDataBuffer, 0, remaining);
+ System.arraycopy(dataBuffer, startIndex + totalPacketLength,
+ dataBuffer, 0, remaining);
}
- staticBufferPosition = remaining;
+ bufferPosition = remaining;
}
}
/**
* 鏌ユ壘璧峰鏍囪浣嶇疆
*/
- private static int findStartMarker(byte[] startMarker) {
- for (int i = 0; i <= staticBufferPosition - startMarker.length; i++) {
- if (staticDataBuffer[i] == startMarker[0] && staticDataBuffer[i + 1] == startMarker[1]) {
+ private int findStartMarker() {
+ for (int i = 0; i <= bufferPosition - START_MARKER.length; i++) {
+ if (dataBuffer[i] == START_MARKER[0] && dataBuffer[i + 1] == START_MARKER[1]) {
return i;
}
}
@@ -119,20 +150,20 @@
/**
* 鍘嬬缉缂撳啿鍖猴紝灏嗘湁鏁堟暟鎹Щ鍒板紑澶�
*/
- private static void compactBuffer(int startIndex) {
- if (startIndex > 0) {
- System.arraycopy(staticDataBuffer, startIndex, staticDataBuffer, 0,
- staticBufferPosition - startIndex);
- staticBufferPosition -= startIndex;
+ private void compactBuffer(int startIndex) {
+ if (startIndex > 0 && startIndex < bufferPosition) {
+ System.arraycopy(dataBuffer, startIndex, dataBuffer, 0,
+ bufferPosition - startIndex);
+ bufferPosition -= startIndex;
}
}
/**
* 鎵撳嵃鍘熷鏁版嵁锛堣皟璇曠敤锛�
*/
- private static void printRawData(String prefix, byte[] data, int maxPrintLength) {
+ private void printRawData(String prefix, byte[] data, int maxPrintLength) {
if (data == null || data.length == 0) {
- //System.out.println(prefix + ": 绌烘暟鎹�");
+ System.out.println(prefix + ": 绌烘暟鎹�");
return;
}
@@ -148,13 +179,13 @@
sb.append("... [鎴柇锛屾�婚暱搴�: ").append(data.length).append("]");
}
- //System.out.println(sb.toString());
+ System.out.println(sb.toString());
}
/**
* 宸ュ叿鏂规硶锛氬瓧鑺傛暟缁勮浆鍗佸叚杩涘埗瀛楃涓�
*/
- private static String bytesToHex(byte[] bytes) {
+ private String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X ", b));
@@ -165,16 +196,23 @@
/**
* 娓呯┖缂撳啿鍖猴紙閬垮厤鍐呭瓨娉勬紡锛�
*/
- public static void clearBuffer() {
- staticBufferPosition = 0;
+ public void clearBuffer() {
+ bufferPosition = 0;
// 鍙�夛細娓呯┖缂撳啿鍖哄唴瀹�
- Arrays.fill(staticDataBuffer, (byte) 0);
+ Arrays.fill(dataBuffer, (byte) 0);
}
/**
* 鑾峰彇褰撳墠缂撳啿鍖虹姸鎬�
*/
- public static int getBufferStatus() {
- return staticBufferPosition;
+ public int getBufferStatus() {
+ return bufferPosition;
+ }
+
+ /**
+ * 鑾峰彇缂撳啿鍖哄閲�
+ */
+ public int getBufferCapacity() {
+ return dataBuffer.length;
}
}
\ No newline at end of file
diff --git a/src/chushihua/lunxun.java b/src/chushihua/lunxun.java
index 83df31c..b1dc1b4 100644
--- a/src/chushihua/lunxun.java
+++ b/src/chushihua/lunxun.java
@@ -7,6 +7,7 @@
import publicway.QueryData;
import xitongshezhi.SystemDebugDialog;
+import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -16,6 +17,7 @@
* 鐢ㄤ簬瀹氭椂鍚戞墍鏈夊崱妲藉彂閫佹煡璇㈡寚浠�
* 鏀寔鏆傚仠鍜屾仮澶嶅姛鑳斤紝妫�鏌ヤ覆鍙h繛鎺ョ姸鎬�
* 鏂板锛氫笉鍚屽崱妲界姸鎬佷娇鐢ㄤ笉鍚屾煡璇㈤鐜�
+ * 浼樺寲锛氬唴瀛樼鐞嗗拰闀挎椂闂磋繍琛岀ǔ瀹氭��
*/
public class lunxun {
private static volatile boolean isRunning = false;
@@ -24,14 +26,6 @@
private static Thread pollingThread;
private static int pollingInterval = 100; // 榛樿杞闂撮殧
public static boolean sendChaxunzhiling=true;//鏄惁鍚戜覆鍙e彂閫佹煡璇㈡寚浠�
-
- public static boolean isSendChaxunzhiling() {
- return sendChaxunzhiling;
- }
-
- public static void setSendChaxunzhiling(boolean sendChaxunzhiling) {
- lunxun.sendChaxunzhiling = sendChaxunzhiling;
- }
// 鍗℃Ы鐩稿叧甯搁噺
private static final int MIN_SLOT = 1;
@@ -44,6 +38,15 @@
// 鎬ц兘浼樺寲锛氭煡璇㈡寚浠ょ紦瀛�
private static final Map<Integer, String> queryCommandCache = new ConcurrentHashMap<>();
+
+ // 鍐呭瓨浼樺寲锛氱紦瀛樺ぇ灏忛檺鍒跺拰娓呯悊鏈哄埗
+ private static final int MAX_CACHE_SIZE = 100;
+ private static final long CACHE_CLEANUP_INTERVAL = 60000; // 1鍒嗛挓娓呯悊涓�娆�
+ private static long lastCleanupTime = 0;
+
+ // 閿欒鏃ュ織闄愭祦鏈哄埗
+ private static final Map<String, Long> lastErrorLogTime = new ConcurrentHashMap<>();
+ private static final long ERROR_LOG_INTERVAL = 5000; // 鐩稿悓閿欒5绉掑唴鍙褰曚竴娆�
// 璋冭瘯妯″紡鎺у埗
public static boolean DEBUG_ENABLED = false;
@@ -52,6 +55,14 @@
private static final int NO_CARD_QUERY_INTERVAL = 100; // 鏃犲崱鍗℃Ы鏌ヨ闂撮殧锛�100ms
private static final int HAS_CARD_QUERY_INTERVAL = 10000; // 鏈夊崱鍗℃Ы鏌ヨ闂撮殧锛�10绉�
private static final Map<Integer, Long> lastQueryTimeMap = new ConcurrentHashMap<>(); // 璁板綍姣忎釜鍗℃Ы鐨勬渶鍚庢煡璇㈡椂闂�
+
+ public static boolean isSendChaxunzhiling() {
+ return sendChaxunzhiling;
+ }
+
+ public static void setSendChaxunzhiling(boolean sendChaxunzhiling) {
+ lunxun.sendChaxunzhiling = sendChaxunzhiling;
+ }
/**
* 妫�鏌ヤ覆鍙h繛鎺ョ姸鎬� - 浼樺寲鐗堟湰锛屾坊鍔犻噸璇曟満鍒�
@@ -76,11 +87,11 @@
}
serialConnected = true;
} else {
- Errlog.logOperation("涓插彛杩炴帴澶辫触 - 涓插彛鏈墦寮�");
+ logErrorWithRateLimit("serial_connection_failed", "涓插彛杩炴帴澶辫触 - 涓插彛鏈墦寮�");
serialConnected = false;
}
} catch (Exception e) {
- Errlog.logOperation("涓插彛杩炴帴妫�鏌ュ紓甯�: " + e.getMessage());
+ logErrorWithRateLimit("serial_connection_exception", "涓插彛杩炴帴妫�鏌ュ紓甯�: " + e.getMessage());
serialConnected = false;
}
@@ -117,9 +128,12 @@
// 鍚姩鍓嶄弗鏍兼鏌ヤ覆鍙h繛鎺�
if (!checkSerialConnectionWithRetry()) {
- Errlog.logOperation("涓插彛鏈繛鎺ワ紝鏃犳硶鍚姩杞鏌ヨ");
+ logErrorWithRateLimit("start_polling_serial_failed", "涓插彛鏈繛鎺ワ紝鏃犳硶鍚姩杞鏌ヨ");
return false;
}
+
+ // 鍚姩鍓嶅厛娓呯悊涓�娆″唴瀛�
+ performCleanup();
// 浠庨厤缃腑鑾峰彇杞闂撮殧
loadPollingIntervalFromConfig();
@@ -137,7 +151,7 @@
pollingThread.start();
return true;
} catch (Exception e) {
- Errlog.logOperation("鍚姩杞鏌ヨ绾跨▼鏃跺彂鐢熷紓甯�: " + e.getMessage());
+ logErrorWithRateLimit("start_polling_thread_exception", "鍚姩杞鏌ヨ绾跨▼鏃跺彂鐢熷紓甯�: " + e.getMessage());
isRunning = false;
shouldStop.set(true);
return false;
@@ -174,15 +188,15 @@
pollingThread.join(3000); // 绛夊緟3绉�
// 妫�鏌ョ嚎绋嬫槸鍚﹁繕鍦ㄨ繍琛�
if (pollingThread.isAlive()) {
- Errlog.logOperation("杞绾跨▼鏈湪3绉掑唴鍋滄锛屾爣璁颁负瀹堟姢绾跨▼骞跺拷鐣�");
+ logErrorWithRateLimit("polling_thread_stop_timeout", "杞绾跨▼鏈湪3绉掑唴鍋滄锛屾爣璁颁负瀹堟姢绾跨▼骞跺拷鐣�");
// 涓嶅己鍒跺仠姝紝鑰屾槸纭繚瀹冩槸瀹堟姢绾跨▼
pollingThread.setDaemon(true);
}
} catch (InterruptedException e) {
- Errlog.logOperation("鍋滄杞鏌ヨ鏃惰涓柇: " + e.getMessage());
+ logErrorWithRateLimit("stop_polling_interrupted", "鍋滄杞鏌ヨ鏃惰涓柇: " + e.getMessage());
Thread.currentThread().interrupt();
} catch (Exception e) {
- Errlog.logOperation("鍋滄杞绾跨▼鏃跺彂鐢熷紓甯�: " + e.getMessage());
+ logErrorWithRateLimit("stop_polling_exception", "鍋滄杞绾跨▼鏃跺彂鐢熷紓甯�: " + e.getMessage());
} finally {
pollingThread = null;
}
@@ -234,7 +248,7 @@
// 鎭㈠鍓嶆鏌ヤ覆鍙h繛鎺�
if (!checkSerialConnectionWithRetry()) {
- Errlog.logOperation("涓插彛鏈繛鎺ワ紝鏃犳硶鎭㈠杞鏌ヨ");
+ logErrorWithRateLimit("resume_polling_serial_failed", "涓插彛鏈繛鎺ワ紝鏃犳硶鎭㈠杞鏌ヨ");
return false;
}
@@ -276,7 +290,7 @@
*/
public static void setPollingInterval(int interval) {
if (interval < 10) {
- Errlog.logOperation("杞闂撮殧涓嶈兘灏忎簬10ms");
+ logErrorWithRateLimit("polling_interval_too_small", "杞闂撮殧涓嶈兘灏忎簬10ms");
return;
}
@@ -328,7 +342,7 @@
//System.out.println("閰嶇疆绯荤粺鏈垵濮嬪寲锛屼娇鐢ㄩ粯璁よ疆璇㈤棿闅�: " + pollingInterval + "ms");
}
} catch (Exception e) {
- Errlog.logOperation("鍔犺浇杞闂撮殧閰嶇疆澶辫触: " + e.getMessage());
+ logErrorWithRateLimit("load_polling_interval_failed", "鍔犺浇杞闂撮殧閰嶇疆澶辫触: " + e.getMessage());
//System.out.println("浣跨敤榛樿杞闂撮殧: " + pollingInterval + "ms");
}
}
@@ -351,12 +365,13 @@
/**
* 杞浠诲姟鍐呴儴绫� - 浼樺寲鐗堟湰
* 鏀寔涓嶅悓鐘舵�佸崱妲界殑涓嶅悓鏌ヨ棰戠巼
+ * 浼樺寲锛氬唴瀛樼鐞嗗拰閲嶇敤瀵硅薄
*/
-
private static class PollingTask implements Runnable {
private int currentIndex = 0; // 褰撳墠绱㈠紩锛岀敤浜庨亶鍘唖lotArray
private int consecutiveFailures = 0; // 杩炵画澶辫触娆℃暟
private static final int MAX_CONSECUTIVE_FAILURES = 5; // 鏈�澶ц繛缁け璐ユ鏁�
+ private final StringBuilder debugBuilder = new StringBuilder(100); // 閲嶇敤 StringBuilder
@Override
public void run() {
@@ -378,15 +393,20 @@
// 瀹氭湡妫�鏌ヤ覆鍙h繛鎺ョ姸鎬侊紙姣�10娆″惊鐜鏌ヤ竴娆★級
if (currentIndex % 10 == 0 && !checkSerialConnectionWithRetry()) {
- Errlog.logOperation("涓插彛杩炴帴鏂紑锛屾殏鍋滆疆璇�");
+ logErrorWithRateLimit("serial_disconnected", "涓插彛杩炴帴鏂紑锛屾殏鍋滆疆璇�");
pausePolling();
continue;
+ }
+
+ // 瀹氭湡娓呯悊缂撳瓨锛堟瘡100娆″惊鐜竻鐞嗕竴娆★級
+ if (currentIndex % 100 == 0) {
+ cleanupOldCache();
}
// 鑾峰彇鍗℃Ы鏁扮粍
Fkj[] slotArray = SlotManager.getSlotArray();
if (slotArray == null || slotArray.length == 0) {
- Errlog.logOperation("鍗℃Ы鏁扮粍鏈垵濮嬪寲");
+ logErrorWithRateLimit("slot_array_not_initialized", "鍗℃Ы鏁扮粍鏈垵濮嬪寲");
Thread.sleep(pollingInterval);
continue;
}
@@ -427,18 +447,18 @@
} else {
status = "鏃犲崱";
}
- if (DEBUG_ENABLED) {
- StringBuilder debugMsg = new StringBuilder(50);
- debugMsg.append("Slot ").append(slotNumber)
- .append(" (").append(status).append(") 鏌ヨ鎴愬姛锛岄棿闅�: ")
- .append(queryInterval).append("ms\n");
- SystemDebugDialog.appendAsciiData(debugMsg.toString());
- }
+
+ // 浣跨敤閲嶇敤鐨� StringBuilder 鏋勫缓璋冭瘯淇℃伅
+ debugBuilder.setLength(0);
+ debugBuilder.append("Slot ").append(slotNumber)
+ .append(" (").append(status).append(") 鏌ヨ鎴愬姛锛岄棿闅�: ")
+ .append(queryInterval).append("ms\n");
+ SystemDebugDialog.appendAsciiData(debugBuilder.toString());
}
} else {
consecutiveFailures++;
if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
- Errlog.logOperation("lunxun杩炵画澶辫触娆℃暟杩囧锛屾殏鍋滆疆璇�");
+ logErrorWithRateLimit("consecutive_failures", "lunxun杩炵画澶辫触娆℃暟杩囧锛屾殏鍋滆疆璇�");
pausePolling();
break;
}
@@ -460,7 +480,7 @@
Thread.currentThread().interrupt();
break;
} catch (Exception e) {
- Errlog.logOperation("杞鏌ヨ杩囩▼涓彂鐢熷紓甯�: " + e.getMessage());
+ logErrorWithRateLimit("polling_exception", "杞鏌ヨ杩囩▼涓彂鐢熷紓甯�: " + e.getMessage());
consecutiveFailures++;
// 鍙戠敓寮傚父鏃剁瓑寰呬竴娈垫椂闂村啀缁х画
@@ -508,12 +528,12 @@
return false;
}
} else {
- Errlog.logOperation("鐢熸垚鐨勬煡璇㈡寚浠や负绌猴紝鍗℃Ы: " + slotNumber);
+ logErrorWithRateLimit("empty_query_command", "鐢熸垚鐨勬煡璇㈡寚浠や负绌猴紝鍗℃Ы: " + slotNumber);
return false;
}
} catch (Exception e) {
- Errlog.logOperation("鍙戦�佹煡璇㈡寚浠ゅ埌鍗℃Ы " + slotNumber + " 鏃跺彂鐢熷紓甯�: " + e.getMessage());
+ logErrorWithRateLimit("send_query_exception", "鍙戦�佹煡璇㈡寚浠ゅ埌鍗℃Ы " + slotNumber + " 鏃跺彂鐢熷紓甯�: " + e.getMessage());
// 鍙戠敓寮傚父鏃舵洿鏂颁覆鍙h繛鎺ョ姸鎬�
serialConnected = false;
return false;
@@ -528,13 +548,13 @@
*/
public static boolean sendImmediateQuery(int slotNumber) {
if (slotNumber < MIN_SLOT || slotNumber > MAX_SLOT) {
- Errlog.logOperation("鍗℃Ы缂栧彿蹇呴』鍦�" + MIN_SLOT + "-" + MAX_SLOT + "涔嬮棿");
+ logErrorWithRateLimit("invalid_slot_number", "鍗℃Ы缂栧彿蹇呴』鍦�" + MIN_SLOT + "-" + MAX_SLOT + "涔嬮棿");
return false;
}
// 妫�鏌ヤ覆鍙h繛鎺�
if (!checkSerialConnectionWithRetry()) {
- Errlog.logOperation("涓插彛鏈繛鎺ワ紝鏃犳硶鍙戦�佹煡璇㈡寚浠�");
+ logErrorWithRateLimit("immediate_query_serial_failed", "涓插彛鏈繛鎺ワ紝鏃犳硶鍙戦�佹煡璇㈡寚浠�");
return false;
}
@@ -555,16 +575,16 @@
}
return true;
} else {
- Errlog.logOperation("绔嬪嵆鏌ヨ澶辫触 - 鍙戦�佹寚浠ゅ埌鍗℃Ы " + slotNumber + " 澶辫触");
+ logErrorWithRateLimit("immediate_query_send_failed", "绔嬪嵆鏌ヨ澶辫触 - 鍙戦�佹寚浠ゅ埌鍗℃Ы " + slotNumber + " 澶辫触");
return false;
}
} else {
- Errlog.logOperation("绔嬪嵆鏌ヨ澶辫触 - 鐢熸垚鐨勬煡璇㈡寚浠や负绌猴紝鍗℃Ы: " + slotNumber);
+ logErrorWithRateLimit("immediate_query_empty_command", "绔嬪嵆鏌ヨ澶辫触 - 鐢熸垚鐨勬煡璇㈡寚浠や负绌猴紝鍗℃Ы: " + slotNumber);
return false;
}
} catch (Exception e) {
- Errlog.logOperation("绔嬪嵆鏌ヨ鍗℃Ы " + slotNumber + " 鏃跺彂鐢熷紓甯�: " + e.getMessage());
+ logErrorWithRateLimit("immediate_query_exception", "绔嬪嵆鏌ヨ鍗℃Ы " + slotNumber + " 鏃跺彂鐢熷紓甯�: " + e.getMessage());
return false;
}
}
@@ -576,7 +596,7 @@
public static int sendImmediateQueryToAll() {
// 妫�鏌ヤ覆鍙h繛鎺�
if (!checkSerialConnectionWithRetry()) {
- Errlog.logOperation("涓插彛鏈繛鎺ワ紝鏃犳硶鍙戦�佹壒閲忔煡璇㈡寚浠�");
+ logErrorWithRateLimit("batch_query_serial_failed", "涓插彛鏈繛鎺ワ紝鏃犳硶鍙戦�佹壒閲忔煡璇㈡寚浠�");
return 0;
}
@@ -629,7 +649,7 @@
if (connected) {
// //System.out.println("涓插彛杩炴帴鐘舵�佸凡璁剧疆涓�: 宸茶繛鎺�");
} else {
- Errlog.logOperation("涓插彛杩炴帴鐘舵�佸凡璁剧疆涓�: 鏈繛鎺�");
+ logErrorWithRateLimit("serial_disconnected_external", "涓插彛杩炴帴鐘舵�佸凡璁剧疆涓�: 鏈繛鎺�");
// 濡傛灉涓插彛鏂紑涓旇疆璇㈡鍦ㄨ繍琛岋紝鑷姩鏆傚仠杞
if (isRunning && !isPaused) {
pausePolling();
@@ -668,9 +688,9 @@
}
}
- return String.format("杞鐘舵��: %s, 涓插彛: %s, 闂撮殧: %dms, 鎸囦护缂撳瓨: %d, 鍗℃Ы鑼冨洿: %d-%d, 鏃犲崱: %d(100ms), 鏈夊崱: %d(10s)",
+ return String.format("杞鐘舵��: %s, 涓插彛: %s, 闂撮殧: %dms, 鎸囦护缂撳瓨: %d, 鍗℃Ы鑼冨洿: %d-%d, 鏃犲崱: %d(100ms), 鏈夊崱: %d(10s)\n%s",
status, serialStatus, pollingInterval, cacheSize, MIN_SLOT, MAX_SLOT,
- noCardCount, hasCardCount);
+ noCardCount, hasCardCount, getMemoryStatus());
}
/**
@@ -699,7 +719,7 @@
if (isPaused) {
// 鎭㈠鍓嶆鏌ヤ覆鍙h繛鎺�
if (!checkSerialConnectionWithRetry()) {
- Errlog.logOperation("涓插彛鏈繛鎺ワ紝鏃犳硶鎭㈠杞鏌ヨ");
+ logErrorWithRateLimit("external_resume_serial_failed", "涓插彛鏈繛鎺ワ紝鏃犳硶鎭㈠杞鏌ヨ");
return false;
}
@@ -756,7 +776,7 @@
*/
public static void setNoCardQueryInterval(int interval) {
if (interval < 10) {
- Errlog.logOperation("鏃犲崱鍗℃Ы鏌ヨ闂撮殧涓嶈兘灏忎簬10ms");
+ logErrorWithRateLimit("no_card_interval_too_small", "鏃犲崱鍗℃Ы鏌ヨ闂撮殧涓嶈兘灏忎簬10ms");
return;
}
// 娉ㄦ剰锛氳繖閲屽彧鏄缃父閲忥紝瀹為檯杩愯鏃堕渶瑕侀噸鏂板惎鍔ㄨ疆璇㈡墠鑳界敓鏁�
@@ -769,7 +789,7 @@
*/
public static void setHasCardQueryInterval(int interval) {
if (interval < 1000) {
- Errlog.logOperation("鏈夊崱鍗℃Ы鏌ヨ闂撮殧涓嶈兘灏忎簬1000ms");
+ logErrorWithRateLimit("has_card_interval_too_small", "鏈夊崱鍗℃Ы鏌ヨ闂撮殧涓嶈兘灏忎簬1000ms");
return;
}
// 娉ㄦ剰锛氳繖閲屽彧鏄缃父閲忥紝瀹為檯杩愯鏃堕渶瑕侀噸鏂板惎鍔ㄨ疆璇㈡墠鑳界敓鏁�
@@ -783,4 +803,102 @@
public static void setDEBUG_ENABLED(boolean dEBUG_ENABLED) {
DEBUG_ENABLED = dEBUG_ENABLED;
}
+
+ // ==================== 鏂板鍐呭瓨浼樺寲鏂规硶 ====================
+
+ /**
+ * 娓呯悊鏃х紦瀛� - 闃叉鍐呭瓨鏃犻檺澧為暱
+ */
+ private static void cleanupOldCache() {
+ long currentTime = System.currentTimeMillis();
+ if (currentTime - lastCleanupTime < CACHE_CLEANUP_INTERVAL) {
+ return;
+ }
+
+ lastCleanupTime = currentTime;
+
+ // 娓呯悊闀挎椂闂存湭浣跨敤鐨勬煡璇㈡椂闂磋褰�
+ long cleanupThreshold = currentTime - 300000; // 5鍒嗛挓鏈娇鐢�
+ lastQueryTimeMap.entrySet().removeIf(entry ->
+ currentTime - entry.getValue() > cleanupThreshold
+ );
+
+ // 闄愬埗鏌ヨ鎸囦护缂撳瓨澶у皬
+ if (queryCommandCache.size() > MAX_CACHE_SIZE) {
+ Iterator<Map.Entry<Integer, String>> iterator = queryCommandCache.entrySet().iterator();
+ int itemsToRemove = queryCommandCache.size() - MAX_CACHE_SIZE;
+ for (int i = 0; i < itemsToRemove && iterator.hasNext(); i++) {
+ iterator.next();
+ iterator.remove();
+ }
+ }
+
+ // 娓呯悊閿欒鏃ュ織闄愭祦璁板綍
+ lastErrorLogTime.entrySet().removeIf(entry ->
+ currentTime - entry.getValue() > 300000 // 5鍒嗛挓
+ );
+ }
+
+ /**
+ * 闄愭祦閿欒鏃ュ織 - 闃叉澶ч噺閲嶅鏃ュ織鍗犵敤鍐呭瓨
+ */
+ private static void logErrorWithRateLimit(String errorKey, String message) {
+ long currentTime = System.currentTimeMillis();
+ Long lastTime = lastErrorLogTime.get(errorKey);
+
+ if (lastTime == null || currentTime - lastTime > ERROR_LOG_INTERVAL) {
+ Errlog.logOperation(message);
+ lastErrorLogTime.put(errorKey, currentTime);
+
+ // 娓呯悊杩囨湡鐨勯敊璇褰�
+ if (lastErrorLogTime.size() > 50) {
+ lastErrorLogTime.entrySet().removeIf(entry ->
+ currentTime - entry.getValue() > 300000 // 5鍒嗛挓
+ );
+ }
+ }
+ }
+
+ /**
+ * 鑾峰彇鍐呭瓨鐘舵�佷俊鎭�
+ */
+ public static String getMemoryStatus() {
+ Runtime runtime = Runtime.getRuntime();
+ long totalMemory = runtime.totalMemory();
+ long freeMemory = runtime.freeMemory();
+ long usedMemory = totalMemory - freeMemory;
+ long maxMemory = runtime.maxMemory();
+
+ return String.format("鍐呭瓨浣跨敤: %.2fMB/%.2fMB (鏈�澶�: %.2fMB), 缂撳瓨: 鏃堕棿璁板綍=%d, 鎸囦护缂撳瓨=%d, 閿欒璁板綍=%d",
+ usedMemory / (1024.0 * 1024.0),
+ totalMemory / (1024.0 * 1024.0),
+ maxMemory / (1024.0 * 1024.0),
+ lastQueryTimeMap.size(),
+ queryCommandCache.size(),
+ lastErrorLogTime.size());
+ }
+
+ /**
+ * 鎵嬪姩瑙﹀彂鍐呭瓨娓呯悊
+ */
+ public static void performCleanup() {
+ // 娓呯悊鏌ヨ鏃堕棿璁板綍涓暱鏃堕棿鏈煡璇㈢殑鍗℃Ы
+ long cleanupThreshold = System.currentTimeMillis() - 3600000; // 1灏忔椂
+ lastQueryTimeMap.entrySet().removeIf(entry ->
+ entry.getValue() < cleanupThreshold
+ );
+
+ // 娓呯┖鏌ヨ鎸囦护缂撳瓨
+ queryCommandCache.clear();
+
+ // 娓呯┖閿欒鏃ュ織闄愭祦璁板綍
+ lastErrorLogTime.clear();
+
+ // 寤鸿绯荤粺杩涜鍨冨溇鍥炴敹锛堜絾涓嶅己鍒讹級
+ System.gc();
+
+ if (DEBUG_ENABLED) {
+ SystemDebugDialog.appendAsciiData("鎵ц鍐呭瓨娓呯悊瀹屾垚\n");
+ }
+ }
}
\ No newline at end of file
diff --git a/src/publicway/ProtocolParser01.java b/src/publicway/ProtocolParser01.java
index 3c5effb..2a2d4f0 100644
--- a/src/publicway/ProtocolParser01.java
+++ b/src/publicway/ProtocolParser01.java
@@ -1,14 +1,20 @@
package publicway;
import java.util.ArrayList;
import java.util.List;
-
-import chuankou.SerialPortService;
import chushihua.SlotManager;
-import dialog.Errlog;
public class ProtocolParser01 {
+
+ // 缓存常用字符串减少重复创建
+ private static final String[] WORK_STATUS_DESC = {"无效", "待机", "充电", "充满", "故障", "授权到期", "通信超时", "未知状态"};
+ private static final String[] DOOR_STATUS_DESC = {"未知状态", "开门状态", "关门状态"};
+ private static final String[] CARD_STATUS_DESC = {"无卡", "有卡", "读卡错误(卡非法)", "未知状态"};
+
+ // StringBuilder 对象池
+ private static final ThreadLocal<StringBuilder> stringBuilderPool =
+ ThreadLocal.withInitial(() -> new StringBuilder(512));
/**
- * 新增:直接使用字节数组解析的方法(避免字符串转换)
+ * 优化后的字节数组解析方法
*/
public static ParseResult parseDDCC01Data(byte[] packetData) {
if (packetData == null || packetData.length < 18) {
@@ -20,45 +26,49 @@
throw new IllegalArgumentException("非DDCC协议数据");
}
+ ParseResult result = ParseResultPool.borrowObject();
try {
- // 跳过包头DDCC (2字节),直接使用剩余数据
- byte[] dataBytes = new byte[packetData.length - 2];
- System.arraycopy(packetData, 2, dataBytes, 0, dataBytes.length);
-
- if (dataBytes.length < 16) {
+ // 直接使用原数组,避免创建新数组
+ if (packetData.length < 18) { // 2(包头) + 16(最小数据长度)
throw new IllegalArgumentException("数据长度不足");
}
- // 2. 解析各个字段
- int dataLength = parseDataLength(dataBytes);
- int hostAddress = parseHostAddress(dataBytes);
- int slotNumber = parseSlotNumber(dataBytes);
- int functionCode = parseFunctionCode(dataBytes);
- WorkStatus workStatus = parseWorkStatus(dataBytes);
- DoorStatus doorStatus = parseDoorStatus(dataBytes);
- CardStatus cardStatus = parseCardStatus(dataBytes);
- int cardStatusChange = parseCardStatusChange(dataBytes);
- String cardNumber = parseCardNumber(dataBytes);
- List<FaultType> faults = parseFaults(dataBytes);
- double voltage = parseVoltage(dataBytes);
- double current = parseCurrent(dataBytes);
+ // 解析各个字段
+ int dataLength = parseDataLength(packetData, 2);
+ int hostAddress = parseHostAddress(packetData, 4);
+ int slotNumber = parseSlotNumber(packetData, 5);
+ int functionCode = parseFunctionCode(packetData, 6);
- // 3. 验证功能码
+ // 验证功能码
if (functionCode != 0x01) {
throw new IllegalArgumentException("非01功能码数据");
}
- return new ParseResult(hostAddress, slotNumber, workStatus, doorStatus,
- cardStatus, cardStatusChange, cardNumber,
- faults, voltage, current, dataLength);
+ WorkStatus workStatus = parseWorkStatus(packetData, 7);
+ DoorStatus doorStatus = parseDoorStatus(packetData, 8);
+ CardStatus cardStatus = parseCardStatus(packetData, 9);
+ int cardStatusChange = parseCardStatusChange(packetData, 10);
+ String cardNumber = parseCardNumber(packetData, 13);
+ List<FaultType> faults = parseFaults(packetData, 15);
+ double voltage = parseVoltage(packetData, 16);
+ double current = parseCurrent(packetData, 17);
+
+ // 重用 ParseResult 对象
+ result.reset(hostAddress, slotNumber, workStatus, doorStatus,
+ cardStatus, cardStatusChange, cardNumber,
+ faults, voltage, current, dataLength);
+
+ return result;
} catch (Exception e) {
+ // 发生异常时归还对象
+ ParseResultPool.returnObject(result);
throw new RuntimeException("解析数据时发生错误: " + e.getMessage(), e);
}
}
/**
- * 保留原有方法用于兼容性
+ * 优化后的字符串解析方法
*/
public static ParseResult parseDDCC01Data(String hexData) {
if (hexData == null || hexData.isEmpty()) {
@@ -70,6 +80,7 @@
throw new IllegalArgumentException("非DDCC协议数据");
}
+ ParseResult result = ParseResultPool.borrowObject();
try {
// 1. 移除包头DDCC进行解析
String dataWithoutHeader = hexData.substring(4);
@@ -80,179 +91,162 @@
}
// 2. 解析各个字段
- int dataLength = parseDataLength(dataBytes);
- int hostAddress = parseHostAddress(dataBytes);
- int slotNumber = parseSlotNumber(dataBytes);
- int functionCode = parseFunctionCode(dataBytes);
- WorkStatus workStatus = parseWorkStatus(dataBytes);
- DoorStatus doorStatus = parseDoorStatus(dataBytes);
- CardStatus cardStatus = parseCardStatus(dataBytes);
- int cardStatusChange = parseCardStatusChange(dataBytes);
- String cardNumber = parseCardNumber(dataBytes);
- List<FaultType> faults = parseFaults(dataBytes);
- double voltage = parseVoltage(dataBytes);
- double current = parseCurrent(dataBytes);
+ int dataLength = parseDataLength(dataBytes, 0);
+ int hostAddress = parseHostAddress(dataBytes, 2);
+ int slotNumber = parseSlotNumber(dataBytes, 3);
+ int functionCode = parseFunctionCode(dataBytes, 4);
// 3. 验证功能码
if (functionCode != 0x01) {
throw new IllegalArgumentException("非01功能码数据");
}
- return new ParseResult(hostAddress, slotNumber, workStatus, doorStatus,
- cardStatus, cardStatusChange, cardNumber,
- faults, voltage, current, dataLength);
+ WorkStatus workStatus = parseWorkStatus(dataBytes, 5);
+ DoorStatus doorStatus = parseDoorStatus(dataBytes, 6);
+ CardStatus cardStatus = parseCardStatus(dataBytes, 7);
+ int cardStatusChange = parseCardStatusChange(dataBytes, 8);
+ String cardNumber = parseCardNumber(dataBytes, 11);
+ List<FaultType> faults = parseFaults(dataBytes, 13);
+ double voltage = parseVoltage(dataBytes, 14);
+ double current = parseCurrent(dataBytes, 15);
+
+ result.reset(hostAddress, slotNumber, workStatus, doorStatus,
+ cardStatus, cardStatusChange, cardNumber,
+ faults, voltage, current, dataLength);
+
+ return result;
} catch (Exception e) {
+ ParseResultPool.returnObject(result);
throw new RuntimeException("解析数据时发生错误: " + e.getMessage(), e);
}
}
/**
- * CRC校验
- * 根据协议:CRC16校验从功能码之后一直到CRC16之前的数据
- */
- @SuppressWarnings("unused")
- private static boolean validateCRC(String hexData) {
- try {
- // CRC在最后4个字符
- String receivedCRC = hexData.substring(hexData.length() - 6);
- byte[] cmdBytes = HexUtil.hexStringToBytes(hexData.replace(receivedCRC,""));
- String crc = HexUtil.calculate(cmdBytes)+"00";
- //System.out.println("收到的完整数据是:"+hexData);
- //System.out.println("收到数据校验码是:"+receivedCRC);
- //System.out.println("校验码是:"+crc);
- return receivedCRC.equalsIgnoreCase(crc);
- } catch (Exception e) {
- Errlog.logOperation("CRC校验异常: " + e.getMessage());
- return false;
- }
- }
-
- /**
* 解析数据长度(2字节)
- * 数据长度是从该字节之后开始到CRC16之前数据字节数
*/
- private static int parseDataLength(byte[] data) {
- if (data.length < 2) {
+ private static int parseDataLength(byte[] data, int offset) {
+ if (data.length < offset + 2) {
throw new IllegalArgumentException("数据长度不足,无法解析数据长度");
}
- return ((data[0] & 0xFF) << 8) | (data[1] & 0xFF);
+ return ((data[offset] & 0xFF) << 8) | (data[offset + 1] & 0xFF);
}
/**
* 解析主机地址(1字节)
*/
- private static int parseHostAddress(byte[] data) {
- if (data.length < 3) {
+ private static int parseHostAddress(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析主机地址");
}
- return data[2] & 0xFF;
+ return data[offset] & 0xFF;
}
/**
* 解析卡槽编号(1字节)
*/
- private static int parseSlotNumber(byte[] data) {
- if (data.length < 4) {
+ private static int parseSlotNumber(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析卡槽编号");
}
- return data[3] & 0xFF;
+ return data[offset] & 0xFF;
}
/**
* 解析功能码(1字节)
*/
- private static int parseFunctionCode(byte[] data) {
- if (data.length < 5) {
+ private static int parseFunctionCode(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析功能码");
}
- return data[4] & 0xFF;
+ return data[offset] & 0xFF;
}
/**
* 解析工作状态(1字节)
*/
- private static WorkStatus parseWorkStatus(byte[] data) {
- if (data.length < 6) {
+ private static WorkStatus parseWorkStatus(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析工作状态");
}
- int statusValue = data[5] & 0xFF;
+ int statusValue = data[offset] & 0xFF;
return WorkStatus.fromValue(statusValue);
}
/**
* 解析在位状态/门状态(1字节)
*/
- private static DoorStatus parseDoorStatus(byte[] data) {
- if (data.length < 7) {
+ private static DoorStatus parseDoorStatus(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析在位状态");
}
- int statusValue = data[6] & 0xFF;
+ int statusValue = data[offset] & 0xFF;
return DoorStatus.fromValue(statusValue);
}
/**
* 解析卡状态(1字节)
*/
- private static CardStatus parseCardStatus(byte[] data) {
- if (data.length < 8) {
+ private static CardStatus parseCardStatus(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析卡状态");
}
- int statusValue = data[7] & 0xFF;
+ int statusValue = data[offset] & 0xFF;
return CardStatus.fromValue(statusValue);
}
/**
* 解析卡状态变更(1字节)
*/
- private static int parseCardStatusChange(byte[] data) {
- if (data.length < 9) {
+ private static int parseCardStatusChange(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析卡状态变更");
}
- return data[8] & 0xFF;
+ return data[offset] & 0xFF;
}
/**
* 解析卡号(卡号3 + 卡号4)
*/
- private static String parseCardNumber(byte[] data) {
- if (data.length < 13) {
+ private static String parseCardNumber(byte[] data, int offset) {
+ if (data.length < offset + 2) {
throw new IllegalArgumentException("数据长度不足,无法解析卡号");
}
- // 索引11:卡号3,索引12:卡号4
- byte cardNumber3 = data[11];
- byte cardNumber4 = data[12];
-
- return String.format("%02X%02X", cardNumber3 & 0xFF, cardNumber4 & 0xFF);
+ // 直接返回字符串,避免创建临时对象
+ char[] hexChars = new char[4];
+ hexChars[0] = Character.forDigit((data[offset] >> 4) & 0xF, 16);
+ hexChars[1] = Character.forDigit(data[offset] & 0xF, 16);
+ hexChars[2] = Character.forDigit((data[offset + 1] >> 4) & 0xF, 16);
+ hexChars[3] = Character.forDigit(data[offset + 1] & 0xF, 16);
+ return new String(hexChars).toUpperCase();
}
/**
* 解析故障信息(1字节)
*/
- private static List<FaultType> parseFaults(byte[] data) {
- if (data.length < 14) {
+ private static List<FaultType> parseFaults(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析故障信息");
}
- int faultByte = data[13] & 0xFF;
- List<FaultType> faults = new ArrayList<>();
-
+ int faultByte = data[offset] & 0xFF;
+ List<FaultType> faults = new ArrayList<>(5); // 预分配容量
+
for (FaultType fault : FaultType.values()) {
if ((faultByte & fault.getBitMask()) != 0) {
faults.add(fault);
}
}
-
return faults;
}
/**
* 解析电压值(1字节)
*/
- private static double parseVoltage(byte[] data) {
- if (data.length < 15) {
+ private static double parseVoltage(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析电压");
}
- int voltageValue = data[14] & 0xFF;
+ int voltageValue = data[offset] & 0xFF;
// 50mV/bit 转换为伏特
return voltageValue * 0.05;
}
@@ -260,18 +254,16 @@
/**
* 解析电流值(1字节)
*/
- private static double parseCurrent(byte[] data) {
- if (data.length < 16) {
+ private static double parseCurrent(byte[] data, int offset) {
+ if (data.length < offset + 1) {
throw new IllegalArgumentException("数据长度不足,无法解析电流");
}
- int currentValue = data[15] & 0xFF;
+ int currentValue = data[offset] & 0xFF;
// 10mA/bit 转换为安培
return currentValue * 0.01;
}
- /**
- * 工作状态枚举
- */
+ // 枚举类保持不变...
public enum WorkStatus {
INVALID(0, "无效"),
STANDBY(1, "待机"),
@@ -290,13 +282,8 @@
this.description = description;
}
- public int getValue() {
- return value;
- }
-
- public String getDescription() {
- return description;
- }
+ public int getValue() { return value; }
+ public String getDescription() { return description; }
public static WorkStatus fromValue(int value) {
for (WorkStatus status : values()) {
@@ -308,9 +295,6 @@
}
}
- /**
- * 门状态枚举
- */
public enum DoorStatus {
UNKNOWN(0, "未知状态"),
DOOR_OPEN(1, "开门状态"),
@@ -324,13 +308,8 @@
this.description = description;
}
- public int getValue() {
- return value;
- }
-
- public String getDescription() {
- return description;
- }
+ public int getValue() { return value; }
+ public String getDescription() { return description; }
public static DoorStatus fromValue(int value) {
for (DoorStatus status : values()) {
@@ -342,9 +321,6 @@
}
}
- /**
- * 卡状态枚举
- */
public enum CardStatus {
NO_CARD(0, "无卡"),
HAS_CARD(1, "有卡"),
@@ -359,13 +335,8 @@
this.description = description;
}
- public int getValue() {
- return value;
- }
-
- public String getDescription() {
- return description;
- }
+ public int getValue() { return value; }
+ public String getDescription() { return description; }
public static CardStatus fromValue(int value) {
for (CardStatus status : values()) {
@@ -377,9 +348,6 @@
}
}
- /**
- * 故障类型枚举
- */
public enum FaultType {
INSERT_ERROR(0x01, "插卡错误"),
OVER_CURRENT(0x02, "过流"),
@@ -395,17 +363,12 @@
this.description = description;
}
- public int getBitMask() {
- return bitMask;
- }
-
- public String getDescription() {
- return description;
- }
+ public int getBitMask() { return bitMask; }
+ public String getDescription() { return description; }
}
/**
- * 解析结果类 - 添加对象池支持
+ * 优化后的解析结果类
*/
public static class ParseResult {
private int hostAddress;
@@ -420,29 +383,12 @@
private double current;
private int dataLength;
- // 默认构造器用于对象池
+ // 重用列表对象
+ private final List<FaultType> faultList = new ArrayList<>(5);
+ private final List<String> faultDescList = new ArrayList<>(5);
+
public ParseResult() {}
- public ParseResult(int hostAddress, int slotNumber, WorkStatus workStatus,
- DoorStatus doorStatus, CardStatus cardStatus, int cardStatusChange,
- String cardNumber, List<FaultType> faults, double voltage,
- double current, int dataLength) {
- this.hostAddress = hostAddress;
- this.slotNumber = slotNumber;
- this.workStatus = workStatus;
- this.doorStatus = doorStatus;
- this.cardStatus = cardStatus;
- this.cardStatusChange = cardStatusChange;
- this.cardNumber = cardNumber;
- this.faults = faults;
- this.voltage = voltage;
- this.current = current;
- this.dataLength = dataLength;
- }
-
- /**
- * 重置方法,用于对象重用
- */
public void reset(int hostAddress, int slotNumber, WorkStatus workStatus,
DoorStatus doorStatus, CardStatus cardStatus, int cardStatusChange,
String cardNumber, List<FaultType> faults, double voltage,
@@ -454,10 +400,16 @@
this.cardStatus = cardStatus;
this.cardStatusChange = cardStatusChange;
this.cardNumber = cardNumber;
- this.faults = faults;
this.voltage = voltage;
this.current = current;
this.dataLength = dataLength;
+
+ // 重用故障列表
+ this.faultList.clear();
+ if (faults != null) {
+ this.faultList.addAll(faults);
+ }
+ this.faults = this.faultList;
}
// Getter方法
@@ -477,21 +429,24 @@
* 获取故障的中文描述列表
*/
public List<String> getFaultDescriptions() {
- List<String> descriptions = new ArrayList<>();
+ faultDescList.clear();
for (FaultType fault : faults) {
- descriptions.add(fault.getDescription());
+ faultDescList.add(fault.getDescription());
}
- return descriptions;
+ return faultDescList;
}
/**
* 获取故障的中文描述字符串
*/
public String getFaultsString() {
- if (faults == null || faults.isEmpty()) {
+ if (faults.isEmpty()) {
return "无故障";
}
- StringBuilder sb = new StringBuilder();
+
+ StringBuilder sb = stringBuilderPool.get();
+ sb.setLength(0);
+
for (int i = 0; i < faults.size(); i++) {
if (i > 0) sb.append(", ");
sb.append(faults.get(i).getDescription());
@@ -501,7 +456,9 @@
@Override
public String toString() {
- StringBuilder sb = new StringBuilder();
+ StringBuilder sb = stringBuilderPool.get();
+ sb.setLength(0);
+
sb.append("1.主机地址:").append(String.format("%02X", hostAddress));
sb.append("2.卡槽编号:").append(slotNumber);
sb.append("3.工作状态:").append(workStatus.getDescription())
@@ -515,34 +472,31 @@
sb.append("8.故障:").append(getFaultsString());
sb.append("9.电压:").append(String.format("%.2f", voltage));
sb.append("10.电流:").append(String.format("%.2f", current));
- sb.append("数据长度:").append(dataLength).append(" 字节");
-// System.out.println(sb.toString());
- return sb.toString();
+ sb.append("数据长度:").append(dataLength).append(" 字节");
+
+ return sb.toString();
}
public void fuzhi() {
- SlotManager.gengxinshuxingzhi(
+ SlotManager.gengxinshuxingzhi(
slotNumber, // 卡槽编号
cardNumber, // 卡编号
String.valueOf(cardStatus.getValue()), // 是否有卡0无卡,1有卡,-1未知
- String.valueOf(workStatus.getValue()), // 工作状态0.无效1.待机;2.充电;3.充满;4.故障;5.授权到期;6.通信超时
+ String.valueOf(workStatus.getValue()), // 工作状态
String.format("%.2f", voltage), // 电压
String.format("%.2f", current), // 电流
- getFaultsString() // 故障1插卡错误;2过流;3,门控故障;4过压;5欠压;
- );
-
-
-
+ getFaultsString() // 故障
+ );
}
}
-
+
/**
- * 简单的对象池实现
+ * 改进的对象池实现
*/
public static class ParseResultPool {
- private static final int POOL_SIZE = 10;
+ private static final int POOL_SIZE = 20;
private static final java.util.concurrent.BlockingQueue<ParseResult> pool =
- new java.util.concurrent.ArrayBlockingQueue<>(POOL_SIZE);
+ new java.util.concurrent.LinkedBlockingQueue<>(POOL_SIZE);
static {
// 预创建对象
@@ -557,9 +511,17 @@
}
public static void returnObject(ParseResult result) {
- if (result != null && !pool.offer(result)) {
- // 池已满,不回收
+ if (result != null) {
+ // 清理状态
+ result.reset(0, 0, WorkStatus.UNKNOWN, DoorStatus.UNKNOWN,
+ CardStatus.UNKNOWN, 0, "", null, 0.0, 0.0, 0);
+ // 非阻塞式归还
+ pool.offer(result);
}
}
+
+ public static int getPoolSize() {
+ return pool.size();
+ }
}
}
\ No newline at end of file
diff --git a/src/publicway/SerialProtocolParser.java b/src/publicway/SerialProtocolParser.java
index e68a786..732c879 100644
--- a/src/publicway/SerialProtocolParser.java
+++ b/src/publicway/SerialProtocolParser.java
@@ -1,4 +1,5 @@
package publicway;
+
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executors;
@@ -27,15 +28,15 @@
private static final byte FUNCTION_82 = (byte) 0x82; // 鍗曟澘鍗囩骇浣胯兘
private static final byte FUNCTION_83 = (byte) 0x83; // 鍗曟澘鍗囩骇鏁版嵁鍖�
- // 鏁版嵁缂撳啿鍖猴紝鐢ㄤ簬澶勭悊绮樺寘
+ // 鏁版嵁缂撳啿鍖猴紝鐢ㄤ簬澶勭悊绮樺寘 - 鏀逛负鐩存帴ByteArrayOutputStream绠$悊
private byte[] dataBuffer = new byte[1024];
private int bufferPosition = 0;
- // 鏁版嵁鎺ユ敹闃熷垪
- private BlockingQueue<byte[]> dataQueue = new ArrayBlockingQueue<>(100);
+ // 鏁版嵁鎺ユ敹闃熷垪 - 闄愬埗闃熷垪澶у皬闃叉鍐呭瓨鏃犻檺澧為暱
+ private BlockingQueue<byte[]> dataQueue = new ArrayBlockingQueue<>(50);
- // 鎵归噺澶勭悊闃熷垪
- private final BlockingQueue<byte[]> batchQueue = new ArrayBlockingQueue<>(1000);
+ // 鎵归噺澶勭悊闃熷垪 - 闄愬埗闃熷垪澶у皬
+ private final BlockingQueue<byte[]> batchQueue = new ArrayBlockingQueue<>(200);
private final ScheduledExecutorService batchExecutor =
Executors.newSingleThreadScheduledExecutor();
@@ -46,12 +47,18 @@
// 閲嶇敤StringBuilder鍑忓皯瀵硅薄鍒涘缓
private final StringBuilder hexBuilder = new StringBuilder(256);
+ // 鍐呭瓨鐩戞帶璁℃暟鍣�
+ private long lastMemoryCheckTime = 0;
+ private static final long MEMORY_CHECK_INTERVAL = 30000; // 30绉掓鏌ヤ竴娆�
+
+ // 瀵硅薄姹狅紝鍑忓皯瀵硅薄鍒涘缓
+ private final Object packetPoolLock = new Object();
+
/**
* 鍚姩瑙f瀽鍣�
*/
public void start() {
if (isRunning) {
- //System.out.println("涓插彛鍗忚瑙f瀽鍣ㄥ凡缁忓湪杩愯涓�");
return;
}
@@ -63,8 +70,6 @@
processorThread = new Thread(this::processPackets, "Serial-Protocol-Parser");
processorThread.setDaemon(true);
processorThread.start();
-
- //System.out.println("涓插彛鍗忚瑙f瀽鍣ㄥ凡鍚姩 - 鐙珛浜庤疆璇㈢姸鎬佽繍琛�");
}
/**
@@ -99,11 +104,16 @@
}
// 娓呯┖闃熷垪鍜岀紦鍐插尯
+ clearQueues();
+ bufferPosition = 0;
+ }
+
+ /**
+ * 娓呯┖鎵�鏈夐槦鍒楋紝閲婃斁鍐呭瓨
+ */
+ private void clearQueues() {
dataQueue.clear();
batchQueue.clear();
- bufferPosition = 0;
-
- //System.out.println("涓插彛鍗忚瑙f瀽鍣ㄥ凡鍋滄");
}
/**
@@ -126,9 +136,31 @@
return;
}
- // 灏嗘暟鎹坊鍔犲埌鎵归噺闃熷垪 - 纭繚濮嬬粓鎵ц
+ // 妫�鏌ラ槦鍒楃姸鎬侊紝閬垮厤鍐呭瓨鏃犻檺澧為暱
+ if (batchQueue.size() > batchQueue.remainingCapacity() * 0.8) {
+ // 闃熷垪鎺ヨ繎婊℃椂锛屼涪寮冩渶鑰佺殑鏁版嵁
+ if (!batchQueue.isEmpty()) {
+ batchQueue.poll(); // 绉婚櫎涓�涓棫鏁版嵁
+ }
+ }
+
+ // 灏嗘暟鎹坊鍔犲埌鎵归噺闃熷垪
if (!batchQueue.offer(rawData)) {
- System.err.println("鎵归噺闃熷垪宸叉弧锛屼涪寮冩暟鎹�");
+ // 闃熷垪宸叉弧鏃剁殑澶勭悊
+ handleQueueFull();
+ }
+ }
+
+ /**
+ * 澶勭悊闃熷垪婊$殑鎯呭喌
+ */
+ private void handleQueueFull() {
+ // 娓呯┖闃熷垪閲嶆柊寮�濮嬶紝閬垮厤鍐呭瓨娉勬紡
+ clearQueues();
+ bufferPosition = 0; // 閲嶇疆缂撳啿鍖�
+
+ if (lunxun.DEBUG_ENABLED) {
+ SystemDebugDialog.appendAsciiData("璀﹀憡锛氭暟鎹鐞嗛槦鍒楀凡婊★紝宸叉竻绌洪槦鍒楅噸鏂板紑濮�");
}
}
@@ -140,39 +172,105 @@
return;
}
- // 鎵归噺澶勭悊鏁版嵁
- java.util.List<byte[]> batch = new java.util.ArrayList<>(100);
- batchQueue.drainTo(batch, 100);
-
- for (byte[] rawData : batch) {
- // 灏嗘暟鎹坊鍔犲埌缂撳啿鍖�
- if (bufferPosition + rawData.length > dataBuffer.length) {
- // 缂撳啿鍖轰笉瓒虫椂锛屾竻鐞嗗苟閲嶆柊寮�濮�
- System.arraycopy(dataBuffer, bufferPosition - rawData.length, dataBuffer, 0, rawData.length);
- bufferPosition = rawData.length;
- } else {
+ try {
+ // 鎵归噺澶勭悊鏁版嵁锛岄檺鍒舵瘡娆″鐞嗙殑鏈�澶ф暟閲�
+ int maxBatchSize = 50;
+ java.util.List<byte[]> batch = new java.util.ArrayList<>(maxBatchSize);
+ batchQueue.drainTo(batch, maxBatchSize);
+
+ for (byte[] rawData : batch) {
+ // 妫�鏌ョ紦鍐插尯瀹归噺锛岄伩鍏嶆孩鍑�
+ if (bufferPosition + rawData.length > dataBuffer.length) {
+ // 缂撳啿鍖轰笉瓒虫椂鐨勫鐞�
+ if (rawData.length > dataBuffer.length) {
+ // 鍗曟潯鏁版嵁瓒呰繃缂撳啿鍖哄ぇ灏忥紝鐩存帴澶勭悊鎴栦涪寮�
+ handleOversizedPacket(rawData);
+ continue;
+ } else {
+ // 绉诲姩鏈夋晥鏁版嵁鍒扮紦鍐插尯寮�澶�
+ compactBuffer(0);
+ }
+ }
+
+ // 灏嗘暟鎹坊鍔犲埌缂撳啿鍖�
System.arraycopy(rawData, 0, dataBuffer, bufferPosition, rawData.length);
bufferPosition += rawData.length;
+
+ // 澶勭悊缂撳啿鍖轰腑鐨勬暟鎹�
+ processBuffer();
}
- // 澶勭悊缂撳啿鍖轰腑鐨勬暟鎹�
- processBuffer();
+ // 瀹氭湡妫�鏌ュ唴瀛�
+ checkMemory();
+
+ } catch (Exception e) {
+ System.err.println("鎵归噺澶勭悊鏁版嵁鏃跺彂鐢熷紓甯�: " + e.getMessage());
+ // 鍙戠敓寮傚父鏃堕噸缃姸鎬�
+ resetParserState();
}
-
- // 瀹氭湡妫�鏌ュ唴瀛�
- checkMemory();
+ }
+
+ /**
+ * 澶勭悊杩囧ぇ鐨勬暟鎹寘
+ */
+ private void handleOversizedPacket(byte[] oversizedData) {
+ // 瀵逛簬杩囧ぇ鐨勬暟鎹寘锛岀洿鎺ュ皾璇曟煡鎵捐捣濮嬫爣璁�
+ int startIndex = findStartMarkerInArray(oversizedData, 0);
+ if (startIndex != -1) {
+ // 鎵惧埌璧峰鏍囪锛屽皢鍓╀綑鏁版嵁鏀惧叆缂撳啿鍖�
+ int remainingLength = oversizedData.length - startIndex;
+ if (remainingLength <= dataBuffer.length) {
+ System.arraycopy(oversizedData, startIndex, dataBuffer, 0, remainingLength);
+ bufferPosition = remainingLength;
+ processBuffer();
+ }
+ }
+ // 鍚﹀垯涓㈠純璇ユ暟鎹寘
+ }
+
+ /**
+ * 鍦ㄦ寚瀹氭暟缁勪腑鏌ユ壘璧峰鏍囪
+ */
+ private int findStartMarkerInArray(byte[] data, int startPos) {
+ for (int i = startPos; i <= data.length - START_MARKER.length; i++) {
+ if (data[i] == START_MARKER[0] && data[i + 1] == START_MARKER[1]) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * 閲嶇疆瑙f瀽鍣ㄧ姸鎬�
+ */
+ private void resetParserState() {
+ bufferPosition = 0;
+ clearQueues();
}
/**
* 鍐呭瓨鐩戞帶
*/
private void checkMemory() {
+ long currentTime = System.currentTimeMillis();
+ if (currentTime - lastMemoryCheckTime < MEMORY_CHECK_INTERVAL) {
+ return;
+ }
+
+ lastMemoryCheckTime = currentTime;
+
Runtime runtime = Runtime.getRuntime();
long usedMem = runtime.totalMemory() - runtime.freeMemory();
long maxMem = runtime.maxMemory();
- if (usedMem > maxMem * 0.8) {
- //System.out.println("鍐呭瓨浣跨敤鐜囪秴杩�80%锛屽綋鍓嶄娇鐢�: " + (usedMem / 1024 / 1024) + "MB");
+ if (usedMem > maxMem * 0.75) {
+ // 鍐呭瓨浣跨敤鐜囪秴杩�75%鏃惰繘琛屽瀮鍦惧洖鏀�
+ System.gc();
+
+ if (lunxun.DEBUG_ENABLED) {
+ SystemDebugDialog.appendAsciiData("鍐呭瓨浣跨敤鐜囪秴杩�75%锛屽凡瑙﹀彂鍨冨溇鍥炴敹銆備娇鐢ㄥ唴瀛�: " +
+ (usedMem / 1024 / 1024) + "MB");
+ }
}
}
@@ -180,7 +278,10 @@
* 澶勭悊缂撳啿鍖轰腑鐨勬暟鎹紝瑙f瀽瀹屾暣鏁版嵁鍖�
*/
private void processBuffer() {
- while (bufferPosition >= MIN_PACKET_LENGTH) {
+ int processedCount = 0;
+ final int MAX_PACKETS_PER_BATCH = 20; // 闄愬埗姣忔澶勭悊鐨勬渶澶у寘鏁伴噺
+
+ while (bufferPosition >= MIN_PACKET_LENGTH && processedCount < MAX_PACKETS_PER_BATCH) {
// 鏌ユ壘璧峰鏍囪
int startIndex = findStartMarker();
if (startIndex == -1) {
@@ -200,6 +301,13 @@
int dataLength = ((dataBuffer[startIndex + 2] & 0xFF) << 8) | (dataBuffer[startIndex + 3] & 0xFF);
int totalPacketLength = 2 + 2 + dataLength + 2; // 璧峰鏍囪2 + 鏁版嵁闀垮害2 + 鏁版嵁鍐呭 + CRC2
+ // 妫�鏌ユ暟鎹暱搴︽槸鍚﹀悎鐞�
+ if (dataLength < 0 || totalPacketLength > dataBuffer.length) {
+ // 鏁版嵁闀垮害寮傚父锛岃烦杩囪繖涓寘
+ compactBuffer(startIndex + 1);
+ continue;
+ }
+
// 妫�鏌ユ槸鍚︽敹鍒板畬鏁存暟鎹寘
if (startIndex + totalPacketLength > bufferPosition) {
// 鏁版嵁鍖呬笉瀹屾暣锛岀瓑寰呮洿澶氭暟鎹�
@@ -208,16 +316,15 @@
}
// 鎻愬彇瀹屾暣鏁版嵁鍖�
- byte[] packet = new byte[totalPacketLength];
- System.arraycopy(dataBuffer, startIndex, packet, 0, totalPacketLength);
-
- // 灏嗘暟鎹寘鏀惧叆闃熷垪渚涜В鏋�
- try {
+ byte[] packet = extractPacket(startIndex, totalPacketLength);
+ if (packet != null) {
+ // 灏嗘暟鎹寘鏀惧叆闃熷垪渚涜В鏋�
if (!dataQueue.offer(packet)) {
- System.err.println("鏁版嵁闃熷垪宸叉弧锛屼涪寮冩暟鎹寘");
+ // 闃熷垪宸叉弧锛岄噴鏀緋acket寮曠敤
+ packet = null;
+ handleDataQueueFull();
+ return;
}
- } catch (Exception e) {
- System.err.println("鏀惧叆鏁版嵁闃熷垪鏃跺彂鐢熷紓甯�: " + e.getMessage());
}
// 绉诲姩缂撳啿鍖轰綅缃�
@@ -226,6 +333,29 @@
System.arraycopy(dataBuffer, startIndex + totalPacketLength, dataBuffer, 0, remaining);
}
bufferPosition = remaining;
+
+ processedCount++;
+ }
+ }
+
+ /**
+ * 鎻愬彇鏁版嵁鍖咃紝閲嶇敤byte鏁扮粍鍑忓皯瀵硅薄鍒涘缓
+ */
+ private byte[] extractPacket(int startIndex, int totalPacketLength) {
+ byte[] packet = new byte[totalPacketLength];
+ System.arraycopy(dataBuffer, startIndex, packet, 0, totalPacketLength);
+ return packet;
+ }
+
+ /**
+ * 澶勭悊鏁版嵁闃熷垪婊$殑鎯呭喌
+ */
+ private void handleDataQueueFull() {
+ // 涓㈠純闃熷垪涓渶鑰佺殑鏁版嵁
+ dataQueue.poll();
+
+ if (lunxun.DEBUG_ENABLED) {
+ SystemDebugDialog.appendAsciiData("鏁版嵁瑙f瀽闃熷垪宸叉弧锛屼涪寮冩渶鑰佹暟鎹寘");
}
}
@@ -245,7 +375,7 @@
* 鍘嬬缉缂撳啿鍖猴紝灏嗘湁鏁堟暟鎹Щ鍒板紑澶�
*/
private void compactBuffer(int startIndex) {
- if (startIndex > 0) {
+ if (startIndex > 0 && bufferPosition > startIndex) {
System.arraycopy(dataBuffer, startIndex, dataBuffer, 0, bufferPosition - startIndex);
bufferPosition -= startIndex;
}
@@ -267,7 +397,7 @@
break;
} catch (Exception e) {
System.err.println("澶勭悊鏁版嵁鍖呮椂鍙戠敓寮傚父: " + e.getMessage());
- e.printStackTrace();
+ // 缁х画杩愯锛屼笉閫�鍑虹嚎绋�
}
}
@@ -278,8 +408,12 @@
* 瑙f瀽鏁版嵁鍖呭苟鏍规嵁鍔熻兘鐮佽皟鐢ㄧ浉搴旀柟娉�
*/
private void parsePacket(byte[] packet) {
+ if (packet == null || packet.length < MIN_PACKET_LENGTH) {
+ return;
+ }
+
try {
- SerialPortService.getReceivedDataCount();
+ SerialPortService.getReceivedDataCount();
// 瑙f瀽鍩烘湰瀛楁
byte hostAddress = packet[4]; // 涓绘満鍦板潃
byte slotAddress = packet[5]; // 鍗℃Ы鍦板潃
@@ -290,7 +424,7 @@
// 杩斿洖鍊兼暟鎹�
int returnValueLength = dataLength - 3; // N-3 (鍑忓幓涓绘満鍦板潃銆佸崱妲藉湴鍧�銆佸姛鑳界爜)
byte[] returnValue = null;
- if (returnValueLength > 0) {
+ if (returnValueLength > 0 && returnValueLength <= packet.length - 7) {
returnValue = new byte[returnValueLength];
System.arraycopy(packet, 7, returnValue, 0, returnValueLength);
}
@@ -301,12 +435,12 @@
if (returnValue != null) {
// 浣跨敤浼樺寲鐨勫瓧鑺傛暟缁勮В鏋愭柟娉曪紝閬垮厤瀛楃涓茶浆鎹�
ParseResult rst = ProtocolParser01.parseDDCC01Data(packet);
- rst.fuzhi();
-// System.out.println(rst.toString());
- if (lunxun.DEBUG_ENABLED) {
- SystemDebugDialog.appendAsciiData(rst.toString());
+ if (rst != null) {
+ rst.fuzhi();
+ if (lunxun.DEBUG_ENABLED) {
+ SystemDebugDialog.appendAsciiData(rst.toString());
+ }
}
-
}
break;
case FUNCTION_51:
@@ -315,36 +449,37 @@
int result = ProtocolParser51.parse(hexPacket);
int slot = slotAddress;
if (result == 1) {
-// Dingshidialog.showTimedDialog(null, 5,slot+"鍙峰崱妲藉嚭鍗℃垚鍔熻鍙栬蛋鍗�...");
- SlotManager.changgehaska(slot, result);
+ SlotManager.changgehaska(slot, result);
} else {
- String message=slot+"鍙峰崱妲藉彇鍗″け璐�";
+ String message = slot + "鍙峰崱妲藉彇鍗″け璐�";
Charulog.logOperation(message);
}
break;
case FUNCTION_52:
- //System.out.println("鍔熻兘鐮� 0x52 - LED浜害鎺у埗");
+ // LED浜害鎺у埗 - 鏃犳搷浣�
break;
case FUNCTION_80:
- //System.out.println("鍔熻兘鐮� 0x80 - 宸ュ崱鍗囩骇浣胯兘");
+ // 宸ュ崱鍗囩骇浣胯兘 - 鏃犳搷浣�
break;
case FUNCTION_81:
- //System.out.println("鍔熻兘鐮� 0x81 - 宸ヤ綔鍗″崌绾ф暟鎹寘");
+ // 宸ヤ綔鍗″崌绾ф暟鎹寘 - 鏃犳搷浣�
break;
case FUNCTION_82:
- //System.out.println("鍔熻兘鐮� 0x82 - 鍗曟澘鍗囩骇浣胯兘");
+ // 鍗曟澘鍗囩骇浣胯兘 - 鏃犳搷浣�
break;
case FUNCTION_83:
- //System.out.println("鍔熻兘鐮� 0x83 - 鍗曟澘鍗囩骇鏁版嵁鍖�");
+ // 鍗曟澘鍗囩骇鏁版嵁鍖� - 鏃犳搷浣�
break;
default:
- System.err.println("鏈煡鍔熻兘鐮�: 0x" + Integer.toHexString(functionCode & 0xFF));
+ if (lunxun.DEBUG_ENABLED) {
+ System.err.println("鏈煡鍔熻兘鐮�: 0x" + Integer.toHexString(functionCode & 0xFF));
+ }
break;
}
} catch (Exception e) {
System.err.println("瑙f瀽鏁版嵁鍖呮椂鍙戠敓閿欒: " + e.getMessage());
- e.printStackTrace();
+ // 涓嶆墦鍗板爢鏍堣窡韪紝閬垮厤浜х敓澶ч噺鏃ュ織瀵硅薄
}
}
@@ -352,6 +487,10 @@
* 浼樺寲鐨勫瓧鑺傛暟缁勮浆鍗佸叚杩涘埗瀛楃涓叉柟娉�
*/
private String bytesToHex(byte[] bytes) {
+ if (bytes == null || bytes.length == 0) {
+ return "";
+ }
+
hexBuilder.setLength(0); // 娓呯┖閲嶇敤
for (byte b : bytes) {
hexBuilder.append(String.format("%02X", b));
@@ -390,12 +529,14 @@
* 鑾峰彇瑙f瀽鍣ㄧ姸鎬佷俊鎭�
*/
public String getStatusInfo() {
- return String.format("涓插彛瑙f瀽鍣ㄧ姸鎬�: %s, 闃熷垪澶у皬: %d/%d, 鎵归噺闃熷垪: %d/%d",
+ return String.format("涓插彛瑙f瀽鍣ㄧ姸鎬�: %s, 闃熷垪澶у皬: %d/%d, 鎵归噺闃熷垪: %d/%d, 缂撳啿鍖�: %d/%d",
isRunning ? "杩愯涓�" : "宸插仠姝�",
dataQueue.size(),
dataQueue.remainingCapacity() + dataQueue.size(),
batchQueue.size(),
- batchQueue.remainingCapacity() + batchQueue.size());
+ batchQueue.remainingCapacity() + batchQueue.size(),
+ bufferPosition,
+ dataBuffer.length);
}
/**
@@ -404,4 +545,14 @@
public void setMaxRawDataPrintLength(int length) {
// 瀹炵幇鏍规嵁闇�瑕佽皟鏁�
}
+
+ /**
+ * 涓诲姩娓呯悊璧勬簮
+ */
+ public void cleanup() {
+ stop();
+ clearQueues();
+ bufferPosition = 0;
+ hexBuilder.setLength(0);
+ }
}
\ No newline at end of file
diff --git a/src/xitongshezhi/kuaisuquka.java b/src/xitongshezhi/kuaisuquka.java
index a648035..3cf1923 100644
--- a/src/xitongshezhi/kuaisuquka.java
+++ b/src/xitongshezhi/kuaisuquka.java
@@ -140,12 +140,7 @@
String hasCardStatus = slotInfo.getHasCard();
String cardNumber = slotInfo.getCardNumber();
- // 璋冭瘯鍗曚釜鍗℃Ы
- if (i < 5) { // 鍙墦鍗板墠5涓崱妲界殑璋冭瘯淇℃伅
- System.out.printf("鍒锋柊鍗℃Ы %d: hasCard=%s, cardNumber=%s%n",
- i + 1, hasCardStatus, cardNumber);
- }
-
+
// 绠�鍖栫殑鍒ゆ柇閫昏緫 - 閲嶇偣璋冭瘯
boolean reallyHasCard = false;
--
Gitblit v1.9.3