Commit 70f55b67 by 杨伟程

老人报告

parent 78e4757d
......@@ -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(300) 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(300) 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 '入住时间',
......@@ -151,22 +151,22 @@ CREATE TABLE `plat_elder_medical_examination_info`
CREATE TABLE `plat_elder_children_info`
(
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NULL COMMENT '长者id',
`openid` varchar(64) NOT NULL COMMENT 'openid',
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NULL COMMENT '长者id',
`openid` varchar(64) NOT NULL COMMENT 'openid',
`name` varchar(64) DEFAULT NULL COMMENT '姓名',
`phone` varchar(64) 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_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(300) NULL COMMENT '组织路径',
avatar varchar(64) NULL COMMENT '微信头像路径',
avatar varchar(64) NULL COMMENT '微信头像路径',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
del_flag char(1) not null comment ' 删除标志 0否 1是 ',
del_flag char(1) not null comment ' 删除标志 0否 1是 ',
`tenant_id` varchar(64) DEFAULT NULL COMMENT ' 租户id ',
PRIMARY KEY (`id`),
KEY `index_elder_id` (`elder_id`) USING BTREE
......@@ -209,13 +209,13 @@ CREATE TABLE `plat_dict_info`
CREATE TABLE `plat_alarm_config`
(
`id` VARCHAR(64) NOT NULL COMMENT 'id',
`id` VARCHAR(64) NOT NULL COMMENT 'id',
`alarm_type` CHAR(1) DEFAULT NULL COMMENT '告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常',
`status` CHAR(1) DEFAULT NULL COMMENT '状态 数据字典 1 启用 0 禁用',
`org_id` VARCHAR(64) NOT 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_id` VARCHAR(64) NOT 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(300) NULL COMMENT '组织路径',
`rule_config` VARCHAR(512) DEFAULT NULL COMMENT '规则配置',
`content` 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(300) 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 '更新者',
......@@ -350,3 +350,26 @@ CREATE TABLE `plat_elder_report_month`
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='长者月报';
CREATE TABLE `plat_elder_breathe_day_stat`
(
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` VARCHAR(64) NULL COMMENT '长者id',
device_id varchar(64) NULL COMMENT '设备id',
ori_device_id varchar(64) NULL COMMENT '原始设备id',
day date NOT NULL COMMENT '日期',
heart_rate_max int NULL COMMENT '心率最大值',
heart_rate_min int NULL COMMENT '心率最小值',
heart_rate_avg int NULL COMMENT '心率平均值',
respiratory_rate_max int NULL COMMENT '呼吸率最大值',
respiratory_rate_min int NULL COMMENT '呼吸率最小值',
respiratory_rate_avg int NULL COMMENT '呼吸率平均值',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
del_flag char(1) not null comment ' 删除标志 0否 1是 ',
`tenant_id` varchar(64) DEFAULT NULL COMMENT ' 租户id ',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='长者呼吸心率日统计';
......@@ -106,7 +106,7 @@ public class CodeGenerator {
// 使用重点 下列字段填写表名 运行方法
// strategy.setInclude("edu_teacher","..."); // 多表-逆向工程
strategy.setInclude("plat_elder_report_month");
strategy.setInclude("plat_elder_breathe_day_stat");
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体属性时去掉表"_"前缀并且第一个字母大写 如:gmt_create -> gmtCreate
......
......@@ -73,13 +73,13 @@ public class PlatElderReportDayController {
@ApiOperation("行为异常记录")
@PostMapping("behaviorExceptionRecordList")
public ApiResponseEntity<List<PlatElderBehaviorExceptionRecordVO>> behaviorExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportDayService.behaviorExceptionRecordList(platElderIdDTO));
}
@ApiOperation("跌倒记录")
@PostMapping("failRecordList")
public ApiResponseEntity<List<String>> failRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportDayService.failRecordList(platElderIdDTO));
}
@ApiOperation("坐标记录")
......@@ -91,7 +91,7 @@ public class PlatElderReportDayController {
@ApiOperation("行为辐射")
@PostMapping("behaviorDistribution")
public ApiResponseEntity<List<PlatElderBehaviorDistributionVO>> behaviorDistribution(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportDayService.behaviorDistribution(platElderIdDTO));
}
}
......
......@@ -39,13 +39,13 @@ public class PlatElderReportWeekController {
@ApiOperation("综合评价")
@PostMapping("comprehensiveEvaluation")
public ApiResponseEntity<PlatElderComprehensiveEvaluationVO> comprehensiveEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportWeekService.comprehensiveEvaluation(platElderIdDTO));
}
@ApiOperation("睡眠评价")
@PostMapping("sleepEvaluation")
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportWeekService.sleepEvaluation(platElderIdDTO));
}
@ApiOperation("睡眠图表")
......@@ -57,37 +57,37 @@ public class PlatElderReportWeekController {
@ApiOperation("心率呼吸评价")
@PostMapping("heartRespiratoryEvaluation")
public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportWeekService.heartRespiratoryEvaluation(platElderIdDTO));
}
@ApiOperation("心率异常记录")
@PostMapping("heartExceptionRecordList")
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> heartExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportWeekService.heartExceptionRecordList(platElderIdDTO));
}
@ApiOperation("呼吸率异常记录")
@PostMapping("respiratoryExceptionRecordList")
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> respiratoryExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportWeekService.respiratoryExceptionRecordList(platElderIdDTO));
}
@ApiOperation("心率呼吸率")
@PostMapping("heartRespiratory")
public ApiResponseEntity<PlatElderRealTimeHeartRespiratoryWeekVO> heartRespiratory(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
public ApiResponseEntity<List<PlatElderRealTimeHeartRespiratoryWeekVO>> heartRespiratory(@RequestBody PlatElderReportDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderDayReportWeekService.heartRespiratory(platElderIdDTO));
}
@ApiOperation("行为异常记录")
@PostMapping("behaviorExceptionRecordList")
public ApiResponseEntity<List<PlatElderBehaviorExceptionRecordVO>> behaviorExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportWeekService.behaviorExceptionRecordList(platElderIdDTO));
}
@ApiOperation("跌倒记录")
@PostMapping("failRecordList")
public ApiResponseEntity<List<String>> failRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportWeekService.failRecordList(platElderIdDTO));
}
@ApiOperation("坐标记录")
......@@ -99,7 +99,7 @@ public class PlatElderReportWeekController {
@ApiOperation("行为辐射")
@PostMapping("behaviorDistribution")
public ApiResponseEntity<List<PlatElderBehaviorDistributionVO>> behaviorDistribution(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportWeekService.behaviorDistribution(platElderIdDTO));
}
}
......
package com.makeit.entity.platform.elder;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDate;
import com.baomidou.mybatisplus.annotation.TableId;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 长者呼吸心率日统计
* </p>
*
* @author eugene young
* @since 2023-09-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="PlatElderBreatheDayStat对象", description="长者呼吸心率日统计")
public class PlatElderBreatheDayStat extends BaseBusEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "长者id")
private String elderId;
@ApiModelProperty(value = "设备id")
private String deviceId;
@ApiModelProperty(value = "原始设备id")
private String oriDeviceId;
@ApiModelProperty(value = "日期")
private LocalDate day;
@ApiModelProperty(value = "心率最大值")
private Integer heartRateMax;
@ApiModelProperty(value = "心率最小值")
private Integer heartRateMin;
@ApiModelProperty(value = "心率平均值")
private Integer heartRateAvg;
@ApiModelProperty(value = "呼吸率最大值")
private Integer respiratoryRateMax;
@ApiModelProperty(value = "呼吸率最小值")
private Integer respiratoryRateMin;
@ApiModelProperty(value = "呼吸率平均值")
private Integer respiratoryRateAvg;
}
package com.makeit.mapper.platform.elder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.elder.PlatElderBreatheDayStat;
/**
* <p>
* 长者呼吸心率日统计 Mapper 接口
* </p>
*
* @author eugene young
* @since 2023-09-19
*/
public interface PlatElderBreatheDayStatMapper extends BaseMapper<PlatElderBreatheDayStat> {
}
package com.makeit.service.platform.elder;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.elder.PlatElderBreatheDayStat;
/**
* <p>
* 长者呼吸心率日统计 服务类
* </p>
*
* @author eugene young
* @since 2023-09-19
*/
public interface PlatElderBreatheDayStatService extends IService<PlatElderBreatheDayStat> {
}
......@@ -5,6 +5,7 @@ import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.report.day.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
......@@ -24,20 +25,28 @@ public interface PlatElderDayReportDayService {
PlatElderHeartRespiratoryEvaluationVO heartRespiratoryEvaluation(PlatElderReportDTO platElderIdDTO);
List<PlatElderHeartRespiratoryEvaluationRecordVO> heartRespiratoryExceptionRecordList(PlatElderReportDTO platElderIdDTO, String alarmType, LocalDateTime start, LocalDateTime end);
List<PlatElderHeartRespiratoryEvaluationRecordVO> heartExceptionRecordList(PlatElderReportDTO platElderIdDTO);
List<PlatElderHeartRespiratoryEvaluationRecordVO> respiratoryExceptionRecordList(PlatElderReportDTO platElderIdDTO);
List<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(PlatElderReportDTO platElderIdDTO);
List<PlatElderBehaviorExceptionRecordVO> behaviorExceptionRecordListInternal(PlatElderReportDTO platElderIdDTO, LocalDateTime start, LocalDateTime end);
List<PlatElderBehaviorExceptionRecordVO> behaviorExceptionRecordList(PlatElderReportDTO platElderIdDTO);
List<String> failRecordListInternal(PlatElderReportDTO platElderIdDTO, LocalDateTime start, LocalDateTime end);
List<String> failRecordList(PlatElderReportDTO platElderIdDTO);
List<PlatElderCoordinateVO> coordinateList(String elderId, String deviceId, LocalDateTime start, LocalDateTime end);
List<PlatElderCoordinateVO> coordinateList(PlatElderReportDTO platElderIdDTO);
List<PlatElderBehaviorDistributionVO> behaviorDistributionInternal(PlatElderReportDTO platElderIdDTO, List<LocalDate> nowList);
List<PlatElderBehaviorDistributionVO> behaviorDistribution(PlatElderReportDTO platElderIdDTO);
}
package com.makeit.service.platform.elder;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.report.day.PlatElderSleepEvaluationVO;
import com.makeit.vo.platform.elder.report.day.*;
import com.makeit.vo.platform.elder.report.week.PlatElderComprehensiveEvaluationVO;
import com.makeit.vo.platform.elder.report.week.PlatElderRealTimeHeartRespiratoryWeekVO;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
......@@ -16,8 +20,24 @@ import java.util.List;
*/
public interface PlatElderDayReportWeekService {
PlatElderComprehensiveEvaluationVO comprehensiveEvaluation(PlatElderReportDTO platElderIdDTO);
PlatElderSleepEvaluationVO sleepEvaluation(PlatElderReportDTO platElderIdDTO);
PlatElderHeartRespiratoryEvaluationVO heartRespiratoryEvaluation(PlatElderReportDTO platElderIdDTO);
List<PlatElderHeartRespiratoryEvaluationRecordVO> heartExceptionRecordList(PlatElderReportDTO platElderIdDTO);
List<PlatElderHeartRespiratoryEvaluationRecordVO> respiratoryExceptionRecordList(PlatElderReportDTO platElderIdDTO);
List<PlatElderRealTimeHeartRespiratoryWeekVO> heartRespiratory(PlatElderReportDTO platElderIdDTO);
List<PlatElderBehaviorExceptionRecordVO> behaviorExceptionRecordList(PlatElderReportDTO platElderIdDTO);
List<String> failRecordList(PlatElderReportDTO platElderIdDTO);
List<PlatElderCoordinateVO> coordinateList(PlatElderReportDTO platElderIdDTO);
List<PlatElderBehaviorDistributionVO> behaviorDistribution(PlatElderReportDTO platElderIdDTO);
}
package com.makeit.service.platform.elder.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.elder.PlatElderBreatheDayStat;
import com.makeit.mapper.platform.elder.PlatElderBreatheDayStatMapper;
import com.makeit.service.platform.elder.PlatElderBreatheDayStatService;
import org.springframework.stereotype.Service;
/**
* <p>
* 长者呼吸心率日统计 服务实现类
* </p>
*
* @author eugene young
* @since 2023-09-19
*/
@Service
public class PlatElderBreatheDayStatServiceImpl extends ServiceImpl<PlatElderBreatheDayStatMapper, PlatElderBreatheDayStat> implements PlatElderBreatheDayStatService {
}
......@@ -16,7 +16,6 @@ import com.makeit.module.iot.vo.fall.DeviceInfoContentFall;
import com.makeit.module.iot.vo.space.DeviceInfoContentSpace;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.*;
import com.makeit.utils.LongTimestampUtil;
import com.makeit.utils.data.convert.StreamUtil;
......@@ -34,8 +33,6 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;
@Service
public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDayService {
......@@ -180,6 +177,19 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
private List<PlatElderHeartRespiratoryEvaluationRecordVO> heartRespiratoryExceptionRecordList(PlatElderReportDTO platElderIdDTO, String alarmType) {
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
return heartRespiratoryExceptionRecordList(platElderIdDTO, alarmType, start, end);
}
@Override
public List<PlatElderHeartRespiratoryEvaluationRecordVO> heartRespiratoryExceptionRecordList(PlatElderReportDTO platElderIdDTO, String alarmType, LocalDateTime start, LocalDateTime end) {
PlatDevice device = platElderRealTimeService.getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (device == null) {
return new ArrayList<>(10);
......@@ -188,6 +198,8 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
List<PlatAlarmRecord> recordList = platAlarmRecordService.list(new QueryWrapper<PlatAlarmRecord>().lambda()
.eq(PlatAlarmRecord::getAlarmType, alarmType)
.eq(PlatAlarmRecord::getDeviceId, device.getId())
.ge(PlatAlarmRecord::getAlarmDate, start)
.le(PlatAlarmRecord::getAlarmDate, end)
.orderByDesc(PlatAlarmRecord::getAlarmDate)
);
......@@ -247,18 +259,13 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
}
@Override
public List<PlatElderBehaviorExceptionRecordVO> behaviorExceptionRecordList(PlatElderReportDTO platElderIdDTO) {
public List<PlatElderBehaviorExceptionRecordVO> behaviorExceptionRecordListInternal(PlatElderReportDTO platElderIdDTO, LocalDateTime start, LocalDateTime end) {
List<PlatDevice> platDeviceList = platElderRealTimeService.getSpaceDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (CollectionUtils.isEmpty(platDeviceList)) {
return new ArrayList<>(10);
}
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
List<PlatAlarmRecord> recordList = platAlarmRecordService.list(new QueryWrapper<PlatAlarmRecord>().lambda()
.eq(PlatAlarmRecord::getAlarmType, PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue())
.in(PlatAlarmRecord::getDeviceId, StreamUtil.mapId(platDeviceList, PlatDevice::getId))
......@@ -283,19 +290,27 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
}
@Override
public List<String> failRecordList(PlatElderReportDTO platElderIdDTO) {
List<PlatDevice> platDeviceList = platElderRealTimeService.getFallDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (CollectionUtils.isEmpty(platDeviceList)) {
return new ArrayList<>(10);
}
@Override
public List<PlatElderBehaviorExceptionRecordVO> behaviorExceptionRecordList(PlatElderReportDTO platElderIdDTO) {
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
return behaviorExceptionRecordListInternal(platElderIdDTO, start, end);
}
@Override
public List<String> failRecordListInternal(PlatElderReportDTO platElderIdDTO, LocalDateTime start, LocalDateTime end) {
List<PlatDevice> platDeviceList = platElderRealTimeService.getFallDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (CollectionUtils.isEmpty(platDeviceList)) {
return new ArrayList<>(10);
}
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<String> voList = new ArrayList<>(10);
......@@ -314,6 +329,18 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
return voList;
}
@Override
public List<String> failRecordList(PlatElderReportDTO platElderIdDTO) {
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
return failRecordListInternal(platElderIdDTO, start, end);
}
@Override
public List<PlatElderCoordinateVO> coordinateList(String elderId, String deviceId, LocalDateTime start, LocalDateTime end) {
List<PlatDevice> platDeviceList = platElderRealTimeService.getSpaceDevice(elderId, deviceId);
......@@ -355,7 +382,7 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
}
@Override
public List<PlatElderBehaviorDistributionVO> behaviorDistribution(PlatElderReportDTO platElderIdDTO) {
public List<PlatElderBehaviorDistributionVO> behaviorDistributionInternal(PlatElderReportDTO platElderIdDTO, List<LocalDate> nowList) {
List<PlatDevice> platDeviceList = platElderRealTimeService.getSpaceDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
......@@ -365,18 +392,13 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
List<PlatElderBehaviorDistributionVO> voList = new ArrayList<>(10);
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
List<PlatElderBehaviorDistributionVO> finalVoList = voList;
platDeviceList.forEach(e -> {
List<PlatDayDurationRecord> recordList = platDayDurationRecordService.list(new QueryWrapper<PlatDayDurationRecord>().lambda()
.eq(PlatDayDurationRecord::getDeviceId, e.getId())
.eq(PlatDayDurationRecord::getDay, dateTimeFormatter.format(now))
.in(PlatDayDurationRecord::getDay, StreamUtil.map(nowList, dateTimeFormatter::format))
);
finalVoList.addAll(StreamUtil.map(recordList, i -> {
......@@ -408,4 +430,16 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
return voList;
}
@Override
public List<PlatElderBehaviorDistributionVO> behaviorDistribution(PlatElderReportDTO platElderIdDTO) {
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
return behaviorDistributionInternal(platElderIdDTO, Arrays.asList(now));
}
}
package com.makeit.service.platform.elder.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.PlatElderBreatheAnalysis;
import com.makeit.entity.platform.elder.PlatElderBreatheDayStat;
import com.makeit.entity.platform.elder.PlatElderSleep;
import com.makeit.entity.platform.elder.PlatElderSleepAnalysis;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.service.platform.elder.PlatElderDayReportWeekService;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.elder.PlatElderSleepAnalysisService;
import com.makeit.module.iot.vo.analysis.EvaluateReportVO;
import com.makeit.service.platform.elder.*;
import com.makeit.service.saas.SaasElderReportConfigService;
import com.makeit.service.saas.SaasSleepEvaluateReportService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
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.report.day.PlatElderSleepEvaluationVO;
import com.makeit.vo.platform.elder.report.day.*;
import com.makeit.vo.platform.elder.report.week.PlatElderComprehensiveEvaluationVO;
import com.makeit.vo.platform.elder.report.week.PlatElderRealTimeHeartRespiratoryWeekVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeekService {
@Autowired
private PlatElderRealTimeService platElderRealTimeService;
@Autowired
private PlatElderDayReportDayService platElderDayReportDayService;
@Autowired
private PlatElderSleepAnalysisService platElderSleepAnalysisService;
@Autowired
private PlatElderService platElderService;
private SaasSleepEvaluateReportService saasSleepEvaluateReportService;
@Autowired
private SaasElderReportConfigService saasElderReportConfigService;
@Autowired
private PlatElderBreatheAnalysisService platElderBreatheAnalysisService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
private PlatElderBreatheDayStatService platElderBreatheDayStatService;
private LocalDateTime weekStartDateTime(LocalDateTime defaultTime) {
return weekStartDateTime(LocalDate.now(), defaultTime);
......@@ -104,6 +125,23 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
return sunday;
}
@Override
public PlatElderComprehensiveEvaluationVO comprehensiveEvaluation(PlatElderReportDTO platElderIdDTO) {
PlatElderSleepEvaluationVO platElderSleepEvaluationVO = sleepEvaluation(platElderIdDTO);
PlatElderHeartRespiratoryEvaluationVO platElderHeartRespiratoryEvaluationVO = heartRespiratoryEvaluation(platElderIdDTO);
PlatElderComprehensiveEvaluationVO platElderComprehensiveEvaluationVO = new PlatElderComprehensiveEvaluationVO();
platElderComprehensiveEvaluationVO.setScore((platElderSleepEvaluationVO.getScore() + platElderHeartRespiratoryEvaluationVO.getScore()) / 2);
EvaluateReportVO evaluateReportVO = saasElderReportConfigService.getByScore(platElderSleepEvaluationVO.getScore());
if (evaluateReportVO != null) {
platElderComprehensiveEvaluationVO.setEvaluation(evaluateReportVO.getEvaluate());
}
return platElderComprehensiveEvaluationVO;
}
@Override
public PlatElderSleepEvaluationVO sleepEvaluation(PlatElderReportDTO platElderIdDTO) {
......@@ -135,15 +173,148 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
platElderSleepEvaluationVO.setSleepDuration(sleepDuration);
platElderSleepEvaluationVO.setRestDuration(restDuration);
// platElderSleepEvaluationVO.setResult();
// platElderSleepEvaluationVO.setEvaluation();
EvaluateReportVO evaluateReportVO = saasSleepEvaluateReportService.getByScore(platElderSleepEvaluationVO.getScore());
if (evaluateReportVO != null) {
platElderSleepEvaluationVO.setResult(evaluateReportVO.getResult());
platElderSleepEvaluationVO.setEvaluation(evaluateReportVO.getEvaluate());
}
return platElderSleepEvaluationVO;
}
@Override
public PlatElderHeartRespiratoryEvaluationVO heartRespiratoryEvaluation(PlatElderReportDTO platElderIdDTO) {
LocalDate weekStartDate = weekStartDate(platElderIdDTO.getStartTime());
LocalDate weekEndDate = weekStartDate(platElderIdDTO.getEndTime());
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
List<PlatElderBreatheAnalysis> breatheAnalyses = platElderBreatheAnalysisService.list(new QueryWrapper<PlatElderBreatheAnalysis>().lambda()
.ge(PlatElderBreatheAnalysis::getCurrentDate, dateTimeFormatter.format(weekStartDate))
.le(PlatElderBreatheAnalysis::getCurrentDate, dateTimeFormatter.format(weekEndDate))
);
int score = 0;
if (CollectionUtils.isNotEmpty(breatheAnalyses)) {
score = StreamUtil.reduce(breatheAnalyses, e -> Integer.valueOf(e.getBreatheScore() + ""), 0, Integer::sum) / breatheAnalyses.size();
}
PlatElderHeartRespiratoryEvaluationVO platElderSleepEvaluationVO = new PlatElderHeartRespiratoryEvaluationVO();
platElderSleepEvaluationVO.setScore(score);
//TODO ywc 缺这两个
//platElderSleepEvaluationVO.setResult();
//platElderSleepEvaluationVO.setEvaluation();
return platElderSleepEvaluationVO;
}
@Override
public List<PlatElderHeartRespiratoryEvaluationRecordVO> heartExceptionRecordList(PlatElderReportDTO platElderIdDTO) {
LocalDateTime weekStartDateTime = weekStartDateTime(platElderIdDTO.getStartTime());
LocalDateTime weekEndDateTime = weekStartDateTime(platElderIdDTO.getEndTime());
return platElderDayReportDayService.heartRespiratoryExceptionRecordList(platElderIdDTO, PlatAlarmConfigEnum.AlarmTypeEnum.HEART.getValue(), weekStartDateTime, weekEndDateTime);
}
@Override
public List<PlatElderHeartRespiratoryEvaluationRecordVO> respiratoryExceptionRecordList(PlatElderReportDTO platElderIdDTO) {
LocalDateTime weekStartDateTime = weekStartDateTime(platElderIdDTO.getStartTime());
LocalDateTime weekEndDateTime = weekStartDateTime(platElderIdDTO.getEndTime());
return platElderDayReportDayService.heartRespiratoryExceptionRecordList(platElderIdDTO, PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE.getValue(), weekStartDateTime, weekEndDateTime);
}
@Override
public List<PlatElderRealTimeHeartRespiratoryWeekVO> heartRespiratory(PlatElderReportDTO platElderIdDTO) {
LocalDate weekStartDate = weekStartDate(platElderIdDTO.getStartTime());
LocalDate weekEndDate = weekStartDate(platElderIdDTO.getEndTime());
List<LocalDate> dateList = LocalDateTimeUtils.getDateSeries(weekStartDate, weekEndDate);
String deviceId = null;
String oriDeviceId = null;
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (platDevice != null) {
deviceId = platDevice.getId();
oriDeviceId = platDevice.getOriDeviceId();
}
LambdaQueryWrapper<PlatElderBreatheDayStat> lambdaQueryWrapper = new QueryWrapper<PlatElderBreatheDayStat>().lambda();
if (StringUtils.isNotBlank(platElderIdDTO.getElderId())) {
lambdaQueryWrapper.eq(PlatElderBreatheDayStat::getElderId, platElderIdDTO.getElderId());
}
if (StringUtils.isNotBlank(deviceId)) {
lambdaQueryWrapper.or().eq(PlatElderBreatheDayStat::getDeviceId, deviceId);
}
if (StringUtils.isNotBlank(oriDeviceId)) {
lambdaQueryWrapper.or().eq(PlatElderBreatheDayStat::getOriDeviceId, oriDeviceId);
}
lambdaQueryWrapper.orderByAsc(PlatElderBreatheDayStat::getDay);
List<PlatElderBreatheDayStat> breatheDayStatList = platElderBreatheDayStatService.list(lambdaQueryWrapper);
Map<LocalDate, PlatElderBreatheDayStat> map = StreamUtil.toMap(breatheDayStatList, PlatElderBreatheDayStat::getDay);
List<PlatElderRealTimeHeartRespiratoryWeekVO> voList = new ArrayList<>(10);
dateList.forEach(e -> {
PlatElderBreatheDayStat stat = map.get(e);
if (stat != null) {
voList.add(BeanDtoVoUtils.convert(stat, PlatElderRealTimeHeartRespiratoryWeekVO.class));
} else {
PlatElderRealTimeHeartRespiratoryWeekVO vo = new PlatElderRealTimeHeartRespiratoryWeekVO();
vo.setDay(e);
voList.add(vo);
}
});
return voList;
}
@Override
public List<PlatElderBehaviorExceptionRecordVO> behaviorExceptionRecordList(PlatElderReportDTO platElderIdDTO) {
LocalDateTime weekStartDateTime = weekStartDateTime(platElderIdDTO.getStartTime());
LocalDateTime weekEndDateTime = weekStartDateTime(platElderIdDTO.getEndTime());
return platElderDayReportDayService.behaviorExceptionRecordListInternal(platElderIdDTO, weekStartDateTime, weekEndDateTime);
}
@Override
public List<String> failRecordList(PlatElderReportDTO platElderIdDTO) {
LocalDateTime weekStartDateTime = weekStartDateTime(platElderIdDTO.getStartTime());
LocalDateTime weekEndDateTime = weekStartDateTime(platElderIdDTO.getEndTime());
return platElderDayReportDayService.failRecordListInternal(platElderIdDTO, weekStartDateTime, weekEndDateTime);
}
@Override
public List<PlatElderCoordinateVO> coordinateList(PlatElderReportDTO platElderIdDTO) {
return platElderDayReportDayService.coordinateList(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId(), weekStartDateTime(platElderIdDTO.getStartTime()), weekEndDateTime(platElderIdDTO.getEndTime()));
}
@Override
public List<PlatElderBehaviorDistributionVO> behaviorDistribution(PlatElderReportDTO platElderIdDTO) {
LocalDate weekStartDate = weekStartDate(platElderIdDTO.getStartTime());
LocalDate weekEndDate = weekStartDate(platElderIdDTO.getEndTime());
List<LocalDate> dateList = LocalDateTimeUtils.getDateSeries(weekStartDate, weekEndDate);
return platElderDayReportDayService.behaviorDistributionInternal(platElderIdDTO, dateList);
}
}
......@@ -3,6 +3,7 @@ package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.dto.saas.analysis.SaasElderReportConfigDTO;
import com.makeit.entity.saas.analysis.SaasElderReportConfig;
import com.makeit.module.iot.vo.analysis.EvaluateReportVO;
/**
* <p>
......@@ -19,4 +20,8 @@ public interface SaasElderReportConfigService extends IService<SaasElderReportCo
void add(SaasElderReportConfigDTO dto);
void edit(SaasElderReportConfigDTO dto);
EvaluateReportVO getByScoreInternal(String resultContent, long totalScore);
EvaluateReportVO getByScore(long totalScore);
}
package com.makeit.service.saas.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.saas.analysis.SaasElderReportConfigDTO;
import com.makeit.entity.saas.analysis.SaasElderReportConfig;
import com.makeit.entity.saas.analysis.SaasSleepEvaluateReport;
import com.makeit.mapper.saas.analysis.SaasElderReportConfigMapper;
import com.makeit.module.iot.vo.analysis.EvaluateReportVO;
import com.makeit.service.saas.SaasElderReportConfigService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 长者报告配置 服务实现类
......@@ -38,4 +45,36 @@ public class SaasElderReportConfigServiceImpl extends ServiceImpl<SaasElderRepor
BeanUtils.copyProperties(dto,entity);
saveOrUpdate(entity);
}
@Override
public EvaluateReportVO getByScoreInternal(String resultContent,long totalScore) {
List<EvaluateReportVO> evaluateReportList = JSON.parseArray(resultContent, EvaluateReportVO.class);
// 根据睡眠报告结果配置得出最后的睡眠评分
EvaluateReportVO finalReport = new EvaluateReportVO();
for (EvaluateReportVO evaluateReportVO : evaluateReportList) {
String[] scoreRange = evaluateReportVO.getScoreRange().split("~");
long scoreRangeStart = Long.parseLong(scoreRange[0]);
long scoreRangeEnd = Long.parseLong(scoreRange[1]);
if (scoreRangeStart <= totalScore && scoreRangeEnd >= totalScore) {
finalReport = evaluateReportVO;
}
}
return finalReport;
}
@Override
public EvaluateReportVO getByScore(long totalScore) {
SaasElderReportConfig saasElderReportConfig = getOne(new QueryWrapper<SaasElderReportConfig>().lambda()
.orderByDesc(BaseEntity::getCreateBy)
.last("limit 1"));
String resultContent = saasElderReportConfig.getResultContent();
return getByScoreInternal(resultContent,totalScore);
}
}
......@@ -8,8 +8,10 @@ import com.makeit.dto.saas.analysis.SaasSleepEvaluateReportDTO;
import com.makeit.entity.saas.analysis.SaasSleepEvaluateReport;
import com.makeit.mapper.saas.analysis.SaasSleepEvaluateReportMapper;
import com.makeit.module.iot.vo.analysis.EvaluateReportVO;
import com.makeit.service.saas.SaasElderReportConfigService;
import com.makeit.service.saas.SaasSleepEvaluateReportService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
......@@ -25,6 +27,8 @@ import java.util.List;
@Service
public class SaasSleepEvaluateReportServiceImpl extends ServiceImpl<SaasSleepEvaluateReportMapper, SaasSleepEvaluateReport> implements SaasSleepEvaluateReportService {
@Autowired
private SaasElderReportConfigService saasElderReportConfigService;
@Override
public SaasSleepEvaluateReport view(String id) {
......@@ -51,18 +55,8 @@ public class SaasSleepEvaluateReportServiceImpl extends ServiceImpl<SaasSleepEva
.orderByDesc(BaseEntity::getCreateBy)
.last("limit 1"));
String resultContent = sleepEvaluateReport.getResultContent();
List<EvaluateReportVO> evaluateReportList = JSON.parseArray(resultContent, EvaluateReportVO.class);
// 根据睡眠报告结果配置得出最后的睡眠评分
EvaluateReportVO finalReport = new EvaluateReportVO();
for (EvaluateReportVO evaluateReportVO : evaluateReportList) {
String[] scoreRange = evaluateReportVO.getScoreRange().split("~");
long scoreRangeStart = Long.parseLong(scoreRange[0]);
long scoreRangeEnd = Long.parseLong(scoreRange[1]);
if (scoreRangeStart <= totalScore && scoreRangeEnd >= totalScore) {
finalReport = evaluateReportVO;
}
}
return finalReport;
return saasElderReportConfigService.getByScoreInternal(resultContent, totalScore);
}
}
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