Commit 1d5861a3 by 朱淼
parents 4ca0ae19 50aa6365
Showing with 767 additions and 160 deletions
......@@ -37,12 +37,12 @@ CREATE TABLE `plat_elder`
floor_space_id varchar(64) NULL COMMENT '楼层id',
`room_id` varchar(64) DEFAULT NULL COMMENT '房间id',
`bed_id` varchar(64) DEFAULT NULL COMMENT '床位id',
`space_path` varchar(64) DEFAULT NULL COMMENT '空间-房间-床位路径',
`space_path` varchar(300) DEFAULT NULL COMMENT '空间-房间-床位路径',
org_id varchar(64) NULL COMMENT '组织id',
city_org_id varchar(64) NULL COMMENT '城市组织id',
district_org_id varchar(64) NULL COMMENT '区组织id',
street_org_id varchar(64) NULL COMMENT '街道组织id',
org_path varchar(64) NULL COMMENT '组织路径',
org_path varchar(300) NULL COMMENT '组织路径',
`remark` varchar(1024) DEFAULT NULL COMMENT '备注',
avatar varchar(64) NULL COMMENT '头像文件id',
check_in_time datetime DEFAULT NULL COMMENT '入住时间',
......@@ -160,7 +160,7 @@ CREATE TABLE `plat_elder_children_info`
city_org_id varchar(64) NULL COMMENT '城市组织id',
district_org_id varchar(64) NULL COMMENT '区组织id',
street_org_id varchar(64) NULL COMMENT '街道组织id',
org_path varchar(64) NULL COMMENT '组织路径',
org_path varchar(300) NULL COMMENT '组织路径',
avatar varchar(64) NULL COMMENT '微信头像路径',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
......@@ -216,7 +216,7 @@ CREATE TABLE `plat_alarm_config`
city_org_id varchar(64) NULL COMMENT '城市组织id',
district_org_id varchar(64) NULL COMMENT '区组织id',
street_org_id varchar(64) NULL COMMENT '街道组织id',
org_path varchar(64) NULL COMMENT '组织路径',
org_path varchar(300) NULL COMMENT '组织路径',
`rule_config` VARCHAR(512) DEFAULT NULL COMMENT '规则配置',
`content` VARCHAR(512) DEFAULT NULL COMMENT '内容',
`content_audit` VARCHAR(512) DEFAULT NULL COMMENT '内容(审核中)',
......@@ -251,7 +251,7 @@ CREATE TABLE `plat_device`
city_org_id varchar(64) NULL COMMENT '城市组织id',
district_org_id varchar(64) NULL COMMENT '区组织id',
street_org_id varchar(64) NULL COMMENT '街道组织id',
org_path varchar(64) NULL COMMENT '组织路径',
org_path varchar(300) NULL COMMENT '组织路径',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
......
package com.makeit.controller.analysis;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.common.dto.BaseNameDTO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.entity.saas.analysis.SaasModelManage;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasModelManageService;
import com.makeit.utils.old.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -35,8 +39,9 @@ public class SaasModelManageController {
@Action(module = "数据分析-模型管理", name = "分页列表", code = "saas:modelManage:page")
@ApiOperation("分页列表")
@PostMapping("list")
public ApiResponseEntity<List<SaasModelManage>> list() {
return ApiResponseUtils.success(saasModelManageService.list());
public ApiResponseEntity<List<SaasModelManage>> list(@RequestBody BaseNameDTO dto) {
return ApiResponseUtils.success(saasModelManageService.list(new QueryWrapper<SaasModelManage>().lambda()
.like(StringUtils.isNotEmpty(dto.getName()),SaasModelManage::getName,dto.getName())));
}
}
package com.makeit.controller.analysis;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.common.dto.BaseNameDTO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.entity.saas.analysis.SaasModelManage;
......@@ -8,8 +10,10 @@ import com.makeit.entity.saas.analysis.SaasReportManage;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasModelManageService;
import com.makeit.service.saas.SaasReportManageService;
import com.makeit.utils.old.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -37,8 +41,9 @@ public class SaasReportManageController {
@Action(module = "数据分析-报告管理", name = "分页列表", code = "saas:reportManage:page")
@ApiOperation("分页列表")
@PostMapping("list")
public ApiResponseEntity<List<SaasReportManage>> list(){
return ApiResponseUtils.success(saasReportManageService.list());
public ApiResponseEntity<List<SaasReportManage>> list(@RequestBody BaseNameDTO dto){
return ApiResponseUtils.success(saasReportManageService.list(new QueryWrapper<SaasReportManage>().lambda()
.like(StringUtils.isNotEmpty(dto.getName()),SaasReportManage::getName,dto.getName())));
}
}
......
......@@ -92,11 +92,16 @@ public class RedisConst {
public static final String TENANT_PREFIX = "tenant:";
public static final String ALARM_DEVICE_ID = "alarm:device:id:";
public static final String ALARM_DEVICE_BR_ID = "alarm:device:br:id:";
public static final String ALARM_DEVICE_HR_ID = "alarm:device:hr:id:";
public static final String ALARM_DEVICE_FALL_ID = "alarm:device:fall:id:";
public static final String ALARM_DEVICE_BEHAVIOR_ID = "alarm:device:behavior:id:";
public static final String ALARM_CONFIG_ORG_ID = "alarm:config:org:id:";
public static final String PLAT_IOT_DEVICE_PREFIX = "plat:iot:device:";
public static final String ELDER_DAY_DURATION_PREFIX = "plat:day:duration:device:";
......
......@@ -19,6 +19,7 @@ public class DeviceInfo {
private HeaderInfo headers;
private JSONObject properties;
// private String properties;
/**
......
......@@ -20,6 +20,8 @@ public class MsgSendDTO {
private Collection<String> receiverList;
private Collection<String> emailSet;
private String oriContent;
/**
......
package com.makeit.utils.msg.sender;
import com.makeit.exception.BusinessException;
import com.makeit.utils.msg.SendTypeEnum;
import com.makeit.utils.msg.dto.MsgSendDTO;
import lombok.extern.slf4j.Slf4j;
......@@ -36,12 +35,12 @@ public class MailMsgSender implements IMsgSender {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(msgDTO.getReceiverList().toArray(new String[msgDTO.getReceiverList().size()]));
helper.setTo(msgDTO.getEmailSet().toArray(new String[msgDTO.getReceiverList().size()]));
helper.setSubject(msgDTO.getSubject());
helper.setText(msgDTO.getOriContent(), false);
mailSender.send(message);
} catch (Exception e) {
throw new BusinessException(e.getMessage());
log.error("发送邮箱异常:",e);
}
}
......
......@@ -8,6 +8,8 @@ import com.makeit.utils.msg.config.SmsConfig;
import com.makeit.utils.msg.dto.MsgSendDTO;
import com.makeit.utils.old.encode.CryptoUtil;
import com.makeit.utils.third.HttpClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
......@@ -20,6 +22,7 @@ import java.util.HashMap;
import java.util.stream.Collectors;
@Component
@Slf4j
public class SmsMsgSender implements IMsgSender{
@Autowired
......@@ -40,6 +43,9 @@ public class SmsMsgSender implements IMsgSender{
@Override
public void send(MsgSendDTO msgDTO) {
try {
if(CollectionUtils.isEmpty(msgDTO.getReceiverList())){
log.info("发送短信时,没有接收人,短信内容:"+msgDTO.getOriContent());
}
Date now = new Date();
String time = String.valueOf(now.getTime());
Collection<String> receiverList = msgDTO.getReceiverList();
......@@ -57,10 +63,13 @@ public class SmsMsgSender implements IMsgSender{
JSONObject jsonObject = JSON.parseObject(resStr);
String status = String.valueOf(jsonObject.get("status"));
if (!StringUtils.equals(status, "0")) {
log.error("发送短信失败:"+jsonObject.get("status_code"));
throw new BusinessException((String) jsonObject.get("status_code"));
}else {
log.info("发送短信成功");
}
}catch (Exception e){
throw new BusinessException(e.getMessage());
log.error("发送短信异常:",e);
}
}
......
......@@ -8,6 +8,8 @@ import com.makeit.utils.msg.config.SmsVoiceConfig;
import com.makeit.utils.msg.dto.MsgSendDTO;
import com.makeit.utils.old.encode.CryptoUtil;
import com.makeit.utils.third.HttpClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
......@@ -22,6 +24,7 @@ import java.util.function.BiConsumer;
import java.util.stream.Collectors;
@Component
@Slf4j
public class SmsVoiceSender implements IMsgSender{
@Autowired
......@@ -42,6 +45,9 @@ public class SmsVoiceSender implements IMsgSender{
@Override
public void send(MsgSendDTO msgDTO) {
try {
if(CollectionUtils.isEmpty(msgDTO.getReceiverList())){
log.info("发送语音短信时,没有接收人,短信内容:"+msgDTO.getOriContent());
}
Date now = new Date();
String time = String.valueOf(now.getTime());
Collection<String> receiverList = msgDTO.getReceiverList();
......@@ -67,10 +73,11 @@ public class SmsVoiceSender implements IMsgSender{
JSONObject jsonObject = JSON.parseObject(resStr);
String status = String.valueOf(jsonObject.get("status"));
if (!StringUtils.equals(status, "0")) {
log.error("发送语音短信失败:"+jsonObject.get("status_code"));
throw new BusinessException((String) jsonObject.get("status_code"));
}
}catch (Exception e){
throw new BusinessException(e.getMessage().toString());
log.error("发送语音异常:",e);
}
}
}
......@@ -13,11 +13,11 @@ import java.util.Map;
public class LocalDateTimeUtils {
public static final Map<Integer,String> WEEK_MAP = new HashMap<>(16);
public static final Map<Integer, String> WEEK_MAP = new HashMap<>(16);
static {
WEEK_MAP.put(1,"星期一");
WEEK_MAP.put(2,"星期二");
WEEK_MAP.put(1, "星期一");
WEEK_MAP.put(2, "星期二");
}
/**
......@@ -85,6 +85,15 @@ public class LocalDateTimeUtils {
.withSecond(59);
}
public static LocalDateTime getDayStart(LocalDate time) {
return time.atTime(0, 0, 0);
}
public static LocalDateTime getDayEnd(LocalDate time) {
return time.atTime(23, 59, 59);
}
// /**
// * 获取前n天的开始时间
// *
......@@ -154,10 +163,28 @@ public class LocalDateTimeUtils {
public static Integer getHourSub(LocalDateTime start, LocalDateTime end) {
if(start==null || end == null ){
if (start == null || end == null) {
return 0;
}
Long until = start.until(end, ChronoUnit.HOURS);
return until.intValue();
}
public static Integer getDaySub(LocalDateTime start, LocalDateTime end) {
if(start==null || end == null ){
return 0;
}
Long until = start.until(end, ChronoUnit.DAYS);
return until.intValue();
}
/**
* 修改为一天的开始时间,例如:2020-02-02 00:00:00,000
*
* @param time 日期时间
* @return 一天的开始时间
*/
public static LocalDateTime beginOfDay(LocalDateTime time) {
return time.with(LocalTime.MIN);
}
}
package com.makeit.module.controller.children.config;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.saas.SaasPrivacyConfigDTO;
import com.makeit.service.saas.SaasPrivacyConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*
* @author lzy
* @date 2022年5月28日
* @description
*/
@Api(tags = "子女端小程序-隐私政策-关于我们")
@RestController
@RequestMapping("/children/sys/privacyConfig")
public class SaasPrivacyConfigChildrenController {
@Autowired
private SaasPrivacyConfigService saasPrivacyConfigService;
@ApiOperation(value = "获取隐私政策-关于我们", notes = "")
@PostMapping("/view")
public ApiResponseEntity<SaasPrivacyConfigDTO> view(@RequestBody SaasPrivacyConfigDTO saasPrivacyConfigDTO){
return ApiResponseUtils.success(saasPrivacyConfigService.view(saasPrivacyConfigDTO.getCategory()));
}
@ApiOperation(value = "获取关于我们", notes = "")
@PostMapping("/viewAbout")
public ApiResponseEntity<SaasPrivacyConfigDTO> viewAbout(@RequestBody SaasPrivacyConfigDTO saasPrivacyConfigDTO){
return ApiResponseUtils.success(saasPrivacyConfigService.view(saasPrivacyConfigDTO.getCategory()));
}
}
......@@ -3,7 +3,7 @@ package com.makeit.module.controller.elder;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
......@@ -36,61 +36,61 @@ public class PlatElderReportDayController {
@ApiOperation("睡眠评价")
@PostMapping("sleepEvaluation")
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
return null;
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderDayReportDayService.sleepEvaluation(platElderIdDTO));
}
@ApiOperation("睡眠图表")
@PostMapping("sleepDiagram")
public ApiResponseEntity<List<PlatElderSleepDiagramVO>> sleepDiagram(@RequestBody PlatElderIdDTO platElderIdDTO) {
return null;
public ApiResponseEntity<List<PlatElderSleepDiagramVO>> sleepDiagram(@RequestBody PlatElderReportDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderDayReportDayService.sleepDiagram(platElderIdDTO));
}
@ApiOperation("心率呼吸评价")
@PostMapping("heartRespiratoryEvaluation")
public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("心率异常记录")
@PostMapping("heartExceptionRecordList")
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> heartExceptionRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> heartExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("呼吸率异常记录")
@PostMapping("respiratoryExceptionRecordList")
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> respiratoryExceptionRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> respiratoryExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("心率呼吸率")
@PostMapping("heartRespiratory")
public ApiResponseEntity<List<PlatElderRealTimeHeartRespiratoryVO>> heartRespiratory(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderRealTimeHeartRespiratoryVO>> heartRespiratory(@RequestBody PlatElderReportDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderDayReportDayService.heartRespiratory(platElderIdDTO));
}
@ApiOperation("行为异常记录")
@PostMapping("behaviorExceptionRecordList")
public ApiResponseEntity<List<PlatElderBehaviorExceptionRecordVO>> behaviorExceptionRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderBehaviorExceptionRecordVO>> behaviorExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("跌倒记录")
@PostMapping("failRecordList")
public ApiResponseEntity<List<String>> failRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<String>> failRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("坐标记录")
@PostMapping("coordinateList")
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderDayReportDayService.coordinateList(platElderIdDTO));
}
@ApiOperation("行为辐射")
@PostMapping("behaviorDistribution")
public ApiResponseEntity<List<PlatElderBehaviorDistributionVO>> behaviorDistribution(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderBehaviorDistributionVO>> behaviorDistribution(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
......
......@@ -4,6 +4,7 @@ package com.makeit.module.controller.wechat.elder;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.service.platform.elder.PlatElderRealTimeService;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
......@@ -66,7 +67,7 @@ public class PlatElderRealTimeWechatController {
@ApiOperation("坐标记录")
@PostMapping("coordinateList")
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderDayReportDayService.coordinateList(platElderIdDTO));
}
......
......@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRegionSetting;
import com.makeit.entity.platform.space.PlatRoom;
import lombok.Data;
......@@ -27,4 +28,6 @@ public class PlatAlarmCheckDTO {
//PlatAlarmRecord.remark
private String remark;
private PlatRegionSetting platRegionSetting;
}
package com.makeit.dto.platform.alarm;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class PlatDayDurationRecordDTO {
private LocalDateTime start;
private LocalDateTime end;
private List<String> dayStrList;
}
......@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
......@@ -21,6 +22,10 @@ import java.time.LocalDateTime;
@ApiModel(value = "Elder对象", description = "长者基本信息")
public class PlatElderReportDTO extends PlatElderIdDTO{
@JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("日期")
private LocalDate now;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("开始时间")
private LocalDateTime startTime;
......
package com.makeit.entity.platform.alarm;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModelProperty;
......@@ -70,12 +71,15 @@ public class PlatAlarmRecord extends BaseBusEntity {
private String deviceId;
/**
* 老人id,逗号拼接
* 老人id,一个老人一条记录
*/
private String elderIds;
private String remark;
@TableField(exist = false)
private String elderName;
}
......
......@@ -2,6 +2,7 @@ package com.makeit.entity.platform.alarm;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
......@@ -42,4 +43,14 @@ public class PlatDayDurationRecord extends BaseBusEntity {
* 本次离开时间
*/
private Date endDate;
@ApiModelProperty("区域名称")
private String regionName;
@ApiModelProperty("设备ID")
private String deviceId;
@ApiModelProperty("房间ID")
private String roomId;
}
\ No newline at end of file
......@@ -52,7 +52,9 @@ public class PlatDevice extends BaseBusEntity {
/**
* @see DeviceState
*/
@ApiModelProperty(value = "状态 数据字典 1 在线 0离线 ")
@ApiModelProperty(value = "状态 notActive(\"notActive\",\"禁用\"),\n" +
" offline(\"offline\",\"离线\"),\n" +
" online(\"online\",\"在线\"); ")
private String status;
@ApiModelProperty(value = "组织id")
......
......@@ -2,7 +2,11 @@ package com.makeit.mapper.platform.alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author lixl
......@@ -13,4 +17,5 @@ import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
public interface PlatDayDurationRecordMapper extends BaseMapper<PlatDayDurationRecord> {
List<PlatDayDurationRecord> getDayMaxDurationList(@Param("param") PlatDayDurationRecordDTO param);
}
......@@ -2,8 +2,11 @@ package com.makeit.service.platform.alarm;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import java.util.List;
/**
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service
......@@ -11,4 +14,5 @@ import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
*/
public interface PlatDayDurationRecordService extends IService<PlatDayDurationRecord> {
List<PlatDayDurationRecord> getDayMaxDurationList(PlatDayDurationRecordDTO param);
}
......@@ -8,16 +8,17 @@ import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.enums.CommonEnum;
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.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
......@@ -25,33 +26,37 @@ import java.util.Date;
import java.util.List;
@Component
public class BreathAlarm implements IAlarm{
@Slf4j
public class BreathAlarm implements IAlarm {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE;
private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE;
@Override
public boolean support(String alarmType) {
return StringUtils.equals(alarmType,alarmTypeEnum.getValue());
return StringUtils.equals(alarmType, alarmTypeEnum.getValue());
}
/**
* 2.呼吸异常/心率异常:长者关联的呼吸心率雷达上报的呼吸和心率不在配置的阈值范围内,且满足持续时间进行告警,
* 若该长者在长者管理处有配置阈值,则以长者个人的阈值为准,若无,则以此处配置的通用规则为准
*
* <p>
* 心率呼吸率低于阈值且满足持续时间,则对应状态为呼吸过缓/心率过缓,高于阈值且满足持续时间,
* 对应状态为呼吸过速/心率过速,呼吸心率为0且满足持续时间为呼吸暂停
*
* @param platAlarmCheckDTO
*/
@Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
//todo 获取老人健康的阈值
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
JSONObject properties = platAlarmCheckDTO.getProperties();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getOriDeviceId();
if (StringUtils.isBlank(ruleConfigStr)) {
log.info("呼吸告警配置未配置,告警配置id:" + config.getId());
return;
}
String personState = Convert.toStr(properties.get("personState"));
......@@ -62,52 +67,80 @@ public class BreathAlarm implements IAlarm{
Integer start = ruleConfig.getRespiratoryRateStart();
Integer end = ruleConfig.getRespiratoryRateEnd();
Integer duration = ruleConfig.getDuration();
long endLong = new Date().getTime();
Date now = new Date();
long endLong = now.getTime();
//计数
Long startLong = RedisUtil.get(RedisConst.ALARM_DEVICE_ID + deviceId);
if (StringUtils.equals(personState, "0")|| startLong == null) {
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_BR_ID + deviceId);
if (StringUtils.equals(personState, CommonEnum.NO.getValue())) {
RedisUtil.delete(RedisConst.ALARM_DEVICE_BR_ID + deviceId);
return;
}
long count = endLong - startLong;
if (br > end || br < start) {
if (count >= duration) {
if(br>end){
platAlarmCheckDTO.setRemark("呼吸过速");
if ((br > end || br < start)) {
if(alarmRedisDTO==null){
alarmRedisDTO = new AlarmRedisDTO();
alarmRedisDTO.setAlarm(CommonEnum.NO.getValue());
alarmRedisDTO.setStart(now);
alarmRedisDTO.setStartLong(endLong);
RedisUtil.set(RedisConst.ALARM_DEVICE_BR_ID + deviceId,alarmRedisDTO);
log.info("发现长者呼吸异常,设备id:"+deviceId);
return;
}
if(br < start){
platAlarmCheckDTO.setRemark("呼吸过缓");
Long startLong = alarmRedisDTO.getStartLong();
long count = endLong - startLong;
if (count/1000 >= duration) {
if (StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.YES.getValue())) {
log.info("呼吸已告警,设备id:" + platDevice.getId());
return;
}
fillRemark(platAlarmCheckDTO, br, start, end);
notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
alarmRedisDTO.setStartLong(endLong);
alarmRedisDTO.setStart(now);
alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_BR_ID + deviceId, alarmRedisDTO);
}
} else {
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
RedisUtil.delete(RedisConst.ALARM_DEVICE_BR_ID + deviceId);
}
}
private void fillRemark(PlatAlarmCheckDTO platAlarmCheckDTO, int br, Integer start, Integer end) {
if (br > end) {
platAlarmCheckDTO.setRemark("呼吸过速");
}
if (br < start) {
platAlarmCheckDTO.setRemark("呼吸过缓");
}
if (br == 0) {
platAlarmCheckDTO.setRemark("呼吸暂停");
}
return;
}
/**
* [#长者姓名][#呼吸状态],请及时处理!
*
* @param platAlarmCheckDTO
*/
@Override
@Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
if(CollectionUtils.isEmpty(platElderList)){
if (CollectionUtils.isEmpty(platElderList)) {
log.info("未关联长者,设备id:"+platAlarmCheckDTO.getPlatDevice().getId());
return;
}
PlatRoom platRoom = platAlarmCheckDTO.getPlatRoom();
for (PlatElder platElder : platElderList) {
List<String> param = new ArrayList<>();
param.add(platElder.getName());
param.add(platAlarmCheckDTO.getRemark());
platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
platAlarmRecord.setElderIds(platElder.getId());
platAlarmRecord.setElderName(platElder.getName());
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(), platAlarmRecord);
}
}
}
......@@ -4,10 +4,16 @@ import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSONObject;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.enums.CommonEnum;
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.redis.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -17,35 +23,47 @@ import java.util.ArrayList;
import java.util.List;
@Component
public class FallAlarm implements IAlarm{
@Slf4j
public class FallAlarm implements IAlarm {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.FALL;
private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.FALL;
@Override
public boolean support(String alarmType) {
return StringUtils.equals(alarmType,alarmTypeEnum.getValue());
return StringUtils.equals(alarmType, alarmTypeEnum.getValue());
}
/**
* 1.长者跌倒:长者所在空间的跌倒监测雷达上报跌倒,若一个空间内有多为长者,则同时告警多条
*
* @param platAlarmCheckDTO
*/
@Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
JSONObject properties = platAlarmCheckDTO.getProperties();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getOriDeviceId();
String personState = Convert.toStr(properties.get("personState"));
if (StringUtils.equals(personState, "1")) {
AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_FALL_ID + deviceId);
if (StringUtils.equals(personState, CommonEnum.YES.getValue())) {
notice(platAlarmCheckDTO);
alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID, alarmRedisDTO);
} else {
alarmRedisDTO.setAlarm(CommonEnum.NO.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID, alarmRedisDTO);
}
}
@Override
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
if(CollectionUtils.isEmpty(platElderList)){
if (CollectionUtils.isEmpty(platElderList)) {
log.info("跌倒设备未关联长者,设备id:" + platDevice.getId());
return;
}
PlatRoom platRoom = platAlarmCheckDTO.getPlatRoom();
......@@ -55,7 +73,9 @@ public class FallAlarm implements IAlarm{
param.add(platRoom.getName());
platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
platAlarmRecord.setElderIds(platElder.getId());
platAlarmRecord.setElderName(platElder.getName());
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(), platAlarmRecord);
}
}
}
......@@ -8,16 +8,17 @@ import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.enums.CommonEnum;
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.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
......@@ -25,25 +26,28 @@ import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class HeartAlarm implements IAlarm {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.HEART;
private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.HEART;
@Override
public boolean support(String alarmType) {
return StringUtils.equals(alarmType,alarmTypeEnum.getValue());
return StringUtils.equals(alarmType, alarmTypeEnum.getValue());
}
@Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
//todo 获取老人健康的阈值
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
JSONObject properties = platAlarmCheckDTO.getProperties();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getOriDeviceId();
if (StringUtils.isBlank(ruleConfigStr)) {
log.info("心率告警配置未配置,告警配置id:" + config.getId());
return;
}
String personState = Convert.toStr(properties.get("personState"));
......@@ -53,47 +57,73 @@ public class HeartAlarm implements IAlarm {
Integer start = ruleConfig.getHeartRateStart();
Integer end = ruleConfig.getHeartRateEnd();
Integer duration = ruleConfig.getDuration();
long endLong = new Date().getTime();
Date now = new Date();
long endLong = now.getTime();
//计数
Long startLong = RedisUtil.get(RedisConst.ALARM_DEVICE_ID + deviceId);
if (StringUtils.equals(personState, "0")|| startLong == null) {
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_HR_ID + deviceId);
if (StringUtils.equals(personState, CommonEnum.NO.getValue())) {
RedisUtil.delete(RedisConst.ALARM_DEVICE_HR_ID + deviceId);
return;
}
long count = endLong - startLong;
if (hr > end || hr < start) {
if (count >= duration) {
if(hr>end){
platAlarmCheckDTO.setRemark("心率过速");
if ((hr > end || hr < start)) {
if(alarmRedisDTO==null){
alarmRedisDTO = new AlarmRedisDTO();
alarmRedisDTO.setAlarm(CommonEnum.NO.getValue());
alarmRedisDTO.setStart(now);
alarmRedisDTO.setStartLong(endLong);
RedisUtil.set(RedisConst.ALARM_DEVICE_HR_ID + deviceId,alarmRedisDTO);
log.info("发现长者心率异常,设备id:"+deviceId);
return;
}
if(hr < start){
platAlarmCheckDTO.setRemark("心率过缓");
Long startLong = alarmRedisDTO.getStartLong();
long count = endLong - startLong;
if (count/1000 >= duration) {
if (StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.YES.getValue())) {
log.info("心率已告警,设备id:" + platDevice.getId());
return;
}
fillRemark(platAlarmCheckDTO, hr, start, end);
notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
alarmRedisDTO.setStartLong(endLong);
alarmRedisDTO.setStart(now);
alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_HR_ID + deviceId, alarmRedisDTO);
}
} else {
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
RedisUtil.delete(RedisConst.ALARM_DEVICE_HR_ID + deviceId);
}
}
private void fillRemark(PlatAlarmCheckDTO platAlarmCheckDTO, int hr, Integer start, Integer end) {
if (hr > end) {
platAlarmCheckDTO.setRemark("心率过快");
}
if (hr < start) {
platAlarmCheckDTO.setRemark("心率过缓");
}
}
@Override
@Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
if(CollectionUtils.isEmpty(platElderList)){
if (CollectionUtils.isEmpty(platElderList)) {
log.info("跌倒设备未关联长者,设备id:" + platAlarmCheckDTO.getPlatDevice().getId());
return;
}
PlatRoom platRoom = platAlarmCheckDTO.getPlatRoom();
for (PlatElder platElder : platElderList) {
List<String> param = new ArrayList<>();
param.add(platElder.getName());
param.add(platAlarmCheckDTO.getRemark());
platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
platAlarmRecord.setElderIds(platElder.getId());
platAlarmRecord.setElderName(platElder.getName());
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(), platAlarmRecord);
}
}
}
......@@ -2,11 +2,14 @@ package com.makeit.service.platform.alarm.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.mapper.platform.alarm.PlatDayDurationRecordMapper;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service实现
......@@ -16,4 +19,8 @@ import org.springframework.stereotype.Service;
public class PlatDayDurationRecordServiceImpl extends ServiceImpl<PlatDayDurationRecordMapper, PlatDayDurationRecord>
implements PlatDayDurationRecordService {
@Override
public List<PlatDayDurationRecord> getDayMaxDurationList(PlatDayDurationRecordDTO param){
return baseMapper.getDayMaxDurationList(param);
}
}
......@@ -214,7 +214,7 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
BeanUtils.copyProperties(dto, db);
db.setId(id);
BeanUtils.copyProperties(dto, other);
BeanUtils.copyProperties(dto, other,BaseEntity.Fields.id);
other.setDeviceId(id);
updateById(db);
......
package com.makeit.service.platform.elder;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.report.day.PlatElderSleepDiagramVO;
import com.makeit.vo.platform.elder.report.day.PlatElderSleepEvaluationVO;
import java.time.LocalDateTime;
import java.util.List;
......@@ -17,10 +19,14 @@ import java.util.List;
*/
public interface PlatElderDayReportDayService {
List<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(PlatElderIdDTO platElderIdDTO);
PlatElderSleepEvaluationVO sleepEvaluation(PlatElderReportDTO platElderIdDTO);
List<PlatElderSleepDiagramVO> sleepDiagram(PlatElderReportDTO platElderIdDTO);
List<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(PlatElderReportDTO platElderIdDTO);
List<PlatElderCoordinateVO> coordinateList(String elderId, String deviceId, LocalDateTime start, LocalDateTime end);
List<PlatElderCoordinateVO> coordinateList(PlatElderIdDTO platElderIdDTO);
List<PlatElderCoordinateVO> coordinateList(PlatElderReportDTO platElderIdDTO);
}
package com.makeit.service.platform.elder.impl;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElderSleep;
import com.makeit.entity.platform.elder.PlatElderSleepAnalysis;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentSpace;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.service.platform.elder.PlatElderRealTimeService;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.elder.*;
import com.makeit.utils.LongTimestampUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.validate.CollectionUtils;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.time.LocalDateTimeUtils;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.report.day.PlatElderSleepDiagramContentVO;
import com.makeit.vo.platform.elder.report.day.PlatElderSleepDiagramVO;
import com.makeit.vo.platform.elder.report.day.PlatElderSleepEvaluationVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
@Service
public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDayService {
......@@ -36,13 +41,106 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
private PlatDeviceService platDeviceService;
@Autowired
private PlatElderSleepService platElderSleepService;
@Autowired
private PlatElderSleepAnalysisService platElderSleepAnalysisService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
@Autowired
private PlatElderRealTimeService platElderRealTimeService;
private static LocalDateTime dayStartNow(LocalDate now) {
return LocalDateTimeUtils.getDayStart(now);
}
private static LocalDateTime dayEndNow(LocalDate now) {
return LocalDateTimeUtils.getDayEnd(now);
}
private static LocalDateTime dayStartYes(LocalDate now) {
return LocalDateTimeUtils.getDayStart(now).minusDays(1);
}
private static LocalDateTime dayEndYes(LocalDate now) {
return LocalDateTimeUtils.getDayEnd(now).minusDays(1);
}
@Override
public PlatElderSleepEvaluationVO sleepEvaluation(PlatElderReportDTO platElderIdDTO) {
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
PlatElderSleepEvaluationVO platElderSleepEvaluationVO = new PlatElderSleepEvaluationVO();
String nowString = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(now);
PlatElderSleepAnalysis platElderSleepAnalysis = platElderSleepAnalysisService.getOne(new QueryWrapper<PlatElderSleepAnalysis>().lambda()
.eq(PlatElderSleepAnalysis::getElderId, platElderIdDTO.getElderId())
.eq(PlatElderSleepAnalysis::getCurrentDate, nowString)
);
if (platElderSleepAnalysis == null) {
return platElderSleepEvaluationVO;
}
platElderSleepEvaluationVO.setScore(Integer.valueOf(platElderSleepAnalysis.getSleepScore() + ""));
platElderSleepEvaluationVO.setResult(platElderSleepAnalysis.getSleepResult());
platElderSleepEvaluationVO.setEvaluation(platElderSleepAnalysis.getSleepEvaluate());
platElderSleepEvaluationVO.setSleepDuration(Integer.valueOf(platElderSleepAnalysis.getSleepTime() + ""));
platElderSleepEvaluationVO.setRestDuration(Integer.valueOf(platElderSleepAnalysis.getRestTime() + ""));
return platElderSleepEvaluationVO;
}
@Override
public List<PlatElderSleepDiagramVO> sleepDiagram(PlatElderReportDTO platElderIdDTO) {
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
List<PlatElderSleepDiagramVO> voList = new ArrayList<>(10);
String nowString = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(now);
List<PlatElderSleep> sleepList = platElderSleepService.list(new QueryWrapper<PlatElderSleep>().lambda()
.eq(PlatElderSleep::getElderId, platElderIdDTO.getElderId())
.eq(PlatElderSleep::getCurrentDate, nowString)
.orderByAsc(PlatElderSleep::getStartSleep)
);
voList = StreamUtil.map(sleepList, e -> {
PlatElderSleepDiagramVO vo = new PlatElderSleepDiagramVO();
vo.setSleepAt(e.getStartSleep());
vo.setWakeUpAt(e.getEndSleep());
List<PlatElderSleepDiagramContentVO> contentList = StreamUtil.map(e.getSleepRecord(), i -> {
PlatElderSleepDiagramContentVO contentVO = new PlatElderSleepDiagramContentVO();
contentVO.setStartTime(i.getStartTime());
contentVO.setEndTime(i.getEndTime());
contentVO.setSleepType(i.getSleepType());
return contentVO;
});
vo.setContentList(contentList);
return vo;
});
return voList;
}
@Override
public List<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(PlatElderIdDTO platElderIdDTO) {
public List<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(PlatElderReportDTO platElderIdDTO) {
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
......@@ -50,10 +148,10 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
return new ArrayList<>(10);
}
LocalDateTime now = LocalDateTime.now();
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = LocalDateTimeUtils.getDayStart(now);
LocalDateTime end = LocalDateTimeUtils.getDayEnd(now);
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, start, end);
......@@ -100,12 +198,12 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
}
@Override
public List<PlatElderCoordinateVO> coordinateList(PlatElderIdDTO platElderIdDTO) {
public List<PlatElderCoordinateVO> coordinateList(PlatElderReportDTO platElderIdDTO) {
LocalDateTime now = LocalDateTime.now();
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = LocalDateTimeUtils.getDayStart(now);
LocalDateTime end = LocalDateTimeUtils.getDayEnd(now);
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
return coordinateList(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId(), start, end);
......
......@@ -666,7 +666,7 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
db.setUnitSpaceId(null);
db.setFloorSpaceId(null);
db.setRoomId(null);
db.setBedId(bedId);
db.setBedId(null);
db.setSpacePath(null);
db.setCheckOutTime(LocalDateTime.now());
......
package com.makeit.task;
import com.makeit.utils.DayDurationUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class DayDurationTask {
@Autowired
private DayDurationUtil dayDurationUtil;
@Scheduled(cron = "0 */1 * * * ?")
public void updateDayDuration() {
dayDurationUtil.getAll();
}
}
......@@ -20,5 +20,8 @@ public class AlarmRedisDTO implements Serializable {
*/
private String alarm = "0";
/**
* 雷达开始上报
*/
private Date start;
}
package com.makeit.utils;
import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.enums.redis.RedisConst;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
public class DayDurationUtil implements ApplicationRunner {
@Autowired
private PlatDayDurationRecordService platDayDurationRecordService;
public void getAll() {
DateTimeFormatter yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDateTime now = LocalDateTime.now();
List<String> dateStrList = new ArrayList<>();
for (int i = 1; i <= 7 ; i++) {
LocalDateTime dateTime = now.plusDays(-i);
dateStrList.add(yyyyMMdd.format(dateTime));
}
PlatDayDurationRecordDTO platDayDurationRecordDTO = new PlatDayDurationRecordDTO();
platDayDurationRecordDTO.setDayStrList(dateStrList);
List<PlatDayDurationRecord> platDayDurationRecords = platDayDurationRecordService.getDayMaxDurationList(platDayDurationRecordDTO);
if(CollectionUtils.isEmpty(platDayDurationRecords)){
return;
}
Map<String, List<PlatDayDurationRecord>> deviceIdMap = platDayDurationRecords.stream().collect(Collectors.groupingBy(PlatDayDurationRecord::getOriDeviceId));
deviceIdMap.entrySet().stream().map(vo -> {
List<PlatDayDurationRecord> value = vo.getValue();
int size = value.size();
int mid = size / 2;
return value.get(mid);
}).forEach(vo->{
put(vo);
});
return;
}
public void put(PlatDayDurationRecord platDayDurationRecord) {
RedisUtil.set(RedisConst.ELDER_DAY_DURATION_PREFIX + platDayDurationRecord.getOriDeviceId(), platDayDurationRecord);
}
public PlatDayDurationRecord get(String oriDeviceId) {
PlatDayDurationRecord platDayDurationRecord = RedisUtil.get(RedisConst.ELDER_DAY_DURATION_PREFIX + oriDeviceId);
if(platDayDurationRecord==null){
getAll();
}
return RedisUtil.get(RedisConst.ELDER_DAY_DURATION_PREFIX + oriDeviceId);
}
/**
* Callback used to run the bean.
*
* @param args incoming application arguments
* @throws Exception on error
*/
@Override
@TenantIdIgnore
public void run(ApplicationArguments args) throws Exception {
getAll();
}
}
......@@ -9,17 +9,28 @@ import java.time.LocalDateTime;
@Data
public class PlatElderSleepDiagramContentVO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
@ApiModelProperty("时间")
private LocalDateTime time;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
// @ApiModelProperty("时间")
// private LocalDateTime time;
//
// @ApiModelProperty(value = "深度睡眠得分")
// private String sleepDeepScore;
//
// @ApiModelProperty(value = "浅度睡眠得分")
// private String sleepLightnessScore;
//
// @ApiModelProperty(value = "清醒得分")
// private String soberScore;
@ApiModelProperty(value = "深度睡眠得分")
private String sleepDeepScore;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
@ApiModelProperty("开始时间")
private String startTime;
@ApiModelProperty(value = "浅度睡眠得分")
private String sleepLightnessScore;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
@ApiModelProperty("结束时间")
private String endTime;
@ApiModelProperty(value = "清醒得分")
private String soberScore;
@ApiModelProperty(value = "类型")
private String sleepType;
}
<?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.PlatDayDurationRecordMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.platform.alarm.PlatDayDurationRecord">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="elderIds" column="elder_ids" jdbcType="VARCHAR"/>
<result property="duration" column="duration" jdbcType="VARCHAR"/>
<result property="oriDeviceId" column="ori_device_id" jdbcType="VARCHAR"/>
<result property="day" column="day" jdbcType="VARCHAR"/>
<result property="startDate" column="start_date" jdbcType="TIMESTAMP"/>
<result property="endDate" column="end_date" jdbcType="TIMESTAMP"/>
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="INTEGER"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,elder_ids,duration,
ori_device_id,day,start_date,
end_date,create_by,create_date,
update_by,update_date,del_flag,
tenant_id
</sql>
<select id="getDayMaxDurationList" resultType="com.makeit.entity.platform.alarm.PlatDayDurationRecord">
select
pddr.ori_device_id,
pddr.day,
max(pddr.duration) as duration
from plat_day_duration_record pddr
<where>
<if test="param.start != null ">
and pddr.create_date >= #{param.start}
</if>
<if test="param.end != null ">
and pddr.create_date <![CDATA[<= #{param.end}]]>
</if>
<if test="param.dayStrList != null and param.dayStrList.size()>0">
AND pddr.day IN
<foreach collection="param.dayStrList" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
group by pddr.ori_device_id, pddr.day
order by duration
</select>
</mapper>
......@@ -19,8 +19,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
import java.util.List;
import java.util.Objects;
@Component
......@@ -68,10 +70,17 @@ public class PushCallback implements MqttCallback {
logger.info("deliveryComplete--------------" + token.isComplete());
}
/**
* 触发告警耗时 3.07s
* 未触发告警耗时 0.08s
* @param device
*/
@TenantIdIgnore
public void checkAlarm(DeviceInfo device) {
StopWatch stopWatch = new StopWatch();
stopWatch.start("checkAlarm-1");
String deviceId = device.getDeviceId();
//String propertiesStr = device.getProperties();
// String propertiesStr = device.getProperties();
// if (StringUtils.isBlank(propertiesStr)) {
// return;
// }
......@@ -81,7 +90,12 @@ public class PushCallback implements MqttCallback {
//iot设备id
PlatDevice platDevice = deviceCacheUtil.get(deviceId);
if(platDevice==null){
logger.info("设备信息异常,设备iot-id:"+deviceId);
return;
}
List<PlatAlarmConfig> deviceAlarmConfigList = alarmConfigCacheUtil.getDeviceAlarmConfigMap(platDevice);
deviceAlarmConfigList.removeIf(Objects::isNull);
if (CollectionUtils.isEmpty(deviceAlarmConfigList)) {
logger.info("该设备没有告警配置:"+deviceId);
return;
......@@ -103,6 +117,8 @@ public class PushCallback implements MqttCallback {
}
}
}
stopWatch.stop();
logger.info(stopWatch.prettyPrint());
}
......
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