From 3a69a89d340b914346c3e6e678f6f92e177e7a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AE=87=E8=88=AA?= <653809315@qq.com> Date: Sun, 28 Jan 2024 15:57:24 +0800 Subject: [PATCH] =?UTF-8?q?mac=E4=B8=8A=E4=BC=A0=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/RadarStatusController.java | 158 ++++++++++++++++-- .../controller/system/SysRadarController.java | 4 +- .../monitor/radarData/radarData.html | 4 +- .../identifierStatus/identifierStatus.html | 3 + .../com/ruoyi/common/utils/SocketModel.java | 2 + .../com/ruoyi/common/utils/SocketUtil.java | 5 +- 6 files changed, 158 insertions(+), 18 deletions(-) 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 cffc66a..49a2d4b 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 @@ -56,6 +56,11 @@ public class RadarStatusController implements InitializingBean { public static Integer count = 0 ; + private Integer consecutiveZeros = 0; + + private Map> pulse4Number = new HashMap<>(); + + private String prefix = "system/radarstatus"; /** @@ -156,22 +161,113 @@ public class RadarStatusController implements InitializingBean { }); } - public static void buildAllRadar(List radarList) { + public void buildAllRadar(List radarList) { for (SysRadar radar : radarList) { try { Socket socket = new Socket(radar.getRadarIp(), 23); - SocketModel socketModel = new SocketModel(); - socketModel.setId(radar.getId()); - socketModel.setRadarLocation(radar.getRadarLocation()); - socketModel.setSocket(socket); - socketModel.setRadarIp(radar.getRadarIp()); - allRadar.add(socketModel); + + TimerTask timerTask = new TimerTask() { + + @Override + public void run() { + while (true) { + task(radar, socket); + } + } + + }; +// timer.schedule(timerTask,0); + timerTask.run(); } catch (Exception e) { + e.printStackTrace(); } } } + private void task(SysRadar radar, Socket socket) { + try { + 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 { + + } + + } 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()); @@ -189,11 +285,42 @@ public class RadarStatusController implements InitializingBean { 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(); @@ -219,9 +346,7 @@ public class RadarStatusController implements InitializingBean { sysDiscern.setRadarLocation(socketModel.getRadarLocation()); sysDiscern.setLadleNumber(sysIdentifier.getLadleNumber()); sysDiscern.setCreateTime(new Date()); - } - } } else { // 没有配置过将铁包号置空 @@ -263,7 +388,7 @@ public class RadarStatusController implements InitializingBean { * @param data * @return ModbusResponse */ - private static ModbusResponse getModbusResponse(DataResponse data) { + public static ModbusResponse getModbusResponse(DataResponse data) { ModbusResponse modbusResponse = new ModbusResponse(); modbusResponse.setRadarNum(data.getData().get(0).toString()); modbusResponse.setTagId(data.getData().get(3).toString()); @@ -286,6 +411,19 @@ public class RadarStatusController implements InitializingBean { } + 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 e450475..9e8fcbb 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 @@ -99,7 +99,7 @@ public class SysRadarController extends BaseController { radar.setUpdateBy(getLoginName()); int result = radarService.updateUser(radar); - RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar())); +// RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar())); return toAjax(result); } @@ -141,7 +141,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())); +// RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar())); return AjaxResult.success(message); } diff --git a/ruoyi-admin/src/main/resources/templates/monitor/radarData/radarData.html b/ruoyi-admin/src/main/resources/templates/monitor/radarData/radarData.html index 3793c61..f3c49c2 100644 --- a/ruoyi-admin/src/main/resources/templates/monitor/radarData/radarData.html +++ b/ruoyi-admin/src/main/resources/templates/monitor/radarData/radarData.html @@ -12,9 +12,9 @@
  • - + - - +
  • 雷达位置: diff --git a/ruoyi-admin/src/main/resources/templates/system/identifierStatus/identifierStatus.html b/ruoyi-admin/src/main/resources/templates/system/identifierStatus/identifierStatus.html index edb876d..3b3762a 100644 --- a/ruoyi-admin/src/main/resources/templates/system/identifierStatus/identifierStatus.html +++ b/ruoyi-admin/src/main/resources/templates/system/identifierStatus/identifierStatus.html @@ -20,6 +20,9 @@ +
    +
    +