Commit 0ac0edb0 by 李小龙

fix: 告警配置获取长者健康数据

parent 317702ea
......@@ -104,6 +104,8 @@ public class RedisConst {
public static final String LOCK_ALARM = "lock:alarm:device:id:";
public static final String ALARM_HEALTH_CONFIG_PREFIX = "alarm:config:device:id:";
......
......@@ -66,7 +66,7 @@ public class PlatDeviceController {
@AuthIgnore
@TenantIdIgnore
public ApiResponseEntity<Void> iotSyncTask(@RequestBody BaseIdDTO baseIdDTO) {
iotSyncTask.syncEquipmentInfo();
iotSyncTask.savePlatDevice();
return ApiResponseUtils.success();
}
......
package com.makeit.dto.platform.alarm;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
@Data
public class PlatHealthConfigDTO {
private String platElderId;
private Integer heartRateStart;
private Integer heartRateEnd;
private Integer heartDuration;
private String heartRateStr;
private Integer breathRateStart;
private Integer breathRateEnd;
private Integer breathDuration;
private String breathRateStr;
private boolean heartConfig = false;
private boolean breathConfig = false;
public boolean checkAndFillHeartConfig(){
if(StringUtils.isBlank(heartRateStr)){
return false;
}
if (heartDuration == null ||heartDuration == 0){
return false;
}
String[] split = heartRateStr.split("-");
if(split.length==2){
heartRateStart=Integer.valueOf(split[0]);
heartRateEnd=Integer.valueOf(split[1]);
}else {
return false;
}
heartConfig = true;
return true;
}
public boolean checkAndFillBreathConfig(){
if(StringUtils.isBlank(breathRateStr)){
return false;
}
if (breathDuration == null ||breathDuration == 0){
return false;
}
String[] split = breathRateStr.split("-");
if(split.length==2){
breathRateStart=Integer.valueOf(split[0]);
breathRateEnd=Integer.valueOf(split[1]);
}else {
return false;
}
breathConfig = true;
return true;
}
public PlatAlarmConfigHeartDTOVO getAlarmConfigHeartDTO(){
if(heartConfig){
PlatAlarmConfigHeartDTOVO dto = new PlatAlarmConfigHeartDTOVO();
dto.setHeartRateStart(heartRateStart);
dto.setHeartRateeEnd(heartRateEnd);
dto.setDuration(heartDuration);
return dto;
}
return null;
}
public PlatAlarmConfigRespiratoryDTOVO getAlarmConfigRespiratoryDTOVO(){
if(breathConfig){
PlatAlarmConfigRespiratoryDTOVO dto = new PlatAlarmConfigRespiratoryDTOVO();
dto.setRespiratoryRateStart(breathRateStart);
dto.setRespiratoryRateEnd(breathRateEnd);
dto.setDuration(breathDuration);
return dto;
}
return null;
}
}
package com.makeit.mapper.platform.alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.dto.platform.alarm.PlatHealthConfigDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import java.util.List;
/**
* <p>
* 告警配置 Mapper 接口
......@@ -13,4 +16,9 @@ import com.makeit.entity.platform.alarm.PlatAlarmConfig;
*/
public interface PlatAlarmConfigMapper extends BaseMapper<PlatAlarmConfig> {
/**
* 设备id 老人id 配置
* @return
*/
List<PlatHealthConfigDTO> getHealthConfigList();
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.StatusDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigDTOVO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigQueryDTO;
import com.makeit.dto.platform.alarm.PlatHealthConfigDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.vo.platform.alarm.PlatAlarmConfigListVO;
......@@ -38,4 +39,6 @@ public interface PlatAlarmConfigService extends IService<PlatAlarmConfig> {
void copyForOrg(PlatOrg org);
List<PlatHealthConfigDTO> getHealthConfigList();
}
......@@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSONObject;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigRespiratoryDTOVO;
import com.makeit.dto.platform.alarm.PlatHealthConfigDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice;
......@@ -13,6 +14,7 @@ import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.AlarmRedisDTO;
import com.makeit.utils.PersonalConfigCacheUtil;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import lombok.extern.slf4j.Slf4j;
......@@ -33,6 +35,9 @@ public class BreathAlarm implements IAlarm {
private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE;
@Autowired
private PersonalConfigCacheUtil personalConfigCacheUtil;
@Override
public boolean support(String alarmType) {
return StringUtils.equals(alarmType, alarmTypeEnum.getValue());
......@@ -50,23 +55,41 @@ public class BreathAlarm implements IAlarm {
@Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
//todo 获取老人健康的阈值
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
if(CollectionUtils.isEmpty(platElderList)){
log.error("呼吸设备未关联长者,设备plat_id:" + platAlarmCheckDTO.getPlatDevice().getId());
return;
}
PlatElder platElder = platElderList.get(0);
PlatHealthConfigDTO platHealthConfigDTO = personalConfigCacheUtil.get(platElder.getId());
PlatAlarmConfigRespiratoryDTOVO ruleConfig;
if(platHealthConfigDTO != null && platHealthConfigDTO.isBreathConfig()){
ruleConfig = platHealthConfigDTO.getAlarmConfigRespiratoryDTOVO();
}else {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
if (StringUtils.isBlank(ruleConfigStr)) {
log.error("呼吸告警配置未配置,告警配置id:" + config.getId());
return;
}
ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigRespiratoryDTOVO.class);
}
Integer start = ruleConfig.getRespiratoryRateStart();
Integer end = ruleConfig.getRespiratoryRateEnd();
Integer duration = ruleConfig.getDuration();
JSONObject properties = platAlarmCheckDTO.getProperties();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getOriDeviceId();
if (StringUtils.isBlank(ruleConfigStr)) {
log.error("呼吸告警配置未配置,告警配置id:" + config.getId());
return;
}
String personState = Convert.toStr(properties.get("personState"));
//呼吸率
int br = (int) properties.get("br");
PlatAlarmConfigRespiratoryDTOVO ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigRespiratoryDTOVO.class);
Integer start = ruleConfig.getRespiratoryRateStart();
Integer end = ruleConfig.getRespiratoryRateEnd();
Integer duration = ruleConfig.getDuration();
Date now = new Date();
long endLong = now.getTime();
//计数
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSONObject;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigHeartDTOVO;
import com.makeit.dto.platform.alarm.PlatHealthConfigDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice;
......@@ -14,6 +15,7 @@ import com.makeit.enums.redis.RedisConst;
import com.makeit.exception.BusinessException;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.AlarmRedisDTO;
import com.makeit.utils.PersonalConfigCacheUtil;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import lombok.extern.slf4j.Slf4j;
......@@ -34,6 +36,9 @@ public class HeartAlarm implements IAlarm {
private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.HEART;
@Autowired
private PersonalConfigCacheUtil personalConfigCacheUtil;
@Override
public boolean support(String alarmType) {
return StringUtils.equals(alarmType, alarmTypeEnum.getValue());
......@@ -42,22 +47,37 @@ public class HeartAlarm implements IAlarm {
@Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
//todo 获取老人健康的阈值
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
if(CollectionUtils.isEmpty(platElderList)){
log.error("心率设备未关联长者,设备plat_id:" + platAlarmCheckDTO.getPlatDevice().getId());
return;
}
PlatElder platElder = platElderList.get(0);
PlatHealthConfigDTO platHealthConfigDTO = personalConfigCacheUtil.get(platElder.getId());
PlatAlarmConfigHeartDTOVO ruleConfig;
if(platHealthConfigDTO != null && platHealthConfigDTO.isHeartConfig()){
ruleConfig = platHealthConfigDTO.getAlarmConfigHeartDTO();
}else {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
if (StringUtils.isBlank(ruleConfigStr)) {
log.error("心率告警配置未配置,告警配置id:" + config.getId());
return;
}
ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigHeartDTOVO.class);
}
JSONObject properties = platAlarmCheckDTO.getProperties();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getOriDeviceId();
if (StringUtils.isBlank(ruleConfigStr)) {
log.error("心率告警配置未配置,告警配置id:" + config.getId());
return;
}
String personState = Convert.toStr(properties.get("personState"));
//心率
int hr = (int) properties.get("hr");
PlatAlarmConfigHeartDTOVO ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigHeartDTOVO.class);
Integer start = ruleConfig.getHeartRateStart();
Integer end = ruleConfig.getHeartRateeEnd();
Integer duration = ruleConfig.getDuration();
String personState = Convert.toStr(properties.get("personState"));
//心率
int hr = (int) properties.get("hr");
Date now = new Date();
long endLong = now.getTime();
//计数
......
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.dto.StatusDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigDTOVO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigQueryDTO;
import com.makeit.dto.platform.alarm.PlatHealthConfigDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.auth.PlatUser;
......@@ -214,4 +215,8 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
alarmConfigUtil.putAll(configList);
}
@Override
public List<PlatHealthConfigDTO> getHealthConfigList() {
return baseMapper.getHealthConfigList();
}
}
......@@ -356,6 +356,9 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
@Override
@TenantIdIgnore
public void getElderListByDeviceId(PlatAlarmCheckDTO platAlarmCheckDTO) {
if(CollectionUtils.isNotEmpty(platAlarmCheckDTO.getPlatElderList())){
return;
}
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String tenantId = platDevice.getTenantId();
LambdaQueryWrapper<PlatRoomBedDevice> roomBedDeviceLambdaQueryWrapper = new LambdaQueryWrapper<>();
......
......@@ -37,6 +37,7 @@ import com.makeit.service.platform.space.PlatBedService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.platform.space.PlatRoomService;
import com.makeit.service.platform.space.PlatSpaceService;
import com.makeit.utils.PersonalConfigCacheUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
......@@ -103,6 +104,9 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
@Autowired
private PlatRoomBedDeviceService platRoomBedDeviceService;
@Autowired
private PersonalConfigCacheUtil personalConfigCacheUtil;
private LambdaQueryWrapper<PlatElder> lambdaQueryWrapper(PlatElderQueryDTO dto) {
return new QueryWrapper<PlatElder>().lambda()
.like(StringUtils.isNotBlank(dto.getName()), PlatElder::getName, dto.getName())
......@@ -620,6 +624,10 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
platElderHealthInfoService.saveOrUpdate(healthInfo);
personalConfigCacheUtil.put(healthInfo);
PlatElderOtherInfo otherInfo = platElderOtherInfoService.getOne(new QueryWrapper<PlatElderOtherInfo>().lambda()
.eq(PlatElderOtherInfo::getElderId, dto.getId()));
if (otherInfo == null) {
......
......@@ -53,9 +53,13 @@ public class IotSyncTask {
* 启用状态的租户才同步
* 新增和更新平台端设备表
*/
//@Scheduled(cron = "0 0 */1 * * ?")
@TenantIdIgnore
@Scheduled(cron = "0 0 */1 * * ?")
public void syncEquipmentInfo() {
savePlatDevice();
}
public void savePlatDevice(){
log.info("开始执行同步设备信息接口");
LambdaQueryWrapper<PlatTenant> tenantLambdaQueryWrapper = new LambdaQueryWrapper<PlatTenant>().eq(PlatTenant::getStatus, CommonEnum.YES.getValue());
List<PlatTenant> platTenants = platTenantService.list(tenantLambdaQueryWrapper);
......
package com.makeit.utils;
import com.makeit.dto.platform.alarm.PlatHealthConfigDTO;
import com.makeit.entity.platform.elder.PlatElderHealthInfo;
import com.makeit.enums.redis.RedisConst;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnoreUtil;
import com.makeit.service.platform.alarm.PlatAlarmConfigService;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class PersonalConfigCacheUtil implements ApplicationRunner {
@Autowired
private PlatAlarmConfigService platAlarmConfigService;
/**
* 设备id
* @return
*/
public List<PlatHealthConfigDTO> getAll() {
return TenantIdIgnoreUtil.execute(()->{
List<PlatHealthConfigDTO> list = platAlarmConfigService.getHealthConfigList();
list.forEach(vo->{
put(vo);
});
return list;
});
}
public void put(PlatHealthConfigDTO dto) {
boolean checkAndFillHeartConfig = dto.checkAndFillHeartConfig();
boolean checkAndFillBreathConfig = dto.checkAndFillBreathConfig();
if(!checkAndFillHeartConfig&&!checkAndFillBreathConfig){
RedisUtil.delete(RedisConst.ALARM_HEALTH_CONFIG_PREFIX +":"+ dto.getPlatElderId());
}else {
RedisUtil.set(RedisConst.ALARM_HEALTH_CONFIG_PREFIX + ":"+dto.getPlatElderId(), dto);
}
}
public PlatHealthConfigDTO get(String platElderId) {
PlatHealthConfigDTO dto = RedisUtil.get(RedisConst.ALARM_HEALTH_CONFIG_PREFIX +":"+ platElderId);
return dto;
}
@Override
@TenantIdIgnore
public void run(ApplicationArguments args) throws Exception {
getAll();
}
public void put(PlatElderHealthInfo entity){
PlatHealthConfigDTO dto = new PlatHealthConfigDTO();
dto.setPlatElderId(entity.getElderId());
if(StringUtils.isNotBlank(entity.getHeartExceptionTime())) {
dto.setHeartDuration(Integer.valueOf(entity.getHeartExceptionTime()));
dto.setHeartRateStr(entity.getHeartRate());
}
if(StringUtils.isNotBlank(entity.getRespiratoryExceptionTime())){
dto.setBreathDuration(Integer.valueOf(entity.getRespiratoryExceptionTime()));
dto.setBreathRateStr(entity.getRespiratoryRate());
}
put(dto);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.platform.alarm.PlatAlarmConfigMapper">
<select id="getHealthConfigList" resultType="com.makeit.dto.platform.alarm.PlatHealthConfigDTO">
select pehi.elder_id as platElderId,
pehi.respiratory_rate as heartRateStr,
pehi.respiratory_exception_time as heartDuration,
pehi.heart_rate as breathRateStr,
pehi.heart_exception_time as breathDuration
from plat_elder_health_info pehi
left join plat_elder pe on pe.id = pehi.elder_id
where pehi.del_flag = 0
and pe.del_flag = 0
and ((pehi.heart_exception_time is not null and pehi.heart_rate is not null
and pehi.heart_exception_time != '' and pehi.heart_rate != '')
or (pehi.respiratory_exception_time is not null and pehi.respiratory_rate is not null
and pehi.respiratory_exception_time != '' and pehi.respiratory_rate != '')
)
</select>
</mapper>
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