张世豪
2025-11-28 7acfc864d11de1fc41cabc2a5d4fad3894c2e5b0
增加发卡不成功再次发卡的逻辑
已修改8个文件
已添加1个文件
104 ■■■■■ 文件已修改
bin/.gitignore 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
bin/chuankou/Sendmsg.class 补丁 | 查看 | 原始文档 | blame | 历史
bin/chushihua/SlotManager.class 补丁 | 查看 | 原始文档 | blame | 历史
bin/home/CardMachineUI.class 补丁 | 查看 | 原始文档 | blame | 历史
src/chuankou/Sendmsg.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/chushihua/SlotManager.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/home/CardMachineUI.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/home/Fkj.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/publicway/TimestampUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
bin/.gitignore
@@ -1,7 +1,3 @@
/chuankou/
/chushihua/
/dialog/
/home/
/jiekou/
/publicway/
/xitongshezhi/
/chushihua/
/chuankou/
bin/chuankou/Sendmsg.class
Binary files differ
bin/chushihua/SlotManager.class
Binary files differ
bin/home/CardMachineUI.class
Binary files differ
src/chuankou/Sendmsg.java
@@ -6,11 +6,13 @@
import javax.swing.SwingWorker;
import chushihua.SlotManager;
import chushihua.lunxun;
import dialog.Charulog;
import dialog.Dingshidialog;
import dialog.Errlog;
import publicway.OpenDoor;
import publicway.TimestampUtil;
import xitongshezhi.SystemDebugDialog;
/**
@@ -55,6 +57,11 @@
            mesBuilder.append(command).append(";type").append(type).append("控制打开").append(slotId).append("柜门");
            String mes = mesBuilder.toString();
            
            // èŽ·å–å½“å‰æ—¶é—´
            String currentTime = TimestampUtil.getTimestamp();
            // æ›´æ–°å¡æ§½çš„æ”¶åˆ°å‘卡指令时间
            SlotManager.slotArray[slotId-1].setReceiveCardCommandTime(currentTime);
            Charulog.logOperation(mes);
            if (lunxun.DEBUG_ENABLED) {
                SystemDebugDialog.appendAsciiData(mes);
@@ -91,6 +98,11 @@
                        
                        if (!sent) {
                            Errlog.logOperation("发送指令到卡槽 " + slotId + " å¤±è´¥");
                        }else {
                            // èŽ·å–å½“å‰æ—¶é—´
                            String currentTime = TimestampUtil.getTimestamp();
                            // æ›´æ–°å¡æ§½çš„æ”¶åˆ°å‘卡指令时间
                            SlotManager.slotArray[slotId-1].setReceiveCardCommandTime(currentTime);
                        }
                        
                        // é—´éš”100ms,但检查是否被取消
src/chushihua/SlotManager.java
@@ -55,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";
    /**
     * æž„造函数 - åˆå§‹åŒ–所有卡槽
@@ -81,7 +84,7 @@
            slot.setCurrent(UNKNOWN_VALUE);
            slot.setFault(UNKNOWN_VALUE);
            slot.setUpdateTime(UNKNOWN_VALUE);
            slot.setReceiveCardCommandTime(UNKNOWN_VALUE); // æ–°å¢žï¼šåˆå§‹åŒ–收到发卡指令时间为-1
            slotArray[i] = slot;
        }
@@ -165,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;
@@ -417,6 +425,7 @@
            slot.setCurrent(UNKNOWN_VALUE);
            slot.setFault(UNKNOWN_VALUE);
            slot.setUpdateTime(UNKNOWN_VALUE);
            slot.setReceiveCardCommandTime(UNKNOWN_VALUE); // æ–°å¢žï¼šé‡ç½®æ”¶åˆ°å‘卡指令时间
        }
        //System.out.println("所有卡槽状态已重置为未知");
    }
@@ -557,4 +566,51 @@
        
        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 {
                    // è§£æžæ—¶é—´å¹¶è®¡ç®—æ—¶é—´å·®
                    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());
                    // ç»§ç»­å¤„理下一个卡槽
                }
            }
        }
    }
}
src/home/CardMachineUI.java
@@ -855,6 +855,7 @@
            ensureSerialParserRunning(); // ç¡®ä¿ä¸²å£è§£æžå™¨è¿è¡Œ
            updateCardSlotsDisplay();
            updateStatistics();
            SlotManager.pollAndResendOpenCommand(1);//增加发卡不成功再次发卡
        });
        uiUpdateTimer.start();
    }
src/home/Fkj.java
@@ -9,6 +9,7 @@
    private String current;       // ç”µæµ
    private String fault;         // æ•…éšœ1插卡错误;2过流;3,门控故障;4过压;5欠压;
    private String updateTime;    // æ›´æ–°æ—¶é—´
    private String receiveCardCommandTime; // æ”¶åˆ°å‘卡指令时间
    
    // åŽŸæœ‰çš„getter/setter方法
    public String getSlotNumber() { return slotNumber; }
@@ -67,4 +68,12 @@
    public void setHasCard(String hasCard) {
        this.hasCard = hasCard;
    }
    // æ–°å¢žå±žæ€§çš„getter/setter方法
    public String getReceiveCardCommandTime() {
        return receiveCardCommandTime;
    }
    public void setReceiveCardCommandTime(String receiveCardCommandTime) {
        this.receiveCardCommandTime = receiveCardCommandTime;
    }
}
src/publicway/TimestampUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package publicway;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class TimestampUtil {
    /**
     * èŽ·å–å¹´æœˆæ—¥æ—¶åˆ†ç§’æ¯«ç§’çš„æ—¶é—´æˆ³
     * @return æ—¶é—´æˆ³å­—符串
     */
    public static String getTimestamp() {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
        return now.format(formatter);
    }
}