From 8fbf91f59c5c3d3941b76c25853a968a37ff7995 Mon Sep 17 00:00:00 2001 From: zouyiqing <854938661@qq.com> Date: Thu, 22 Feb 2024 18:11:34 +0800 Subject: [PATCH] =?UTF-8?q?win=E4=BB=A3=E7=A0=81=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/core/config/MyScheduledTask.java | 20 ++ .../impl/RadarRealTimeDataServiceImpl.java | 311 +++++++++++------- 2 files changed, 208 insertions(+), 123 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MyScheduledTask.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MyScheduledTask.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MyScheduledTask.java new file mode 100644 index 0000000..f1aa045 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MyScheduledTask.java @@ -0,0 +1,20 @@ +package com.ruoyi.web.core.config; + +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.scheduling.annotation.Schedules; +import org.springframework.stereotype.Component; + +import java.util.Date; + + +@Component +@EnableScheduling +public class MyScheduledTask { + + @Scheduled(cron = "0/10 * * * * ?") + public void runTask() { + // Your task logic here +// System.out.println("我被执行了!!!!!" + new Date().toString()); + } +} 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 index c72137d..d94b0e0 100644 --- 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 @@ -102,9 +102,12 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I } private void task(SysRadar radar, Socket socket, Map identifierHashMap) { - long noDataStart = System.currentTimeMillis(); - int consecutiveZeros = 0; - int readCount = 1; + long noDataStart1 = System.currentTimeMillis(); + long noDataStart2 = System.currentTimeMillis(); + int consecutiveZeros1 = 0; + int consecutiveZeros2 = 0; + int readCount1 = 1; + int readCount2 = 1; Map> map = new HashMap<>(); @@ -115,82 +118,100 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I // socket连接成功返回数据 DataResponse data = SocketUtil.getData(socket, radar.getRadarLocation(), radar.getRadarIp(), radar.getRadarId()); - if (readCount == 2) { - timeMap.put("noDataStart", System.currentTimeMillis()); + + if (readCount1 == 2 && CollectionUtils.isNotEmpty(data.getData()) && data.getData().get(11) == 1) { + timeMap.put("noDataStart1", System.currentTimeMillis()); } - if (consecutiveZeros == 0) { - timeMap.put("zero", System.currentTimeMillis()); + if (readCount2 == 2 && CollectionUtils.isNotEmpty(data.getData()) && data.getData().get(11) == 2) { + timeMap.put("noDataStart2", System.currentTimeMillis()); + } + + + if (consecutiveZeros1 == 0) { + timeMap.put("zero1", System.currentTimeMillis()); + timeMap.put("zero2", System.currentTimeMillis()); } // 没数据返回data.data == null long current = System.currentTimeMillis(); if (Objects.isNull(data.getData())) { current = System.currentTimeMillis(); // 连续2秒没读到数据,结束 - if (current - noDataStart >= 2000) { + if (current - noDataStart1 >= 2000) { // todo:存数据 - if (CollectionUtils.isNotEmpty(map.get(getMapKey(radar,data.getData().get(11))))) { - if (readCount > 1) { - saveData(radar, map, readCount, timeMap.get("noDataStart"), current , data.getData().get(11)); - timeMap.put("noDataStart", System.currentTimeMillis()); - readCount = 1; + if (CollectionUtils.isNotEmpty(map.get(getMapKey(radar, 1)))) { + if (readCount1 > 1) { + saveData(radar, map, readCount1, timeMap.get("noDataStart1"), current, 1); + timeMap.put("noDataStart1", System.currentTimeMillis()); + readCount1 = 1; } + map.remove(getMapKey(radar, 1)); } - map.remove(getMapKey(radar,data.getData().get(11))); - noDataStart = current; + noDataStart1 = current; + } + if (current - noDataStart2 >= 2000) { + if (CollectionUtils.isNotEmpty(map.get(getMapKey(radar, 2)))) { + if (readCount2 > 1) { + saveData(radar, map, readCount2, timeMap.get("noDataStart2"), current, 2); + timeMap.put("noDataStart2", System.currentTimeMillis()); + readCount2 = 1; + } + map.remove(getMapKey(radar, 2)); + } + noDataStart2 = current; } - continue; } + + ModbusResponse modbusResponse = getModbusResponse(data); // SysRadar sysRadar = service.selectRadarByRadarId(radar.getRadarId(), radar.getRadarIp()); // if (sysRadar != null) { // 雷达数据返回封装类赋值 - ModbusResponse modbusResponse = getModbusResponse(data); - String tag = modbusResponse.getTagId(); - timeMap.put("start", data.getTime()); - // 雷达原始数据对象 - PrimaryRadarData primaryRadarData = new PrimaryRadarData(); - // 拷贝封装类属性到雷达原始数据对象 - BeanUtils.copyProperties(modbusResponse, primaryRadarData); - primaryRadarData.setRadarIp(radar.getRadarIp()); - primaryRadarData.setStationCode(radar.getStationCode()); + if (modbusResponse != null) { + String tag = modbusResponse.getTagId(); + timeMap.put("start", data.getTime()); + // 雷达原始数据对象 + PrimaryRadarData primaryRadarData = new PrimaryRadarData(); + // 拷贝封装类属性到雷达原始数据对象 + BeanUtils.copyProperties(modbusResponse, primaryRadarData); + primaryRadarData.setRadarIp(radar.getRadarIp()); + primaryRadarData.setStationCode(radar.getStationCode()); - primaryRadarData.setRadarId(data.getData().get(0)); - primaryRadarData.setRadarLocation(radar.getRadarLocation()); - List dataList = map.get(getMapKey(radar, modbusResponse.getNumber())); - //判断读取数据中是否携带标签 - if (!"0".equals(modbusResponse.getTagId())) { - consecutiveZeros = 0; + primaryRadarData.setRadarId(data.getData().get(0)); + primaryRadarData.setRadarLocation(radar.getRadarLocation()); + List dataList = map.get(getMapKey(radar, modbusResponse.getNumber())); // 根据标签去数据库查询标签列表 SysIdentifier sysIdentifier = identifierHashMap.get(tag); - //判断数据库查询结果是否有数据 + if (modbusResponse != null && modbusResponse.getNumber() == 1) { - if (sysIdentifier != null) { - // 有数据将查询到的标识器配置属性放进原始数据对象 - primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); - primaryRadarData.setRadarIp(radar.getRadarIp()); - primaryRadarData.setType(sysIdentifier.getType().toString()); - if (CollectionUtils.isEmpty(dataList)) { - dataList = new ArrayList<>(); - dataList.add(primaryRadarData); - map.put(getMapKey(radar,modbusResponse.getNumber()), dataList); - } -// if (StringUtils.equals(modbusResponse.getTagId(), dataList.get(dataList.size() - 1).getTagId()) && Objects.equals(primaryRadarData.getRadarId(), dataList.get(dataList.size() - 1).getRadarId()) && Objects.equals(primaryRadarData.getRadarIp(), dataList.get(dataList.size() - 1).getRadarIp())) { -// if (current - start >= 20000) { -// // todo:存数据 -// -// System.out.println("连续二十秒秒没收到数据:开始存储........" + "开始时间为:" + start + "结束时间为:" + current); -// if (readCount > 100) { -// saveData(radar, map, readCount, start, current); -// readCount = 1; -// } -// start = System.currentTimeMillis(); -// } -// dataList.clear(); -// dataList.add(primaryRadarData); -// } - if (modbusResponse.getNumber() == 1) { + //判断数据库查询结果是否有数据 + if (sysIdentifier != null) { + // 有数据将查询到的标识器配置属性放进原始数据对象 + primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); + primaryRadarData.setRadarIp(radar.getRadarIp()); + primaryRadarData.setType(sysIdentifier.getType().toString()); + if (CollectionUtils.isEmpty(dataList)) { + dataList = new ArrayList<>(); + dataList.add(primaryRadarData); + if (data.getData().get(11) == 1) { + map.put(getMapKey(radar, modbusResponse.getNumber()), dataList); + } + if (data.getData().get(11) == 2) { + map.put(getMapKey(radar, modbusResponse.getNumber()), dataList); + } + } + if (!Objects.equals(data.getData().get(0), dataList.get(dataList.size() - 1).getRadarId())) { + long end = System.currentTimeMillis(); + Long dataStart = timeMap.get("noDataStart1"); + + System.out.println("突然读到另一个雷达id: " + "开始存储........" + "开始时间为:" + dataStart + "结束时间为:" + end); + saveData(radar, map, readCount1, data.getTime(), end, modbusResponse.getNumber()); + dataList.clear(); + timeMap.put("noDataStart1", System.currentTimeMillis()); + map.remove(getMapKey(radar, modbusResponse.getNumber())); + dataList.add(primaryRadarData); + readCount1 = 1; + } if (!StringUtils.equals(modbusResponse.getTagId(), dataList.get(dataList.size() - 1).getTagId()) - && !StringUtils.equals("0", dataList.get(dataList.size() - 1).getTagId()) - && Objects.equals(primaryRadarData.getRadarId(), dataList.get(dataList.size() - 1).getRadarId()) - && Objects.equals(primaryRadarData.getRadarIp(), dataList.get(dataList.size() - 1).getRadarIp())) { + && Objects.equals(primaryRadarData.getRadarIp(), dataList.get(dataList.size() - 1).getRadarIp()) + && modbusResponse.getNumber() == 1) { // todo:存数据 long currentTimeMillis = System.currentTimeMillis(); System.out.println("突然读到另一个标签:开始存储........" @@ -198,19 +219,66 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I + "此次雷达ip为:====" + primaryRadarData.getRadarIp() + "上次雷达ip为 =====" + dataList.get(dataList.size() - 1).getRadarIp() + "此次雷达标签号为:====" + modbusResponse.getTagId() + "此次雷达标签号为:====" + dataList.get(dataList.size() - 1).getTagId() + data.getTime() + "结束时间为:" + currentTimeMillis); - saveData(radar, map, readCount, timeMap.get("noDataStart"), currentTimeMillis, modbusResponse.getNumber()); + saveData(radar, map, readCount1, timeMap.get("noDataStart1"), currentTimeMillis, modbusResponse.getNumber()); dataList.clear(); - timeMap.put("noDataStart", System.currentTimeMillis()); - map.remove(getMapKey(radar,modbusResponse.getNumber())); + timeMap.put("noDataStart1", System.currentTimeMillis()); + map.remove(getMapKey(radar, 1)); dataList.add(primaryRadarData); - readCount = 1; + readCount1 = 1; + } + readCount1++; + } else { + //TODO + //连续100次读取标签号为0 + consecutiveZeros1++; + + if (20 <= consecutiveZeros1) { + // todo:存数据 + // 没有配置过将铁包号置空 + primaryRadarData.setLadleNumber(null); + primaryRadarData.setRadarIp(radar.getRadarIp()); + + // System.out.println("连续10次读取标签号为0:开始存储........" + radar + map + readCount + "开始时间为:" + timeMap.get("zero") + "结束时间为:" + noDataStart); + saveData(radar, map, readCount1, timeMap.get("zero1"), noDataStart1, modbusResponse.getNumber()); + readCount1 = 1; + map.remove(getMapKey(radar, modbusResponse.getNumber())); + timeMap.put("noDataStart1", System.currentTimeMillis()); + consecutiveZeros1 = 0; + if (CollectionUtils.isNotEmpty(dataList)) { + dataList.clear(); + } + } } - if (modbusResponse.getNumber() == 2){ + noDataStart1 = current; + } + + if (modbusResponse != null && modbusResponse.getNumber() == 2) { + if (sysIdentifier != null) { + // 有数据将查询到的标识器配置属性放进原始数据对象 + primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); + primaryRadarData.setRadarIp(radar.getRadarIp()); + primaryRadarData.setType(sysIdentifier.getType().toString()); + if (CollectionUtils.isEmpty(dataList)) { + dataList = new ArrayList<>(); + dataList.add(primaryRadarData); + map.put(getMapKey(radar, modbusResponse.getNumber()), dataList); + } + if (!Objects.equals(data.getData().get(0), dataList.get(dataList.size() - 1).getRadarId())) { + long end = System.currentTimeMillis(); + Long dataStart = timeMap.get("noDataStart2"); + + System.out.println("突然读到另一个雷达id: " + "开始存储........" + "开始时间为:" + dataStart + "结束时间为:" + end); + saveData(radar, map, readCount2, data.getTime(), end, modbusResponse.getNumber()); + dataList.clear(); + timeMap.put("noDataStart2", System.currentTimeMillis()); + map.remove(getMapKey(radar, modbusResponse.getNumber())); + dataList.add(primaryRadarData); + readCount2 = 1; + } if (!StringUtils.equals(modbusResponse.getTagId(), dataList.get(dataList.size() - 1).getTagId()) - && !StringUtils.equals("0", dataList.get(dataList.size() - 1).getTagId()) - && Objects.equals(primaryRadarData.getRadarId(), dataList.get(dataList.size() - 1).getRadarId()) - && Objects.equals(primaryRadarData.getRadarIp(), dataList.get(dataList.size() - 1).getRadarIp())) { + && Objects.equals(primaryRadarData.getRadarIp(), dataList.get(dataList.size() - 1).getRadarIp()) + && modbusResponse.getNumber() == 2) { // todo:存数据 long currentTimeMillis = System.currentTimeMillis(); System.out.println("突然读到另一个标签:开始存储........" @@ -218,60 +286,55 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I + "此次雷达ip为:====" + primaryRadarData.getRadarIp() + "上次雷达ip为 =====" + dataList.get(dataList.size() - 1).getRadarIp() + "此次雷达标签号为:====" + modbusResponse.getTagId() + "此次雷达标签号为:====" + dataList.get(dataList.size() - 1).getTagId() + data.getTime() + "结束时间为:" + currentTimeMillis); - saveData(radar, map, readCount, timeMap.get("noDataStart"), currentTimeMillis , modbusResponse.getNumber()); + saveData(radar, map, readCount2, timeMap.get("noDataStart2"), currentTimeMillis, modbusResponse.getNumber()); dataList.clear(); - timeMap.put("noDataStart", System.currentTimeMillis()); - map.remove(getMapKey(radar,modbusResponse.getNumber())); + timeMap.put("noDataStart2", System.currentTimeMillis()); + map.remove(getMapKey(radar, 2)); dataList.add(primaryRadarData); - readCount = 1; + readCount2 = 1; + + } + + readCount2++; + } else { + //TODO + //连续100次读取标签号为0 + consecutiveZeros2++; + + if (20 <= consecutiveZeros2) { + // todo:存数据 + // 没有配置过将铁包号置空 + primaryRadarData.setLadleNumber(null); + primaryRadarData.setRadarIp(radar.getRadarIp()); + + // System.out.println("连续10次读取标签号为0:开始存储........" + radar + map + readCount + "开始时间为:" + timeMap.get("zero") + "结束时间为:" + noDataStart); + saveData(radar, map, readCount2, timeMap.get("zero2"), noDataStart2, modbusResponse.getNumber()); + readCount2 = 1; + map.remove(getMapKey(radar, modbusResponse.getNumber())); + timeMap.put("noDataStart2", System.currentTimeMillis()); + consecutiveZeros2 = 0; + if (CollectionUtils.isNotEmpty(dataList)) { + dataList.clear(); + } + } } - readCount++; - - if (!Objects.equals(data.getData().get(0), dataList.get(dataList.size() - 1).getRadarId())) { - long end = System.currentTimeMillis(); - Long dataStart = timeMap.get("noDataStart"); - - System.out.println("突然读到另一个雷达id: " + "开始存储........" + "开始时间为:" + dataStart + "结束时间为:" + end); - saveData(radar, map, readCount, data.getTime(), end , modbusResponse.getNumber()); - dataList.clear(); - timeMap.put("noDataStart", System.currentTimeMillis()); - map.remove(getMapKey(radar,modbusResponse.getNumber())); - dataList.add(primaryRadarData); - readCount = 1; - } + noDataStart2 = current; } - } else { - //连续10次读取标签号为0 - consecutiveZeros++; - if (100 == consecutiveZeros) { - // todo:存数据 - -// System.out.println("连续10次读取标签号为0:开始存储........" + radar + map + readCount + "开始时间为:" + timeMap.get("zero") + "结束时间为:" + noDataStart); - saveData(radar, map, readCount, timeMap.get("zero"), noDataStart , modbusResponse.getNumber()); - readCount = 1; - map.remove(getMapKey(radar,modbusResponse.getNumber())); - timeMap.put("noDataStart", System.currentTimeMillis()); - dataList.clear(); - consecutiveZeros = 0; - } - // 没有配置过将铁包号置空 - primaryRadarData.setLadleNumber(null); - primaryRadarData.setRadarIp(radar.getRadarIp()); - } - CompletableFuture.runAsync(() -> { + CompletableFuture.runAsync(() -> { primaryRadarDataService.insertPrimaryRadarData(primaryRadarData); - }, threadPoolTaskExecutor); - noDataStart = current; - } catch (Throwable e) { + }, threadPoolTaskExecutor); + + } + }catch (Throwable e) { e.printStackTrace(); } } } - private void saveData(SysRadar radar, Map> map, int count, long noStartTime, long endTime , Integer number) { + private void saveData(SysRadar radar, Map> map, int count, long noStartTime, long endTime, Integer number) { Date start = new Date(noStartTime); Date end = new Date(endTime); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -279,7 +342,7 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I String sqlEnd = sdf.format(end); try { - List primaryRadarDataList = map.get(getMapKey(radar,number)); + List primaryRadarDataList = map.get(getMapKey(radar, number)); if (CollectionUtils.isNotEmpty(primaryRadarDataList)) { PrimaryRadarData maxData = primaryRadarDataList.stream().max(Comparator.comparingInt(PrimaryRadarData::getValue4)).get(); @@ -312,7 +375,7 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I } - private String getMapKey(SysRadar radar,Integer number) { + private String getMapKey(SysRadar radar, Integer number) { return radar.getRadarIp() + "-" + number + "-" + radar.getId(); } @@ -349,17 +412,20 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I */ public 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; + if (CollectionUtils.isNotEmpty(data.getData())) { + 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; + } + return null; } @@ -412,7 +478,6 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I } - public static void main(String[] args) { LocalDate currentDate = LocalDate.now(); LocalDate twoDaysAgo = currentDate.minusDays(2);