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")