From ea135161eff1dd7c71c159be948e93b50fd1db81 Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期日, 24 八月 2025 22:40:16 +0800
Subject: [PATCH] 0824

---
 src/scheduled_task/TrackTableManager.java   |   12 ++++
 src/window/ContentPanelFactory.java         |   26 ++++----
 src/publicsWay/TrackDataBatchInserter.java  |    1 
 src/publicsWay/GUIUtils.java                |   28 +++++++++
 src/publicsWay/PacketProcessingSystemB.java |   37 ++++++++----
 src/window/NavigationTreeFactory.java       |   30 ++++++++-
 systemfile/logfile/openlog.txt              |   31 ++++++++++
 7 files changed, 134 insertions(+), 31 deletions(-)

diff --git a/src/publicsWay/GUIUtils.java b/src/publicsWay/GUIUtils.java
new file mode 100644
index 0000000..50353b6
--- /dev/null
+++ b/src/publicsWay/GUIUtils.java
@@ -0,0 +1,28 @@
+package publicsWay;
+import javax.swing.*;
+import java.awt.*;
+
+public class GUIUtils {
+    /**
+     * 创建一个带有手型光标的居中JLabel
+     * @param text 标签文本
+     * @return 配置好的JLabel
+     */
+    public static JLabel createClickableLabel(String text) {
+        JLabel label = new JLabel(text, SwingConstants.CENTER);
+        label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        return label;
+    }
+    
+    /**
+     * 创建一个带有手型光标和指定对齐方式的JLabel
+     * @param text 标签文本
+     * @param alignment 对齐方式
+     * @return 配置好的JLabel
+     */
+    public static JLabel createClickableLabel(String text, int alignment) {
+        JLabel label = new JLabel(text, alignment);
+        label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+        return label;
+    }
+}
\ No newline at end of file
diff --git a/src/publicsWay/PacketProcessingSystemB.java b/src/publicsWay/PacketProcessingSystemB.java
index 6b3ed9f..d2a47bb 100644
--- a/src/publicsWay/PacketProcessingSystemB.java
+++ b/src/publicsWay/PacketProcessingSystemB.java
@@ -9,6 +9,7 @@
 import java.util.regex.Matcher;
 import dell_system.MessageViewPanel;
 import dell_targets.Dell_tag;
+import targets.LocationTag;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -211,20 +212,30 @@
 		Dell_tag.updateLocationTagProperty(deviceId, "differentialTime",differentialTime);
 		
 		// 创建TrackData对象并添加到批量插入器
+		LocationTag tag = Dell_tag.getTagByDeviceId(deviceId);
+		String deviceName = tag != null ? tag.getDeviceName() : "";
+		String company = tag != null ? tag.getCompany() : "";
 		TrackData trackData = new TrackData(
-	        parser.getDeviceId(),
-	        parser.getUtcTime(),
-	        parser.getLatitude(),
-	        parser.getLongitude(),
-	        parser.getQuality(),
-	        parser.getSatellites(),
-	        parser.getHdop(),
-	        parser.getAltitude(),
-	        parser.getGeoidHeight(),
-	        parser.getDifferentialTime(),
-	        parser.getBattery()
-	    );
-	    
+			    deviceId, 
+			    deviceName, 
+			    "", 
+			    "",
+			    "", 
+			    "", 
+			    battery, 
+			    utcTime, 
+			    longitude,
+			    latitude, 
+			    quality, 
+			    satellites, 
+			    hdop,
+			    altitude, 
+			    geoidHeight, 
+			    differentialTime, 
+			    "GNGGA",
+			    company, 
+			    time
+			);	    
 	    TrackDataBatchInserter.addTrackData(trackData);
 
 	}
diff --git a/src/publicsWay/TrackDataBatchInserter.java b/src/publicsWay/TrackDataBatchInserter.java
index fd38d48..8cd78ac 100644
--- a/src/publicsWay/TrackDataBatchInserter.java
+++ b/src/publicsWay/TrackDataBatchInserter.java
@@ -7,7 +7,6 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
-
 import databases.DBConnector;
 import scheduled_task.TrackTableManager;
 
diff --git a/src/scheduled_task/TrackTableManager.java b/src/scheduled_task/TrackTableManager.java
index 887e2d1..2605294 100644
--- a/src/scheduled_task/TrackTableManager.java
+++ b/src/scheduled_task/TrackTableManager.java
@@ -32,6 +32,9 @@
     // 主管理逻辑
     private static void manageTables() {
         try {
+            // 0. 创建当天的表(如果不存在)
+            createTodayTableIfNotExists();
+            
             // 1. 创建未来3天的表
             createFutureTables();
             
@@ -43,6 +46,15 @@
         }
     }
 
