| | |
| | | * 打印所有卡槽的概要信息 - 优化版本 |
| | | */ |
| | | 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", |
| | |
| | | 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()); |
| | | } |
| | | } |
| | | |
| | |
| | | * 新增:根据串口协议解析器的状态更新来更新卡槽详细信息 - 优化版本 |
| | | */ |
| | | public static boolean gengxinshuxingzhi( |
| | | int slotNumber, String cardNumber, String hascard, String workStatus,String voltage, String current,String falt ) { |
| | | int slotNumber, String cardNumber, String hascard, String workStatus, |
| | | String voltage, String current, String falt) { |
| | | |
| | | |
| | | if (!isValidSlotNumber(slotNumber) || cardNumber.equals("0000")) { |
| | | if (!isValidSlotNumber(slotNumber)) { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | Fkj slot = slotArray[slotNumber-1]; |
| | | |
| | | // 获取更新前的卡号用于比较 |
| | | String oldCardNumber = slot.getCardNumber(); |
| | | |
| | | // 更新卡槽属性 |
| | | slot.setCardNumber(cardNumber); |
| | | slot.setHasCard(hascard); |
| | | slot.setWorkStatus(workStatus); |
| | |
| | | slot.setFault(falt); |
| | | // 更新时间 |
| | | slot.setUpdateTime(getCurrentTime()); |
| | | |
| | | // 检测卡号变化并弹出提示 |
| | | checkCardInsertionAndShowDialog(slotNumber, oldCardNumber, cardNumber); |
| | | |
| | | return true; |
| | | } |
| | | |
| | |
| | | slot.setFault(UNKNOWN_VALUE); |
| | | slot.setUpdateTime(UNKNOWN_VALUE); |
| | | } |
| | | System.out.println("所有卡槽状态已重置为未知"); |
| | | //System.out.println("所有卡槽状态已重置为未知"); |
| | | } |
| | | |
| | | |
| | |
| | | * 获取缓存统计信息(用于监控) |
| | | */ |
| | | public static void printCacheStats() { |
| | | System.out.println("状态缓存大小: " + statusTextCache.size()); |
| | | System.out.println("故障缓存大小: " + faultTextCache.size()); |
| | | //System.out.println("状态缓存大小: " + statusTextCache.size()); |
| | | //System.out.println("故障缓存大小: " + faultTextCache.size()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 统计充电中的卡槽数量 |
| | | * @return 充电中的卡槽数量字符串 |
| | | */ |
| | | public static String getChargingCount() { |
| | | int count = 0; |
| | | for (Fkj slot : slotArray) { |
| | | if ("2".equals(slot.getWorkStatus())) { |
| | | count++; |
| | | } |
| | | } |
| | | return String.valueOf(count); |
| | | int count = 0; |
| | | for (Fkj slot : slotArray) { |
| | | if ("2".equals(slot.getWorkStatus())) { |
| | | count++; |
| | | } |
| | | } |
| | | return String.valueOf(count); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return 已充满的卡槽数量字符串 |
| | | */ |
| | | public static String getFullyChargedCount() { |
| | | int count = 0; |
| | | for (Fkj slot : slotArray) { |
| | | if ("3".equals(slot.getWorkStatus())) { |
| | | count++; |
| | | } |
| | | } |
| | | return String.valueOf(count); |
| | | int count = 0; |
| | | for (Fkj slot : slotArray) { |
| | | if ("3".equals(slot.getWorkStatus())) { |
| | | count++; |
| | | } |
| | | } |
| | | return String.valueOf(count); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return 故障的卡槽数量字符串 |
| | | */ |
| | | public static String getFaultCount() { |
| | | int count = 0; |
| | | for (Fkj slot : slotArray) { |
| | | if ("4".equals(slot.getWorkStatus())) { |
| | | count++; |
| | | } |
| | | } |
| | | return String.valueOf(count); |
| | | int count = 0; |
| | | for (Fkj slot : slotArray) { |
| | | if ("4".equals(slot.getWorkStatus())) { |
| | | count++; |
| | | } |
| | | } |
| | | return String.valueOf(count); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return 通信超时的卡槽数量字符串 |
| | | */ |
| | | public static String getCommTimeoutCount() { |
| | | int count = 0; |
| | | for (Fkj slot : slotArray) { |
| | | if ("6".equals(slot.getWorkStatus())) { |
| | | count++; |
| | | } |
| | | int count = 0; |
| | | for (Fkj slot : slotArray) { |
| | | if ("6".equals(slot.getWorkStatus())) { |
| | | count++; |
| | | } |
| | | } |
| | | return String.valueOf(count); |
| | | } |
| | | |
| | | /** |
| | | * 新增:检测卡号变化并弹出还卡成功提示 |
| | | */ |
| | | private static void checkCardInsertionAndShowDialog(int slotNumber, String oldCardNumber, String newCardNumber) { |
| | | // 检查卡号是否从"0000"变为非"0000" |
| | | if ("0000".equals(oldCardNumber) && !"0000".equals(newCardNumber)) { |
| | | // 在事件分发线程中显示对话框 |
| | | javax.swing.SwingUtilities.invokeLater(() -> { |
| | | xitongshezhi.Dingshidialog.showTimedDialog( |
| | | null, // 父窗口,可以为null |
| | | 5, // 显示3秒 |
| | | "还卡成功,感谢您的使用", |
| | | "" // 音频文件,可以为空 |
| | | ); |
| | | }); |
| | | //System.out.println("卡槽 " + slotNumber + " 还卡成功,卡号从 " + oldCardNumber + " 变为 " + newCardNumber); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 静态方法:根据卡槽编号改变是否有卡的属性值为0(无卡) |
| | | * @param slotNumber 卡槽编号(从1开始) |
| | | * @param caozuo 操作类型:1表示管理员,0表示系统 |
| | | * @return 修改成功返回true,否则返回false |
| | | */ |
| | | public static boolean changgehaska(int slotNumber, String caozuo) { |
| | | if (!isValidSlotNumber(slotNumber)) { |
| | | return false; |
| | | } |
| | | return String.valueOf(count); |
| | | Fkj slot = slotArray[slotNumber - 1]; |
| | | slot.setHasCard("0"); |
| | | slot.setCardNumber("0000"); |
| | | slot.setUpdateTime(getCurrentTime()); |
| | | |
| | | // 记录取卡日志 |
| | | String operator = "1".equals(caozuo) ? "管理员" : "系统"; |
| | | String logMessage = String.format("取卡操作:卡槽%d被%s取卡", slotNumber, operator); |
| | | xitongshezhi.Charulog.logOperation(logMessage); |
| | | |
| | | return true; |
| | | } |
| | | } |