diff --git a/sec-beidou-fwd/pom.xml b/sec-beidou-fwd/pom.xml index 1c56e2f1..031a6412 100644 --- a/sec-beidou-fwd/pom.xml +++ b/sec-beidou-fwd/pom.xml @@ -114,15 +114,7 @@ - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 11 - 11 - - + diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GnssSingleBufferServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GnssSingleBufferServiceImpl.java index e49b92d8..44b7295d 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GnssSingleBufferServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GnssSingleBufferServiceImpl.java @@ -1,5 +1,6 @@ package com.imdroid.sideslope.service; +import com.imdroid.common.util.ThreadManager; import com.imdroid.secapi.dto.GnssSingleData; import com.imdroid.secapi.dto.GnssSingleDataMapper; import org.slf4j.Logger; @@ -32,7 +33,6 @@ public class GnssSingleBufferServiceImpl implements GnssSingleBufferService { buffer.add(data); if (buffer.size() >= BUFFER_SIZE) { // 溢出时直接保存 - // 此处暂定,但很有必要引入一个线程来保存,避免阻塞主线程 flush(); } } @@ -48,12 +48,19 @@ public class GnssSingleBufferServiceImpl implements GnssSingleBufferService { try { List batchList = new ArrayList<>(buffer); buffer.clear(); - // 由于每秒写数据库操作频繁,这里采用批量保存的方式 - saveBatch(batchList); - logger.debug("批量插入{}条数据成功", batchList.size()); + // 数据库操作异步执行,不阻塞主线程 + ThreadManager.getSingleThreadPool("gnss-single-save").submit(() -> { + try { + saveBatch(batchList); + logger.debug("批量插入{}条数据成功", batchList.size()); + } catch (Exception e) { + logger.error("批量插入数据失败", e); + } + }); + } catch (Exception e) { - logger.error("批量插入数据失败", e); + logger.error("线程创建失败", e); throw e; } } diff --git a/sec-beidou-rtcm/src/main/resources/application.properties b/sec-beidou-rtcm/src/main/resources/application.properties index 05977793..0210c779 100644 --- a/sec-beidou-rtcm/src/main/resources/application.properties +++ b/sec-beidou-rtcm/src/main/resources/application.properties @@ -33,4 +33,6 @@ mybatis-plus.configuration.map-underscore-to-camel-case=false xfz.server.host = 171.106.48.63 xfz.server.port = 52000 -xfz.server.data.send = false \ No newline at end of file +xfz.server.data.send = false + +warning.log.directory=./log \ No newline at end of file diff --git a/sec-beidou-rtcm/src/main/resources/logback.xml b/sec-beidou-rtcm/src/main/resources/logback.xml index 1742b9e7..f8735b8b 100644 --- a/sec-beidou-rtcm/src/main/resources/logback.xml +++ b/sec-beidou-rtcm/src/main/resources/logback.xml @@ -20,7 +20,7 @@ - + diff --git a/sec-beidou/pom.xml b/sec-beidou/pom.xml index d14c4b5e..ba7c6cf7 100644 --- a/sec-beidou/pom.xml +++ b/sec-beidou/pom.xml @@ -155,7 +155,7 @@ - org.apache.maven.pluginsmaven-compiler-plugin1111 + diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssSingleDataController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssSingleDataController.java index 4c4f2cd5..2ddaa671 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssSingleDataController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssSingleDataController.java @@ -12,6 +12,8 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.time.Duration; import java.time.LocalDateTime; @@ -80,6 +82,11 @@ public class GnssSingleDataController extends BasicController implements CommonE return this.pageList(session, page, limit, searchParams); } + @RequestMapping("/gnss/data/single/export") + @ResponseBody + public void exportData(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws Exception { + this.export(session, request, response); + } @Override public Class getEntityClass() { diff --git a/sec-beidou/src/main/resources/application.properties b/sec-beidou/src/main/resources/application.properties index 22c57f7c..b458234c 100644 --- a/sec-beidou/src/main/resources/application.properties +++ b/sec-beidou/src/main/resources/application.properties @@ -46,3 +46,5 @@ aliyun.oss.accessKey = LTAI4G6hmpX7h9hQvUnwKWxj aliyun.oss.accessSecret = GHVzHKLLor8i5ZR1qyeoi4KMf3mjHb aliyun.oss.bucket = imdroid-device-management aliyun.oss.publicReadUrl = https://imdroid-device-management.oss-cn-shanghai.aliyuncs.com + +warning.log.directory=./log \ No newline at end of file diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index d35646a3..3dc7f2dd 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -67,6 +67,7 @@ CREATE TABLE IF NOT EXISTS `gnssdevices` ( `appver` varchar(16) DEFAULT NULL COMMENT '固件版本', `imei` varchar(16) DEFAULT NULL, `model` smallint DEFAULT 0, + `loggingmode` smallint DEFAULT 0 COMMENT '日志模式: 0-精简模式(仅D3F0和D3F2), 1-完整模式', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; @@ -320,3 +321,17 @@ CREATE TABLE IF NOT EXISTS `ApiKey` ( `tenantname` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `gnssdevicesinglerecords` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `deviceid` varchar(64) NOT NULL COMMENT '设备ID', + `createtime` datetime(3) NOT NULL COMMENT '创建时间', + `model` smallint NOT NULL COMMENT '设备型号: 0-F9P(G505), 1-博通(G510)', + `x` double NOT NULL COMMENT 'GGA时是latitude, ECEF时是x', + `y` double NOT NULL COMMENT 'GGA时是longitude, ECEF时是y', + `z` double NOT NULL COMMENT 'GGA时是altitude, ECEF时是z', + `status` int NOT NULL DEFAULT '0' COMMENT 'GGA: 0初始化,1单点定位,2码差分,3无效PPS,4固定解,5浮点解,6估算,7人工固定,8模拟,9WAAS差分; ECEF: 0无B562,1浮点解,2固定解', + PRIMARY KEY (`id`), + KEY `idx_deviceid_createtime` (`deviceid`,`createtime`), + KEY `idx_createtime` (`createtime`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='GNSS单次解算记录表'; \ No newline at end of file diff --git a/sec-beidou/src/main/resources/templates/page/gnss_single_data.html b/sec-beidou/src/main/resources/templates/page/gnss_single_data.html index 3555a637..3def2e9f 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_single_data.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_single_data.html @@ -149,7 +149,7 @@ // 监听导出操作 form.on('submit(data-export-btn)', function (data) { var result = $('#searchFrm').serialize(); - var u = "/gnss/data/calc/export?" + result; + var u = "/gnss/data/single/export?" + result; window.open(u, "_blank"); return false; }); diff --git a/sec-common/src/main/java/com/imdroid/common/util/WarningLogExecutor.java b/sec-common/src/main/java/com/imdroid/common/util/WarningLogExecutor.java index feaf22bc..f2e6e47b 100644 --- a/sec-common/src/main/java/com/imdroid/common/util/WarningLogExecutor.java +++ b/sec-common/src/main/java/com/imdroid/common/util/WarningLogExecutor.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; +import java.util.stream.Stream; public class WarningLogExecutor { @@ -32,14 +33,15 @@ public class WarningLogExecutor { initializeWarningFile(warningFile, keyword, warningTypeName); } - // 找到日志文件 - List logFiles = Files.list(Paths.get(logDirectory)) - .filter(Files::isRegularFile) - .filter(path -> path.getFileName().toString().matches("sideslopertcm(\\.\\d{4}-\\d{2}-\\d{2}\\.\\d+)?\\.log")) - .collect(Collectors.toList()); + try (Stream logFilesStream = Files.list(Paths.get(logDirectory))) { + List logFiles = logFilesStream + .filter(Files::isRegularFile) + .filter(path -> path.getFileName().toString().matches("sideslopertcm(\\.\\d{4}-\\d{2}-\\d{2}\\.\\d+)?\\.log")) + .collect(Collectors.toList()); - for (Path logFile : logFiles) { - executor.submit(() -> processFile(logFile, keyword, warningTypeName, warningFile)); + for (Path logFile : logFiles) { + executor.submit(() -> processFile(logFile, keyword, warningFile)); + } } } catch (IOException e) { e.printStackTrace(); @@ -67,7 +69,7 @@ public class WarningLogExecutor { } } - private void processFile(Path logFile, String keyword, String warningTypeName, Path warningFile) { + private void processFile(Path logFile, String keyword, Path warningFile) { try (BufferedReader reader = Files.newBufferedReader(logFile); BufferedWriter writer = Files.newBufferedWriter(warningFile, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { diff --git a/sec-test-device/pom.xml b/sec-test-device/pom.xml index 271a8f75..a3596c3d 100644 --- a/sec-test-device/pom.xml +++ b/sec-test-device/pom.xml @@ -100,14 +100,7 @@ - - org.apache.maven.plugins - maven-compiler-plugin - - 11 - 11 - - + diff --git a/sec-test-device/src/main/resources/application.properties b/sec-test-device/src/main/resources/application.properties index 9ac62967..fa848559 100644 --- a/sec-test-device/src/main/resources/application.properties +++ b/sec-test-device/src/main/resources/application.properties @@ -20,3 +20,5 @@ app.format.time = HH:mm:ss app.format.datetime = yyyy-MM-dd HH:mm:ss mybatis-plus.configuration.map-underscore-to-camel-case=false + +netty.test.port = 9917 \ No newline at end of file