From 02c7b0d6cbdbba4dc4a725c38ad99b629a38ad03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AE=87=E8=88=AA?= <653809315@qq.com> Date: Mon, 29 Jan 2024 10:09:05 +0800 Subject: [PATCH] mac --- .../system/RadarStatusController.java | 313 +----------------- .../controller/system/SysRadarController.java | 10 +- .../service/RadarRealTimeDataService.java | 13 + .../impl/RadarRealTimeDataServiceImpl.java | 225 +++++++++++++ 4 files changed, 245 insertions(+), 316 deletions(-) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/RadarRealTimeDataService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RadarRealTimeDataServiceImpl.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RadarStatusController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RadarStatusController.java index 6287b86..1313b5e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RadarStatusController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RadarStatusController.java @@ -1,7 +1,6 @@ package com.ruoyi.web.controller.system; -import com.alibaba.fastjson.JSON; import com.ruoyi.common.core.domain.entity.*; import com.ruoyi.common.core.page.PageDomain; import com.ruoyi.common.core.page.TableDataInfo; @@ -13,7 +12,6 @@ import com.ruoyi.common.utils.bean.ModbusResponse; import com.ruoyi.system.service.ISysIdentifierService; import com.ruoyi.system.service.ISysRadarService; import com.ruoyi.system.service.PrimaryRadarDataService; -import com.ruoyi.common.config.RadarStatusWebSocket; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; @@ -29,7 +27,6 @@ import java.sql.SQLException; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; /** @@ -39,29 +36,12 @@ import java.util.stream.Collectors; */ @Controller @RequestMapping("/system/radarstatus") -public class RadarStatusController implements InitializingBean { +public class RadarStatusController { private static final Logger log = LoggerFactory.getLogger(RadarStatusController.class); @Autowired private ISysRadarService service; - @Autowired - private PrimaryRadarDataService primaryRadarDataService; - - @Autowired - private ISysIdentifierService identifierService; - - private Timer timer = new Timer(); - - public static CopyOnWriteArrayList allRadar = new CopyOnWriteArrayList<>(); - - public static Integer count = 0 ; - - private Integer consecutiveZeros = 0; - - private Map> pulse4Number = new HashMap<>(); - - private String prefix = "system/radarstatus"; /** @@ -94,7 +74,6 @@ public class RadarStatusController implements InitializingBean { rspData.setRows(radarList.subList(pageNum, pageSize)); rspData.setTotal(radarList.size()); -// RadarStatusWebSocket.sendToAll(rspData); return rspData; } @@ -144,302 +123,12 @@ public class RadarStatusController implements InitializingBean { } } - private void asyncWebSocket(List radarList) { - CompletableFuture.runAsync(() -> { - - buildAllRadar(radarList); - -// TimerTask task = new TimerTask() { -// @Override -// public void run() { -// allRadar.forEach(socketModel -> { -// asyncReadRadar(socketModel); -// }); -// } -// }; -// timer.scheduleAtFixedRate(task, 1, 100); - - }); - } - - public void buildAllRadar(List radarList) { - for (SysRadar radar : radarList) { - try { - Socket socket = new Socket(radar.getRadarIp(), 23); - - TimerTask timerTask = new TimerTask() { - - @Override - public void run() { - while (true) { -// long start = System.currentTimeMillis(); - task(radar, socket); - - System.out.println("雷达ip : =====" + radar.getRadarIp()); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } -// System.out.println("耗时时间: " + (System.currentTimeMillis() - start) ); - } - } - - }; - CompletableFuture.runAsync(() -> { - timerTask.run(); - }); - } catch (Exception e) { - - e.printStackTrace(); - } - } - } - - private void task(SysRadar radar, Socket socket) { - - try { - long start = System.currentTimeMillis(); - List discernList = new ArrayList<>(); - - // socket连接成功返回数据 - DataResponse data = SocketUtil.getData(socket, radar.getRadarLocation(), radar.getRadarIp()); - // 天线号字符串转集合 - List numberList = convertStringToList(radar.getRadarNum()); - for (String number : numberList) { - if (!pulse4Number.containsKey(number)) { - pulse4Number.put(number, new ArrayList<>()); - } - List pulse4Values = pulse4Number.get(number); - if (data.getData().get(7) == 0){ - consecutiveZeros ++; - if (consecutiveZeros >= 10) { - // 10个0连续,说明该天线没有数据 从pulse4Number中删除该天线 - pulse4Number.remove(number); - // 从radarList中删除该天线 - - // 数据记录结束,计算最大pulse4值 - double maxPulse4 = pulse4Values.stream().mapToDouble(Integer::doubleValue).max().orElse(0); - System.out.println("天线 " + number + " 的最大pulse4值为: " + maxPulse4); - // 为下一次数据记录重置 - pulse4Values.clear(); - consecutiveZeros = 0; - } - }else { - count ++; - pulse4Values.add(data.getData().get(7)); - } - } - - SysDiscern sysDiscern = copyDataToDiscern(data); - - System.out.println(radar.getRadarIp() + ": " + data); - // 雷达数据返回封装类赋值 - ModbusResponse modbusResponse = getModbusResponse(data); - - - - String tag = modbusResponse.getTagId(); - // 雷达原始数据对象 - PrimaryRadarData primaryRadarData = new PrimaryRadarData(); - // 标识器对象 - SysIdentifier sysIdentifier = new SysIdentifier(); - // 拷贝封装类属性到雷达原始数据对象 - BeanUtils.copyProperties(modbusResponse, primaryRadarData); - - //判断读取数据中是否携带标签 - if (!"0".equals(modbusResponse.getTagId())) { - // 根据标签去数据库查询标签列表 - sysIdentifier = identifierService.selectIdentifierByTag(tag); - //判断数据库查询结果是否有数据 - if (sysIdentifier != null) { - // 有数据将查询到的标识器配置属性放进原始数据对象 - primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); - primaryRadarData.setRadarLocation(radar.getRadarLocation()); - primaryRadarData.setRadarIp(radar.getRadarIp()); - - if (modbusResponse.getValue4() != 0){ - // 给雷达识别报表赋值 - sysDiscern.setType(sysIdentifier.getType()); - sysDiscern.setRadarLocation(radar.getRadarLocation()); - sysDiscern.setLadleNumber(sysIdentifier.getLadleNumber()); - sysDiscern.setCreateTime(new Date()); - } - } - } else { - // 没有配置过将铁包号置空 - primaryRadarData.setLadleNumber(null); - primaryRadarData.setRadarLocation(null); - primaryRadarData.setRadarIp(radar.getRadarIp()); - } - if (modbusResponse.getValue4() != null && modbusResponse.getValue4() != 0) { -// primaryRadarDataService.insertPrimaryRadarData(primaryRadarData); - } else { - - } - System.out.println("耗时时间: " + (System.currentTimeMillis() - start) ); - } catch (Exception e) { - } - } - - public static void addRadar(List radarList) { - List idList = allRadar.stream().map(SocketModel::getId).collect(Collectors.toList()); - List filterList = radarList.stream().filter(item -> !idList.contains(item.getId())).collect(Collectors.toList()); -// buildAllRadar(filterList); - } - - public static void delRadar(Long id) { - allRadar.removeIf(item -> item.getId().equals(id)); - } - - -// private void asyncReadRadar(SocketModel socketModel) { -// CompletableFuture.runAsync(() -> { -// try { -// List discernList = new ArrayList<>(); -// // socket连接成功返回数据 -// DataResponse data = SocketUtil.getData(socketModel); -// // 天线号字符串转集合 -// List numberList = convertStringToList(socketModel.getNumber()); -// for (String number : numberList) { -// if (!pulse4Number.containsKey(number)) { -// pulse4Number.put(number, new ArrayList<>()); -// } -// List pulse4Values = pulse4Number.get(number); -// if (data.getData().get(7) == 0){ -// consecutiveZeros ++; -// if (consecutiveZeros >= 10) { -// // 10个0连续,说明该天线没有数据 从pulse4Number中删除该天线 -// pulse4Number.remove(number); -// // 从radarList中删除该天线 -// allRadar.remove(socketModel); -// -// // 数据记录结束,计算最大pulse4值 -// double maxPulse4 = pulse4Values.stream().mapToDouble(Integer::doubleValue).max().orElse(0); -// System.out.println("天线 " + number + " 的最大pulse4值为: " + maxPulse4); -// // 为下一次数据记录重置 -// pulse4Values.clear(); -// consecutiveZeros = 0; -// } -// }else { -// count ++; -// pulse4Values.add(data.getData().get(7)); -// } -// } -// -// SysDiscern sysDiscern = copyDataToDiscern(data); -// -// System.out.println(socketModel.getRadarIp() + ": " + data); -// // 雷达数据返回封装类赋值 -// ModbusResponse modbusResponse = getModbusResponse(data); -// -// -// -// String tag = modbusResponse.getTagId(); -// // 雷达原始数据对象 -// PrimaryRadarData primaryRadarData = new PrimaryRadarData(); -// // 标识器对象 -// SysIdentifier sysIdentifier = new SysIdentifier(); -// // 拷贝封装类属性到雷达原始数据对象 -// BeanUtils.copyProperties(modbusResponse, primaryRadarData); -// -// //判断读取数据中是否携带标签 -// if (!"0".equals(modbusResponse.getTagId())) { -// // 根据标签去数据库查询标签列表 -// sysIdentifier = identifierService.selectIdentifierByTag(tag); -// //判断数据库查询结果是否有数据 -// if (sysIdentifier != null) { -// // 有数据将查询到的标识器配置属性放进原始数据对象 -// primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); -// primaryRadarData.setRadarLocation(socketModel.getRadarLocation()); -// primaryRadarData.setRadarIp(socketModel.getRadarIp()); -// -// if (modbusResponse.getValue4() != 0){ -// // 给雷达识别报表赋值 -// sysDiscern.setType(sysIdentifier.getType()); -// sysDiscern.setRadarLocation(socketModel.getRadarLocation()); -// sysDiscern.setLadleNumber(sysIdentifier.getLadleNumber()); -// sysDiscern.setCreateTime(new Date()); -// } -// } -// } else { -// // 没有配置过将铁包号置空 -// primaryRadarData.setLadleNumber(null); -// primaryRadarData.setRadarLocation(null); -// primaryRadarData.setRadarIp(socketModel.getRadarIp()); -// } -// if (modbusResponse.getValue4() != null && modbusResponse.getValue4() != 0) { -// primaryRadarDataService.insertPrimaryRadarData(primaryRadarData); -// } else { -// -// } -// -// } catch (Exception e) { -// } -// }); -// } - /** - * 雷达识别报表赋值 - * - * @param data - * @return ModbusResponse - */ - private static SysDiscern copyDataToDiscern(DataResponse data) { - SysDiscern discern = new SysDiscern(); - discern.setTagId(data.getData().get(3).toString()); - discern.setValue4(data.getData().get(7)); - discern.setNumber(data.getData().get(11)); - return discern; - } - - /** - * 雷达数据返回封装类赋值 - * - * @param data - * @return ModbusResponse - */ - public static ModbusResponse getModbusResponse(DataResponse data) { - ModbusResponse modbusResponse = new ModbusResponse(); - modbusResponse.setRadarNum(data.getData().get(0).toString()); - modbusResponse.setTagId(data.getData().get(3).toString()); - modbusResponse.setValue1(data.getData().get(4)); - modbusResponse.setValue2(data.getData().get(5)); - modbusResponse.setValue3(data.getData().get(6)); - modbusResponse.setValue4(data.getData().get(7)); - modbusResponse.setValue5(data.getData().get(8)); - modbusResponse.setBaseLine(data.getData().get(9)); - modbusResponse.setQueryFre(data.getData().get(10)); - modbusResponse.setNumber(data.getData().get(11)); - return modbusResponse; - } - - @Override - public void afterPropertiesSet() throws Exception { - List radarList = service.selectRadarList(new SysRadar()); - - asyncWebSocket(radarList); - } - - - public static List convertStringToList(String input) { - List list = new ArrayList<>(); - if (input.contains(",")) { - String[] array = input.split(","); - list.addAll(Arrays.asList(array)); - } else { - list.add(input); - } - return list; - } - class ConnectionStatus { - boolean connected = false; - } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRadarController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRadarController.java index 0ee73da..0b43e4c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRadarController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRadarController.java @@ -42,6 +42,9 @@ public class SysRadarController extends BaseController { @Autowired private ISysRadarService radarService; + @Autowired + private RadarRealTimeDataService radarRealTimeDataService; + @GetMapping() public String user() { return prefix + "/radar"; @@ -74,7 +77,7 @@ public class SysRadarController extends BaseController { radar.setCreateBy(getLoginName()); int result = radarService.insertRadar(radar); List sysRadars = radarService.selectRadarList(new SysRadar()); - + radarRealTimeDataService.addRadar(sysRadars); return toAjax(result); } @@ -99,7 +102,6 @@ public class SysRadarController extends BaseController { radar.setUpdateBy(getLoginName()); int result = radarService.updateUser(radar); -// RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar())); return toAjax(result); } @@ -107,7 +109,7 @@ public class SysRadarController extends BaseController { @ResponseBody public AjaxResult remove(String ids) { int result = radarService.deleteRadarByIds(ids); - RadarStatusController.delRadar(Long.valueOf(ids)); + radarRealTimeDataService.delRadar(Long.valueOf(ids)); return toAjax(result); } @@ -141,7 +143,7 @@ public class SysRadarController extends BaseController { ExcelUtil util = new ExcelUtil(RadarExcel.class); List radarList = util.importExcel(file.getInputStream()); String message = radarService.importData(radarList, updateSupport); -// RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar())); + radarRealTimeDataService.addRadar(radarService.selectRadarList(new SysRadar())); return AjaxResult.success(message); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/RadarRealTimeDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/RadarRealTimeDataService.java new file mode 100644 index 0000000..f7bce02 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/RadarRealTimeDataService.java @@ -0,0 +1,13 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.entity.SysRadar; + +import java.util.List; + +public interface RadarRealTimeDataService { + + void addRadar(List radarList); + + void delRadar(Long id); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RadarRealTimeDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RadarRealTimeDataServiceImpl.java new file mode 100644 index 0000000..d4f0b45 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RadarRealTimeDataServiceImpl.java @@ -0,0 +1,225 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.core.domain.entity.*; +import com.ruoyi.common.utils.SocketModel; +import com.ruoyi.common.utils.SocketUtil; +import com.ruoyi.common.utils.bean.BeanUtils; +import com.ruoyi.common.utils.bean.ModbusResponse; +import com.ruoyi.system.service.ISysIdentifierService; +import com.ruoyi.system.service.ISysRadarService; +import com.ruoyi.system.service.PrimaryRadarDataService; +import com.ruoyi.system.service.RadarRealTimeDataService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.net.Socket; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.stream.Collectors; + +@Service +public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, InitializingBean { + + @Autowired + private PrimaryRadarDataService primaryRadarDataService; + + @Autowired + private ISysIdentifierService identifierService; + + @Autowired + private ISysRadarService service; + + public static CopyOnWriteArrayList allRadar = new CopyOnWriteArrayList<>(); + + public static Integer count = 0 ; + + private Integer consecutiveZeros = 0; + + private Map> pulse4Number = new HashMap<>(); + + private Map radarDelMap = new HashMap<>(); + + @Override + public void afterPropertiesSet() { + List radarList = service.selectRadarList(new SysRadar()); + + CompletableFuture.runAsync(() -> { + radarWebSocket(radarList); + }); + } + + private void radarWebSocket(List radarList) { + for (SysRadar radar : radarList) { + try { + Socket socket = new Socket(radar.getRadarIp(), 23); + allRadar.add(radar.getRadarIp()); + radarDelMap.put(radar.getId(), "0"); + + CompletableFuture.runAsync(() -> { + while (StringUtils.equals("0",radarDelMap.get(radar.getId()))) { +// long start = System.currentTimeMillis(); + task(radar, socket); + + System.out.println("雷达ip : =====" + radar.getRadarIp()); + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } +// System.out.println("耗时时间: " + (System.currentTimeMillis() - start) ); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + + private void task(SysRadar radar, Socket socket) { + + try { + long start = System.currentTimeMillis(); + List discernList = new ArrayList<>(); + + // socket连接成功返回数据 + DataResponse data = SocketUtil.getData(socket, radar.getRadarLocation(), radar.getRadarIp()); + // 天线号字符串转集合 + List numberList = convertStringToList(radar.getRadarNum()); + for (String number : numberList) { + if (!pulse4Number.containsKey(number)) { + pulse4Number.put(number, new ArrayList<>()); + } + List pulse4Values = pulse4Number.get(number); + if (data.getData().get(7) == 0){ + consecutiveZeros ++; + if (consecutiveZeros >= 10) { + // 10个0连续,说明该天线没有数据 从pulse4Number中删除该天线 + pulse4Number.remove(number); + // 从radarList中删除该天线 + + // 数据记录结束,计算最大pulse4值 + double maxPulse4 = pulse4Values.stream().mapToDouble(Integer::doubleValue).max().orElse(0); + System.out.println("天线 " + number + " 的最大pulse4值为: " + maxPulse4); + // 为下一次数据记录重置 + pulse4Values.clear(); + consecutiveZeros = 0; + } + }else { + count ++; + pulse4Values.add(data.getData().get(7)); + } + } + + SysDiscern sysDiscern = copyDataToDiscern(data); + + System.out.println(radar.getRadarIp() + ": " + data); + // 雷达数据返回封装类赋值 + ModbusResponse modbusResponse = getModbusResponse(data); + + + + String tag = modbusResponse.getTagId(); + // 雷达原始数据对象 + PrimaryRadarData primaryRadarData = new PrimaryRadarData(); + // 标识器对象 + SysIdentifier sysIdentifier = new SysIdentifier(); + // 拷贝封装类属性到雷达原始数据对象 + BeanUtils.copyProperties(modbusResponse, primaryRadarData); + + //判断读取数据中是否携带标签 + if (!"0".equals(modbusResponse.getTagId())) { + // 根据标签去数据库查询标签列表 + sysIdentifier = identifierService.selectIdentifierByTag(tag); + //判断数据库查询结果是否有数据 + if (sysIdentifier != null) { + // 有数据将查询到的标识器配置属性放进原始数据对象 + primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); + primaryRadarData.setRadarLocation(radar.getRadarLocation()); + primaryRadarData.setRadarIp(radar.getRadarIp()); + + if (modbusResponse.getValue4() != 0){ + // 给雷达识别报表赋值 + sysDiscern.setType(sysIdentifier.getType()); + sysDiscern.setRadarLocation(radar.getRadarLocation()); + sysDiscern.setLadleNumber(sysIdentifier.getLadleNumber()); + sysDiscern.setCreateTime(new Date()); + } + } + } else { + // 没有配置过将铁包号置空 + primaryRadarData.setLadleNumber(null); + primaryRadarData.setRadarLocation(null); + primaryRadarData.setRadarIp(radar.getRadarIp()); + } + if (modbusResponse.getValue4() != null && modbusResponse.getValue4() != 0) { +// primaryRadarDataService.insertPrimaryRadarData(primaryRadarData); + } else { + + } + System.out.println("耗时时间: " + (System.currentTimeMillis() - start) ); + } catch (Exception e) { + } + } + + @Override + public void addRadar(List radarList) { + List filterDataList = radarList.stream().filter(item -> !allRadar.contains(item.getRadarIp())).collect(Collectors.toList()); + radarWebSocket(filterDataList); + } + + @Override + public void delRadar(Long id) { + radarDelMap.put(id,"1"); + } + + + public static List convertStringToList(String input) { + List list = new ArrayList<>(); + if (input.contains(",")) { + String[] array = input.split(","); + list.addAll(Arrays.asList(array)); + } else { + list.add(input); + } + return list; + } + + /** + * 雷达识别报表赋值 + * + * @param data + * @return ModbusResponse + */ + private static SysDiscern copyDataToDiscern(DataResponse data) { + SysDiscern discern = new SysDiscern(); + discern.setTagId(data.getData().get(3).toString()); + discern.setValue4(data.getData().get(7)); + discern.setNumber(data.getData().get(11)); + return discern; + } + + /** + * 雷达数据返回封装类赋值 + * + * @param data + * @return ModbusResponse + */ + public static ModbusResponse getModbusResponse(DataResponse data) { + ModbusResponse modbusResponse = new ModbusResponse(); + modbusResponse.setRadarNum(data.getData().get(0).toString()); + modbusResponse.setTagId(data.getData().get(3).toString()); + modbusResponse.setValue1(data.getData().get(4)); + modbusResponse.setValue2(data.getData().get(5)); + modbusResponse.setValue3(data.getData().get(6)); + modbusResponse.setValue4(data.getData().get(7)); + modbusResponse.setValue5(data.getData().get(8)); + modbusResponse.setBaseLine(data.getData().get(9)); + modbusResponse.setQueryFre(data.getData().get(10)); + modbusResponse.setNumber(data.getData().get(11)); + return modbusResponse; + } +}