Commit fc6176f2 by huangjy

fix: 实时监控状态

parent 54b0bd29
......@@ -10,7 +10,7 @@ public class StandardDeviationUtil {
* @param x
* @return 平均值
*/
public static double average(double[] x) {
public static double average(Double[] x) {
int n = x.length; //数列元素个数
double sum = 0;
for (double i : x) { //求和
......@@ -35,7 +35,7 @@ public class StandardDeviationUtil {
* @param x 要计算的数列
* @return 方差
*/
public static double variance(double[] x) {
public static double variance(Double[] x) {
int n = x.length; //数列元素个数
double avg = average(x); //求平均值
double var = 0;
......@@ -62,7 +62,7 @@ public class StandardDeviationUtil {
* @param x 要计算的数列
* @return 标准差
*/
public static double standardDeviation(double[] x) {
public static double standardDeviation(Double[] x) {
return Math.sqrt(variance(x));
}
......
......@@ -6,10 +6,11 @@ import com.makeit.utils.sys.SysDictUtil;
public class PlatElderRealtimeReportEnum {
public enum NowStatus implements BaseEnum {
OUT("elder.realtime.now.status.out"),
RUN("elder.realtime.now.status.run"),
REST("elder.realtime.now.status.rest"),
BED("elder.realtime.now.status.bed"),
SLEEP("elder.realtime.now.status.sleep");
RUN("elder.realtime.now.status.noBed.run"),
REST("elder.realtime.now.status.noBen.rest"),
BED("elder.realtime.now.status.bed.rest"),
SLEEP("elder.realtime.now.status.bed.sleep"),
SPORT("elder.realtime.now.status.bed.sport");
private String code;
......
......@@ -3,6 +3,7 @@ package com.makeit.vo.platform.elder.realtime;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
......@@ -31,5 +32,9 @@ public class PlatElderCoordinateVO {
@ApiModelProperty("跌倒设备轨迹")
private List<Integer> track;
@ApiModelProperty("x")
private BigDecimal x;
@ApiModelProperty("y")
private BigDecimal y;
}
......@@ -2,15 +2,19 @@ package com.makeit.mqtt;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.saas.analysis.SaasSleepAnalysisModel;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.iot.enums.DeviceState;
import com.makeit.module.iot.vo.DeviceInfo;
import com.makeit.module.iot.vo.HeaderInfo;
import com.makeit.service.platform.alarm.alarmStrategy.IAlarm;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.saas.SaasSleepAnalysisModelService;
import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.DeviceCacheUtil;
import org.apache.commons.collections4.CollectionUtils;
......@@ -39,6 +43,12 @@ public class PushCallback implements MqttCallback {
public static final String DEVICE_SPACE_DATA = "device:space:data:";
public static final String DEVICE_FALL_DATA = "device:fall:data:";
public static final String SLEEP_ANALYSIS_KEY = "saas:sleep:analysis";
public static final String DEVICE_BR_ANALYSIS = "device:brhr:analysis:";
public static final String DEVICE_SPACE_TEMP_DATA = "device:space:tempData:";
public static final String DEVICE_FALL_TEMP_DATA = "device:fall:tempData:";
public static final String REPORT_PROPERTY = "REPORT_PROPERTY";
@Autowired
private MqttConfig mqttConfig;
......@@ -56,6 +66,8 @@ public class PushCallback implements MqttCallback {
private PlatDeviceService platDeviceService;
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private SaasSleepAnalysisModelService saasSleepAnalysisModelService;
@Override
......@@ -97,16 +109,45 @@ public class PushCallback implements MqttCallback {
public void checkAlarm(DeviceInfo device) {
HeaderInfo headers = device.getHeaders();
List<HeaderInfo.Bind> bindings = headers.getBindings();
Long timestamp = device.getTimestamp();
// TODO 先这样判断
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("呼吸")) {
// 缓存呼吸设备某段时间的数据,hash 最大长度 duration
Long duration = getSleepTimeActionDuration();
Long size = redisTemplate.opsForHash().size(DEVICE_BR_ANALYSIS + device.getDeviceId());
if (size.equals(duration)) {
redisTemplate.opsForHash().delete(DEVICE_BR_ANALYSIS + device.getDeviceId(),timestamp - duration);
}
redisTemplate.opsForHash().put(DEVICE_BR_ANALYSIS + device.getDeviceId(), timestamp,JSON.toJSONString(device.getProperties()));
redisTemplate.expire(DEVICE_BR_ANALYSIS + device.getDeviceId(),duration,TimeUnit.MINUTES);
redisTemplate.opsForValue().set(DEVICE_BR_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
5000, TimeUnit.MILLISECONDS);
}
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("空间")) {
Long maxSize = 10L;
Long size = redisTemplate.opsForHash().size(DEVICE_SPACE_TEMP_DATA + device.getDeviceId());
if (size.equals(maxSize)) {
redisTemplate.opsForHash().delete(DEVICE_SPACE_TEMP_DATA + device.getDeviceId(),timestamp - maxSize);
}
redisTemplate.opsForHash().put(DEVICE_SPACE_TEMP_DATA + device.getDeviceId(), timestamp,JSON.toJSONString(device.getProperties()));
redisTemplate.expire(DEVICE_SPACE_TEMP_DATA + device.getDeviceId(),maxSize + 1,TimeUnit.SECONDS);
redisTemplate.opsForValue().set(DEVICE_SPACE_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
5000, TimeUnit.MILLISECONDS);
}
if (REPORT_PROPERTY.equals(device.getMessageType()) && headers.getProductName().contains("跌倒")) {
Long maxSize = 10L;
Long size = redisTemplate.opsForHash().size(DEVICE_FALL_TEMP_DATA + device.getDeviceId());
if (size.equals(maxSize)) {
redisTemplate.opsForHash().delete(DEVICE_FALL_TEMP_DATA + device.getDeviceId(),timestamp - maxSize);
}
redisTemplate.opsForHash().put(DEVICE_FALL_TEMP_DATA + device.getDeviceId(), timestamp,JSON.toJSONString(device.getProperties()));
redisTemplate.expire(DEVICE_FALL_TEMP_DATA + device.getDeviceId(),maxSize + 1,TimeUnit.SECONDS);
redisTemplate.opsForValue().set(DEVICE_FALL_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
5000, TimeUnit.MILLISECONDS);
}
......@@ -168,6 +209,20 @@ public class PushCallback implements MqttCallback {
}
private Long getSleepTimeActionDuration() {
String sleepTimeActionDuration = "";
String result = redisTemplate.opsForValue().get(SLEEP_ANALYSIS_KEY);
if (result != null) {
sleepTimeActionDuration = result;
} else {
SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda()
.orderByDesc(BaseEntity::getCreateBy)
.last("limit 1"));
redisTemplate.opsForValue().set(SLEEP_ANALYSIS_KEY,analysisModel.getSleepTimeActionDuration(),1,TimeUnit.DAYS);
sleepTimeActionDuration = analysisModel.getSleepTimeActionDuration();
}
return Long.parseLong(sleepTimeActionDuration) * 60;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment