Commit 32e2935d by 汪志阳

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

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