diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index 8adc664..48abc0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -26,4 +26,9 @@ */ String KEY_CUR_TASK_ID = "CUR_TASK_ID_"; String KEY_CUR_TASK_INIT = "CUR_TASK_INIT_"; + + /** + * PSD数据ID + */ + String KEY_PSD_DATA_ID= "PSD_DATA_ID_"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index 8adc664..48abc0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -26,4 +26,9 @@ */ String KEY_CUR_TASK_ID = "CUR_TASK_ID_"; String KEY_CUR_TASK_INIT = "CUR_TASK_INIT_"; + + /** + * PSD数据ID + */ + String KEY_PSD_DATA_ID= "PSD_DATA_ID_"; } 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 ddaffde..d7c72ff 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,10 +1,13 @@ package com.casic.missiles.modular.neutron.service.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.common.WebSocket; +import com.casic.missiles.core.cache.CacheUtil; +import com.casic.missiles.modular.constants.RobotDictConstants; import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; -import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -14,8 +17,6 @@ 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 com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -23,6 +24,7 @@ import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; @@ -73,7 +75,7 @@ headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); - jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6())/10000))); + jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6()) / 10000))); jsonObject.put("time", vol.getCreateTime()); headerJson.put("data", jsonObject); webSocket.sendAllMessage(headerJson.toJSONString()); @@ -89,6 +91,7 @@ psd.setIpPort(deviceIpPort.substring(1)); if (ObjectUtil.isAllNotEmpty(psd.getBaseLine(), psd.getLongGate(), psd.getQlong(), psd.getShortGate(), psd.getQshort())) { + //解析数据 Long Qlong = Math.abs(Long.valueOf(psd.getQlong(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getLongGate(), 16)); Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; @@ -99,6 +102,8 @@ int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); psd.setPsdx(psdx + ""); psd.setMcax(mcax + ""); + //存缓存 + CacheUtils.PSD_DATA_MAP.put(uid+"_"+psd.getCreateTime(),psd.getPsd()); //根据是否启动,向前端推送hs曲线数值 if (hsFlag) { HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); @@ -128,6 +133,7 @@ webSocket.sendAllMessage(headJson.toJSONString()); log.info("推送HS数据" + headJson.toJSONString()); } + } }); iPsdService.saveBatch(psdList); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index 8adc664..48abc0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -26,4 +26,9 @@ */ String KEY_CUR_TASK_ID = "CUR_TASK_ID_"; String KEY_CUR_TASK_INIT = "CUR_TASK_INIT_"; + + /** + * PSD数据ID + */ + String KEY_PSD_DATA_ID= "PSD_DATA_ID_"; } 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 ddaffde..d7c72ff 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,10 +1,13 @@ package com.casic.missiles.modular.neutron.service.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.common.WebSocket; +import com.casic.missiles.core.cache.CacheUtil; +import com.casic.missiles.modular.constants.RobotDictConstants; import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; -import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -14,8 +17,6 @@ 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 com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -23,6 +24,7 @@ import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; @@ -73,7 +75,7 @@ headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); - jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6())/10000))); + jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6()) / 10000))); jsonObject.put("time", vol.getCreateTime()); headerJson.put("data", jsonObject); webSocket.sendAllMessage(headerJson.toJSONString()); @@ -89,6 +91,7 @@ psd.setIpPort(deviceIpPort.substring(1)); if (ObjectUtil.isAllNotEmpty(psd.getBaseLine(), psd.getLongGate(), psd.getQlong(), psd.getShortGate(), psd.getQshort())) { + //解析数据 Long Qlong = Math.abs(Long.valueOf(psd.getQlong(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getLongGate(), 16)); Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; @@ -99,6 +102,8 @@ int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); psd.setPsdx(psdx + ""); psd.setMcax(mcax + ""); + //存缓存 + CacheUtils.PSD_DATA_MAP.put(uid+"_"+psd.getCreateTime(),psd.getPsd()); //根据是否启动,向前端推送hs曲线数值 if (hsFlag) { HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); @@ -128,6 +133,7 @@ webSocket.sendAllMessage(headJson.toJSONString()); log.info("推送HS数据" + headJson.toJSONString()); } + } }); iPsdService.saveBatch(psdList); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java index 79193f9..97ea444 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java @@ -18,13 +18,12 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import com.casic.missiles.netty.CacheUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** *

@@ -128,24 +127,40 @@ List taskInfoList = iTaskInfoService.getTaskListByStatus(0, 1, 1); List alarmRecordList = new ArrayList<>(); + long currentTimes = System.currentTimeMillis(); for (TaskInfo taskInfo : taskInfoList) { if (iAlarmRecordService.getAlarmByTask(taskInfo.getId())) continue; String startTime = ObjectUtil.isNotEmpty(taskInfo.getStartTime()) ? DateUtil.formatDateTime(taskInfo.getStartTime()) : taskInfo.getStartTime() + ""; Long robotId = taskInfo.getRobotId(); - //查询满足13个中子的时间 - List alarmTimeList = this.baseMapper.getPsdAlarm(startTime, robotId); - if (ObjectUtil.isNotEmpty(alarmTimeList) && alarmTimeList.size() >= 13) { - String alarmTime = alarmTimeList.get(12); + //查询满足每隔5秒平均值不小于13个中子的时间 +// List alarmTimeList = this.baseMapper.getPsdAlarm(startTime, robotId); + + long count = 0; + if (CacheUtils.PSD_DATA_MAP.size() > 0) { + Set keys = CacheUtils.PSD_DATA_MAP.keySet(); + if (null != keys) { + for (String keyStr : keys) { + String[] keyArr = keyStr.split("_"); + if (keyArr[0].equals(robotId.toString())) { + if (currentTimes - DateUtil.parseDateTime(keyArr[1]).getTime() <= 5000) { + count++; + } + } + } + } + } + if (count > 0) { + double psdVal= count*1.000/5; AlarmRecord alarmRecord = new AlarmRecord(robotId, - new BigDecimal(13), - DateUtil.parseDateTime(alarmTime), + new BigDecimal(psdVal), + new Date(), taskInfo.getId()); //用这个时间取查询最近的巡检点位 - RobotTrajectoryInfo trajectoryInfo = trajectoryInfoService.getRobotTrajectoryInfoByTime(alarmTime, robotId); - if (ObjectUtil.isNotEmpty(trajectoryInfo)) { - alarmRecord.setX(trajectoryInfo.getPostionX()); - alarmRecord.setY(trajectoryInfo.getPostionY()); - } +// RobotTrajectoryInfo trajectoryInfo = trajectoryInfoService.getRobotTrajectoryInfoByTime(alarmTime, robotId); +// if (ObjectUtil.isNotEmpty(trajectoryInfo)) { +// alarmRecord.setX(trajectoryInfo.getPostionX()); +// alarmRecord.setY(trajectoryInfo.getPostionY()); +// } alarmRecordList.add(alarmRecord); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index 8adc664..48abc0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -26,4 +26,9 @@ */ String KEY_CUR_TASK_ID = "CUR_TASK_ID_"; String KEY_CUR_TASK_INIT = "CUR_TASK_INIT_"; + + /** + * PSD数据ID + */ + String KEY_PSD_DATA_ID= "PSD_DATA_ID_"; } 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 ddaffde..d7c72ff 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,10 +1,13 @@ package com.casic.missiles.modular.neutron.service.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.common.WebSocket; +import com.casic.missiles.core.cache.CacheUtil; +import com.casic.missiles.modular.constants.RobotDictConstants; import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; -import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -14,8 +17,6 @@ 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 com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -23,6 +24,7 @@ import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; @@ -73,7 +75,7 @@ headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); - jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6())/10000))); + jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6()) / 10000))); jsonObject.put("time", vol.getCreateTime()); headerJson.put("data", jsonObject); webSocket.sendAllMessage(headerJson.toJSONString()); @@ -89,6 +91,7 @@ psd.setIpPort(deviceIpPort.substring(1)); if (ObjectUtil.isAllNotEmpty(psd.getBaseLine(), psd.getLongGate(), psd.getQlong(), psd.getShortGate(), psd.getQshort())) { + //解析数据 Long Qlong = Math.abs(Long.valueOf(psd.getQlong(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getLongGate(), 16)); Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; @@ -99,6 +102,8 @@ int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); psd.setPsdx(psdx + ""); psd.setMcax(mcax + ""); + //存缓存 + CacheUtils.PSD_DATA_MAP.put(uid+"_"+psd.getCreateTime(),psd.getPsd()); //根据是否启动,向前端推送hs曲线数值 if (hsFlag) { HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); @@ -128,6 +133,7 @@ webSocket.sendAllMessage(headJson.toJSONString()); log.info("推送HS数据" + headJson.toJSONString()); } + } }); iPsdService.saveBatch(psdList); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java index 79193f9..97ea444 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java @@ -18,13 +18,12 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import com.casic.missiles.netty.CacheUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** *

@@ -128,24 +127,40 @@ List taskInfoList = iTaskInfoService.getTaskListByStatus(0, 1, 1); List alarmRecordList = new ArrayList<>(); + long currentTimes = System.currentTimeMillis(); for (TaskInfo taskInfo : taskInfoList) { if (iAlarmRecordService.getAlarmByTask(taskInfo.getId())) continue; String startTime = ObjectUtil.isNotEmpty(taskInfo.getStartTime()) ? DateUtil.formatDateTime(taskInfo.getStartTime()) : taskInfo.getStartTime() + ""; Long robotId = taskInfo.getRobotId(); - //查询满足13个中子的时间 - List alarmTimeList = this.baseMapper.getPsdAlarm(startTime, robotId); - if (ObjectUtil.isNotEmpty(alarmTimeList) && alarmTimeList.size() >= 13) { - String alarmTime = alarmTimeList.get(12); + //查询满足每隔5秒平均值不小于13个中子的时间 +// List alarmTimeList = this.baseMapper.getPsdAlarm(startTime, robotId); + + long count = 0; + if (CacheUtils.PSD_DATA_MAP.size() > 0) { + Set keys = CacheUtils.PSD_DATA_MAP.keySet(); + if (null != keys) { + for (String keyStr : keys) { + String[] keyArr = keyStr.split("_"); + if (keyArr[0].equals(robotId.toString())) { + if (currentTimes - DateUtil.parseDateTime(keyArr[1]).getTime() <= 5000) { + count++; + } + } + } + } + } + if (count > 0) { + double psdVal= count*1.000/5; AlarmRecord alarmRecord = new AlarmRecord(robotId, - new BigDecimal(13), - DateUtil.parseDateTime(alarmTime), + new BigDecimal(psdVal), + new Date(), taskInfo.getId()); //用这个时间取查询最近的巡检点位 - RobotTrajectoryInfo trajectoryInfo = trajectoryInfoService.getRobotTrajectoryInfoByTime(alarmTime, robotId); - if (ObjectUtil.isNotEmpty(trajectoryInfo)) { - alarmRecord.setX(trajectoryInfo.getPostionX()); - alarmRecord.setY(trajectoryInfo.getPostionY()); - } +// RobotTrajectoryInfo trajectoryInfo = trajectoryInfoService.getRobotTrajectoryInfoByTime(alarmTime, robotId); +// if (ObjectUtil.isNotEmpty(trajectoryInfo)) { +// alarmRecord.setX(trajectoryInfo.getPostionX()); +// alarmRecord.setY(trajectoryInfo.getPostionY()); +// } alarmRecordList.add(alarmRecord); } } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java index 397bdbf..503d242 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java @@ -46,6 +46,15 @@ .expirationPolicy(ExpirationPolicy.ACCESSED) .build(); + /** + * 缓存PSD解析后的数据 + */ + public static final ExpiringMap PSD_DATA_MAP = ExpiringMap.builder() + .maxSize(5000) + .expiration(1, TimeUnit.MINUTES) + .variableExpiration() + .expirationPolicy(ExpirationPolicy.ACCESSED) + .build(); public synchronized static String startVolMapCache() { String msgs = ""; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index 8adc664..48abc0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -26,4 +26,9 @@ */ String KEY_CUR_TASK_ID = "CUR_TASK_ID_"; String KEY_CUR_TASK_INIT = "CUR_TASK_INIT_"; + + /** + * PSD数据ID + */ + String KEY_PSD_DATA_ID= "PSD_DATA_ID_"; } 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 ddaffde..d7c72ff 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,10 +1,13 @@ package com.casic.missiles.modular.neutron.service.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.common.WebSocket; +import com.casic.missiles.core.cache.CacheUtil; +import com.casic.missiles.modular.constants.RobotDictConstants; import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; -import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -14,8 +17,6 @@ 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 com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -23,6 +24,7 @@ import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; @@ -73,7 +75,7 @@ headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); - jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6())/10000))); + jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6()) / 10000))); jsonObject.put("time", vol.getCreateTime()); headerJson.put("data", jsonObject); webSocket.sendAllMessage(headerJson.toJSONString()); @@ -89,6 +91,7 @@ psd.setIpPort(deviceIpPort.substring(1)); if (ObjectUtil.isAllNotEmpty(psd.getBaseLine(), psd.getLongGate(), psd.getQlong(), psd.getShortGate(), psd.getQshort())) { + //解析数据 Long Qlong = Math.abs(Long.valueOf(psd.getQlong(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getLongGate(), 16)); Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; @@ -99,6 +102,8 @@ int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); psd.setPsdx(psdx + ""); psd.setMcax(mcax + ""); + //存缓存 + CacheUtils.PSD_DATA_MAP.put(uid+"_"+psd.getCreateTime(),psd.getPsd()); //根据是否启动,向前端推送hs曲线数值 if (hsFlag) { HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); @@ -128,6 +133,7 @@ webSocket.sendAllMessage(headJson.toJSONString()); log.info("推送HS数据" + headJson.toJSONString()); } + } }); iPsdService.saveBatch(psdList); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java index 79193f9..97ea444 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java @@ -18,13 +18,12 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import com.casic.missiles.netty.CacheUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** *

@@ -128,24 +127,40 @@ List taskInfoList = iTaskInfoService.getTaskListByStatus(0, 1, 1); List alarmRecordList = new ArrayList<>(); + long currentTimes = System.currentTimeMillis(); for (TaskInfo taskInfo : taskInfoList) { if (iAlarmRecordService.getAlarmByTask(taskInfo.getId())) continue; String startTime = ObjectUtil.isNotEmpty(taskInfo.getStartTime()) ? DateUtil.formatDateTime(taskInfo.getStartTime()) : taskInfo.getStartTime() + ""; Long robotId = taskInfo.getRobotId(); - //查询满足13个中子的时间 - List alarmTimeList = this.baseMapper.getPsdAlarm(startTime, robotId); - if (ObjectUtil.isNotEmpty(alarmTimeList) && alarmTimeList.size() >= 13) { - String alarmTime = alarmTimeList.get(12); + //查询满足每隔5秒平均值不小于13个中子的时间 +// List alarmTimeList = this.baseMapper.getPsdAlarm(startTime, robotId); + + long count = 0; + if (CacheUtils.PSD_DATA_MAP.size() > 0) { + Set keys = CacheUtils.PSD_DATA_MAP.keySet(); + if (null != keys) { + for (String keyStr : keys) { + String[] keyArr = keyStr.split("_"); + if (keyArr[0].equals(robotId.toString())) { + if (currentTimes - DateUtil.parseDateTime(keyArr[1]).getTime() <= 5000) { + count++; + } + } + } + } + } + if (count > 0) { + double psdVal= count*1.000/5; AlarmRecord alarmRecord = new AlarmRecord(robotId, - new BigDecimal(13), - DateUtil.parseDateTime(alarmTime), + new BigDecimal(psdVal), + new Date(), taskInfo.getId()); //用这个时间取查询最近的巡检点位 - RobotTrajectoryInfo trajectoryInfo = trajectoryInfoService.getRobotTrajectoryInfoByTime(alarmTime, robotId); - if (ObjectUtil.isNotEmpty(trajectoryInfo)) { - alarmRecord.setX(trajectoryInfo.getPostionX()); - alarmRecord.setY(trajectoryInfo.getPostionY()); - } +// RobotTrajectoryInfo trajectoryInfo = trajectoryInfoService.getRobotTrajectoryInfoByTime(alarmTime, robotId); +// if (ObjectUtil.isNotEmpty(trajectoryInfo)) { +// alarmRecord.setX(trajectoryInfo.getPostionX()); +// alarmRecord.setY(trajectoryInfo.getPostionY()); +// } alarmRecordList.add(alarmRecord); } } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java index 397bdbf..503d242 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java @@ -46,6 +46,15 @@ .expirationPolicy(ExpirationPolicy.ACCESSED) .build(); + /** + * 缓存PSD解析后的数据 + */ + public static final ExpiringMap PSD_DATA_MAP = ExpiringMap.builder() + .maxSize(5000) + .expiration(1, TimeUnit.MINUTES) + .variableExpiration() + .expirationPolicy(ExpirationPolicy.ACCESSED) + .build(); public synchronized static String startVolMapCache() { String msgs = ""; 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 72aa867..e8c59b8 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 @@ -119,7 +119,7 @@ if (null != detectorInfoList && detectorInfoList.size() > 0) { detectorInfoList.forEach(detectorInfo -> { ForkJoinPool.commonPool().submit(() -> startClient(detectorInfo.getDetectorIp(), - detectorInfo.getDetectorPort(), detectorInfo.getId())); + detectorInfo.getDetectorPort(), detectorInfo.getRobotId())); }); } // ForkJoinPool.commonPool().submit(() -> startClient("192.168.1.50", 52002)); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java index 8adc664..48abc0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/constants/RobotDictConstants.java @@ -26,4 +26,9 @@ */ String KEY_CUR_TASK_ID = "CUR_TASK_ID_"; String KEY_CUR_TASK_INIT = "CUR_TASK_INIT_"; + + /** + * PSD数据ID + */ + String KEY_PSD_DATA_ID= "PSD_DATA_ID_"; } 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 ddaffde..d7c72ff 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,10 +1,13 @@ package com.casic.missiles.modular.neutron.service.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.common.WebSocket; +import com.casic.missiles.core.cache.CacheUtil; +import com.casic.missiles.modular.constants.RobotDictConstants; import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; -import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -14,8 +17,6 @@ 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 com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -23,6 +24,7 @@ import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; @@ -73,7 +75,7 @@ headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); - jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6())/10000))); + jsonObject.put("vol", String.format("%.3f", (Double.valueOf(vol.getVolData6()) / 10000))); jsonObject.put("time", vol.getCreateTime()); headerJson.put("data", jsonObject); webSocket.sendAllMessage(headerJson.toJSONString()); @@ -89,6 +91,7 @@ psd.setIpPort(deviceIpPort.substring(1)); if (ObjectUtil.isAllNotEmpty(psd.getBaseLine(), psd.getLongGate(), psd.getQlong(), psd.getShortGate(), psd.getQshort())) { + //解析数据 Long Qlong = Math.abs(Long.valueOf(psd.getQlong(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getLongGate(), 16)); Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; @@ -99,6 +102,8 @@ int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); psd.setPsdx(psdx + ""); psd.setMcax(mcax + ""); + //存缓存 + CacheUtils.PSD_DATA_MAP.put(uid+"_"+psd.getCreateTime(),psd.getPsd()); //根据是否启动,向前端推送hs曲线数值 if (hsFlag) { HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); @@ -128,6 +133,7 @@ webSocket.sendAllMessage(headJson.toJSONString()); log.info("推送HS数据" + headJson.toJSONString()); } + } }); iPsdService.saveBatch(psdList); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java index 79193f9..97ea444 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java @@ -18,13 +18,12 @@ import com.casic.missiles.modular.robot.service.IRobotInfoService; import com.casic.missiles.modular.robot.service.IRobotTrajectoryInfoService; import com.casic.missiles.modular.robot.service.ITaskInfoService; +import com.casic.missiles.netty.CacheUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** *

@@ -128,24 +127,40 @@ List taskInfoList = iTaskInfoService.getTaskListByStatus(0, 1, 1); List alarmRecordList = new ArrayList<>(); + long currentTimes = System.currentTimeMillis(); for (TaskInfo taskInfo : taskInfoList) { if (iAlarmRecordService.getAlarmByTask(taskInfo.getId())) continue; String startTime = ObjectUtil.isNotEmpty(taskInfo.getStartTime()) ? DateUtil.formatDateTime(taskInfo.getStartTime()) : taskInfo.getStartTime() + ""; Long robotId = taskInfo.getRobotId(); - //查询满足13个中子的时间 - List alarmTimeList = this.baseMapper.getPsdAlarm(startTime, robotId); - if (ObjectUtil.isNotEmpty(alarmTimeList) && alarmTimeList.size() >= 13) { - String alarmTime = alarmTimeList.get(12); + //查询满足每隔5秒平均值不小于13个中子的时间 +// List alarmTimeList = this.baseMapper.getPsdAlarm(startTime, robotId); + + long count = 0; + if (CacheUtils.PSD_DATA_MAP.size() > 0) { + Set keys = CacheUtils.PSD_DATA_MAP.keySet(); + if (null != keys) { + for (String keyStr : keys) { + String[] keyArr = keyStr.split("_"); + if (keyArr[0].equals(robotId.toString())) { + if (currentTimes - DateUtil.parseDateTime(keyArr[1]).getTime() <= 5000) { + count++; + } + } + } + } + } + if (count > 0) { + double psdVal= count*1.000/5; AlarmRecord alarmRecord = new AlarmRecord(robotId, - new BigDecimal(13), - DateUtil.parseDateTime(alarmTime), + new BigDecimal(psdVal), + new Date(), taskInfo.getId()); //用这个时间取查询最近的巡检点位 - RobotTrajectoryInfo trajectoryInfo = trajectoryInfoService.getRobotTrajectoryInfoByTime(alarmTime, robotId); - if (ObjectUtil.isNotEmpty(trajectoryInfo)) { - alarmRecord.setX(trajectoryInfo.getPostionX()); - alarmRecord.setY(trajectoryInfo.getPostionY()); - } +// RobotTrajectoryInfo trajectoryInfo = trajectoryInfoService.getRobotTrajectoryInfoByTime(alarmTime, robotId); +// if (ObjectUtil.isNotEmpty(trajectoryInfo)) { +// alarmRecord.setX(trajectoryInfo.getPostionX()); +// alarmRecord.setY(trajectoryInfo.getPostionY()); +// } alarmRecordList.add(alarmRecord); } } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java index 397bdbf..503d242 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java @@ -46,6 +46,15 @@ .expirationPolicy(ExpirationPolicy.ACCESSED) .build(); + /** + * 缓存PSD解析后的数据 + */ + public static final ExpiringMap PSD_DATA_MAP = ExpiringMap.builder() + .maxSize(5000) + .expiration(1, TimeUnit.MINUTES) + .variableExpiration() + .expirationPolicy(ExpirationPolicy.ACCESSED) + .build(); public synchronized static String startVolMapCache() { String msgs = ""; 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 72aa867..e8c59b8 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 @@ -119,7 +119,7 @@ if (null != detectorInfoList && detectorInfoList.size() > 0) { detectorInfoList.forEach(detectorInfo -> { ForkJoinPool.commonPool().submit(() -> startClient(detectorInfo.getDetectorIp(), - detectorInfo.getDetectorPort(), detectorInfo.getId())); + detectorInfo.getDetectorPort(), detectorInfo.getRobotId())); }); } // ForkJoinPool.commonPool().submit(() -> startClient("192.168.1.50", 52002)); diff --git a/casic-server/src/main/java/com/casic/missiles/quartz/QuartzConfig.java b/casic-server/src/main/java/com/casic/missiles/quartz/QuartzConfig.java index 67c11ac..7e3f12a 100644 --- a/casic-server/src/main/java/com/casic/missiles/quartz/QuartzConfig.java +++ b/casic-server/src/main/java/com/casic/missiles/quartz/QuartzConfig.java @@ -15,8 +15,8 @@ @Bean public Trigger alarmQuartzTrigger() { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() - //设置时间周期单位秒 每隔2分钟实行一次 - .withIntervalInMinutes(2) + //设置时间周期单位秒 每隔5秒实行一次 + .withIntervalInSeconds(5) .repeatForever(); return TriggerBuilder.newTrigger().forJob(alarmQuartzDetail()) .withIdentity("alarmQuartz")