Commit 32e2935d by 汪志阳

fix:长者管理-日报bug修改

parent a717e702
...@@ -6,6 +6,7 @@ import com.makeit.common.response.ApiResponseEntity; ...@@ -6,6 +6,7 @@ import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO; import com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO;
import com.makeit.entity.platform.elder.PlatElderBreatheAnalysis; import com.makeit.entity.platform.elder.PlatElderBreatheAnalysis;
import com.makeit.entity.platform.elder.PlatElderSleepAnalysis;
import com.makeit.external.huineng.HuiNengService; import com.makeit.external.huineng.HuiNengService;
import com.makeit.global.annotation.AuthIgnore; import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore; import com.makeit.global.aspect.tenant.TenantIdIgnore;
...@@ -74,11 +75,11 @@ public class PlatElderSleepController { ...@@ -74,11 +75,11 @@ public class PlatElderSleepController {
} }
@ApiOperation("测试") @ApiOperation("测试")
@PostMapping("test4") @GetMapping("test4")
@AuthIgnore @AuthIgnore
public ApiResponseEntity<Void> elderSleepSleepAnalysisTask() { public ApiResponseEntity<List<PlatElderSleepAnalysis>> elderSleepSleepAnalysisTask(@RequestParam Integer month,
platElderSleepService.elderSleepSleepAnalysisTask(); @RequestParam Integer day) {
return ApiResponseUtils.success(); return ApiResponseUtils.success(platElderSleepService.elderSleepSleepAnalysisTask(month, day));
} }
@ApiOperation("测试") @ApiOperation("测试")
......
...@@ -47,5 +47,12 @@ public class PlatElderSleepAnalysis extends BaseBusEntity { ...@@ -47,5 +47,12 @@ public class PlatElderSleepAnalysis extends BaseBusEntity {
@ApiModelProperty(value = "翻身次数") @ApiModelProperty(value = "翻身次数")
private Integer turnedCount; private Integer turnedCount;
// @TableField(exist = false)
// private String remark;
//
// @ApiModelProperty(value = "睡眠评分")
// @TableField(exist = false)
// private String oldSleepScore;
} }
...@@ -2,6 +2,9 @@ package com.makeit.service.platform.elder; ...@@ -2,6 +2,9 @@ package com.makeit.service.platform.elder;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.elder.PlatElderSleep; import com.makeit.entity.platform.elder.PlatElderSleep;
import com.makeit.entity.platform.elder.PlatElderSleepAnalysis;
import java.util.List;
/** /**
* <p> * <p>
...@@ -13,7 +16,7 @@ import com.makeit.entity.platform.elder.PlatElderSleep; ...@@ -13,7 +16,7 @@ import com.makeit.entity.platform.elder.PlatElderSleep;
*/ */
public interface PlatElderSleepService extends IService<PlatElderSleep> { public interface PlatElderSleepService extends IService<PlatElderSleep> {
void elderSleepSleepAnalysisTask(); List<PlatElderSleepAnalysis> elderSleepSleepAnalysisTask(Integer month, Integer day);
void test1(); void test1();
} }
...@@ -125,7 +125,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr ...@@ -125,7 +125,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
Map<String, PlatElderBreatheAnalysis> analysisMap = StreamUtil.toMapDep(platElderBreatheAnalysisService.list(Wrappers.<PlatElderBreatheAnalysis>lambdaQuery() Map<String, PlatElderBreatheAnalysis> analysisMap = StreamUtil.toMapDep(platElderBreatheAnalysisService.list(Wrappers.<PlatElderBreatheAnalysis>lambdaQuery()
.in(PlatElderBreatheAnalysis::getElderId, elderIdList) .in(PlatElderBreatheAnalysis::getElderId, elderIdList)
.eq(PlatElderBreatheAnalysis::getHappenDate, yesDate).last("limit 1")), PlatElderBreatheAnalysis::getElderId); .eq(PlatElderBreatheAnalysis::getHappenDate, yesDate)), PlatElderBreatheAnalysis::getElderId);
// 呼吸率 // 呼吸率
...@@ -362,8 +362,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr ...@@ -362,8 +362,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
int timeHourRange = 24; int timeHourRange = 24;
if (StringUtils.isNotEmpty(reportStartTime) && StringUtils.isNotEmpty(reportEndTime)) { if (StringUtils.isNotEmpty(reportStartTime) && StringUtils.isNotEmpty(reportEndTime)) {
Long durationRange = getDurationRange(reportStartTime, reportEndTime); timeHourRange = Math.toIntExact(getDurationRange(reportStartTime, reportEndTime));
timeHourRange = (int) (durationRange / 60);
} }
// 判断是否满足配置的呼吸心率异常类型 // 判断是否满足配置的呼吸心率异常类型
...@@ -380,19 +379,19 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr ...@@ -380,19 +379,19 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
boolean hrSlowFlag = false; boolean hrSlowFlag = false;
boolean normalFlag; boolean normalFlag;
if (apneaRate.compareTo(dayBrStopRate) > 0) { if (dayBrStopRate.compareTo(apneaRate) > 0) {
brStopFlag = true; brStopFlag = true;
} }
if (tachypneaRate.compareTo(dayBrFastRate) > 0) { if (dayBrFastRate.compareTo(tachypneaRate) > 0) {
brFastFlag = true; brFastFlag = true;
} }
if (bradypneaRate.compareTo(dayBrSlowRate) > 0) { if (dayBrSlowRate.compareTo(bradypneaRate) > 0) {
brSlowFlag = true; brSlowFlag = true;
} }
if (tachycardiaRate.compareTo(dayHrFastRate) > 0) { if (dayHrFastRate.compareTo(tachycardiaRate) > 0) {
hrFastFlag = true; hrFastFlag = true;
} }
if (bradycardiaRate.compareTo(dayHrSlowRate) > 0) { if (dayHrSlowRate.compareTo(bradycardiaRate) > 0) {
hrSlowFlag = true; hrSlowFlag = true;
} }
...@@ -477,7 +476,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr ...@@ -477,7 +476,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
// 获取当前日期,此处为了保证后续结果固定,注掉自动获取当前日期,指定固定日期 // 获取当前日期,此处为了保证后续结果固定,注掉自动获取当前日期,指定固定日期
// LocalDate today = LocalDate.now(); // LocalDate today = LocalDate.now();
LocalDateTime source = LocalDateTime.parse(endTime, DEFAULT_FORMATTER); LocalDateTime source = LocalDateTime.parse(endTime, DEFAULT_FORMATTER);
return Duration.between(target, source).toMinutes(); return Duration.between(target, source).toHours() + 1;
} }
public static String formatLongTime(long time) { public static String formatLongTime(long time) {
......
...@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON; ...@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.elder.PlatElderReportDTO; import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord; import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord; import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
...@@ -22,7 +21,6 @@ import com.makeit.service.platform.alarm.PlatDayDurationRecordService; ...@@ -22,7 +21,6 @@ import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.service.platform.elder.*; import com.makeit.service.platform.elder.*;
import com.makeit.service.saas.SaasSleepEvaluateReportService; import com.makeit.service.saas.SaasSleepEvaluateReportService;
import com.makeit.utils.LongTimestampUtil; import com.makeit.utils.LongTimestampUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.MathUtil; import com.makeit.utils.data.convert.MathUtil;
import com.makeit.utils.data.convert.StreamUtil; import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.validate.CollectionUtils; import com.makeit.utils.data.validate.CollectionUtils;
...@@ -111,17 +109,18 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe ...@@ -111,17 +109,18 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
PlatElderSleepAnalysis platElderSleepAnalysis = platElderSleepAnalysisService.getOne(new QueryWrapper<PlatElderSleepAnalysis>().lambda() PlatElderSleepAnalysis platElderSleepAnalysis = platElderSleepAnalysisService.getOne(new QueryWrapper<PlatElderSleepAnalysis>().lambda()
.eq(PlatElderSleepAnalysis::getElderId, elderId) .eq(PlatElderSleepAnalysis::getElderId, elderId)
.eq(PlatElderSleepAnalysis::getHappenDate, nowString) .eq(PlatElderSleepAnalysis::getHappenDate, nowString)
.orderByDesc(BaseEntity::getCreateDate) .orderBy(true, false, Lists.newArrayList(PlatElderSleepAnalysis::getHappenDate, PlatElderSleepAnalysis::getSleepScore))
.last("limit 1") .last("limit 1")
); );
if (platElderSleepAnalysis == null) { if (platElderSleepAnalysis == null) {
return platElderSleepEvaluationVO; return platElderSleepEvaluationVO;
} }
String sleepScore = platElderSleepAnalysis.getSleepScore();
EvaluateReportVO evaluateReport = sleepEvaluateReportService.getByScore(Long.parseLong(platElderSleepAnalysis.getSleepScore())); EvaluateReportVO evaluateReport = sleepEvaluateReportService.getByScore(Long.parseLong(sleepScore));
platElderSleepEvaluationVO.setScore(Integer.valueOf(platElderSleepAnalysis.getSleepScore() + "")); platElderSleepEvaluationVO.setScore(Integer.valueOf(sleepScore + ""));
platElderSleepEvaluationVO.setResult(platElderSleepAnalysis.getSleepResult()); platElderSleepEvaluationVO.setResult(platElderSleepAnalysis.getSleepResult());
platElderSleepEvaluationVO.setEvaluation(evaluateReport.getEvaluate()); platElderSleepEvaluationVO.setEvaluation(evaluateReport.getEvaluate());
platElderSleepEvaluationVO.setSleepDuration(Integer.valueOf(platElderSleepAnalysis.getSleepTime() + "")); platElderSleepEvaluationVO.setSleepDuration(Integer.valueOf(platElderSleepAnalysis.getSleepTime() + ""));
......
...@@ -39,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -39,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.*; import java.time.*;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -85,14 +86,18 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -85,14 +86,18 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@TenantIdIgnore @TenantIdIgnore
public void elderSleepSleepAnalysisTask() { public List<PlatElderSleepAnalysis> elderSleepSleepAnalysisTask(Integer month,Integer day) {
List<String> dayHourRangeList = getLastDayHourRange(); List<String> dayHourRangeList = getLastDayHourRange(month,day);
Calendar calendar = Calendar.getInstance(); // Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date()); // calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -1); // calendar.add(Calendar.DAY_OF_MONTH, -1);
Date previousDate = calendar.getTime(); // Date previousDate = calendar.getTime();
String currentDate = DateUtil.format(previousDate, DatePattern.NORM_DATE_PATTERN); // String currentDate = DateUtil.format(previousDate, DatePattern.NORM_DATE_PATTERN);
String currentDate = LocalDate.now().minusDays(1).toString();
if(month != null && day != null){
currentDate = LocalDate.of(2023, month, day).minusDays(1).toString();
}
SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda() SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda()
.orderByDesc(BaseEntity::getCreateBy) .orderByDesc(BaseEntity::getCreateBy)
...@@ -123,7 +128,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -123,7 +128,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
int sleepModerateActionThreshold = Integer.parseInt(analysisModel.getSleepModerateActionThreshold()); int sleepModerateActionThreshold = Integer.parseInt(analysisModel.getSleepModerateActionThreshold());
int sleepModerateActionTimeBegin = Integer.parseInt(analysisModel.getSleepModerateActionTimeBegin()); int sleepModerateActionTimeBegin = Integer.parseInt(analysisModel.getSleepModerateActionTimeBegin());
List<PlatElderSleepAnalysis> result = new ArrayList<>();
for (PlatRoomBedDevice platRoomBedDevice : platRoomBedDeviceList) { for (PlatRoomBedDevice platRoomBedDevice : platRoomBedDeviceList) {
TreeMap<String, AnalysisVO> totalMap = new TreeMap<>(); TreeMap<String, AnalysisVO> totalMap = new TreeMap<>();
...@@ -685,9 +690,6 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -685,9 +690,6 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
long totalScore = sleepScore + deepScore + lightScore - soberScore; long totalScore = sleepScore + deepScore + lightScore - soberScore;
saasSleepEvaluateStandardReportVO.setTotalScore(totalScore); saasSleepEvaluateStandardReportVO.setTotalScore(totalScore);
EvaluateReportVO sleepReport = saasSleepEvaluateReportService.getByScore(totalScore);
// 记录长者一天睡眠的记录 // 记录长者一天睡眠的记录
long daySleepTime = 0; long daySleepTime = 0;
long dayRestTime = 0; long dayRestTime = 0;
...@@ -704,6 +706,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -704,6 +706,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
} }
} }
platElderSleepService.saveBatch(elderSleepList); platElderSleepService.saveBatch(elderSleepList);
String score = calculateScores(daySleepTime, dayRestTime, deepTime, soberTime, lightTime, evaluateStandardReport);
EvaluateReportVO sleepReport = saasSleepEvaluateReportService.getByScore(Long.parseLong(score));
// 长者一天的睡眠分析 // 长者一天的睡眠分析
PlatElderSleepAnalysis elderSleepAnalysis = new PlatElderSleepAnalysis(); PlatElderSleepAnalysis elderSleepAnalysis = new PlatElderSleepAnalysis();
...@@ -711,15 +715,58 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -711,15 +715,58 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleepAnalysis.setActionCount(totalActionCount); elderSleepAnalysis.setActionCount(totalActionCount);
elderSleepAnalysis.setTurnedCount(totalTurnedCount); elderSleepAnalysis.setTurnedCount(totalTurnedCount);
elderSleepAnalysis.setHappenDate(currentDate); elderSleepAnalysis.setHappenDate(currentDate);
elderSleepAnalysis.setSleepScore(String.valueOf(totalScore)); // elderSleepAnalysis.setOldSleepScore(String.valueOf(totalScore));
elderSleepAnalysis.setSleepScore(score);
elderSleepAnalysis.setSleepTime(String.valueOf(daySleepTime)); elderSleepAnalysis.setSleepTime(String.valueOf(daySleepTime));
elderSleepAnalysis.setRestTime(String.valueOf(dayRestTime)); elderSleepAnalysis.setRestTime(String.valueOf(dayRestTime));
elderSleepAnalysis.setSleepResult(sleepReport.getResult()); elderSleepAnalysis.setSleepResult(sleepReport.getResult());
elderSleepAnalysis.setTenantId(tenantId); elderSleepAnalysis.setTenantId(tenantId);
elderSleepAnalysis.setSleepEvaluate(sleepReport.getEvaluate()); 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); platElderSleepAnalysisService.save(elderSleepAnalysis);
} }
return result;
}
private 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);
SleepConfigVO lightnessConfig = JSON.parseObject(evaluateStandardReport.getSleepLightnessConfig(), SleepConfigVO.class);
List<SleepConfigVO> sleepTimeConfigList = JSON.parseArray(evaluateStandardReport.getSleepTime(), SleepConfigVO.class);
long deepHour = deepTime / 60;
long soberHour = soberTime / 60;
long lightHour = lightTime / 60;
long sleepHour = (daySleepTime + dayRestTime) / 60;
AtomicReference<Integer> sleepScore = new AtomicReference<>(0);
AtomicReference<Integer> deepScore = new AtomicReference<>(0);
AtomicReference<Integer> soberScore = new AtomicReference<>(0);
int lightScore = 0;
sleepTimeConfigList.forEach(s -> {
int sleepKey = (int) Math.floor(sleepHour);
if (Integer.parseInt(s.getHour()) <= sleepKey) {
sleepScore.set(Integer.parseInt(s.getScore()));
}
});
sleepDeepConfigList.forEach(s -> {
int sleepKey = (int) Math.floor(deepHour);
if (Integer.parseInt(s.getHour()) <= sleepKey) {
deepScore.set(Integer.parseInt(s.getScore()));
}
});
soberConfigList.forEach(s -> {
int sleepKey = (int) Math.floor(soberHour);
if (Integer.parseInt(s.getHour()) <= sleepKey) {
soberScore.set(Integer.parseInt(s.getScore()));
}
});
if (Integer.parseInt(lightnessConfig.getHour()) <= lightHour) {
lightScore = Integer.parseInt(lightnessConfig.getScore());
}
Integer totalScore = sleepScore.get() + deepScore.get() + lightScore - soberScore.get();
return String.valueOf(totalScore);
} }
...@@ -736,9 +783,12 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -736,9 +783,12 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return DEFAULT_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault())); return DEFAULT_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault()));
} }
public List<String> getLastDayHourRange() { public List<String> getLastDayHourRange(Integer month,Integer day) {
int count = 24; int count = 24;
LocalDateTime localDateTime = LocalDateTime.now(); LocalDateTime localDateTime = LocalDateTime.now();
if (month != null && day != null) {
localDateTime = LocalDateTime.of(LocalDate.of(2023, month, day), LocalTime.now());
}
List<String> list = Lists.newArrayList(); List<String> list = Lists.newArrayList();
String startTime; String startTime;
String endTime; String endTime;
......
...@@ -62,7 +62,7 @@ public class PlatElderReportTask { ...@@ -62,7 +62,7 @@ public class PlatElderReportTask {
@TenantIdIgnore @TenantIdIgnore
public void elderSleepSleepAnalysisTask() { public void elderSleepSleepAnalysisTask() {
log.info("开始定时分析长者睡眠质量"); log.info("开始定时分析长者睡眠质量");
platElderSleepService.elderSleepSleepAnalysisTask(); platElderSleepService.elderSleepSleepAnalysisTask(null,null);
log.info("定时分析长者睡眠质量结束"); log.info("定时分析长者睡眠质量结束");
} }
} }
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