diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
new file mode 100644
index 0000000..0d02de0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID AS id, TEST_PLATFORM AS testPlatform, TEST_URL AS testUrl, TEST_RESULT AS testResult, TEST_TIME AS testTime, CREATE_TIME AS createTime, DESCRIPTION AS description
+
+
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
new file mode 100644
index 0000000..0d02de0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID AS id, TEST_PLATFORM AS testPlatform, TEST_URL AS testUrl, TEST_RESULT AS testResult, TEST_TIME AS testTime, CREATE_TIME AS createTime, DESCRIPTION AS description
+
+
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
new file mode 100644
index 0000000..8b6167c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
@@ -0,0 +1,49 @@
+package com.casic.missiles.modular.system.enums;
+
+import com.casic.missiles.model.exception.AbstractBaseExceptionEnum;
+
+/**
+ * @Description:
+ */
+public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum {
+
+ ID_NULL(2400, "主键不能为空"),
+ HANDLE_FAILED(500, "操作失败"),
+
+ SAVE_FAILED(400, "保存失败"),
+
+ TEST_URL_NULL(2090, "测试地址为空!"),
+
+ FILE_NULL(2091, "导入文件为空!"),
+
+ FILE_READ_ROW_FAILED(2092, "读入excel异常!"),
+
+ MONITOR_VALID_FAILED(2099, "云台登录地址重复");
+
+
+ private Integer code;
+ private String message;
+
+ BusinessExceptionEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ @Override
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
new file mode 100644
index 0000000..0d02de0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID AS id, TEST_PLATFORM AS testPlatform, TEST_URL AS testUrl, TEST_RESULT AS testResult, TEST_TIME AS testTime, CREATE_TIME AS createTime, DESCRIPTION AS description
+
+
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
new file mode 100644
index 0000000..8b6167c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
@@ -0,0 +1,49 @@
+package com.casic.missiles.modular.system.enums;
+
+import com.casic.missiles.model.exception.AbstractBaseExceptionEnum;
+
+/**
+ * @Description:
+ */
+public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum {
+
+ ID_NULL(2400, "主键不能为空"),
+ HANDLE_FAILED(500, "操作失败"),
+
+ SAVE_FAILED(400, "保存失败"),
+
+ TEST_URL_NULL(2090, "测试地址为空!"),
+
+ FILE_NULL(2091, "导入文件为空!"),
+
+ FILE_READ_ROW_FAILED(2092, "读入excel异常!"),
+
+ MONITOR_VALID_FAILED(2099, "云台登录地址重复");
+
+
+ private Integer code;
+ private String message;
+
+ BusinessExceptionEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ @Override
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
new file mode 100644
index 0000000..480e5bc
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
@@ -0,0 +1,15 @@
+package com.casic.missiles.modular.system.enums;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: zt
+ * @Date: 2023/4/20 10:41
+ */
+public interface DictEnum {
+ //测试通过
+ String TEST_PASSED = "通过";
+ //测试不通过
+ String TEST_FAILED = "不通过";
+ //测试状态
+ String TEST_STATUS = "1";
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
new file mode 100644
index 0000000..0d02de0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID AS id, TEST_PLATFORM AS testPlatform, TEST_URL AS testUrl, TEST_RESULT AS testResult, TEST_TIME AS testTime, CREATE_TIME AS createTime, DESCRIPTION AS description
+
+
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
new file mode 100644
index 0000000..8b6167c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
@@ -0,0 +1,49 @@
+package com.casic.missiles.modular.system.enums;
+
+import com.casic.missiles.model.exception.AbstractBaseExceptionEnum;
+
+/**
+ * @Description:
+ */
+public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum {
+
+ ID_NULL(2400, "主键不能为空"),
+ HANDLE_FAILED(500, "操作失败"),
+
+ SAVE_FAILED(400, "保存失败"),
+
+ TEST_URL_NULL(2090, "测试地址为空!"),
+
+ FILE_NULL(2091, "导入文件为空!"),
+
+ FILE_READ_ROW_FAILED(2092, "读入excel异常!"),
+
+ MONITOR_VALID_FAILED(2099, "云台登录地址重复");
+
+
+ private Integer code;
+ private String message;
+
+ BusinessExceptionEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ @Override
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
new file mode 100644
index 0000000..480e5bc
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
@@ -0,0 +1,15 @@
+package com.casic.missiles.modular.system.enums;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: zt
+ * @Date: 2023/4/20 10:41
+ */
+public interface DictEnum {
+ //测试通过
+ String TEST_PASSED = "通过";
+ //测试不通过
+ String TEST_FAILED = "不通过";
+ //测试状态
+ String TEST_STATUS = "1";
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
new file mode 100644
index 0000000..d3408e0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
@@ -0,0 +1,32 @@
+package com.casic.missiles.modular.system.exception;
+
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 业务异常
+ */
+public class BusinessException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ @Getter
+ @Setter
+ private Integer code;
+ @Getter
+ @Setter
+ private String message;
+
+ public BusinessException(Integer code, String message) {
+ super(message);
+ this.code = code;
+ this.message = message;
+ }
+
+ public BusinessException(BusinessExceptionEnum exceptionEnum) {
+ super(exceptionEnum.getMessage());
+ this.code = exceptionEnum.getCode();
+ this.message = exceptionEnum.getMessage();
+ }
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
new file mode 100644
index 0000000..0d02de0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID AS id, TEST_PLATFORM AS testPlatform, TEST_URL AS testUrl, TEST_RESULT AS testResult, TEST_TIME AS testTime, CREATE_TIME AS createTime, DESCRIPTION AS description
+
+
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
new file mode 100644
index 0000000..8b6167c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
@@ -0,0 +1,49 @@
+package com.casic.missiles.modular.system.enums;
+
+import com.casic.missiles.model.exception.AbstractBaseExceptionEnum;
+
+/**
+ * @Description:
+ */
+public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum {
+
+ ID_NULL(2400, "主键不能为空"),
+ HANDLE_FAILED(500, "操作失败"),
+
+ SAVE_FAILED(400, "保存失败"),
+
+ TEST_URL_NULL(2090, "测试地址为空!"),
+
+ FILE_NULL(2091, "导入文件为空!"),
+
+ FILE_READ_ROW_FAILED(2092, "读入excel异常!"),
+
+ MONITOR_VALID_FAILED(2099, "云台登录地址重复");
+
+
+ private Integer code;
+ private String message;
+
+ BusinessExceptionEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ @Override
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
new file mode 100644
index 0000000..480e5bc
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
@@ -0,0 +1,15 @@
+package com.casic.missiles.modular.system.enums;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: zt
+ * @Date: 2023/4/20 10:41
+ */
+public interface DictEnum {
+ //测试通过
+ String TEST_PASSED = "通过";
+ //测试不通过
+ String TEST_FAILED = "不通过";
+ //测试状态
+ String TEST_STATUS = "1";
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
new file mode 100644
index 0000000..d3408e0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
@@ -0,0 +1,32 @@
+package com.casic.missiles.modular.system.exception;
+
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 业务异常
+ */
+public class BusinessException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ @Getter
+ @Setter
+ private Integer code;
+ @Getter
+ @Setter
+ private String message;
+
+ public BusinessException(Integer code, String message) {
+ super(message);
+ this.code = code;
+ this.message = message;
+ }
+
+ public BusinessException(BusinessExceptionEnum exceptionEnum) {
+ super(exceptionEnum.getMessage());
+ this.code = exceptionEnum.getCode();
+ this.message = exceptionEnum.getMessage();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
new file mode 100644
index 0000000..dc2f09b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
@@ -0,0 +1,43 @@
+package com.casic.missiles.modular.system.handler;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.Order;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+
+@Slf4j
+@Order(1)
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+ /**
+ * 业务异常捕获处理
+ */
+ @ResponseBody
+ @ExceptionHandler({BusinessException.class})
+ public Object handleError(BusinessException exception) {
+ return ResponseData.error(exception.getCode(), exception.getMessage());
+ }
+
+// /**
+// * 编号重复异常捕获处理
+// */
+// @ResponseBody
+// @ExceptionHandler({DuplicateKeyException.class})
+// public Object handleDuplicateKeyException() {
+// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage());
+// }
+//
+// /**
+// * 参数校验失败异常
+// */
+// @ResponseBody
+// @ExceptionHandler({MethodArgumentNotValidException.class})
+// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {
+// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage());
+// }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
new file mode 100644
index 0000000..0d02de0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID AS id, TEST_PLATFORM AS testPlatform, TEST_URL AS testUrl, TEST_RESULT AS testResult, TEST_TIME AS testTime, CREATE_TIME AS createTime, DESCRIPTION AS description
+
+
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
new file mode 100644
index 0000000..8b6167c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
@@ -0,0 +1,49 @@
+package com.casic.missiles.modular.system.enums;
+
+import com.casic.missiles.model.exception.AbstractBaseExceptionEnum;
+
+/**
+ * @Description:
+ */
+public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum {
+
+ ID_NULL(2400, "主键不能为空"),
+ HANDLE_FAILED(500, "操作失败"),
+
+ SAVE_FAILED(400, "保存失败"),
+
+ TEST_URL_NULL(2090, "测试地址为空!"),
+
+ FILE_NULL(2091, "导入文件为空!"),
+
+ FILE_READ_ROW_FAILED(2092, "读入excel异常!"),
+
+ MONITOR_VALID_FAILED(2099, "云台登录地址重复");
+
+
+ private Integer code;
+ private String message;
+
+ BusinessExceptionEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ @Override
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
new file mode 100644
index 0000000..480e5bc
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
@@ -0,0 +1,15 @@
+package com.casic.missiles.modular.system.enums;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: zt
+ * @Date: 2023/4/20 10:41
+ */
+public interface DictEnum {
+ //测试通过
+ String TEST_PASSED = "通过";
+ //测试不通过
+ String TEST_FAILED = "不通过";
+ //测试状态
+ String TEST_STATUS = "1";
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
new file mode 100644
index 0000000..d3408e0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
@@ -0,0 +1,32 @@
+package com.casic.missiles.modular.system.exception;
+
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 业务异常
+ */
+public class BusinessException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ @Getter
+ @Setter
+ private Integer code;
+ @Getter
+ @Setter
+ private String message;
+
+ public BusinessException(Integer code, String message) {
+ super(message);
+ this.code = code;
+ this.message = message;
+ }
+
+ public BusinessException(BusinessExceptionEnum exceptionEnum) {
+ super(exceptionEnum.getMessage());
+ this.code = exceptionEnum.getCode();
+ this.message = exceptionEnum.getMessage();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
new file mode 100644
index 0000000..dc2f09b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
@@ -0,0 +1,43 @@
+package com.casic.missiles.modular.system.handler;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.Order;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+
+@Slf4j
+@Order(1)
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+ /**
+ * 业务异常捕获处理
+ */
+ @ResponseBody
+ @ExceptionHandler({BusinessException.class})
+ public Object handleError(BusinessException exception) {
+ return ResponseData.error(exception.getCode(), exception.getMessage());
+ }
+
+// /**
+// * 编号重复异常捕获处理
+// */
+// @ResponseBody
+// @ExceptionHandler({DuplicateKeyException.class})
+// public Object handleDuplicateKeyException() {
+// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage());
+// }
+//
+// /**
+// * 参数校验失败异常
+// */
+// @ResponseBody
+// @ExceptionHandler({MethodArgumentNotValidException.class})
+// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {
+// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage());
+// }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java
new file mode 100644
index 0000000..d52bb99
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java
@@ -0,0 +1,71 @@
+package com.casic.missiles.modular.system.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 测试链接记录
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+@Data
+@TableName("business_connect_testrecord")
+public class BusinessConnectTestrecord extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ @TableId("ID")
+ private Long id;
+ /**
+ * 测试平台
+ */
+ @TableField("TEST_PLATFORM")
+ private String testPlatform;
+ /**
+ * 链接地址
+ */
+ @TableField("TEST_URL")
+ private String testUrl;
+ /**
+ * 测试结果1:通过,0,无效
+ */
+ @TableField("TEST_RESULT")
+ private String testResult;
+ /**
+ * 消耗时间
+ */
+ @TableField("TEST_TIME")
+ private String testTime;
+ /**
+ * 测试时间
+ */
+ @TableField("CREATE_TIME")
+ private Date createTime;
+ /**
+ * 备注
+ */
+ @TableField("DESCRIPTION")
+ private String description;
+
+
+ public BusinessConnectTestrecord() {
+ }
+
+ public BusinessConnectTestrecord(String[] dto) {
+ this.testUrl = dto[0];
+ this.testTime = dto[1];
+ this.createTime = new Date();
+ this.testResult = "200".equals(dto[2]) ? "1" : "0";
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
new file mode 100644
index 0000000..0d02de0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID AS id, TEST_PLATFORM AS testPlatform, TEST_URL AS testUrl, TEST_RESULT AS testResult, TEST_TIME AS testTime, CREATE_TIME AS createTime, DESCRIPTION AS description
+
+
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
new file mode 100644
index 0000000..8b6167c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
@@ -0,0 +1,49 @@
+package com.casic.missiles.modular.system.enums;
+
+import com.casic.missiles.model.exception.AbstractBaseExceptionEnum;
+
+/**
+ * @Description:
+ */
+public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum {
+
+ ID_NULL(2400, "主键不能为空"),
+ HANDLE_FAILED(500, "操作失败"),
+
+ SAVE_FAILED(400, "保存失败"),
+
+ TEST_URL_NULL(2090, "测试地址为空!"),
+
+ FILE_NULL(2091, "导入文件为空!"),
+
+ FILE_READ_ROW_FAILED(2092, "读入excel异常!"),
+
+ MONITOR_VALID_FAILED(2099, "云台登录地址重复");
+
+
+ private Integer code;
+ private String message;
+
+ BusinessExceptionEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ @Override
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
new file mode 100644
index 0000000..480e5bc
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
@@ -0,0 +1,15 @@
+package com.casic.missiles.modular.system.enums;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: zt
+ * @Date: 2023/4/20 10:41
+ */
+public interface DictEnum {
+ //测试通过
+ String TEST_PASSED = "通过";
+ //测试不通过
+ String TEST_FAILED = "不通过";
+ //测试状态
+ String TEST_STATUS = "1";
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
new file mode 100644
index 0000000..d3408e0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
@@ -0,0 +1,32 @@
+package com.casic.missiles.modular.system.exception;
+
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 业务异常
+ */
+public class BusinessException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ @Getter
+ @Setter
+ private Integer code;
+ @Getter
+ @Setter
+ private String message;
+
+ public BusinessException(Integer code, String message) {
+ super(message);
+ this.code = code;
+ this.message = message;
+ }
+
+ public BusinessException(BusinessExceptionEnum exceptionEnum) {
+ super(exceptionEnum.getMessage());
+ this.code = exceptionEnum.getCode();
+ this.message = exceptionEnum.getMessage();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
new file mode 100644
index 0000000..dc2f09b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
@@ -0,0 +1,43 @@
+package com.casic.missiles.modular.system.handler;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.Order;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+
+@Slf4j
+@Order(1)
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+ /**
+ * 业务异常捕获处理
+ */
+ @ResponseBody
+ @ExceptionHandler({BusinessException.class})
+ public Object handleError(BusinessException exception) {
+ return ResponseData.error(exception.getCode(), exception.getMessage());
+ }
+
+// /**
+// * 编号重复异常捕获处理
+// */
+// @ResponseBody
+// @ExceptionHandler({DuplicateKeyException.class})
+// public Object handleDuplicateKeyException() {
+// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage());
+// }
+//
+// /**
+// * 参数校验失败异常
+// */
+// @ResponseBody
+// @ExceptionHandler({MethodArgumentNotValidException.class})
+// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {
+// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage());
+// }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java
new file mode 100644
index 0000000..d52bb99
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java
@@ -0,0 +1,71 @@
+package com.casic.missiles.modular.system.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 测试链接记录
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+@Data
+@TableName("business_connect_testrecord")
+public class BusinessConnectTestrecord extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ @TableId("ID")
+ private Long id;
+ /**
+ * 测试平台
+ */
+ @TableField("TEST_PLATFORM")
+ private String testPlatform;
+ /**
+ * 链接地址
+ */
+ @TableField("TEST_URL")
+ private String testUrl;
+ /**
+ * 测试结果1:通过,0,无效
+ */
+ @TableField("TEST_RESULT")
+ private String testResult;
+ /**
+ * 消耗时间
+ */
+ @TableField("TEST_TIME")
+ private String testTime;
+ /**
+ * 测试时间
+ */
+ @TableField("CREATE_TIME")
+ private Date createTime;
+ /**
+ * 备注
+ */
+ @TableField("DESCRIPTION")
+ private String description;
+
+
+ public BusinessConnectTestrecord() {
+ }
+
+ public BusinessConnectTestrecord(String[] dto) {
+ this.testUrl = dto[0];
+ this.testTime = dto[1];
+ this.createTime = new Date();
+ this.testResult = "200".equals(dto[2]) ? "1" : "0";
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java
index a0a532a..f13bb3c 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java
@@ -74,86 +74,6 @@
private Date reportTime;
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getMsg() {
- return msg;
- }
-
- public void setMsg(String msg) {
- this.msg = msg;
- }
-
- public Integer getType() {
- return type;
- }
-
- public void setType(Integer type) {
- this.type = type;
- }
-
- public String getLabels() {
- return labels;
- }
-
- public void setLabels(String labels) {
- this.labels = labels;
- }
-
- public String getPlatform() {
- return platform;
- }
-
- public void setPlatform(String platform) {
- this.platform = platform;
- }
-
- public String getReportDepartment() {
- return reportDepartment;
- }
-
- public void setReportDepartment(String reportDepartment) {
- this.reportDepartment = reportDepartment;
- }
-
- public String getArea() {
- return area;
- }
-
- public void setArea(String area) {
- this.area = area;
- }
-
- public Date getCreateTime() {
- return createTime;
- }
-
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public Date getReportTime() {
- return reportTime;
- }
-
- public void setReportTime(Date reportTime) {
- this.reportTime = reportTime;
- }
-
@Override
public String toString() {
return "BusinessReportInfo{" +
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
new file mode 100644
index 0000000..0d02de0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID AS id, TEST_PLATFORM AS testPlatform, TEST_URL AS testUrl, TEST_RESULT AS testResult, TEST_TIME AS testTime, CREATE_TIME AS createTime, DESCRIPTION AS description
+
+
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
new file mode 100644
index 0000000..8b6167c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
@@ -0,0 +1,49 @@
+package com.casic.missiles.modular.system.enums;
+
+import com.casic.missiles.model.exception.AbstractBaseExceptionEnum;
+
+/**
+ * @Description:
+ */
+public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum {
+
+ ID_NULL(2400, "主键不能为空"),
+ HANDLE_FAILED(500, "操作失败"),
+
+ SAVE_FAILED(400, "保存失败"),
+
+ TEST_URL_NULL(2090, "测试地址为空!"),
+
+ FILE_NULL(2091, "导入文件为空!"),
+
+ FILE_READ_ROW_FAILED(2092, "读入excel异常!"),
+
+ MONITOR_VALID_FAILED(2099, "云台登录地址重复");
+
+
+ private Integer code;
+ private String message;
+
+ BusinessExceptionEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ @Override
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
new file mode 100644
index 0000000..480e5bc
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
@@ -0,0 +1,15 @@
+package com.casic.missiles.modular.system.enums;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: zt
+ * @Date: 2023/4/20 10:41
+ */
+public interface DictEnum {
+ //测试通过
+ String TEST_PASSED = "通过";
+ //测试不通过
+ String TEST_FAILED = "不通过";
+ //测试状态
+ String TEST_STATUS = "1";
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
new file mode 100644
index 0000000..d3408e0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
@@ -0,0 +1,32 @@
+package com.casic.missiles.modular.system.exception;
+
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 业务异常
+ */
+public class BusinessException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ @Getter
+ @Setter
+ private Integer code;
+ @Getter
+ @Setter
+ private String message;
+
+ public BusinessException(Integer code, String message) {
+ super(message);
+ this.code = code;
+ this.message = message;
+ }
+
+ public BusinessException(BusinessExceptionEnum exceptionEnum) {
+ super(exceptionEnum.getMessage());
+ this.code = exceptionEnum.getCode();
+ this.message = exceptionEnum.getMessage();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
new file mode 100644
index 0000000..dc2f09b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
@@ -0,0 +1,43 @@
+package com.casic.missiles.modular.system.handler;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.Order;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+
+@Slf4j
+@Order(1)
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+ /**
+ * 业务异常捕获处理
+ */
+ @ResponseBody
+ @ExceptionHandler({BusinessException.class})
+ public Object handleError(BusinessException exception) {
+ return ResponseData.error(exception.getCode(), exception.getMessage());
+ }
+
+// /**
+// * 编号重复异常捕获处理
+// */
+// @ResponseBody
+// @ExceptionHandler({DuplicateKeyException.class})
+// public Object handleDuplicateKeyException() {
+// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage());
+// }
+//
+// /**
+// * 参数校验失败异常
+// */
+// @ResponseBody
+// @ExceptionHandler({MethodArgumentNotValidException.class})
+// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {
+// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage());
+// }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java
new file mode 100644
index 0000000..d52bb99
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java
@@ -0,0 +1,71 @@
+package com.casic.missiles.modular.system.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 测试链接记录
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+@Data
+@TableName("business_connect_testrecord")
+public class BusinessConnectTestrecord extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ @TableId("ID")
+ private Long id;
+ /**
+ * 测试平台
+ */
+ @TableField("TEST_PLATFORM")
+ private String testPlatform;
+ /**
+ * 链接地址
+ */
+ @TableField("TEST_URL")
+ private String testUrl;
+ /**
+ * 测试结果1:通过,0,无效
+ */
+ @TableField("TEST_RESULT")
+ private String testResult;
+ /**
+ * 消耗时间
+ */
+ @TableField("TEST_TIME")
+ private String testTime;
+ /**
+ * 测试时间
+ */
+ @TableField("CREATE_TIME")
+ private Date createTime;
+ /**
+ * 备注
+ */
+ @TableField("DESCRIPTION")
+ private String description;
+
+
+ public BusinessConnectTestrecord() {
+ }
+
+ public BusinessConnectTestrecord(String[] dto) {
+ this.testUrl = dto[0];
+ this.testTime = dto[1];
+ this.createTime = new Date();
+ this.testResult = "200".equals(dto[2]) ? "1" : "0";
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java
index a0a532a..f13bb3c 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java
@@ -74,86 +74,6 @@
private Date reportTime;
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getMsg() {
- return msg;
- }
-
- public void setMsg(String msg) {
- this.msg = msg;
- }
-
- public Integer getType() {
- return type;
- }
-
- public void setType(Integer type) {
- this.type = type;
- }
-
- public String getLabels() {
- return labels;
- }
-
- public void setLabels(String labels) {
- this.labels = labels;
- }
-
- public String getPlatform() {
- return platform;
- }
-
- public void setPlatform(String platform) {
- this.platform = platform;
- }
-
- public String getReportDepartment() {
- return reportDepartment;
- }
-
- public void setReportDepartment(String reportDepartment) {
- this.reportDepartment = reportDepartment;
- }
-
- public String getArea() {
- return area;
- }
-
- public void setArea(String area) {
- this.area = area;
- }
-
- public Date getCreateTime() {
- return createTime;
- }
-
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public Date getReportTime() {
- return reportTime;
- }
-
- public void setReportTime(Date reportTime) {
- this.reportTime = reportTime;
- }
-
@Override
public String toString() {
return "BusinessReportInfo{" +
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IBusinessConnectTestrecordService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IBusinessConnectTestrecordService.java
new file mode 100644
index 0000000..4b23c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IBusinessConnectTestrecordService.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ *
+ * 测试链接记录 服务类
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface IBusinessConnectTestrecordService extends IService {
+
+
+ boolean saveBusinessConnectTestRecord(String url);
+
+ boolean saveBatchBusinessConnectTestRecord(List urls);
+
+ //解析文件流
+ List parseSourceFile(MultipartFile file);
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 14b4974..19e8eb1 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -40,6 +40,10 @@
${boot.version}
provided
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
new file mode 100644
index 0000000..7dfab9a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/config/PoolConfig.java
@@ -0,0 +1,36 @@
+package com.casic.missiles.modular.system.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+
+@Configuration
+public class PoolConfig {
+
+ @Bean("syncExecutorPool")
+ public Executor taskExecutor() {
+ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+ // 核心池大小
+ taskExecutor.setCorePoolSize(5);
+ // 最大线程数
+ taskExecutor.setMaxPoolSize(10);
+ // 队列程度
+ taskExecutor.setQueueCapacity(100);
+ // 线程空闲时间
+ taskExecutor.setKeepAliveSeconds(60);
+ // 线程前缀名称
+ taskExecutor.setThreadNamePrefix("syncExecutor--");
+ // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
+ // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
+ taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+ // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
+ taskExecutor.setAwaitTerminationSeconds(60);
+ // 线程不够用时由调用的线程处理该任务
+ taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return taskExecutor;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
new file mode 100644
index 0000000..e99f022
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessConnectTestrecordController.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import com.casic.missiles.modular.system.enums.DictEnum;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 测试链接记录表控制器
+ *
+ * @author dev
+ * @Date 2023-05-17 11:04:13
+ */
+@Controller
+@RequestMapping("/businessConnectTestrecord")
+public class BusinessConnectTestrecordController extends ExportController {
+
+
+ @Autowired
+ private IBusinessConnectTestrecordService businessConnectTestrecordService;
+
+
+ /**
+ * 获取测试链接记录表列表
+ */
+// @RequestMapping(value = "/list")
+// @ResponseBody
+// public Object list(String condition) {
+// return businessConnectTestrecordService.selectList(null);
+// }
+
+ /**
+ * 获取测试链接记录表分页列表
+ */
+ @RequestMapping(value = "/listPage")
+ @ResponseBody
+ public Object listPage(String condition) {
+ Page page = PageFactory.defaultPage();
+ page=businessConnectTestrecordService.page(page);
+ List businessConnectTestrecordList = page.getRecords();
+ businessConnectTestrecordList.forEach(businessConnectTestrecord -> {
+ businessConnectTestrecord.setTestResult(DictEnum.TEST_STATUS.equals(businessConnectTestrecord.getTestResult()) ?
+ DictEnum.TEST_PASSED : DictEnum.TEST_FAILED);
+ });
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ /**
+ * 新增测试链接记录表
+ */
+ @RequestMapping(value = "/add")
+ @ResponseBody
+ public Object add(@RequestBody @Valid BusinessConnectTestrecord businessConnectTestrecord) {
+ Assert.isFalse(ObjectUtil.isEmpty(businessConnectTestrecord.getTestUrl()), () -> {
+ throw new BusinessException(BusinessExceptionEnum.TEST_URL_NULL);
+ });
+ return businessConnectTestrecordService.saveBusinessConnectTestRecord(businessConnectTestrecord.getTestUrl()) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+ /**
+ * 批量导入测试
+ */
+ @RequestMapping(value = "/fileImport", method = RequestMethod.POST)
+ @ResponseBody
+ public Object fileImport(@RequestParam("file") MultipartFile file) {
+ Assert.isFalse(Objects.isNull(file), () -> {
+ throw new BusinessException(BusinessExceptionEnum.FILE_NULL);
+ });
+ List urlList = businessConnectTestrecordService.parseSourceFile(file);
+ return businessConnectTestrecordService.saveBatchBusinessConnectTestRecord(urlList) ?
+ ResponseData.success() : ResponseData.error(BusinessExceptionEnum.SAVE_FAILED.getMessage());
+ }
+
+
+ /**
+ * 修改测试链接记录表
+ */
+ @RequestMapping(value = "/update")
+ @ResponseBody
+ public Object update(BusinessConnectTestrecord businessConnectTestrecord) {
+ businessConnectTestrecordService.updateById(businessConnectTestrecord);
+ return SUCCESS_TIP;
+ }
+
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
index 3067b81..356535f 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusinessHandleRecordController.java
@@ -2,17 +2,12 @@
import com.casic.missiles.core.base.controller.ExportController;
-import com.casic.missiles.modular.system.model.BusinessHandleRecord;
import com.casic.missiles.modular.system.service.IBusinessHandleRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import java.util.List;
-
/**
* 处置信息控制器
*
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
index 5d87130..aa7d939 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/JudgmentController.java
@@ -8,6 +8,7 @@
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.model.Judgment;
import com.casic.missiles.modular.system.service.IJudgmentService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -105,4 +106,18 @@
// resultData.setData(judgmentService.selectById(judgmentId));
// return resultData;
// }
+
+
+ /**
+ * 校验url有效性
+ */
+ @RequestMapping(value = "/testUrl")
+ @ResponseBody
+ public Object testUrl(String url) throws Exception {
+
+ LinkTestUtil.testUrl(url);
+ return true;
+
+ }
+
}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
new file mode 100644
index 0000000..6d7f7fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/BusinessConnectTestrecordMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+
+/**
+ *
+ * 测试链接记录 Mapper 接口
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface BusinessConnectTestrecordMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
new file mode 100644
index 0000000..0d02de0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusinessConnectTestrecordMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID AS id, TEST_PLATFORM AS testPlatform, TEST_URL AS testUrl, TEST_RESULT AS testResult, TEST_TIME AS testTime, CREATE_TIME AS createTime, DESCRIPTION AS description
+
+
+
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
new file mode 100644
index 0000000..8b6167c
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java
@@ -0,0 +1,49 @@
+package com.casic.missiles.modular.system.enums;
+
+import com.casic.missiles.model.exception.AbstractBaseExceptionEnum;
+
+/**
+ * @Description:
+ */
+public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum {
+
+ ID_NULL(2400, "主键不能为空"),
+ HANDLE_FAILED(500, "操作失败"),
+
+ SAVE_FAILED(400, "保存失败"),
+
+ TEST_URL_NULL(2090, "测试地址为空!"),
+
+ FILE_NULL(2091, "导入文件为空!"),
+
+ FILE_READ_ROW_FAILED(2092, "读入excel异常!"),
+
+ MONITOR_VALID_FAILED(2099, "云台登录地址重复");
+
+
+ private Integer code;
+ private String message;
+
+ BusinessExceptionEnum(Integer code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ @Override
+ public Integer getCode() {
+ return this.code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+
+ @Override
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
new file mode 100644
index 0000000..480e5bc
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/DictEnum.java
@@ -0,0 +1,15 @@
+package com.casic.missiles.modular.system.enums;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: zt
+ * @Date: 2023/4/20 10:41
+ */
+public interface DictEnum {
+ //测试通过
+ String TEST_PASSED = "通过";
+ //测试不通过
+ String TEST_FAILED = "不通过";
+ //测试状态
+ String TEST_STATUS = "1";
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
new file mode 100644
index 0000000..d3408e0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java
@@ -0,0 +1,32 @@
+package com.casic.missiles.modular.system.exception;
+
+import com.casic.missiles.modular.system.enums.BusinessExceptionEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 业务异常
+ */
+public class BusinessException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ @Getter
+ @Setter
+ private Integer code;
+ @Getter
+ @Setter
+ private String message;
+
+ public BusinessException(Integer code, String message) {
+ super(message);
+ this.code = code;
+ this.message = message;
+ }
+
+ public BusinessException(BusinessExceptionEnum exceptionEnum) {
+ super(exceptionEnum.getMessage());
+ this.code = exceptionEnum.getCode();
+ this.message = exceptionEnum.getMessage();
+ }
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
new file mode 100644
index 0000000..dc2f09b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java
@@ -0,0 +1,43 @@
+package com.casic.missiles.modular.system.handler;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.Order;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+
+@Slf4j
+@Order(1)
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+ /**
+ * 业务异常捕获处理
+ */
+ @ResponseBody
+ @ExceptionHandler({BusinessException.class})
+ public Object handleError(BusinessException exception) {
+ return ResponseData.error(exception.getCode(), exception.getMessage());
+ }
+
+// /**
+// * 编号重复异常捕获处理
+// */
+// @ResponseBody
+// @ExceptionHandler({DuplicateKeyException.class})
+// public Object handleDuplicateKeyException() {
+// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage());
+// }
+//
+// /**
+// * 参数校验失败异常
+// */
+// @ResponseBody
+// @ExceptionHandler({MethodArgumentNotValidException.class})
+// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {
+// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage());
+// }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java
new file mode 100644
index 0000000..d52bb99
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessConnectTestrecord.java
@@ -0,0 +1,71 @@
+package com.casic.missiles.modular.system.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *
+ * 测试链接记录
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+@Data
+@TableName("business_connect_testrecord")
+public class BusinessConnectTestrecord extends Model {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ @TableId("ID")
+ private Long id;
+ /**
+ * 测试平台
+ */
+ @TableField("TEST_PLATFORM")
+ private String testPlatform;
+ /**
+ * 链接地址
+ */
+ @TableField("TEST_URL")
+ private String testUrl;
+ /**
+ * 测试结果1:通过,0,无效
+ */
+ @TableField("TEST_RESULT")
+ private String testResult;
+ /**
+ * 消耗时间
+ */
+ @TableField("TEST_TIME")
+ private String testTime;
+ /**
+ * 测试时间
+ */
+ @TableField("CREATE_TIME")
+ private Date createTime;
+ /**
+ * 备注
+ */
+ @TableField("DESCRIPTION")
+ private String description;
+
+
+ public BusinessConnectTestrecord() {
+ }
+
+ public BusinessConnectTestrecord(String[] dto) {
+ this.testUrl = dto[0];
+ this.testTime = dto[1];
+ this.createTime = new Date();
+ this.testResult = "200".equals(dto[2]) ? "1" : "0";
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java
index a0a532a..f13bb3c 100644
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/BusinessReportInfo.java
@@ -74,86 +74,6 @@
private Date reportTime;
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getMsg() {
- return msg;
- }
-
- public void setMsg(String msg) {
- this.msg = msg;
- }
-
- public Integer getType() {
- return type;
- }
-
- public void setType(Integer type) {
- this.type = type;
- }
-
- public String getLabels() {
- return labels;
- }
-
- public void setLabels(String labels) {
- this.labels = labels;
- }
-
- public String getPlatform() {
- return platform;
- }
-
- public void setPlatform(String platform) {
- this.platform = platform;
- }
-
- public String getReportDepartment() {
- return reportDepartment;
- }
-
- public void setReportDepartment(String reportDepartment) {
- this.reportDepartment = reportDepartment;
- }
-
- public String getArea() {
- return area;
- }
-
- public void setArea(String area) {
- this.area = area;
- }
-
- public Date getCreateTime() {
- return createTime;
- }
-
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public Date getReportTime() {
- return reportTime;
- }
-
- public void setReportTime(Date reportTime) {
- this.reportTime = reportTime;
- }
-
@Override
public String toString() {
return "BusinessReportInfo{" +
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IBusinessConnectTestrecordService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IBusinessConnectTestrecordService.java
new file mode 100644
index 0000000..4b23c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IBusinessConnectTestrecordService.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ *
+ * 测试链接记录 服务类
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+public interface IBusinessConnectTestrecordService extends IService {
+
+
+ boolean saveBusinessConnectTestRecord(String url);
+
+ boolean saveBatchBusinessConnectTestRecord(List urls);
+
+ //解析文件流
+ List parseSourceFile(MultipartFile file);
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusinessConnectTestrecordServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusinessConnectTestrecordServiceImpl.java
new file mode 100644
index 0000000..3cb69eb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusinessConnectTestrecordServiceImpl.java
@@ -0,0 +1,91 @@
+package com.casic.missiles.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.modular.system.config.PoolConfig;
+import com.casic.missiles.modular.system.dao.BusinessConnectTestrecordMapper;
+import com.casic.missiles.modular.system.model.BusinessConnectTestrecord;
+import com.casic.missiles.modular.system.service.IBusinessConnectTestrecordService;
+import com.casic.missiles.modular.system.ssl.LinkTestUtil;
+import com.casic.missiles.modular.system.util.ExcelUtils;
+import org.apache.commons.collections4.ListUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ *
+ * 测试链接记录 服务实现类
+ *
+ *
+ * @author stylefeng123
+ * @since 2023-05-17
+ */
+@Service
+public class BusinessConnectTestrecordServiceImpl extends ServiceImpl implements IBusinessConnectTestrecordService {
+
+ @Autowired
+ private PoolConfig threadPoolTaskExecutor;
+
+ protected static final Map mapperExcel = new HashMap<>();
+
+ static {
+ mapperExcel.put("链接地址", "testUrl");
+ }
+
+
+ @Value("${casic.file-down-path}")
+ private String downloadPath;
+
+ @Override
+ public boolean saveBusinessConnectTestRecord(String url) {
+
+ String result = LinkTestUtil.testUrl(url);
+ return this.save(new BusinessConnectTestrecord(result.split(",")));
+ }
+
+ @Override
+ public boolean saveBatchBusinessConnectTestRecord(List urls) {
+ List> listList = ListUtils.partition(urls, 50);
+ listList.forEach(list -> {
+ threadPoolTaskExecutor.taskExecutor().execute(new Runnable() {
+ @Override
+ public void run() {
+ list.forEach(s -> {
+ String result = LinkTestUtil.testUrl(s);
+ save(new BusinessConnectTestrecord(result.split(",")));
+ });
+ }
+ });
+ });
+ return true;
+ }
+
+ @Override
+ public List parseSourceFile(MultipartFile file) {
+ List stringList = new ArrayList<>();
+ try {
+
+ File Filefile = new File(downloadPath + file.getOriginalFilename());
+ file.transferTo(Filefile);
+ FileInputStream inputStream = new FileInputStream(Filefile);
+ List> list = ExcelUtils.getListByExcel(inputStream, file.getOriginalFilename());
+ for (int i = 1; i < list.size(); i++) {
+ List