diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + taskExecutor.setKeepAliveSeconds(60); + // 线程前缀名称 + taskExecutor.setThreadNamePrefix("syncExecutor--"); + // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, + // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 + taskExecutor.setWaitForTasksToCompleteOnShutdown(true); + // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 + taskExecutor.setAwaitTerminationSeconds(60); + // 线程不够用时由调用的线程处理该任务 + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return taskExecutor; + } +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + 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/neutron/controller/DetectorConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java index e602471..ec75b52 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java @@ -8,9 +8,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + /** * 下发参数日志控制器 * @@ -30,9 +33,9 @@ * 获取下发参数日志列表 */ @ApiOperation("根据探测仪id获取下发参数列表") - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody - public ResponseDataDTO list(Long detectorId) { + public ResponseDataDTO> list(Long detectorId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("DETECTOR_ID", detectorId); queryWrapper.orderByDesc("CREATE_TIME"); @@ -42,7 +45,7 @@ // /** // * 获取下发参数日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -55,7 +58,7 @@ * 新增下发参数日志 */ @ApiOperation("保存参数") - @RequestMapping(value = "/addConfig") + @PostMapping(value = "/addConfig") @ResponseBody public ResponseDataDTO add(DetectorConfig config) { return ResponseDataDTO.success(configService.save(config)); @@ -65,7 +68,7 @@ * 下发参数 */ @ApiOperation("下发参数") - @RequestMapping(value = "/sendConfig") + @PostMapping(value = "/sendConfig") @ResponseBody public ResponseDataDTO sendConfig(DetectorConfig config) { return ResponseDataDTO.success(configService.sendConfig(config)); @@ -74,7 +77,7 @@ // /** // * 删除下发参数日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String configId) { // configService.deleteById(configId); @@ -84,7 +87,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("configIds") List configIds) { // configService.deleteBatchIds(configIds); @@ -94,7 +97,7 @@ // /** // * 修改下发参数日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Config config) { // configService.updateById(config); @@ -104,7 +107,7 @@ // /** // * 下发参数日志详情 // */ -// @RequestMapping(value = "/detail/{configId}") +// @PostMapping(value = "/detail/{configId}") // @ResponseBody // public Object detail(@PathVariable("configId") String configId) { // ResultData resultData = new ResultData(); diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + 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/neutron/controller/DetectorConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java index e602471..ec75b52 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java @@ -8,9 +8,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + /** * 下发参数日志控制器 * @@ -30,9 +33,9 @@ * 获取下发参数日志列表 */ @ApiOperation("根据探测仪id获取下发参数列表") - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody - public ResponseDataDTO list(Long detectorId) { + public ResponseDataDTO> list(Long detectorId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("DETECTOR_ID", detectorId); queryWrapper.orderByDesc("CREATE_TIME"); @@ -42,7 +45,7 @@ // /** // * 获取下发参数日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -55,7 +58,7 @@ * 新增下发参数日志 */ @ApiOperation("保存参数") - @RequestMapping(value = "/addConfig") + @PostMapping(value = "/addConfig") @ResponseBody public ResponseDataDTO add(DetectorConfig config) { return ResponseDataDTO.success(configService.save(config)); @@ -65,7 +68,7 @@ * 下发参数 */ @ApiOperation("下发参数") - @RequestMapping(value = "/sendConfig") + @PostMapping(value = "/sendConfig") @ResponseBody public ResponseDataDTO sendConfig(DetectorConfig config) { return ResponseDataDTO.success(configService.sendConfig(config)); @@ -74,7 +77,7 @@ // /** // * 删除下发参数日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String configId) { // configService.deleteById(configId); @@ -84,7 +87,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("configIds") List configIds) { // configService.deleteBatchIds(configIds); @@ -94,7 +97,7 @@ // /** // * 修改下发参数日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Config config) { // configService.updateById(config); @@ -104,7 +107,7 @@ // /** // * 下发参数日志详情 // */ -// @RequestMapping(value = "/detail/{configId}") +// @PostMapping(value = "/detail/{configId}") // @ResponseBody // public Object detail(@PathVariable("configId") String configId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java index cf82b80..64278d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -29,7 +30,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody @ApiOperation("根据探测仪id获取升降压操作列表") public Object list(Long detectorId) { @@ -42,7 +43,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/getLastRecord") + @PostMapping(value = "/getLastRecord") @ResponseBody @ApiOperation("根据探测仪id获取升降压最新记录") public Object getLastRecord(Long detectorId) { @@ -52,7 +53,7 @@ // /** // * 获取升降压操作日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -64,7 +65,7 @@ // /** // * 新增升降压操作日志 // */ -// @RequestMapping(value = "/add") +// @PostMapping(value = "/add") // @ResponseBody // public Object add(Log log) { // logService.insert(log); @@ -74,7 +75,7 @@ // /** // * 删除升降压操作日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String logId) { // logService.deleteById(logId); @@ -84,7 +85,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("logIds") List logIds) { // logService.deleteBatchIds(logIds); @@ -94,7 +95,7 @@ // /** // * 修改升降压操作日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Log log) { // logService.updateById(log); @@ -104,7 +105,7 @@ // /** // * 升降压操作日志详情 // */ -// @RequestMapping(value = "/detail/{logId}") +// @PostMapping(value = "/detail/{logId}") // @ResponseBody // public Object detail(@PathVariable("logId") String logId) { // ResultData resultData = new ResultData(); diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + 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/neutron/controller/DetectorConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java index e602471..ec75b52 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java @@ -8,9 +8,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + /** * 下发参数日志控制器 * @@ -30,9 +33,9 @@ * 获取下发参数日志列表 */ @ApiOperation("根据探测仪id获取下发参数列表") - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody - public ResponseDataDTO list(Long detectorId) { + public ResponseDataDTO> list(Long detectorId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("DETECTOR_ID", detectorId); queryWrapper.orderByDesc("CREATE_TIME"); @@ -42,7 +45,7 @@ // /** // * 获取下发参数日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -55,7 +58,7 @@ * 新增下发参数日志 */ @ApiOperation("保存参数") - @RequestMapping(value = "/addConfig") + @PostMapping(value = "/addConfig") @ResponseBody public ResponseDataDTO add(DetectorConfig config) { return ResponseDataDTO.success(configService.save(config)); @@ -65,7 +68,7 @@ * 下发参数 */ @ApiOperation("下发参数") - @RequestMapping(value = "/sendConfig") + @PostMapping(value = "/sendConfig") @ResponseBody public ResponseDataDTO sendConfig(DetectorConfig config) { return ResponseDataDTO.success(configService.sendConfig(config)); @@ -74,7 +77,7 @@ // /** // * 删除下发参数日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String configId) { // configService.deleteById(configId); @@ -84,7 +87,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("configIds") List configIds) { // configService.deleteBatchIds(configIds); @@ -94,7 +97,7 @@ // /** // * 修改下发参数日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Config config) { // configService.updateById(config); @@ -104,7 +107,7 @@ // /** // * 下发参数日志详情 // */ -// @RequestMapping(value = "/detail/{configId}") +// @PostMapping(value = "/detail/{configId}") // @ResponseBody // public Object detail(@PathVariable("configId") String configId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java index cf82b80..64278d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -29,7 +30,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody @ApiOperation("根据探测仪id获取升降压操作列表") public Object list(Long detectorId) { @@ -42,7 +43,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/getLastRecord") + @PostMapping(value = "/getLastRecord") @ResponseBody @ApiOperation("根据探测仪id获取升降压最新记录") public Object getLastRecord(Long detectorId) { @@ -52,7 +53,7 @@ // /** // * 获取升降压操作日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -64,7 +65,7 @@ // /** // * 新增升降压操作日志 // */ -// @RequestMapping(value = "/add") +// @PostMapping(value = "/add") // @ResponseBody // public Object add(Log log) { // logService.insert(log); @@ -74,7 +75,7 @@ // /** // * 删除升降压操作日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String logId) { // logService.deleteById(logId); @@ -84,7 +85,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("logIds") List logIds) { // logService.deleteBatchIds(logIds); @@ -94,7 +95,7 @@ // /** // * 修改升降压操作日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Log log) { // logService.updateById(log); @@ -104,7 +105,7 @@ // /** // * 升降压操作日志详情 // */ -// @RequestMapping(value = "/detail/{logId}") +// @PostMapping(value = "/detail/{logId}") // @ResponseBody // public Object detail(@PathVariable("logId") String logId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index afaa5a8..4f1136b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -1,18 +1,21 @@ package com.casic.missiles.modular.neutron.controller; -import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; import com.casic.missiles.modular.neutron.service.IPsdService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + @Api(tags = "探测器管理(包括控制)") @Controller @RequestMapping("/Neutron") @@ -29,7 +32,7 @@ * @param command 控制指令类型(start-加压开始工作,stop-退高压,停止工作) */ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") - @RequestMapping("/control") + @PostMapping("/control") @ResponseBody public ResponseDataDTO control(String command,Long detectorId) { //toDo:需要加返回值 @@ -38,18 +41,18 @@ } @ApiOperation("控制台中告警列表,需传taskId") - @RequestMapping("/alarmList") + @PostMapping("/alarmList") @ResponseBody - public ResponseDataDTO alarmList(Long taskId) { + public ResponseDataDTO> alarmList(Long taskId) { return ResponseDataDTO.success(iPsdService.getPsdAlarm(taskId)); } @ApiOperation("控制台曲线显示,需传taskId") - @RequestMapping("/dataList") + @PostMapping("/dataList") @ResponseBody - public ResponseDataDTO dataList(Long taskId) { + public ResponseDataDTO> dataList(Long taskId) { return ResponseDataDTO.success(iPsdService.dataList(taskId)); } diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + 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/neutron/controller/DetectorConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java index e602471..ec75b52 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java @@ -8,9 +8,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + /** * 下发参数日志控制器 * @@ -30,9 +33,9 @@ * 获取下发参数日志列表 */ @ApiOperation("根据探测仪id获取下发参数列表") - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody - public ResponseDataDTO list(Long detectorId) { + public ResponseDataDTO> list(Long detectorId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("DETECTOR_ID", detectorId); queryWrapper.orderByDesc("CREATE_TIME"); @@ -42,7 +45,7 @@ // /** // * 获取下发参数日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -55,7 +58,7 @@ * 新增下发参数日志 */ @ApiOperation("保存参数") - @RequestMapping(value = "/addConfig") + @PostMapping(value = "/addConfig") @ResponseBody public ResponseDataDTO add(DetectorConfig config) { return ResponseDataDTO.success(configService.save(config)); @@ -65,7 +68,7 @@ * 下发参数 */ @ApiOperation("下发参数") - @RequestMapping(value = "/sendConfig") + @PostMapping(value = "/sendConfig") @ResponseBody public ResponseDataDTO sendConfig(DetectorConfig config) { return ResponseDataDTO.success(configService.sendConfig(config)); @@ -74,7 +77,7 @@ // /** // * 删除下发参数日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String configId) { // configService.deleteById(configId); @@ -84,7 +87,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("configIds") List configIds) { // configService.deleteBatchIds(configIds); @@ -94,7 +97,7 @@ // /** // * 修改下发参数日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Config config) { // configService.updateById(config); @@ -104,7 +107,7 @@ // /** // * 下发参数日志详情 // */ -// @RequestMapping(value = "/detail/{configId}") +// @PostMapping(value = "/detail/{configId}") // @ResponseBody // public Object detail(@PathVariable("configId") String configId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java index cf82b80..64278d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -29,7 +30,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody @ApiOperation("根据探测仪id获取升降压操作列表") public Object list(Long detectorId) { @@ -42,7 +43,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/getLastRecord") + @PostMapping(value = "/getLastRecord") @ResponseBody @ApiOperation("根据探测仪id获取升降压最新记录") public Object getLastRecord(Long detectorId) { @@ -52,7 +53,7 @@ // /** // * 获取升降压操作日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -64,7 +65,7 @@ // /** // * 新增升降压操作日志 // */ -// @RequestMapping(value = "/add") +// @PostMapping(value = "/add") // @ResponseBody // public Object add(Log log) { // logService.insert(log); @@ -74,7 +75,7 @@ // /** // * 删除升降压操作日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String logId) { // logService.deleteById(logId); @@ -84,7 +85,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("logIds") List logIds) { // logService.deleteBatchIds(logIds); @@ -94,7 +95,7 @@ // /** // * 修改升降压操作日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Log log) { // logService.updateById(log); @@ -104,7 +105,7 @@ // /** // * 升降压操作日志详情 // */ -// @RequestMapping(value = "/detail/{logId}") +// @PostMapping(value = "/detail/{logId}") // @ResponseBody // public Object detail(@PathVariable("logId") String logId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index afaa5a8..4f1136b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -1,18 +1,21 @@ package com.casic.missiles.modular.neutron.controller; -import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; import com.casic.missiles.modular.neutron.service.IPsdService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + @Api(tags = "探测器管理(包括控制)") @Controller @RequestMapping("/Neutron") @@ -29,7 +32,7 @@ * @param command 控制指令类型(start-加压开始工作,stop-退高压,停止工作) */ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") - @RequestMapping("/control") + @PostMapping("/control") @ResponseBody public ResponseDataDTO control(String command,Long detectorId) { //toDo:需要加返回值 @@ -38,18 +41,18 @@ } @ApiOperation("控制台中告警列表,需传taskId") - @RequestMapping("/alarmList") + @PostMapping("/alarmList") @ResponseBody - public ResponseDataDTO alarmList(Long taskId) { + public ResponseDataDTO> alarmList(Long taskId) { return ResponseDataDTO.success(iPsdService.getPsdAlarm(taskId)); } @ApiOperation("控制台曲线显示,需传taskId") - @RequestMapping("/dataList") + @PostMapping("/dataList") @ResponseBody - public ResponseDataDTO dataList(Long taskId) { + public ResponseDataDTO> dataList(Long taskId) { return ResponseDataDTO.success(iPsdService.dataList(taskId)); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7a12a35..7171d3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service.impl; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; @@ -11,7 +12,10 @@ import com.casic.missiles.netty.CacheUtils; import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; +import com.casic.missiles.common.WebSocket; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -30,6 +34,8 @@ private IVolService iVolService; @Resource private IDetectorLogService iLogService; + @Autowired + private WebSocket webSocket; @Override public void deviceInit(Long detectorId) { @@ -51,12 +57,25 @@ } } - @Override + @Async("syncExecutorPool") public void analysis(String deviceIpPort, String msg) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); + if (volList != null && volList.size() > 0) { + volList.forEach(vol -> { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("deviceIp", deviceIpPort); + jsonObject.put("vol", vol.getVolData6()); + jsonObject.put("time", vol.getCreateTime()); + webSocket.sendAllMessage(jsonObject.toJSONString()); + log.info("推送电压数据"+jsonObject.toJSONString()); + vol.setIpPort(deviceIpPort.substring(1)); + }); + iVolService.saveBatch(volList); + } + if (psdList != null && psdList.size() > 0) { psdList.forEach(psd -> { psd.setIpPort(deviceIpPort.substring(1)); @@ -70,12 +89,6 @@ }); iPsdService.saveBatch(psdList); } - if (volList != null && volList.size() > 0) { - volList.forEach(vol -> { - vol.setIpPort(deviceIpPort.substring(1)); - }); - iVolService.saveBatch(volList); - } } @Override diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + 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/neutron/controller/DetectorConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java index e602471..ec75b52 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java @@ -8,9 +8,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + /** * 下发参数日志控制器 * @@ -30,9 +33,9 @@ * 获取下发参数日志列表 */ @ApiOperation("根据探测仪id获取下发参数列表") - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody - public ResponseDataDTO list(Long detectorId) { + public ResponseDataDTO> list(Long detectorId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("DETECTOR_ID", detectorId); queryWrapper.orderByDesc("CREATE_TIME"); @@ -42,7 +45,7 @@ // /** // * 获取下发参数日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -55,7 +58,7 @@ * 新增下发参数日志 */ @ApiOperation("保存参数") - @RequestMapping(value = "/addConfig") + @PostMapping(value = "/addConfig") @ResponseBody public ResponseDataDTO add(DetectorConfig config) { return ResponseDataDTO.success(configService.save(config)); @@ -65,7 +68,7 @@ * 下发参数 */ @ApiOperation("下发参数") - @RequestMapping(value = "/sendConfig") + @PostMapping(value = "/sendConfig") @ResponseBody public ResponseDataDTO sendConfig(DetectorConfig config) { return ResponseDataDTO.success(configService.sendConfig(config)); @@ -74,7 +77,7 @@ // /** // * 删除下发参数日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String configId) { // configService.deleteById(configId); @@ -84,7 +87,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("configIds") List configIds) { // configService.deleteBatchIds(configIds); @@ -94,7 +97,7 @@ // /** // * 修改下发参数日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Config config) { // configService.updateById(config); @@ -104,7 +107,7 @@ // /** // * 下发参数日志详情 // */ -// @RequestMapping(value = "/detail/{configId}") +// @PostMapping(value = "/detail/{configId}") // @ResponseBody // public Object detail(@PathVariable("configId") String configId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java index cf82b80..64278d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -29,7 +30,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody @ApiOperation("根据探测仪id获取升降压操作列表") public Object list(Long detectorId) { @@ -42,7 +43,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/getLastRecord") + @PostMapping(value = "/getLastRecord") @ResponseBody @ApiOperation("根据探测仪id获取升降压最新记录") public Object getLastRecord(Long detectorId) { @@ -52,7 +53,7 @@ // /** // * 获取升降压操作日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -64,7 +65,7 @@ // /** // * 新增升降压操作日志 // */ -// @RequestMapping(value = "/add") +// @PostMapping(value = "/add") // @ResponseBody // public Object add(Log log) { // logService.insert(log); @@ -74,7 +75,7 @@ // /** // * 删除升降压操作日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String logId) { // logService.deleteById(logId); @@ -84,7 +85,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("logIds") List logIds) { // logService.deleteBatchIds(logIds); @@ -94,7 +95,7 @@ // /** // * 修改升降压操作日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Log log) { // logService.updateById(log); @@ -104,7 +105,7 @@ // /** // * 升降压操作日志详情 // */ -// @RequestMapping(value = "/detail/{logId}") +// @PostMapping(value = "/detail/{logId}") // @ResponseBody // public Object detail(@PathVariable("logId") String logId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index afaa5a8..4f1136b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -1,18 +1,21 @@ package com.casic.missiles.modular.neutron.controller; -import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; import com.casic.missiles.modular.neutron.service.IPsdService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + @Api(tags = "探测器管理(包括控制)") @Controller @RequestMapping("/Neutron") @@ -29,7 +32,7 @@ * @param command 控制指令类型(start-加压开始工作,stop-退高压,停止工作) */ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") - @RequestMapping("/control") + @PostMapping("/control") @ResponseBody public ResponseDataDTO control(String command,Long detectorId) { //toDo:需要加返回值 @@ -38,18 +41,18 @@ } @ApiOperation("控制台中告警列表,需传taskId") - @RequestMapping("/alarmList") + @PostMapping("/alarmList") @ResponseBody - public ResponseDataDTO alarmList(Long taskId) { + public ResponseDataDTO> alarmList(Long taskId) { return ResponseDataDTO.success(iPsdService.getPsdAlarm(taskId)); } @ApiOperation("控制台曲线显示,需传taskId") - @RequestMapping("/dataList") + @PostMapping("/dataList") @ResponseBody - public ResponseDataDTO dataList(Long taskId) { + public ResponseDataDTO> dataList(Long taskId) { return ResponseDataDTO.success(iPsdService.dataList(taskId)); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7a12a35..7171d3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service.impl; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; @@ -11,7 +12,10 @@ import com.casic.missiles.netty.CacheUtils; import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; +import com.casic.missiles.common.WebSocket; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -30,6 +34,8 @@ private IVolService iVolService; @Resource private IDetectorLogService iLogService; + @Autowired + private WebSocket webSocket; @Override public void deviceInit(Long detectorId) { @@ -51,12 +57,25 @@ } } - @Override + @Async("syncExecutorPool") public void analysis(String deviceIpPort, String msg) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); + if (volList != null && volList.size() > 0) { + volList.forEach(vol -> { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("deviceIp", deviceIpPort); + jsonObject.put("vol", vol.getVolData6()); + jsonObject.put("time", vol.getCreateTime()); + webSocket.sendAllMessage(jsonObject.toJSONString()); + log.info("推送电压数据"+jsonObject.toJSONString()); + vol.setIpPort(deviceIpPort.substring(1)); + }); + iVolService.saveBatch(volList); + } + if (psdList != null && psdList.size() > 0) { psdList.forEach(psd -> { psd.setIpPort(deviceIpPort.substring(1)); @@ -70,12 +89,6 @@ }); iPsdService.saveBatch(psdList); } - if (volList != null && volList.size() > 0) { - volList.forEach(vol -> { - vol.setIpPort(deviceIpPort.substring(1)); - }); - iVolService.saveBatch(volList); - } } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java new file mode 100644 index 0000000..49c0439 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.neutron.service.impl.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +// tomcat启动无需配置 + @Configuration +public class WebSocketConfig { + /** + * 注入ServerEndpointExporter, + * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint + */ + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + 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/neutron/controller/DetectorConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java index e602471..ec75b52 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java @@ -8,9 +8,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + /** * 下发参数日志控制器 * @@ -30,9 +33,9 @@ * 获取下发参数日志列表 */ @ApiOperation("根据探测仪id获取下发参数列表") - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody - public ResponseDataDTO list(Long detectorId) { + public ResponseDataDTO> list(Long detectorId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("DETECTOR_ID", detectorId); queryWrapper.orderByDesc("CREATE_TIME"); @@ -42,7 +45,7 @@ // /** // * 获取下发参数日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -55,7 +58,7 @@ * 新增下发参数日志 */ @ApiOperation("保存参数") - @RequestMapping(value = "/addConfig") + @PostMapping(value = "/addConfig") @ResponseBody public ResponseDataDTO add(DetectorConfig config) { return ResponseDataDTO.success(configService.save(config)); @@ -65,7 +68,7 @@ * 下发参数 */ @ApiOperation("下发参数") - @RequestMapping(value = "/sendConfig") + @PostMapping(value = "/sendConfig") @ResponseBody public ResponseDataDTO sendConfig(DetectorConfig config) { return ResponseDataDTO.success(configService.sendConfig(config)); @@ -74,7 +77,7 @@ // /** // * 删除下发参数日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String configId) { // configService.deleteById(configId); @@ -84,7 +87,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("configIds") List configIds) { // configService.deleteBatchIds(configIds); @@ -94,7 +97,7 @@ // /** // * 修改下发参数日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Config config) { // configService.updateById(config); @@ -104,7 +107,7 @@ // /** // * 下发参数日志详情 // */ -// @RequestMapping(value = "/detail/{configId}") +// @PostMapping(value = "/detail/{configId}") // @ResponseBody // public Object detail(@PathVariable("configId") String configId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java index cf82b80..64278d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -29,7 +30,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody @ApiOperation("根据探测仪id获取升降压操作列表") public Object list(Long detectorId) { @@ -42,7 +43,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/getLastRecord") + @PostMapping(value = "/getLastRecord") @ResponseBody @ApiOperation("根据探测仪id获取升降压最新记录") public Object getLastRecord(Long detectorId) { @@ -52,7 +53,7 @@ // /** // * 获取升降压操作日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -64,7 +65,7 @@ // /** // * 新增升降压操作日志 // */ -// @RequestMapping(value = "/add") +// @PostMapping(value = "/add") // @ResponseBody // public Object add(Log log) { // logService.insert(log); @@ -74,7 +75,7 @@ // /** // * 删除升降压操作日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String logId) { // logService.deleteById(logId); @@ -84,7 +85,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("logIds") List logIds) { // logService.deleteBatchIds(logIds); @@ -94,7 +95,7 @@ // /** // * 修改升降压操作日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Log log) { // logService.updateById(log); @@ -104,7 +105,7 @@ // /** // * 升降压操作日志详情 // */ -// @RequestMapping(value = "/detail/{logId}") +// @PostMapping(value = "/detail/{logId}") // @ResponseBody // public Object detail(@PathVariable("logId") String logId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index afaa5a8..4f1136b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -1,18 +1,21 @@ package com.casic.missiles.modular.neutron.controller; -import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; import com.casic.missiles.modular.neutron.service.IPsdService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + @Api(tags = "探测器管理(包括控制)") @Controller @RequestMapping("/Neutron") @@ -29,7 +32,7 @@ * @param command 控制指令类型(start-加压开始工作,stop-退高压,停止工作) */ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") - @RequestMapping("/control") + @PostMapping("/control") @ResponseBody public ResponseDataDTO control(String command,Long detectorId) { //toDo:需要加返回值 @@ -38,18 +41,18 @@ } @ApiOperation("控制台中告警列表,需传taskId") - @RequestMapping("/alarmList") + @PostMapping("/alarmList") @ResponseBody - public ResponseDataDTO alarmList(Long taskId) { + public ResponseDataDTO> alarmList(Long taskId) { return ResponseDataDTO.success(iPsdService.getPsdAlarm(taskId)); } @ApiOperation("控制台曲线显示,需传taskId") - @RequestMapping("/dataList") + @PostMapping("/dataList") @ResponseBody - public ResponseDataDTO dataList(Long taskId) { + public ResponseDataDTO> dataList(Long taskId) { return ResponseDataDTO.success(iPsdService.dataList(taskId)); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7a12a35..7171d3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service.impl; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; @@ -11,7 +12,10 @@ import com.casic.missiles.netty.CacheUtils; import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; +import com.casic.missiles.common.WebSocket; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -30,6 +34,8 @@ private IVolService iVolService; @Resource private IDetectorLogService iLogService; + @Autowired + private WebSocket webSocket; @Override public void deviceInit(Long detectorId) { @@ -51,12 +57,25 @@ } } - @Override + @Async("syncExecutorPool") public void analysis(String deviceIpPort, String msg) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); + if (volList != null && volList.size() > 0) { + volList.forEach(vol -> { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("deviceIp", deviceIpPort); + jsonObject.put("vol", vol.getVolData6()); + jsonObject.put("time", vol.getCreateTime()); + webSocket.sendAllMessage(jsonObject.toJSONString()); + log.info("推送电压数据"+jsonObject.toJSONString()); + vol.setIpPort(deviceIpPort.substring(1)); + }); + iVolService.saveBatch(volList); + } + if (psdList != null && psdList.size() > 0) { psdList.forEach(psd -> { psd.setIpPort(deviceIpPort.substring(1)); @@ -70,12 +89,6 @@ }); iPsdService.saveBatch(psdList); } - if (volList != null && volList.size() > 0) { - volList.forEach(vol -> { - vol.setIpPort(deviceIpPort.substring(1)); - }); - iVolService.saveBatch(volList); - } } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java new file mode 100644 index 0000000..49c0439 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.neutron.service.impl.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +// tomcat启动无需配置 + @Configuration +public class WebSocketConfig { + /** + * 注入ServerEndpointExporter, + * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint + */ + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java index db0bc0a..b91ef75 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java @@ -14,6 +14,7 @@ import javax.annotation.Resource; import java.nio.charset.StandardCharsets; import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.TimeUnit; @Slf4j @Component @@ -43,21 +44,28 @@ public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); p.addLast(new HjtDecoder()); +// p.addLast(new NettyClientHandler(NettyClient.this)); p.addLast(nettyClientHandler); } }); - mChannelFuture = b.connect(host, port).addListener(future -> { - if (future.isSuccess()) - log.info(String.format("客户端启动成功,并监听端口:%s ", port)); - log.info(String.format("客户端启动失败,并监听端口:%s ", port)); + mChannelFuture = b.connect(host, port).addListener(new ChannelFutureListener(){ + @Override + public void operationComplete(ChannelFuture future){ + if (future.isSuccess()) { + log.info("探测器{}--连接成功!!", host); + } else { + log.error("探测器{}--连接失败!!", host); + future.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + log.info("探测器{}--重新连接!!", host); + startClient(host, port); + } + }, 10, TimeUnit.SECONDS); + } + } }); -// mChannelFuture.channel().closeFuture().addListener(new ChannelFutureListener() { -// public void operationComplete(ChannelFuture future) throws Exception { -// //重连服务端 -// startClient("192.168.1.50", 52002); -// } -// }); } catch (Exception e) { log.error("启动 netty 客户端出现异常", e); } diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + 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/neutron/controller/DetectorConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java index e602471..ec75b52 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java @@ -8,9 +8,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + /** * 下发参数日志控制器 * @@ -30,9 +33,9 @@ * 获取下发参数日志列表 */ @ApiOperation("根据探测仪id获取下发参数列表") - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody - public ResponseDataDTO list(Long detectorId) { + public ResponseDataDTO> list(Long detectorId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("DETECTOR_ID", detectorId); queryWrapper.orderByDesc("CREATE_TIME"); @@ -42,7 +45,7 @@ // /** // * 获取下发参数日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -55,7 +58,7 @@ * 新增下发参数日志 */ @ApiOperation("保存参数") - @RequestMapping(value = "/addConfig") + @PostMapping(value = "/addConfig") @ResponseBody public ResponseDataDTO add(DetectorConfig config) { return ResponseDataDTO.success(configService.save(config)); @@ -65,7 +68,7 @@ * 下发参数 */ @ApiOperation("下发参数") - @RequestMapping(value = "/sendConfig") + @PostMapping(value = "/sendConfig") @ResponseBody public ResponseDataDTO sendConfig(DetectorConfig config) { return ResponseDataDTO.success(configService.sendConfig(config)); @@ -74,7 +77,7 @@ // /** // * 删除下发参数日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String configId) { // configService.deleteById(configId); @@ -84,7 +87,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("configIds") List configIds) { // configService.deleteBatchIds(configIds); @@ -94,7 +97,7 @@ // /** // * 修改下发参数日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Config config) { // configService.updateById(config); @@ -104,7 +107,7 @@ // /** // * 下发参数日志详情 // */ -// @RequestMapping(value = "/detail/{configId}") +// @PostMapping(value = "/detail/{configId}") // @ResponseBody // public Object detail(@PathVariable("configId") String configId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java index cf82b80..64278d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -29,7 +30,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody @ApiOperation("根据探测仪id获取升降压操作列表") public Object list(Long detectorId) { @@ -42,7 +43,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/getLastRecord") + @PostMapping(value = "/getLastRecord") @ResponseBody @ApiOperation("根据探测仪id获取升降压最新记录") public Object getLastRecord(Long detectorId) { @@ -52,7 +53,7 @@ // /** // * 获取升降压操作日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -64,7 +65,7 @@ // /** // * 新增升降压操作日志 // */ -// @RequestMapping(value = "/add") +// @PostMapping(value = "/add") // @ResponseBody // public Object add(Log log) { // logService.insert(log); @@ -74,7 +75,7 @@ // /** // * 删除升降压操作日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String logId) { // logService.deleteById(logId); @@ -84,7 +85,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("logIds") List logIds) { // logService.deleteBatchIds(logIds); @@ -94,7 +95,7 @@ // /** // * 修改升降压操作日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Log log) { // logService.updateById(log); @@ -104,7 +105,7 @@ // /** // * 升降压操作日志详情 // */ -// @RequestMapping(value = "/detail/{logId}") +// @PostMapping(value = "/detail/{logId}") // @ResponseBody // public Object detail(@PathVariable("logId") String logId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index afaa5a8..4f1136b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -1,18 +1,21 @@ package com.casic.missiles.modular.neutron.controller; -import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; import com.casic.missiles.modular.neutron.service.IPsdService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + @Api(tags = "探测器管理(包括控制)") @Controller @RequestMapping("/Neutron") @@ -29,7 +32,7 @@ * @param command 控制指令类型(start-加压开始工作,stop-退高压,停止工作) */ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") - @RequestMapping("/control") + @PostMapping("/control") @ResponseBody public ResponseDataDTO control(String command,Long detectorId) { //toDo:需要加返回值 @@ -38,18 +41,18 @@ } @ApiOperation("控制台中告警列表,需传taskId") - @RequestMapping("/alarmList") + @PostMapping("/alarmList") @ResponseBody - public ResponseDataDTO alarmList(Long taskId) { + public ResponseDataDTO> alarmList(Long taskId) { return ResponseDataDTO.success(iPsdService.getPsdAlarm(taskId)); } @ApiOperation("控制台曲线显示,需传taskId") - @RequestMapping("/dataList") + @PostMapping("/dataList") @ResponseBody - public ResponseDataDTO dataList(Long taskId) { + public ResponseDataDTO> dataList(Long taskId) { return ResponseDataDTO.success(iPsdService.dataList(taskId)); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7a12a35..7171d3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service.impl; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; @@ -11,7 +12,10 @@ import com.casic.missiles.netty.CacheUtils; import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; +import com.casic.missiles.common.WebSocket; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -30,6 +34,8 @@ private IVolService iVolService; @Resource private IDetectorLogService iLogService; + @Autowired + private WebSocket webSocket; @Override public void deviceInit(Long detectorId) { @@ -51,12 +57,25 @@ } } - @Override + @Async("syncExecutorPool") public void analysis(String deviceIpPort, String msg) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); + if (volList != null && volList.size() > 0) { + volList.forEach(vol -> { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("deviceIp", deviceIpPort); + jsonObject.put("vol", vol.getVolData6()); + jsonObject.put("time", vol.getCreateTime()); + webSocket.sendAllMessage(jsonObject.toJSONString()); + log.info("推送电压数据"+jsonObject.toJSONString()); + vol.setIpPort(deviceIpPort.substring(1)); + }); + iVolService.saveBatch(volList); + } + if (psdList != null && psdList.size() > 0) { psdList.forEach(psd -> { psd.setIpPort(deviceIpPort.substring(1)); @@ -70,12 +89,6 @@ }); iPsdService.saveBatch(psdList); } - if (volList != null && volList.size() > 0) { - volList.forEach(vol -> { - vol.setIpPort(deviceIpPort.substring(1)); - }); - iVolService.saveBatch(volList); - } } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java new file mode 100644 index 0000000..49c0439 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.neutron.service.impl.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +// tomcat启动无需配置 + @Configuration +public class WebSocketConfig { + /** + * 注入ServerEndpointExporter, + * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint + */ + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java index db0bc0a..b91ef75 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java @@ -14,6 +14,7 @@ import javax.annotation.Resource; import java.nio.charset.StandardCharsets; import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.TimeUnit; @Slf4j @Component @@ -43,21 +44,28 @@ public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); p.addLast(new HjtDecoder()); +// p.addLast(new NettyClientHandler(NettyClient.this)); p.addLast(nettyClientHandler); } }); - mChannelFuture = b.connect(host, port).addListener(future -> { - if (future.isSuccess()) - log.info(String.format("客户端启动成功,并监听端口:%s ", port)); - log.info(String.format("客户端启动失败,并监听端口:%s ", port)); + mChannelFuture = b.connect(host, port).addListener(new ChannelFutureListener(){ + @Override + public void operationComplete(ChannelFuture future){ + if (future.isSuccess()) { + log.info("探测器{}--连接成功!!", host); + } else { + log.error("探测器{}--连接失败!!", host); + future.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + log.info("探测器{}--重新连接!!", host); + startClient(host, port); + } + }, 10, TimeUnit.SECONDS); + } + } }); -// mChannelFuture.channel().closeFuture().addListener(new ChannelFutureListener() { -// public void operationComplete(ChannelFuture future) throws Exception { -// //重连服务端 -// startClient("192.168.1.50", 52002); -// } -// }); } catch (Exception e) { log.error("启动 netty 客户端出现异常", e); } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java index 499795f..0e9d152 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java @@ -14,6 +14,12 @@ @Slf4j public class NettyClientHandler extends ChannelInboundHandlerAdapter { +// private NettyClient nettyClient; +// +// public NettyClientHandler(NettyClient nettyClient) { +// this.nettyClient = nettyClient; +// } + @Autowired private INeutronOptService neutronOptService; @@ -21,7 +27,6 @@ @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { log.info(String.format("客户端读取到从服务器端:%s 发送过来的数据:%s", ctx.channel().remoteAddress(), msg.toString())); -// ctx.channel().writeAndFlush(String.format("server write:%s", msg)); //解析数据 try { neutronOptService.analysis(ctx.channel().remoteAddress().toString(),msg.toString()); @@ -37,4 +42,9 @@ ctx.close(); } +// @Override +// public void channelInactive(ChannelHandlerContext ctx) throws Exception { +// super.channelInactive(ctx); +// nettyClient.startClient("192.168.1.50", 52002); +// } } diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + 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/neutron/controller/DetectorConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java index e602471..ec75b52 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java @@ -8,9 +8,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + /** * 下发参数日志控制器 * @@ -30,9 +33,9 @@ * 获取下发参数日志列表 */ @ApiOperation("根据探测仪id获取下发参数列表") - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody - public ResponseDataDTO list(Long detectorId) { + public ResponseDataDTO> list(Long detectorId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("DETECTOR_ID", detectorId); queryWrapper.orderByDesc("CREATE_TIME"); @@ -42,7 +45,7 @@ // /** // * 获取下发参数日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -55,7 +58,7 @@ * 新增下发参数日志 */ @ApiOperation("保存参数") - @RequestMapping(value = "/addConfig") + @PostMapping(value = "/addConfig") @ResponseBody public ResponseDataDTO add(DetectorConfig config) { return ResponseDataDTO.success(configService.save(config)); @@ -65,7 +68,7 @@ * 下发参数 */ @ApiOperation("下发参数") - @RequestMapping(value = "/sendConfig") + @PostMapping(value = "/sendConfig") @ResponseBody public ResponseDataDTO sendConfig(DetectorConfig config) { return ResponseDataDTO.success(configService.sendConfig(config)); @@ -74,7 +77,7 @@ // /** // * 删除下发参数日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String configId) { // configService.deleteById(configId); @@ -84,7 +87,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("configIds") List configIds) { // configService.deleteBatchIds(configIds); @@ -94,7 +97,7 @@ // /** // * 修改下发参数日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Config config) { // configService.updateById(config); @@ -104,7 +107,7 @@ // /** // * 下发参数日志详情 // */ -// @RequestMapping(value = "/detail/{configId}") +// @PostMapping(value = "/detail/{configId}") // @ResponseBody // public Object detail(@PathVariable("configId") String configId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java index cf82b80..64278d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -29,7 +30,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody @ApiOperation("根据探测仪id获取升降压操作列表") public Object list(Long detectorId) { @@ -42,7 +43,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/getLastRecord") + @PostMapping(value = "/getLastRecord") @ResponseBody @ApiOperation("根据探测仪id获取升降压最新记录") public Object getLastRecord(Long detectorId) { @@ -52,7 +53,7 @@ // /** // * 获取升降压操作日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -64,7 +65,7 @@ // /** // * 新增升降压操作日志 // */ -// @RequestMapping(value = "/add") +// @PostMapping(value = "/add") // @ResponseBody // public Object add(Log log) { // logService.insert(log); @@ -74,7 +75,7 @@ // /** // * 删除升降压操作日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String logId) { // logService.deleteById(logId); @@ -84,7 +85,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("logIds") List logIds) { // logService.deleteBatchIds(logIds); @@ -94,7 +95,7 @@ // /** // * 修改升降压操作日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Log log) { // logService.updateById(log); @@ -104,7 +105,7 @@ // /** // * 升降压操作日志详情 // */ -// @RequestMapping(value = "/detail/{logId}") +// @PostMapping(value = "/detail/{logId}") // @ResponseBody // public Object detail(@PathVariable("logId") String logId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index afaa5a8..4f1136b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -1,18 +1,21 @@ package com.casic.missiles.modular.neutron.controller; -import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; import com.casic.missiles.modular.neutron.service.IPsdService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + @Api(tags = "探测器管理(包括控制)") @Controller @RequestMapping("/Neutron") @@ -29,7 +32,7 @@ * @param command 控制指令类型(start-加压开始工作,stop-退高压,停止工作) */ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") - @RequestMapping("/control") + @PostMapping("/control") @ResponseBody public ResponseDataDTO control(String command,Long detectorId) { //toDo:需要加返回值 @@ -38,18 +41,18 @@ } @ApiOperation("控制台中告警列表,需传taskId") - @RequestMapping("/alarmList") + @PostMapping("/alarmList") @ResponseBody - public ResponseDataDTO alarmList(Long taskId) { + public ResponseDataDTO> alarmList(Long taskId) { return ResponseDataDTO.success(iPsdService.getPsdAlarm(taskId)); } @ApiOperation("控制台曲线显示,需传taskId") - @RequestMapping("/dataList") + @PostMapping("/dataList") @ResponseBody - public ResponseDataDTO dataList(Long taskId) { + public ResponseDataDTO> dataList(Long taskId) { return ResponseDataDTO.success(iPsdService.dataList(taskId)); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7a12a35..7171d3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service.impl; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; @@ -11,7 +12,10 @@ import com.casic.missiles.netty.CacheUtils; import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; +import com.casic.missiles.common.WebSocket; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -30,6 +34,8 @@ private IVolService iVolService; @Resource private IDetectorLogService iLogService; + @Autowired + private WebSocket webSocket; @Override public void deviceInit(Long detectorId) { @@ -51,12 +57,25 @@ } } - @Override + @Async("syncExecutorPool") public void analysis(String deviceIpPort, String msg) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); + if (volList != null && volList.size() > 0) { + volList.forEach(vol -> { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("deviceIp", deviceIpPort); + jsonObject.put("vol", vol.getVolData6()); + jsonObject.put("time", vol.getCreateTime()); + webSocket.sendAllMessage(jsonObject.toJSONString()); + log.info("推送电压数据"+jsonObject.toJSONString()); + vol.setIpPort(deviceIpPort.substring(1)); + }); + iVolService.saveBatch(volList); + } + if (psdList != null && psdList.size() > 0) { psdList.forEach(psd -> { psd.setIpPort(deviceIpPort.substring(1)); @@ -70,12 +89,6 @@ }); iPsdService.saveBatch(psdList); } - if (volList != null && volList.size() > 0) { - volList.forEach(vol -> { - vol.setIpPort(deviceIpPort.substring(1)); - }); - iVolService.saveBatch(volList); - } } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java new file mode 100644 index 0000000..49c0439 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.neutron.service.impl.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +// tomcat启动无需配置 + @Configuration +public class WebSocketConfig { + /** + * 注入ServerEndpointExporter, + * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint + */ + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java index db0bc0a..b91ef75 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java @@ -14,6 +14,7 @@ import javax.annotation.Resource; import java.nio.charset.StandardCharsets; import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.TimeUnit; @Slf4j @Component @@ -43,21 +44,28 @@ public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); p.addLast(new HjtDecoder()); +// p.addLast(new NettyClientHandler(NettyClient.this)); p.addLast(nettyClientHandler); } }); - mChannelFuture = b.connect(host, port).addListener(future -> { - if (future.isSuccess()) - log.info(String.format("客户端启动成功,并监听端口:%s ", port)); - log.info(String.format("客户端启动失败,并监听端口:%s ", port)); + mChannelFuture = b.connect(host, port).addListener(new ChannelFutureListener(){ + @Override + public void operationComplete(ChannelFuture future){ + if (future.isSuccess()) { + log.info("探测器{}--连接成功!!", host); + } else { + log.error("探测器{}--连接失败!!", host); + future.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + log.info("探测器{}--重新连接!!", host); + startClient(host, port); + } + }, 10, TimeUnit.SECONDS); + } + } }); -// mChannelFuture.channel().closeFuture().addListener(new ChannelFutureListener() { -// public void operationComplete(ChannelFuture future) throws Exception { -// //重连服务端 -// startClient("192.168.1.50", 52002); -// } -// }); } catch (Exception e) { log.error("启动 netty 客户端出现异常", e); } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java index 499795f..0e9d152 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java @@ -14,6 +14,12 @@ @Slf4j public class NettyClientHandler extends ChannelInboundHandlerAdapter { +// private NettyClient nettyClient; +// +// public NettyClientHandler(NettyClient nettyClient) { +// this.nettyClient = nettyClient; +// } + @Autowired private INeutronOptService neutronOptService; @@ -21,7 +27,6 @@ @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { log.info(String.format("客户端读取到从服务器端:%s 发送过来的数据:%s", ctx.channel().remoteAddress(), msg.toString())); -// ctx.channel().writeAndFlush(String.format("server write:%s", msg)); //解析数据 try { neutronOptService.analysis(ctx.channel().remoteAddress().toString(),msg.toString()); @@ -37,4 +42,9 @@ ctx.close(); } +// @Override +// public void channelInactive(ChannelHandlerContext ctx) throws Exception { +// super.channelInactive(ctx); +// nettyClient.startClient("192.168.1.50", 52002); +// } } diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index daafafc..bf403dd 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -19,7 +19,7 @@ # redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/webjars/**,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/webjars/**,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources #flowable数据源和多数据源配置 db: init: diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java deleted file mode 100644 index 0782fd4..0000000 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/config/PoolConfig.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.casic.missiles.modular.ptz.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 -// public ThreadPoolTaskExecutor threadPoolTaskExecutor() { -// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); -// int core = Runtime.getRuntime().availableProcessors(); -// //设置核心线程数 -// executor.setCorePoolSize(core); -// //设置最大线程数 -// executor.setMaxPoolSize(core*2 + 1); -// //除核心线程外的线程存活时间 -// executor.setKeepAliveSeconds(3); -// //等待队列 -// executor.setQueueCapacity(40); -// // 设置默认线程名称 -// executor.setThreadNamePrefix("Door-"); -// // 设置拒绝策略 -// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); -// // 等待所有任务结束后再关闭线程池 -// executor.setWaitForTasksToCompleteOnShutdown(true); -// -// return executor; -// } -// -// public void execute(Runnable runnable) { -// } -//} - - -@Configuration -public class PoolConfig { - - @Bean("syncExecutorPool") - public Executor taskExecutor() { - ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); - // 核心池大小 - taskExecutor.setCorePoolSize(5); - // 最大线程数 - taskExecutor.setMaxPoolSize(20); - // 队列程度 - taskExecutor.setQueueCapacity(500); - // 线程空闲时间 - taskExecutor.setKeepAliveSeconds(60); - // 线程前缀名称 - taskExecutor.setThreadNamePrefix("syncExecutor--"); - // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, - // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); - // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 - taskExecutor.setAwaitTerminationSeconds(60); - // 线程不够用时由调用的线程处理该任务 - taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - return taskExecutor; - } -} diff --git a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java index 0ce9e22..821dd6a 100644 --- a/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java +++ b/casic-ptz/src/main/java/com/casic/missiles/modular/ptz/service/impl/HCNetServiceImpl.java @@ -3,7 +3,6 @@ import cn.hutool.core.util.ObjectUtil; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.ptz.common.DeviceCommon; -import com.casic.missiles.modular.ptz.config.PoolConfig; import com.casic.missiles.modular.ptz.dto.DeviceDTO; import com.casic.missiles.modular.ptz.dto.DeviceInfo; import com.casic.missiles.modular.ptz.dto.GlobalParamsDTO; @@ -56,8 +55,8 @@ // private String alarmvalue; // @Value("${casic.presetInterval}") // private int presetInterval; - @Autowired - private PoolConfig threadPoolTaskExecutor; +// @Autowired +// private PoolConfig threadPoolTaskExecutor; @Autowired private IDeviceOperationService operationService; @Autowired diff --git a/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java new file mode 100644 index 0000000..6ac85c0 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/common/PoolConfig.java @@ -0,0 +1,39 @@ +package com.casic.missiles.common; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + + +@Configuration +@EnableAsync +public class PoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(20); + // 队列程度 + taskExecutor.setQueueCapacity(500); + // 线程空闲时间 + 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/neutron/controller/DetectorConfigController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java index e602471..ec75b52 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorConfigController.java @@ -8,9 +8,12 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + /** * 下发参数日志控制器 * @@ -30,9 +33,9 @@ * 获取下发参数日志列表 */ @ApiOperation("根据探测仪id获取下发参数列表") - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody - public ResponseDataDTO list(Long detectorId) { + public ResponseDataDTO> list(Long detectorId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("DETECTOR_ID", detectorId); queryWrapper.orderByDesc("CREATE_TIME"); @@ -42,7 +45,7 @@ // /** // * 获取下发参数日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -55,7 +58,7 @@ * 新增下发参数日志 */ @ApiOperation("保存参数") - @RequestMapping(value = "/addConfig") + @PostMapping(value = "/addConfig") @ResponseBody public ResponseDataDTO add(DetectorConfig config) { return ResponseDataDTO.success(configService.save(config)); @@ -65,7 +68,7 @@ * 下发参数 */ @ApiOperation("下发参数") - @RequestMapping(value = "/sendConfig") + @PostMapping(value = "/sendConfig") @ResponseBody public ResponseDataDTO sendConfig(DetectorConfig config) { return ResponseDataDTO.success(configService.sendConfig(config)); @@ -74,7 +77,7 @@ // /** // * 删除下发参数日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String configId) { // configService.deleteById(configId); @@ -84,7 +87,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("configIds") List configIds) { // configService.deleteBatchIds(configIds); @@ -94,7 +97,7 @@ // /** // * 修改下发参数日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Config config) { // configService.updateById(config); @@ -104,7 +107,7 @@ // /** // * 下发参数日志详情 // */ -// @RequestMapping(value = "/detail/{configId}") +// @PostMapping(value = "/detail/{configId}") // @ResponseBody // public Object detail(@PathVariable("configId") String configId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java index cf82b80..64278d3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/DetectorLogController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -29,7 +30,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/list") + @PostMapping(value = "/list") @ResponseBody @ApiOperation("根据探测仪id获取升降压操作列表") public Object list(Long detectorId) { @@ -42,7 +43,7 @@ /** * 获取升降压操作日志列表 */ - @RequestMapping(value = "/getLastRecord") + @PostMapping(value = "/getLastRecord") @ResponseBody @ApiOperation("根据探测仪id获取升降压最新记录") public Object getLastRecord(Long detectorId) { @@ -52,7 +53,7 @@ // /** // * 获取升降压操作日志分页列表 // */ -// @RequestMapping(value = "/listPage") +// @PostMapping(value = "/listPage") // @ResponseBody // public Object listPage(String condition) { // Page page = new PageFactory().defaultPage(); @@ -64,7 +65,7 @@ // /** // * 新增升降压操作日志 // */ -// @RequestMapping(value = "/add") +// @PostMapping(value = "/add") // @ResponseBody // public Object add(Log log) { // logService.insert(log); @@ -74,7 +75,7 @@ // /** // * 删除升降压操作日志 // */ -// @RequestMapping(value = "/delete") +// @PostMapping(value = "/delete") // @ResponseBody // public Object delete(@RequestParam String logId) { // logService.deleteById(logId); @@ -84,7 +85,7 @@ // /** // * 批量删除 // */ -// @RequestMapping(value = "/batchDelete") +// @PostMapping(value = "/batchDelete") // @ResponseBody // public Object delete(@RequestParam("logIds") List logIds) { // logService.deleteBatchIds(logIds); @@ -94,7 +95,7 @@ // /** // * 修改升降压操作日志 // */ -// @RequestMapping(value = "/update") +// @PostMapping(value = "/update") // @ResponseBody // public Object update(Log log) { // logService.updateById(log); @@ -104,7 +105,7 @@ // /** // * 升降压操作日志详情 // */ -// @RequestMapping(value = "/detail/{logId}") +// @PostMapping(value = "/detail/{logId}") // @ResponseBody // public Object detail(@PathVariable("logId") String logId) { // ResultData resultData = new ResultData(); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index afaa5a8..4f1136b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -1,18 +1,21 @@ package com.casic.missiles.modular.neutron.controller; -import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; import com.casic.missiles.modular.neutron.service.IPsdService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + @Api(tags = "探测器管理(包括控制)") @Controller @RequestMapping("/Neutron") @@ -29,7 +32,7 @@ * @param command 控制指令类型(start-加压开始工作,stop-退高压,停止工作) */ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") - @RequestMapping("/control") + @PostMapping("/control") @ResponseBody public ResponseDataDTO control(String command,Long detectorId) { //toDo:需要加返回值 @@ -38,18 +41,18 @@ } @ApiOperation("控制台中告警列表,需传taskId") - @RequestMapping("/alarmList") + @PostMapping("/alarmList") @ResponseBody - public ResponseDataDTO alarmList(Long taskId) { + public ResponseDataDTO> alarmList(Long taskId) { return ResponseDataDTO.success(iPsdService.getPsdAlarm(taskId)); } @ApiOperation("控制台曲线显示,需传taskId") - @RequestMapping("/dataList") + @PostMapping("/dataList") @ResponseBody - public ResponseDataDTO dataList(Long taskId) { + public ResponseDataDTO> dataList(Long taskId) { return ResponseDataDTO.success(iPsdService.dataList(taskId)); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7a12a35..7171d3b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service.impl; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; @@ -11,7 +12,10 @@ import com.casic.missiles.netty.CacheUtils; import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; +import com.casic.missiles.common.WebSocket; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -30,6 +34,8 @@ private IVolService iVolService; @Resource private IDetectorLogService iLogService; + @Autowired + private WebSocket webSocket; @Override public void deviceInit(Long detectorId) { @@ -51,12 +57,25 @@ } } - @Override + @Async("syncExecutorPool") public void analysis(String deviceIpPort, String msg) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); + if (volList != null && volList.size() > 0) { + volList.forEach(vol -> { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("deviceIp", deviceIpPort); + jsonObject.put("vol", vol.getVolData6()); + jsonObject.put("time", vol.getCreateTime()); + webSocket.sendAllMessage(jsonObject.toJSONString()); + log.info("推送电压数据"+jsonObject.toJSONString()); + vol.setIpPort(deviceIpPort.substring(1)); + }); + iVolService.saveBatch(volList); + } + if (psdList != null && psdList.size() > 0) { psdList.forEach(psd -> { psd.setIpPort(deviceIpPort.substring(1)); @@ -70,12 +89,6 @@ }); iPsdService.saveBatch(psdList); } - if (volList != null && volList.size() > 0) { - volList.forEach(vol -> { - vol.setIpPort(deviceIpPort.substring(1)); - }); - iVolService.saveBatch(volList); - } } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java new file mode 100644 index 0000000..49c0439 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/config/WebSocketConfig.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.neutron.service.impl.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +// tomcat启动无需配置 + @Configuration +public class WebSocketConfig { + /** + * 注入ServerEndpointExporter, + * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint + */ + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java index db0bc0a..b91ef75 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java @@ -14,6 +14,7 @@ import javax.annotation.Resource; import java.nio.charset.StandardCharsets; import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.TimeUnit; @Slf4j @Component @@ -43,21 +44,28 @@ public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); p.addLast(new HjtDecoder()); +// p.addLast(new NettyClientHandler(NettyClient.this)); p.addLast(nettyClientHandler); } }); - mChannelFuture = b.connect(host, port).addListener(future -> { - if (future.isSuccess()) - log.info(String.format("客户端启动成功,并监听端口:%s ", port)); - log.info(String.format("客户端启动失败,并监听端口:%s ", port)); + mChannelFuture = b.connect(host, port).addListener(new ChannelFutureListener(){ + @Override + public void operationComplete(ChannelFuture future){ + if (future.isSuccess()) { + log.info("探测器{}--连接成功!!", host); + } else { + log.error("探测器{}--连接失败!!", host); + future.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + log.info("探测器{}--重新连接!!", host); + startClient(host, port); + } + }, 10, TimeUnit.SECONDS); + } + } }); -// mChannelFuture.channel().closeFuture().addListener(new ChannelFutureListener() { -// public void operationComplete(ChannelFuture future) throws Exception { -// //重连服务端 -// startClient("192.168.1.50", 52002); -// } -// }); } catch (Exception e) { log.error("启动 netty 客户端出现异常", e); } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java index 499795f..0e9d152 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java @@ -14,6 +14,12 @@ @Slf4j public class NettyClientHandler extends ChannelInboundHandlerAdapter { +// private NettyClient nettyClient; +// +// public NettyClientHandler(NettyClient nettyClient) { +// this.nettyClient = nettyClient; +// } + @Autowired private INeutronOptService neutronOptService; @@ -21,7 +27,6 @@ @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { log.info(String.format("客户端读取到从服务器端:%s 发送过来的数据:%s", ctx.channel().remoteAddress(), msg.toString())); -// ctx.channel().writeAndFlush(String.format("server write:%s", msg)); //解析数据 try { neutronOptService.analysis(ctx.channel().remoteAddress().toString(),msg.toString()); @@ -37,4 +42,9 @@ ctx.close(); } +// @Override +// public void channelInactive(ChannelHandlerContext ctx) throws Exception { +// super.channelInactive(ctx); +// nettyClient.startClient("192.168.1.50", 52002); +// } } diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index daafafc..bf403dd 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -19,7 +19,7 @@ # redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/webjars/**,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/webjars/**,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources #flowable数据源和多数据源配置 db: init: diff --git a/casic-web/src/main/resources/logback-spring.xml b/casic-web/src/main/resources/logback-spring.xml index 9457966..81a8563 100644 --- a/casic-web/src/main/resources/logback-spring.xml +++ b/casic-web/src/main/resources/logback-spring.xml @@ -53,7 +53,7 @@ - 200MB + 100MB @@ -89,7 +89,7 @@ - 200MB + 100MB