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