Commit e95e9b55 by huangjy

Merge remote-tracking branch 'origin/dev' into dev

parents 9951dd1b d6862286
ALTER TABLE `plat_device_other`
ALTER TABLE `plat_device_other`
......@@ -91,3 +91,21 @@ ALTER TABLE `plat_alarm_record`
ALTER TABLE `plat_tenant`
ADD COLUMN `open_api_url` varchar(128) COMMENT '第三方接口url' AFTER `secret`;
CREATE TABLE `plat_elder_breathe_heart_rate_record` (
`id` varchar(64) NOT NULL COMMENT 'id',
`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 ',
`elder_id` varchar(64) DEFAULT NULL COMMENT '长者id',
`report_time` bigint(20) DEFAULT NULL COMMENT '上报时间',
`heart_rate` int(11) DEFAULT NULL COMMENT '心率',
`respiratory_rate` int(11) DEFAULT NULL COMMENT '呼吸率',
`body_move` int(11) DEFAULT NULL COMMENT '体动值',
`device_id` varchar(255) DEFAULT NULL COMMENT '设备id',
`iot_device_id` varchar(64) DEFAULT NULL COMMENT 'iot设备id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='长者呼吸心率记录';
\ No newline at end of file
......@@ -45,6 +45,8 @@ public class PlatElderSleepController {
@Autowired
private PlatElderCoordinateRecordService platElderCoordinateRecordService;
@Autowired
private PlatElderBreatheHeartRateRecordService platElderBreatheHeartRateRecordService;
@Autowired
private HuiNengService huiNengService;
......@@ -90,6 +92,15 @@ public class PlatElderSleepController {
return ApiResponseUtils.success();
}
@ApiOperation("测试")
@PostMapping("test6")
@AuthIgnore
@TenantIdIgnore
public ApiResponseEntity<Void> breatheHeartRateRecordTask() {
platElderBreatheHeartRateRecordService.breatheHeartRateRecordTask();
return ApiResponseUtils.success();
}
@ApiOperation("编辑设备属性")
@PostMapping("editDeviceProperties")
@AuthIgnore
......
package com.makeit.entity.platform.elder;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "PlatElderBreatheHeartRateRecord对象", description = "长者呼吸心率记录")
public class PlatElderBreatheHeartRateRecord extends BaseBusEntity {
@ApiModelProperty(value = "长者id")
private String elderId;
@ApiModelProperty(value = "上报时间")
private Long reportTime;
@ApiModelProperty(value = "心率")
private Integer heartRate;
@ApiModelProperty(value = "呼吸率")
private Integer respiratoryRate;
@ApiModelProperty(value = "体动值")
private Integer bodyMove;
@ApiModelProperty(value = "设备Id")
private String deviceId;
@ApiModelProperty(value = "设备Id")
private String iotDeviceId;
}
......@@ -47,12 +47,5 @@ public class PlatElderSleepAnalysis extends BaseBusEntity {
@ApiModelProperty(value = "翻身次数")
private Integer turnedCount;
// @TableField(exist = false)
// private String remark;
//
// @ApiModelProperty(value = "睡眠评分")
// @TableField(exist = false)
// private String oldSleepScore;
}
package com.makeit.mapper.platform.elder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.elder.PlatElderBreatheHeartRateRecord;
public interface PlatElderBreatheHeartRateRecordMapper extends BaseMapper<PlatElderBreatheHeartRateRecord> {
}
package com.makeit.service.platform.elder;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.elder.PlatElderBreatheHeartRateRecord;
import java.util.List;
public interface PlatElderBreatheHeartRateRecordService extends IService<PlatElderBreatheHeartRateRecord> {
void breatheHeartRateRecordTask();
List<PlatElderBreatheHeartRateRecord> list(String elderId, long start, long end);
}
......@@ -14,4 +14,5 @@ import com.makeit.entity.platform.elder.PlatElderCoordinateRecord;
public interface PlatElderCoordinateRecordService extends IService<PlatElderCoordinateRecord> {
void coordinateRecordTask();
}
......@@ -3,6 +3,7 @@ package com.makeit.service.platform.elder;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.elder.PlatElderSleep;
import com.makeit.entity.platform.elder.PlatElderSleepAnalysis;
import com.makeit.entity.saas.analysis.SaasSleepEvaluateStandardReport;
import java.util.List;
......@@ -19,4 +20,7 @@ public interface PlatElderSleepService extends IService<PlatElderSleep> {
List<PlatElderSleepAnalysis> elderSleepSleepAnalysisTask(Integer month, Integer day);
void test1();
String calculateScores(long daySleepTime, long dayRestTime, long deepTime, long soberTime, long lightTime,
SaasSleepEvaluateStandardReport evaluateStandardReport);
}
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.elder.PlatElderBreatheHeartRateRecord;
import com.makeit.mapper.platform.elder.PlatElderBreatheHeartRateRecordMapper;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.service.platform.elder.PlatElderBreatheHeartRateRecordService;
import com.makeit.service.platform.elder.PlatElderRealTimeService;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.time.LocalDateTimeUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class PlatElderBreatheHeartRateRecordServiceImpl extends ServiceImpl<PlatElderBreatheHeartRateRecordMapper, PlatElderBreatheHeartRateRecord> implements PlatElderBreatheHeartRateRecordService {
@Autowired
private PlatElderService platElderService;
@Autowired
private PlatElderRealTimeService platElderRealTimeService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
@Override
public void breatheHeartRateRecordTask() {
LocalDate nowDate = LocalDate.now();
LocalDate yesDate = nowDate.minusDays(1);
LocalDateTime start = LocalDateTimeUtils.getDayStart(yesDate);
LocalDateTime end = LocalDateTimeUtils.getDayEnd(yesDate);
List<PlatElder> elderList = platElderService.list(new QueryWrapper<PlatElder>().lambda()
.isNotNull(PlatElder::getBedId));
if (CollectionUtils.isEmpty(elderList)) {
return;
}
List<PlatElderBreatheHeartRateRecord> list = Lists.newArrayList();
for (PlatElder e : elderList) {
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(e.getId(), null);
if (platDevice == null) {
continue;
}
List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, start, end);
List<PlatElderBreatheHeartRateRecord> data = StreamUtil.map(breatheList, b -> {
PlatElderBreatheHeartRateRecord record = new PlatElderBreatheHeartRateRecord();
record.setElderId(e.getId());
record.setReportTime(b.getTimestamp());
record.setHeartRate(b.getProperties().getHr());
record.setRespiratoryRate(b.getProperties().getBr());
record.setBodyMove(b.getProperties().getBodymove());
record.setDeviceId(platDevice.getId());
record.setIotDeviceId(platDevice.getOriDeviceId());
record.setTenantId(e.getTenantId());
return record;
});
list.addAll(data);
}
saveBatch(list);
}
@Override
public List<PlatElderBreatheHeartRateRecord> list(String elderId, long start, long end) {
LambdaQueryWrapper<PlatElderBreatheHeartRateRecord> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatElderBreatheHeartRateRecord::getElderId, elderId);
queryWrapper.ge(PlatElderBreatheHeartRateRecord::getReportTime, start);
queryWrapper.le(PlatElderBreatheHeartRateRecord::getReportTime, end);
return list(queryWrapper);
}
}
......@@ -4,22 +4,24 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.*;
import com.makeit.entity.saas.analysis.SaasSleepEvaluateStandardReport;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.analysis.EvaluateReportVO;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
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.elder.*;
import com.makeit.service.saas.SaasSleepEvaluateReportService;
import com.makeit.service.saas.SaasSleepEvaluateStandardReportService;
import com.makeit.utils.LongTimestampUtil;
import com.makeit.utils.data.convert.MathUtil;
import com.makeit.utils.data.convert.StreamUtil;
......@@ -70,6 +72,10 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
private SaasSleepEvaluateReportService sleepEvaluateReportService;
@Autowired
private PlatElderCoordinateRecordService platElderCoordinateRecordService;
@Autowired
private PlatElderBreatheHeartRateRecordService platElderBreatheHeartRateRecordService;
@Autowired
private SaasSleepEvaluateStandardReportService saasSleepEvaluateStandardReportService;
private static LocalDateTime dayStartNow(LocalDate now) {
return LocalDateTimeUtils.getDayStart(now);
......@@ -116,7 +122,12 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
if (platElderSleepAnalysis == null) {
return platElderSleepEvaluationVO;
}
String sleepScore = platElderSleepAnalysis.getSleepScore();
SaasSleepEvaluateStandardReport evaluateStandardReport = saasSleepEvaluateStandardReportService.getOne(
new QueryWrapper<SaasSleepEvaluateStandardReport>().lambda().orderByDesc(BaseEntity::getCreateDate)
.last("limit 1"));
// String sleepScore = platElderSleepAnalysis.getSleepScore();
String sleepScore = platElderSleepService.calculateScores(Long.parseLong(platElderSleepAnalysis.getSleepTime()),
Long.parseLong(platElderSleepAnalysis.getRestTime()), 0, 0, 0, evaluateStandardReport);
EvaluateReportVO evaluateReport = sleepEvaluateReportService.getByScore(Long.parseLong(sleepScore));
......@@ -268,25 +279,20 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
@Override
public List<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(PlatElderReportDTO platElderIdDTO) {
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (platDevice == null) {
return new ArrayList<>(10);
}
LocalDate now = Optional.ofNullable(platElderIdDTO.getNow()).orElse(LocalDate.now());
LocalDateTime start = dayStartNow(now);
LocalDateTime end = dayEndNow(now);
long reportTimeStart = LocalDateTimeUtils.getMilliSecond(start);
long reportTimeEnd = LocalDateTimeUtils.getMilliSecond(end);
List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, start, end);
return StreamUtil.map(breatheList, e -> {
List<PlatElderBreatheHeartRateRecord> list = platElderBreatheHeartRateRecordService.list(platElderIdDTO.getElderId(), reportTimeStart, reportTimeEnd);
return StreamUtil.map(list, e -> {
PlatElderRealTimeHeartRespiratoryVO vo = new PlatElderRealTimeHeartRespiratoryVO();
vo.setTime(LongTimestampUtil.toLocalDateTime(e.getTimestamp()));
vo.setHeartRate(e.getProperties().getHr());
vo.setRespiratoryRate(e.getProperties().getBr());
vo.setTime(LongTimestampUtil.toLocalDateTime(e.getReportTime()));
vo.setHeartRate(e.getHeartRate());
vo.setRespiratoryRate(e.getRespiratoryRate());
return vo;
});
......
......@@ -553,7 +553,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
SaasSleepEvaluateStandardReport evaluateStandardReport = saasSleepEvaluateStandardReportService.getOne(new QueryWrapper<SaasSleepEvaluateStandardReport>().lambda()
.orderByDesc(BaseEntity::getCreateBy)
.orderByDesc(BaseEntity::getCreateDate)
.last("limit 1"));
// 算出每一段睡觉的不同睡眠类型的时间段
......@@ -715,22 +715,20 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleepAnalysis.setActionCount(totalActionCount);
elderSleepAnalysis.setTurnedCount(totalTurnedCount);
elderSleepAnalysis.setHappenDate(currentDate);
// elderSleepAnalysis.setOldSleepScore(String.valueOf(totalScore));
elderSleepAnalysis.setSleepScore(score);
elderSleepAnalysis.setSleepTime(String.valueOf(daySleepTime));
elderSleepAnalysis.setRestTime(String.valueOf(dayRestTime));
elderSleepAnalysis.setSleepResult(sleepReport.getResult());
elderSleepAnalysis.setTenantId(tenantId);
elderSleepAnalysis.setSleepEvaluate(sleepReport.getEvaluate());
// elderSleepAnalysis.setRemark(String.format("sleepScore:%s + deepScore:%s + lightScore:%s - soberScore:%s"
// , sleepScore, deepScore, lightScore, soberScore));
result.add(elderSleepAnalysis);
platElderSleepAnalysisService.save(elderSleepAnalysis);
}
return result;
}
private String calculateScores(long daySleepTime, long dayRestTime, long deepTime, long soberTime, long lightTime,
@Override
public String calculateScores(long daySleepTime, long dayRestTime, long deepTime, long soberTime, long lightTime,
SaasSleepEvaluateStandardReport evaluateStandardReport) {
List<SleepConfigVO> sleepDeepConfigList = JSON.parseArray(evaluateStandardReport.getSleepDeepConfig(), SleepConfigVO.class);
List<SleepConfigVO> soberConfigList = JSON.parseArray(evaluateStandardReport.getSoberConfig(), SleepConfigVO.class);
......
......@@ -51,6 +51,7 @@ public class PlatRegionSettingFixServiceImpl extends ServiceImpl<PlatRegionSetti
queryWrapper.ge(PlatRegionSettingFix::getHappenDate, dateTimeFormatter.format(dto.getStartTime()));
queryWrapper.le(PlatRegionSettingFix::getHappenDate, dateTimeFormatter.format(dto.getEndTime()));
}
queryWrapper.orderByDesc(PlatRegionSettingFix::getCreateDate);
List<PlatRegionSettingFix> list = this.list(queryWrapper);
list = list.stream().filter(distinctByKey(PlatRegionSettingFix::getDeviceId)).collect(Collectors.toList());
List<String> deviceIds = list.stream().map(PlatRegionSettingFix::getDeviceId).collect(Collectors.toList());
......
package com.makeit.task;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.elder.PlatElderBreatheAnalysisService;
import com.makeit.service.platform.elder.PlatElderBreatheDayStatService;
import com.makeit.service.platform.elder.PlatElderCoordinateRecordService;
import com.makeit.service.platform.elder.PlatElderSleepService;
import com.makeit.service.platform.elder.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
......@@ -24,6 +21,8 @@ public class PlatElderReportTask {
private PlatElderBreatheAnalysisService platElderBreatheAnalysisService;
@Autowired
private PlatElderCoordinateRecordService platElderCoordinateRecordService;
@Autowired
private PlatElderBreatheHeartRateRecordService platElderBreatheHeartRateRecordService;
......@@ -56,6 +55,17 @@ public class PlatElderReportTask {
}
/**
* 生成长者呼吸心率
*/
@Scheduled(cron = "0 30 2 * * ?")
@TenantIdIgnore
public void breatheHeartRateRecordTask() {
log.info("开始生成长者呼吸心率");
platElderBreatheHeartRateRecordService.breatheHeartRateRecordTask();
log.info("生成长者呼吸心率结束");
}
/**
* 长者睡眠分析
*/
@Scheduled(cron = "0 0 8 * * ?")
......
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