From 7acfc864d11de1fc41cabc2a5d4fad3894c2e5b0 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 28 十一月 2025 11:27:08 +0800
Subject: [PATCH] 增加发卡不成功再次发卡的逻辑
---
src/chushihua/SlotManager.java | 108 +++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 95 insertions(+), 13 deletions(-)
diff --git a/src/chushihua/SlotManager.java b/src/chushihua/SlotManager.java
index 19ce442..7ffb4c8 100644
--- a/src/chushihua/SlotManager.java
+++ b/src/chushihua/SlotManager.java
@@ -5,7 +5,9 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import xitongshezhi.Fkj;
+import dialog.Dingshidialog;
+import home.Fkj;
+import publicway.TimestampUtil;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -53,6 +55,9 @@
private static final String CURRENT_EN = "current";
private static final String FAULT_EN = "fault";
private static final String UPDATE_TIME_EN = "updatetime";
+ // 鍦ㄥ睘鎬у畾涔夊尯鍩熸坊鍔犲父閲�
+ private static final String RECEIVE_CARD_COMMAND_TIME = "鏀跺埌鍙戝崱鎸囦护鏃堕棿";
+ private static final String RECEIVE_CARD_COMMAND_TIME_EN = "receivecardcommandtime";
/**
* 鏋勯�犲嚱鏁� - 鍒濆鍖栨墍鏈夊崱妲�
@@ -79,7 +84,7 @@
slot.setCurrent(UNKNOWN_VALUE);
slot.setFault(UNKNOWN_VALUE);
slot.setUpdateTime(UNKNOWN_VALUE);
-
+ slot.setReceiveCardCommandTime(UNKNOWN_VALUE); // 鏂板锛氬垵濮嬪寲鏀跺埌鍙戝崱鎸囦护鏃堕棿涓�-1
slotArray[i] = slot;
}
@@ -163,6 +168,11 @@
case UPDATE_TIME_EN:
slot.setUpdateTime(value);
break;
+ // 鍦� updateSlotAttribute 鏂规硶鐨� switch 璇彞涓坊鍔犳柊灞炴�х殑澶勭悊
+ case RECEIVE_CARD_COMMAND_TIME:
+ case RECEIVE_CARD_COMMAND_TIME_EN:
+ slot.setReceiveCardCommandTime(value);
+ break;
default:
System.err.println("閿欒锛氭湭鐭ョ殑灞炴�у悕绉� '" + attributeName + "'");
return false;
@@ -204,8 +214,8 @@
* 鎵撳嵃鎵�鏈夊崱妲界殑姒傝淇℃伅 - 浼樺寲鐗堟湰
*/
public void printAllSlotsSummary() {
- System.out.println("=== 鍗℃Ы姒傝淇℃伅 ===");
- System.out.println("鎬诲崱妲芥暟: " + TOTAL_SLOTS);
+ //System.out.println("=== 鍗℃Ы姒傝淇℃伅 ===");
+ //System.out.println("鎬诲崱妲芥暟: " + TOTAL_SLOTS);
for (Fkj slot : slotArray) {
System.out.printf("鍗℃Ы %s: 鍗$紪鍙�=%s, 鏈夊崱=%s, 鐘舵��=%s, 鏁呴殰=%s%n",
@@ -223,8 +233,8 @@
public void printSlotDetail(int slotNumber) {
Fkj slot = getSlotInfo(slotNumber);
if (slot != null) {
- System.out.println("=== 鍗℃Ы " + slotNumber + " 璇︾粏淇℃伅 ===");
- System.out.println(slot.toString());
+ //System.out.println("=== 鍗℃Ы " + slotNumber + " 璇︾粏淇℃伅 ===");
+ //System.out.println(slot.toString());
}
}
@@ -318,6 +328,7 @@
/**
* 鏍规嵁鐘舵�佺爜鍜屾晠闅滅爜鍒ゆ柇鏄惁鏈夊崱 - 浼樺寲鐗堟湰
*/
+ @SuppressWarnings("unused")
private String determineHasCardFromStatus(int status, int fault) {
// 浼樺寲锛氫娇鐢ㄦ暟鍊兼瘮杈冩浛浠e瓧绗︿覆鎿嶄綔
if (fault != 0) {
@@ -414,8 +425,9 @@
slot.setCurrent(UNKNOWN_VALUE);
slot.setFault(UNKNOWN_VALUE);
slot.setUpdateTime(UNKNOWN_VALUE);
+ slot.setReceiveCardCommandTime(UNKNOWN_VALUE); // 鏂板锛氶噸缃敹鍒板彂鍗℃寚浠ゆ椂闂�
}
- System.out.println("鎵�鏈夊崱妲界姸鎬佸凡閲嶇疆涓烘湭鐭�");
+ //System.out.println("鎵�鏈夊崱妲界姸鎬佸凡閲嶇疆涓烘湭鐭�");
}
@@ -453,8 +465,8 @@
* 鑾峰彇缂撳瓨缁熻淇℃伅锛堢敤浜庣洃鎺э級
*/
public static void printCacheStats() {
- System.out.println("鐘舵�佺紦瀛樺ぇ灏�: " + statusTextCache.size());
- System.out.println("鏁呴殰缂撳瓨澶у皬: " + faultTextCache.size());
+ //System.out.println("鐘舵�佺紦瀛樺ぇ灏�: " + statusTextCache.size());
+ //System.out.println("鏁呴殰缂撳瓨澶у皬: " + faultTextCache.size());
}
/**
@@ -521,14 +533,84 @@
if ("0000".equals(oldCardNumber) && !"0000".equals(newCardNumber)) {
// 鍦ㄤ簨浠跺垎鍙戠嚎绋嬩腑鏄剧ず瀵硅瘽妗�
javax.swing.SwingUtilities.invokeLater(() -> {
- xitongshezhi.Dingshidialog.showTimedDialog(
+ Dingshidialog.showTimedDialog(
null, // 鐖剁獥鍙o紝鍙互涓簄ull
5, // 鏄剧ず3绉�
- "杩樺崱鎴愬姛锛屾劅璋㈡偍鐨勪娇鐢�",
- "" // 闊抽鏂囦欢锛屽彲浠ヤ负绌�
+ slotNumber+"鍙峰崱妲借繕鍗℃垚鍔熸劅璋㈡偍鐨勪娇鐢�"
);
});
- System.out.println("鍗℃Ы " + slotNumber + " 杩樺崱鎴愬姛锛屽崱鍙蜂粠 " + oldCardNumber + " 鍙樹负 " + newCardNumber);
+// System.out.println("杩樺崱鎴愬姛" + slotNumber + " 杩樺崱鎴愬姛锛屽崱鍙蜂粠 " + oldCardNumber + " 鍙樹负 " + newCardNumber);
+ System.out.println("杩樺崱鎴愬姛"+slotNumber +"鏃堕棿"+ " 杩樺崱鎴愬姛锛屽崱鍙蜂粠 " + oldCardNumber + " 鍙樹负 " + newCardNumber+TimestampUtil.getTimestamp());
}
}
+
+ /**
+ * 闈欐�佹柟娉曪細鏍规嵁鍗℃Ы缂栧彿鏀瑰彉鏄惁鏈夊崱鐨勫睘鎬у�间负0锛堟棤鍗★級
+ * @param slotNumber 鍗℃Ы缂栧彿锛堜粠1寮�濮嬶級
+ * @param caozuo 鎿嶄綔绫诲瀷锛�1琛ㄧず绠$悊鍛橈紝0琛ㄧず绯荤粺
+ * @return 淇敼鎴愬姛杩斿洖true锛屽惁鍒欒繑鍥瀎alse
+ */
+ public static boolean changgehaska(int slotNumber, int caozuo) {
+ if (!isValidSlotNumber(slotNumber)) {
+ return false;
+ }
+ Fkj slot = slotArray[slotNumber - 1];
+ slot.setHasCard("0");
+ slot.setCardNumber("0000");
+ slot.setUpdateTime(getCurrentTime());
+
+ // 璁板綍鍙栧崱鏃ュ織
+ String operator =caozuo==1? "绠$悊鍛�" : "绯荤粺";
+ String logMessage = String.format("鍙栧崱鎿嶄綔锛氬崱妲�%d琚�%s鍙栧崱", slotNumber, operator);
+ dialog.Charulog.logOperation(logMessage);
+
+ return true;
+ }
+
+ /**
+ * 杞妫�鏌ュ崱妲界姸鎬侊紝瀵规湭鍙栧嚭鐨勫崱妲介噸鏂板彂閫佸紑闂ㄦ寚浠�
+ * @param type 鎿嶄綔绫诲瀷锛�1-鏈嶅姟鍣ㄥ彂鍗★紝2-绠$悊鍛樺彂鍗�
+ */
+ public static void pollAndResendOpenCommand(int type) {
+ // 浣跨敤鑷畾涔夌殑鏃堕棿鏍煎紡鍣�
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ for (int i = 0; i < TOTAL_SLOTS; i++) {
+ Fkj slot = slotArray[i];
+ int slotId = i + 1;
+
+ // 鑾峰彇鏀跺埌鍙戝崱鎸囦护鏃堕棿鍜屽崱鍙�
+ String receiveTime = slot.getReceiveCardCommandTime();
+ String cardNumber = slot.getCardNumber();
+
+ // 妫�鏌ユ潯浠讹細鏀跺埌鎸囦护鏃堕棿涓嶄负-1锛屽崱鍙蜂笉绛変簬0000
+ if (!UNKNOWN_VALUE.equals(receiveTime) && !"0000".equals(cardNumber)) {
+ try {
+ // 瑙f瀽鏃堕棿骞惰绠楁椂闂村樊
+ LocalDateTime currentTime = LocalDateTime.now();
+ LocalDateTime receiveDateTime = LocalDateTime.parse(receiveTime, formatter);
+
+ long timeDiff = java.time.Duration.between(receiveDateTime, currentTime).toMillis();
+
+ // 濡傛灉鏃堕棿宸皬浜�10绉掞紝閲嶆柊鍙戦�佸紑闂ㄦ寚浠�
+ if (timeDiff < 10000) {
+ // 璋冪敤鍙戦�佸紑闂ㄦ寚浠ゆ柟娉�
+ boolean sendResult = chuankou.Sendmsg.opendoorzhiling(slotId, type);
+
+ if (sendResult) {
+ System.out.println("閲嶆柊鍙戦�佸紑闂ㄦ寚浠� - 鍗℃Ы" + slotId + "锛屽崱鍙�: " + cardNumber +
+ "锛屾椂闂村樊: " + timeDiff + "ms");
+ }
+
+ // 闂撮殧50姣
+ Thread.sleep(50);
+ }
+
+ } catch (Exception e) {
+ System.err.println("澶勭悊鍗℃Ы" + slotId + "鏃跺彂鐢熼敊璇�: " + e.getMessage());
+ // 缁х画澶勭悊涓嬩竴涓崱妲�
+ }
+ }
+ }
+ }
}
\ No newline at end of file
--
Gitblit v1.10.0