Commit 1e1e50e4 by huangjy

fix:状态判断逻辑变更

parent 49311086
...@@ -180,7 +180,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -180,7 +180,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
if (platDevice == null) { if (platDevice == null) {
return platElderRealTimeNowVO; return platElderRealTimeNowVO;
} }
long currentSecond = System.currentTimeMillis() / 1000;
boolean brNoPersonFlag = false; boolean brNoPersonFlag = false;
String brResult = redisTemplate.opsForValue().get(DEVICE_BR_DATA + platDevice.getOriDeviceId()); String brResult = redisTemplate.opsForValue().get(DEVICE_BR_DATA + platDevice.getOriDeviceId());
if (brResult != null) { if (brResult != null) {
...@@ -190,14 +190,13 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -190,14 +190,13 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
if (StringUtils.equals(person,"1")) { if (StringUtils.equals(person,"1")) {
// 判断是否在床睡觉 // 判断是否在床睡觉
Integer sleepTimeActionThreshold = getSleepTimeActionThreshold(); Integer sleepTimeActionThreshold = getSleepTimeActionThreshold();
Long sleepTimeActionDuration = getSleepTimeActionDuration(); Set<String> dataSet = redisTemplate.opsForZSet().rangeByScore(DEVICE_BR_ANALYSIS + platDevice.getOriDeviceId(), currentSecond - 30, currentSecond);
Set<String> dataSet = redisTemplate.opsForZSet().rangeByScore(DEVICE_BR_ANALYSIS + platDevice.getOriDeviceId(), 0, Integer.MAX_VALUE); if (CollectionUtils.isNotEmpty(dataSet)) {
if (CollectionUtils.isNotEmpty(dataSet) && sleepTimeActionDuration - dataSet.size() <= 2) {
boolean flag = dataSet.stream().allMatch(s -> { boolean flag = dataSet.stream().allMatch(s -> {
JSONObject result = JSON.parseObject(s); JSONObject result = JSON.parseObject(s);
JSONObject properties = (JSONObject)result.get("properties"); JSONObject properties = (JSONObject)result.get("properties");
Integer bodymove = Integer.valueOf(properties.getString("bodymove")); Integer bodymove = Integer.valueOf(properties.getString("bodymove"));
return bodymove.compareTo(sleepTimeActionThreshold) <= 0; return bodymove.compareTo(sleepTimeActionThreshold) <= 0 && Integer.parseInt(properties.getString("person")) == 1;
}); });
log.info("计算后睡眠集合大小:{}",dataSet.size()); log.info("计算后睡眠集合大小:{}",dataSet.size());
if (flag) { if (flag) {
...@@ -224,6 +223,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -224,6 +223,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
} }
} else { } else {
log.info("当前呼吸设备没有上报数据直接返回:" + platElderIdDTO.getElderId()); log.info("当前呼吸设备没有上报数据直接返回:" + platElderIdDTO.getElderId());
redisTemplate.delete(DEVICE_BR_ANALYSIS + platDevice.getOriDeviceId());
return platElderRealTimeNowVO; return platElderRealTimeNowVO;
} }
List<PlatDevice> spaceDeviceList = getSpaceDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId()); List<PlatDevice> spaceDeviceList = getSpaceDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
...@@ -233,28 +233,26 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -233,28 +233,26 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
boolean spaceNoPersonFlag = false; boolean spaceNoPersonFlag = false;
for (PlatDevice device : spaceDeviceList) { for (PlatDevice device : spaceDeviceList) {
// 无人 // 无人
Map<Object, Object> entries = redisTemplate.opsForHash().entries(DEVICE_SPACE_TEMP_DATA + device.getOriDeviceId()); Set<String> dataSet = redisTemplate.opsForZSet().rangeByScore(DEVICE_SPACE_TEMP_DATA + platDevice.getOriDeviceId(), currentSecond - 30, currentSecond);
if (entries.isEmpty()) { if (CollectionUtils.isEmpty(dataSet)) {
spaceNoPersonFlag = true; spaceNoPersonFlag = true;
continue; continue;
} }
Collection<Object> values = entries.values(); log.info("空间设备当前大小:{}",dataSet.size());
log.info("空间设备当前大小:{}",values.size()); List<PlatElderCoordinateVO> voList = dataSet.stream().map(entity -> {
if (values.size() < 10) {
continue;
}
if (values.size() > 11) {
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_SPACE_TEMP_DATA + "*")));
continue;
}
List<PlatElderCoordinateVO> voList = values.stream().map(entity -> {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO(); PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
JSONObject result = JSON.parseObject(entity.toString()); JSONObject result = JSON.parseObject(entity);
String distance = result.getString("distance"); JSONObject properties = (JSONObject)result.get("properties");
String angle = result.getString("angle"); String distance = properties.getString("distance");
String angle = properties.getString("angle");
vo.setX(Integer.parseInt(distance) * Math.cos(90 - Integer.parseInt(angle))); vo.setX(Integer.parseInt(distance) * Math.cos(90 - Integer.parseInt(angle)));
vo.setY(Integer.parseInt(distance) * Math.sin(90 - Integer.parseInt(angle))); vo.setY(Integer.parseInt(distance) * Math.sin(90 - Integer.parseInt(angle)));
vo.setPersonState(Integer.valueOf(result.getString("personState"))); int personState = Integer.parseInt(properties.getString("personState"));
vo.setPersonState(personState);
if (personState == 0) {
vo.setX(0.0);
vo.setY(0.0);
}
return vo; return vo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
...@@ -281,29 +279,27 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -281,29 +279,27 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
boolean fallNoPersonFlag = false; boolean fallNoPersonFlag = false;
for (PlatDevice device : fallDeviceList) { for (PlatDevice device : fallDeviceList) {
// 无人 // 无人
Map<Object, Object> entries = redisTemplate.opsForHash().entries(DEVICE_FALL_TEMP_DATA + device.getOriDeviceId()); Set<String> dataSet = redisTemplate.opsForZSet().rangeByScore(DEVICE_FALL_TEMP_DATA + platDevice.getOriDeviceId(), currentSecond - 30, currentSecond);
if (entries.isEmpty()) { if (CollectionUtils.isEmpty(dataSet)) {
fallNoPersonFlag = true; fallNoPersonFlag = true;
continue; continue;
} }
Collection<Object> values = entries.values(); log.info("跌倒设备当前大小:{}",dataSet.size());
if (values.size() < 10) { List<PlatElderCoordinateVO> voList = dataSet.stream().map(entity -> {
continue;
}
if (values.size() > 11) {
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_FALL_TEMP_DATA + "*")));
continue;
}
log.info("跌倒设备当前大小:{}",values.size());
List<PlatElderCoordinateVO> voList = values.stream().map(entity -> {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO(); PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
JSONObject result = JSON.parseObject(entity.toString()); JSONObject result = JSON.parseObject(entity);
Object track = result.get("track"); JSONObject properties = (JSONObject)result.get("properties");
Object track = properties.get("track");
List<Integer> list = track == null ? Lists.newArrayList() : (List<Integer>) track; List<Integer> list = track == null ? Lists.newArrayList() : (List<Integer>) track;
vo.setX(CollectionUtils.isNotEmpty(list) ? list.get(1).doubleValue() : null); vo.setX(CollectionUtils.isNotEmpty(list) ? list.get(1).doubleValue() : null);
vo.setY(CollectionUtils.isNotEmpty(list) ? list.get(2).doubleValue(): null); vo.setY(CollectionUtils.isNotEmpty(list) ? list.get(2).doubleValue(): null);
vo.setPersonState(Integer.valueOf(result.getString("personState"))); int personState = Integer.parseInt(properties.getString("personState"));
vo.setPerson(Integer.valueOf(result.getString("person"))); vo.setPersonState(personState);
if (personState == 0) {
vo.setX(0.0);
vo.setY(0.0);
}
vo.setPerson(Integer.valueOf(properties.getString("person")));
return vo; return vo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
...@@ -340,6 +336,9 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -340,6 +336,9 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
if (brNoPersonFlag && spaceNoPersonFlag && fallNoPersonFlag) { if (brNoPersonFlag && spaceNoPersonFlag && fallNoPersonFlag) {
log.info("所有设备都无人,判断为外出:" + platElderIdDTO.getElderId()); log.info("所有设备都无人,判断为外出:" + platElderIdDTO.getElderId());
platElderRealTimeNowVO.setStatus(PlatElderRealtimeReportEnum.NowStatus.OUT.getValue()); platElderRealTimeNowVO.setStatus(PlatElderRealtimeReportEnum.NowStatus.OUT.getValue());
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_BR_ANALYSIS + "*")));
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_SPACE_TEMP_DATA + "*")));
redisTemplate.delete(Objects.requireNonNull(redisTemplate.keys(DEVICE_FALL_TEMP_DATA + "*")));
return platElderRealTimeNowVO; return platElderRealTimeNowVO;
} }
......
...@@ -234,23 +234,14 @@ public class PushCallback implements MqttCallback { ...@@ -234,23 +234,14 @@ public class PushCallback implements MqttCallback {
private void cacheSpaceFallDeviceData(String deviceSpaceTempData, DeviceInfo device, long currentSecond) { private void cacheSpaceFallDeviceData(String deviceSpaceTempData, DeviceInfo device, long currentSecond) {
long maxSize = 10L; long maxSize = 10L;
String key = deviceSpaceTempData + device.getDeviceId(); String key = deviceSpaceTempData + device.getDeviceId();
Long size = redisTemplate.opsForHash().size(key); redisTemplate.opsForZSet().add(key,JSON.toJSONString(device),currentSecond);
redisTemplate.opsForHash().put(key, currentSecond,JSON.toJSONString(device.getProperties())); redisTemplate.expire(key,maxSize + 1,TimeUnit.MINUTES);
redisTemplate.expire(key,maxSize + 1,TimeUnit.SECONDS);
if (size == maxSize) {
redisTemplate.opsForHash().delete(key, currentSecond - maxSize);
}
} }
private void cacheBrDeviceData(DeviceInfo device, long currentSecond) { private void cacheBrDeviceData(DeviceInfo device, long currentSecond) {
// 缓存呼吸设备某段时间的数据,hash 最大长度 duration // 缓存呼吸设备某段时间的数据,hash 最大长度 duration
String key = DEVICE_BR_ANALYSIS + device.getDeviceId(); String key = DEVICE_BR_ANALYSIS + device.getDeviceId();
long duration = getSleepTimeActionDuration(); long duration = getSleepTimeActionDuration();
long size = redisTemplate.opsForZSet().zCard(key);
long differenceValue = currentSecond - duration;
if (size > duration) {
redisTemplate.opsForZSet().removeRangeByScore(key,differenceValue - 60,differenceValue - 1);
}
redisTemplate.opsForZSet().add(key,JSON.toJSONString(device),currentSecond); redisTemplate.opsForZSet().add(key,JSON.toJSONString(device),currentSecond);
redisTemplate.expire(key,duration + 3,TimeUnit.MINUTES); redisTemplate.expire(key,duration + 3,TimeUnit.MINUTES);
} }
......
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