+    // 创建当天的表(如果不存在)
+    private static void createTodayTableIfNotExists() throws SQLException {
+        String today = LocalDate.now().format(DATE_FORMATTER);
+        String tableName = TABLE_PREFIX + today;
+        if (!tableExists(tableName)) {
+            DBConnector.executeUpdate(getcreateSQL(tableName));
+        }
+    }
+
     // 创建未来3天的表(包括明天、后天和大后天)
     private static void createFutureTables() throws SQLException {
         for (int i = 1; i <= 3; i++) {
diff --git a/src/window/ContentPanelFactory.java b/src/window/ContentPanelFactory.java
index 26044ea..e2fc01c 100644
--- a/src/window/ContentPanelFactory.java
+++ b/src/window/ContentPanelFactory.java
@@ -18,6 +18,8 @@
 import dell_targets.SatelliteDevicePanel;
 import dell_targets.TagManagementPanel;
 import dell_targets.TagTypeManagementPanel;
+import publicsWay.GUIUtils;
+
 import javax.swing.*;
 
 import dell_Fence.FenceDrawerFrame;
@@ -35,8 +37,7 @@
             // 鏍规嵁鑺傜偣鍚嶇О鍒涘缓瀵瑰簲鐨勫唴瀹归潰鏉�
             if (nodeName.equals(messages.getString("MAP_DISPLAY"))) {
                 // 杩欓噷杩斿洖涓�涓崰浣嶉潰鏉匡紝瀹為檯鎵撳紑鍦板浘鐨勬搷浣滃湪Windows绫讳腑澶勭悊
-                JLabel label = new JLabel(messages.getString("CLICK_TO_OPEN_MAP"), SwingConstants.CENTER);
-                panel.add(label, BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(messages.getString("CLICK_TO_OPEN_MAP")), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("TAG_MANAGEMENT"))) {
                 // 鏍囩绠$悊闈㈡澘
                 panel.add(new TagManagementPanel(messages), BorderLayout.CENTER);
@@ -45,7 +46,7 @@
                 panel.add(new BaseStationManagementPanel(messages), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("GATEWAY_MANAGEMENT"))) {
                 // 缃戝叧绠$悊闈㈡澘锛堝崰浣嶇锛�
-                panel.add(new JLabel(nodeName, SwingConstants.CENTER), BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(nodeName), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("DIFF_BASE"))) {
                 // 宸垎鍩虹珯闈㈡澘
                 panel.add(new DifferentialBaseStationManagementPanel(messages), BorderLayout.CENTER);
@@ -75,25 +76,25 @@
                 panel.add(new FenceListPanel(messages), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("DEVICE_OFFLINE"))) {
                 // 璁惧鑴辨満闈㈡澘锛堝崰浣嶇锛�
-                panel.add(new JLabel(nodeName, SwingConstants.CENTER), BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(nodeName), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("TRACK_RECORD"))) {
                 // 杞ㄨ抗璁板綍闈㈡澘锛堝崰浣嶇锛�
-                panel.add(new JLabel(nodeName, SwingConstants.CENTER), BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(nodeName), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("ACCESS_RECORD"))) {
                 // 杩涘嚭璁板綍闈㈡澘锛堝崰浣嶇锛�
-                panel.add(new JLabel(nodeName, SwingConstants.CENTER), BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(nodeName), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("ALARM_RECORD"))) {
                 // 鎶ヨ璁板綍闈㈡澘锛堝崰浣嶇锛�
-                panel.add(new JLabel(nodeName, SwingConstants.CENTER), BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(nodeName), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("HEALTH_RECORD"))) {
                 // 鍋ュ悍璁板綍闈㈡澘锛堝崰浣嶇锛�
-                panel.add(new JLabel(nodeName, SwingConstants.CENTER), BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(nodeName), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("TAG_POWER"))) {
                 // 鏍囩鐢甸噺闈㈡澘锛堝崰浣嶇锛�
-                panel.add(new JLabel(nodeName, SwingConstants.CENTER), BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(nodeName), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("BASE_POWER"))) {
                 // 鍩虹珯鐢甸噺闈㈡澘锛堝崰浣嶇锛�
-                panel.add(new JLabel(nodeName, SwingConstants.CENTER), BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(nodeName), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("SYSTEM_SETTINGS"))) {
                 // 绯荤粺璁剧疆闈㈡澘
                 panel.add(new SystemSettingsPanel(messages), BorderLayout.CENTER);
@@ -102,7 +103,7 @@
                 panel.add(new MessageViewPanel(messages), BorderLayout.CENTER);                
             } else if (nodeName.equals(messages.getString("SYSTEM_DEBUG"))) {
                 // 绯荤粺璋冭瘯闈㈡澘锛堝崰浣嶇锛�
-                panel.add(new JLabel(nodeName, SwingConstants.CENTER), BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(nodeName), BorderLayout.CENTER);
             } else if (nodeName.equals(messages.getString("COMPANY_MANAGEMENT"))) {
                 // 鍏徃绠$悊闈㈡澘
                 panel.add(new CompanyManagementPanel(messages), BorderLayout.CENTER);
@@ -125,8 +126,7 @@
                 panel.add(new SatelliteDevicePanel(messages), BorderLayout.CENTER);
             } else {
                 // 瀵逛簬鏈疄鐜板姛鑳斤紝鏄剧ず寮�鍙戜腑鎻愮ず
-                JLabel label = new JLabel(messages.getString("DEVELOPING") + ": " + nodeName, SwingConstants.CENTER);
-                panel.add(label, BorderLayout.CENTER);
+                panel.add(GUIUtils.createClickableLabel(messages.getString("DEVELOPING") + ": " + nodeName), BorderLayout.CENTER);
             }
         } catch (Exception e) {
             // 寮傚父澶勭悊锛屾樉绀洪敊璇俊鎭�
diff --git a/src/window/NavigationTreeFactory.java b/src/window/NavigationTreeFactory.java
index f2fc369..ed94468 100644
--- a/src/window/NavigationTreeFactory.java
+++ b/src/window/NavigationTreeFactory.java
@@ -1,18 +1,19 @@
 package window;
 import javax.swing.JTree;
 import javax.swing.tree.DefaultMutableTreeNode;
-
 import dell_map.Dell_Map;
-
 import java.util.ResourceBundle;
 import java.awt.Font;
+import java.awt.Cursor;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
 public class NavigationTreeFactory {
 
     public static JTree createNavigationTree(ResourceBundle messages) {
         DefaultMutableTreeNode root = new DefaultMutableTreeNode(messages.getString("NAVIGATION"));
         
-        
-     // 地图节点
+        // 地图节点
         DefaultMutableTreeNode mapNode = new DefaultMutableTreeNode(messages.getString("MAP")); // 地图节点 (一级)
         
         String[] mapNames = Dell_Map.getAllMapNames();  
@@ -83,6 +84,27 @@
         tree.setFont(new Font("微软雅黑", Font.PLAIN, 14));
         tree.setShowsRootHandles(true);
         
+        // 添加鼠标移动监听器来改变光标
+        tree.addMouseMotionListener(new MouseAdapter() {
+            @Override
+            public void mouseMoved(MouseEvent e) {
+                int row = tree.getRowForLocation(e.getX(), e.getY());
+                if (row >= 0) {
+                    tree.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+                } else {
+                    tree.setCursor(Cursor.getDefaultCursor());
+                }
+            }
+        });
+        
+        // 添加鼠标退出监听器,恢复默认光标
+        tree.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseExited(MouseEvent e) {
+                tree.setCursor(Cursor.getDefaultCursor());
+            }
+        });
+        
         // 展开所有节点
         for (int i = 0; i < tree.getRowCount(); i++) {
             tree.expandRow(i);
diff --git a/systemfile/logfile/openlog.txt b/systemfile/logfile/openlog.txt
index a9ea94c..891c96f 100644
--- a/systemfile/logfile/openlog.txt
+++ b/systemfile/logfile/openlog.txt
@@ -1254,3 +1254,34 @@
 工作时长: 0小时 5分钟 52秒
 -----------------------------------
 程序启动: 2025-08-24 17:02:01
+程序关闭: 2025-08-24 22:05:36
+工作时长: 5小时 3分钟 35秒
+-----------------------------------
+程序启动: 2025-08-24 22:05:39
+程序关闭: 2025-08-24 22:05:44
+工作时长: 0小时 0分钟 4秒
+-----------------------------------
+程序启动: 2025-08-24 22:23:47
+程序关闭: 2025-08-24 22:28:28
+工作时长: 0小时 4分钟 40秒
+-----------------------------------
+程序启动: 2025-08-24 22:28:30
+程序关闭: 2025-08-24 22:29:02
+工作时长: 0小时 0分钟 32秒
+-----------------------------------
+程序启动: 2025-08-24 22:30:18
+程序关闭: 2025-08-24 22:31:37
+工作时长: 0小时 1分钟 19秒
+-----------------------------------
+程序启动: 2025-08-24 22:31:39
+程序关闭: 2025-08-24 22:31:51
+工作时长: 0小时 0分钟 12秒
+-----------------------------------
+程序启动: 2025-08-24 22:34:30
+程序关闭: 2025-08-24 22:38:56
+工作时长: 0小时 4分钟 26秒
+-----------------------------------
+程序启动: 2025-08-24 22:38:58
+程序关闭: 2025-08-24 22:39:41
+工作时长: 0小时 0分钟 42秒
+-----------------------------------

--
Gitblit v1.9.3