张世豪
6 小时以前 100f4dcea20a32663a07e91525de111f7515eb79
src/chushihua/SlotManager.java
@@ -5,7 +5,8 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import xitongshezhi.Fkj;
import dialog.Dingshidialog;
import home.Fkj;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -204,8 +205,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 +224,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());
      }
   }
@@ -273,15 +274,19 @@
    * 新增:根据串口协议解析器的状态更新来更新卡槽详细信息 - 优化版本
    */
   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);
@@ -290,6 +295,10 @@
      slot.setFault(falt);        
      // 更新时间
      slot.setUpdateTime(getCurrentTime());
      // 检测卡号变化并弹出提示
      checkCardInsertionAndShowDialog(slotNumber, oldCardNumber, cardNumber);
      return true;
   }
@@ -310,6 +319,7 @@
   /**
    * 根据状态码和故障码判断是否有卡 - 优化版本
    */
   @SuppressWarnings("unused")
   private String determineHasCardFromStatus(int status, int fault) {
      // 优化:使用数值比较替代字符串操作
      if (fault != 0) {
@@ -407,7 +417,7 @@
         slot.setFault(UNKNOWN_VALUE);
         slot.setUpdateTime(UNKNOWN_VALUE);
      }
      System.out.println("所有卡槽状态已重置为未知");
      //System.out.println("所有卡槽状态已重置为未知");
   }
@@ -445,22 +455,22 @@
    * 获取缓存统计信息(用于监控)
    */
   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);
   }
   /**
@@ -468,13 +478,13 @@
    * @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);
   }
   /**
@@ -482,13 +492,13 @@
    * @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);
   }
   /**
@@ -496,12 +506,53 @@
    * @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(() -> {
            Dingshidialog.showTimedDialog(
                  null, // 父窗口,可以为null
                  5,    // 显示3秒
                  slotNumber+"号卡槽还卡成功感谢您的使用"
                  );
         });
         //System.out.println("卡槽 " + slotNumber + " 还卡成功,卡号从 " + oldCardNumber + " 变为 " + newCardNumber);
      }
   }
   /**
    * 静态方法:根据卡槽编号改变是否有卡的属性值为0(无卡)
    * @param slotNumber 卡槽编号(从1开始)
    * @param caozuo 操作类型:1表示管理员,0表示系统
    * @return 修改成功返回true,否则返回false
    */
   public static boolean changgehaska(int slotNumber, int 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 =caozuo==1? "管理员" : "系统";
       String logMessage = String.format("取卡操作:卡槽%d被%s取卡", slotNumber, operator);
       dialog.Charulog.logOperation(logMessage);
       return true;
   }
}