Commit 4f347e2e by 汪志阳

fix:bug修改

parent 279886ca
......@@ -18,11 +18,6 @@ public class SleepTimeAnalysisVO {
private String endTime;
/**
* 起床时间
*/
private String newEndTime;
/**
* 间隔时间(分钟)
*/
private Long interval;
......
......@@ -41,10 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
......@@ -218,8 +215,6 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
List<SleepTimeAnalysisVO> sleepTimeAnalysisVOList) {
String startSleepTime = null;
int sleepMinute = 0;
boolean isSleep = false;
for (Map.Entry<String, AnalysisVO> entry : totalMap.entrySet()) {
AnalysisVO analysisVO = entry.getValue();
// 非离床且体动值<20
......@@ -239,7 +234,6 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
sleepTimeAnalysisVO.setEndTime(entry.getKey());
sleepTimeAnalysisVO.setType(SleepTypeEnum.DAY_SLEEP.getCode());
sleepTimeAnalysisVOList.add(sleepTimeAnalysisVO);
isSleep = true;
}
startSleepTime = null;
sleepMinute = 0;
......@@ -249,19 +243,24 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return sleepTypeMap;
}
for (SleepTimeAnalysisVO timeAnalysisVO : sleepTimeAnalysisVOList) {
if (!timeAnalysisVO.getType().equals(SleepTypeEnum.DAY_SLEEP.getCode())) {
continue;
}
boolean startTimeFlag = false;
TreeMap<String, AnalysisVO> sleepTotalMap = new TreeMap<>();
for (Map.Entry<String, AnalysisVO> entry : totalMap.entrySet()) {
if (entry.getKey().equals(timeAnalysisVO.getStartTime())) {
String reportTime = entry.getKey();
AnalysisVO analysisVO = entry.getValue();
if (reportTime.equals(timeAnalysisVO.getStartTime())) {
startTimeFlag = true;
sleepTotalMap.put(entry.getKey(), entry.getValue());
sleepTotalMap.put(reportTime, analysisVO);
}
if (entry.getKey().equals(timeAnalysisVO.getEndTime())) {
sleepTotalMap.put(entry.getKey(), entry.getValue());
if (reportTime.equals(timeAnalysisVO.getEndTime())) {
sleepTotalMap.put(reportTime, analysisVO);
startTimeFlag = false;
}
if (startTimeFlag) {
sleepTotalMap.put(entry.getKey(), entry.getValue());
sleepTotalMap.put(reportTime, analysisVO);
}
sleepTypeMap.put(timeAnalysisVO.getStartTime(), sleepTotalMap);
}
......@@ -279,12 +278,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
*/
private void getUp(TreeMap<String, AnalysisVO> totalMap, double riseLeaveThreshold, int riseActionDuration,
double repeatSleepThreshold, List<SleepTimeAnalysisVO> sleepTimeAnalysisVOList,
SleepCountDTO sleepCountDTO,TreeMap<String, TreeMap<String, AnalysisVO>> sleepTypeMap) {
List<SleepTimeAnalysisVO> sleepList = sleepTimeAnalysisVOList.stream()
.filter(f -> SleepTypeEnum.SLEEP.getCode().equals(f.getType())).collect(Collectors.toList());
if (CollUtil.isEmpty(sleepList)) {
return;
}
SleepCountDTO sleepCountDTO) {
Integer actionCount = 0;
Integer turnedCount = 0;
String startGetupTime = null;
......@@ -315,7 +309,13 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
sleepCountDTO.setTotalActionCount(actionCount);
sleepCountDTO.setTotalTurnedCount(turnedCount);
List<SleepTimeAnalysisVO> getUpList = sleepTimeAnalysisVOList.stream()
.filter(f -> SleepTypeEnum.GETUP.getCode().equals(f.getType())).collect(Collectors.toList());
List<SleepTimeAnalysisVO> sleepList = sleepTimeAnalysisVOList.stream()
.filter(f -> SleepTypeEnum.SLEEP.getCode().equals(f.getType())).collect(Collectors.toList());
if (CollUtil.isEmpty(sleepList)) {
return;
}
String startGetupTime2 = null;
int getupMinute2 = 0;
for (Map.Entry<String, AnalysisVO> entry : totalMap.entrySet()) {
......@@ -331,12 +331,9 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
continue;
}
if (getupMinute2 > riseActionDuration && startGetupTime2 != null) {
LocalDateTime startDateTime = LocalDateTime.parse(startGetupTime2, DEFAULT_FORMATTER);
SleepTimeAnalysisVO repeatSleep = sleepList.stream().filter(f -> Duration.between(startDateTime,
LocalDateTime.parse(f.getStartTime(), DEFAULT_FORMATTER)).toMinutes() < repeatSleepThreshold * 60)
.findFirst().orElse(null);
// 两小时内不在有入睡
if (repeatSleep == null) {
String finalStartGetupTime = startGetupTime2;
boolean exist = getUpList.stream().anyMatch(f -> f.getStartTime().equals(finalStartGetupTime));
if (!exist) {
SleepTimeAnalysisVO sleepTimeAnalysisVO = new SleepTimeAnalysisVO();
sleepTimeAnalysisVO.setStartTime(startGetupTime2);
sleepTimeAnalysisVO.setEndTime(entry.getKey());
......@@ -347,6 +344,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
startGetupTime2 = null;
getupMinute2 = 0;
}
setWakeUpTime(sleepTimeAnalysisVOList);
}
/**
......@@ -426,9 +424,9 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
LocalDateTime startTime = LocalDateTime.parse(startSleepDeepTime, DEFAULT_FORMATTER);
LocalDateTime repeatSleepTime = timeList.stream().filter(f -> Duration.between(startTime, f).toMinutes() <= napDuration * 60L).findFirst().orElse(null);
// LocalDateTime repeatSleepTime = timeList.stream().filter(f -> Duration.between(startTime, f).toMinutes() <= napDuration * 60L).findFirst().orElse(null);
// 小憩:深度睡眠和浅度睡眠<=3小时,且2小时内无再次入睡
if (sleepMinute <= napThreshold * 60 && repeatSleepTime == null) {
if (sleepMinute <= napThreshold * 60) {
SleepTimeAnalysisVO sleepTimeAnalysisVO = new SleepTimeAnalysisVO();
sleepTimeAnalysisVO.setStartTime(startSleepDeepTime);
sleepTimeAnalysisVO.setEndTime(lastEntry.getKey());
......@@ -517,6 +515,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
awakeMinute = 0;
}
}
setRestTime(sleepTimeAnalysisVOList);
}
private SleepTimeDTO groupSleepData(List<SleepTimeAnalysisVO> sleepTimeAnalysisVOList) {
......@@ -553,7 +552,14 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
private void setWakeUp(List<SleepTimeAnalysisVO> sleepList, List<SleepTimeAnalysisVO> getUpList) {
private void setWakeUpTime(List<SleepTimeAnalysisVO> list) {
if (CollUtil.isEmpty(list)) {
return;
}
List<SleepTimeAnalysisVO> getUpList = list.stream()
.filter(f -> SleepTypeEnum.GETUP.getCode().equals(f.getType())).collect(Collectors.toList());
List<SleepTimeAnalysisVO> sleepList = list.stream()
.filter(f -> SleepTypeEnum.SLEEP.getCode().equals(f.getType())).collect(Collectors.toList());
if (CollUtil.isEmpty(sleepList) || CollUtil.isEmpty(getUpList)) {
return;
}
......@@ -568,7 +574,42 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
LocalDateTime.parse(w.getStartTime(), DEFAULT_FORMATTER)).toMinutes();
if (between < minute[0]) {
minute[0] = between;
s.setNewEndTime(w.getStartTime());
s.setEndTime(w.getStartTime());
}
});
}
});
}
/**
* 小憩结束时间为清醒时间
* @param list
*/
private void setRestTime(List<SleepTimeAnalysisVO> list) {
if (CollUtil.isEmpty(list)) {
return;
}
List<SleepTimeAnalysisVO> soberList = list.stream()
.filter(f -> SleepTypeEnum.SOBER.getCode().equals(f.getType())).collect(Collectors.toList());
List<SleepTimeAnalysisVO> restList = list.stream()
.filter(f -> SleepTypeEnum.RESTING.getCode().equals(f.getType())).collect(Collectors.toList());
if (CollUtil.isEmpty(restList) || CollUtil.isEmpty(soberList)) {
return;
}
restList.forEach(s -> {
List<SleepTimeAnalysisVO> wakeList = soberList.stream().filter(f -> LocalDateTime.parse(f.getStartTime(), DEFAULT_FORMATTER)
.isAfter(LocalDateTime.parse(s.getStartTime(), DEFAULT_FORMATTER))).collect(Collectors.toList());
// 查询最近的清醒时间,设置
if (CollUtil.isNotEmpty(wakeList)) {
final long[] minute = {24 * 60};
wakeList.forEach(w -> {
long between = Duration.between(LocalDateTime.parse(s.getStartTime(), DEFAULT_FORMATTER),
LocalDateTime.parse(w.getStartTime(), DEFAULT_FORMATTER)).toMinutes();
if (between < minute[0]) {
minute[0] = between;
s.setEndTime(w.getStartTime());
}
});
}
......@@ -615,128 +656,92 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
List<SleepTimeAnalysisVO> soberList = sleepTimeDTO.getSoberList();
List<SleepTimeAnalysisVO> sleepList = sleepTimeDTO.getSleepList();
List<SleepTimeAnalysisVO> restList = sleepTimeDTO.getRestList();
if (CollUtil.isNotEmpty(sleepList)) {
for (SleepTimeAnalysisVO analysisVO : sleepList) {
List<PlatSleepRangeVO> sleepRangeList = new ArrayList<>();
if (CollUtil.isNotEmpty(deepList)) {
for (SleepTimeAnalysisVO analysisVO : deepList) {
PlatSleepRangeVO sleepRangeVO = new PlatSleepRangeVO();
sleepRangeVO.setStartTime(analysisVO.getStartTime());
sleepRangeVO.setEndTime(analysisVO.getEndTime());
sleepRangeVO.setSleepType(analysisVO.getType());
PlatElderSleep platElderSleep = new PlatElderSleep();
platElderSleep.setStartSleep(LocalDateTime.parse(analysisVO.getStartTime(), DEFAULT_FORMATTER));
platElderSleep.setEndSleep(LocalDateTime.parse(analysisVO.getEndTime(), DEFAULT_FORMATTER));
platElderSleep.setElderId(platElderId);
platElderSleep.setElderSleepType(SleepTypeEnum.SLEEP.getType());
platElderSleep.setSleepRecord(Lists.newArrayList(sleepRangeVO));
platElderSleep.setInterval(analysisVO.getInterval());
platElderSleep.setHappenDate(currentDate);
elderSleepList.add(platElderSleep);
sleepRangeVO.setSleepType(SleepTypeEnum.SLEEP_DEEP.getCode());
sleepRangeList.add(sleepRangeVO);
}
}
if (CollUtil.isNotEmpty(restList)) {
for (SleepTimeAnalysisVO analysisVO : restList) {
if (CollUtil.isNotEmpty(moderateList)) {
for (SleepTimeAnalysisVO analysisVO : sleepTimeDTO.getMidList()) {
PlatSleepRangeVO sleepRangeVO = new PlatSleepRangeVO();
sleepRangeVO.setStartTime(analysisVO.getStartTime());
sleepRangeVO.setEndTime(analysisVO.getEndTime());
sleepRangeVO.setSleepType(analysisVO.getType());
PlatElderSleep platElderSleep = new PlatElderSleep();
platElderSleep.setStartSleep(LocalDateTime.parse(analysisVO.getStartTime(), DEFAULT_FORMATTER));
platElderSleep.setEndSleep(LocalDateTime.parse(analysisVO.getEndTime(), DEFAULT_FORMATTER));
platElderSleep.setElderId(platElderId);
platElderSleep.setElderSleepType(SleepTypeEnum.RESTING.getType());
platElderSleep.setSleepRecord(Lists.newArrayList(sleepRangeVO));
platElderSleep.setInterval(analysisVO.getInterval());
platElderSleep.setHappenDate(currentDate);
elderSleepList.add(platElderSleep);
sleepRangeVO.setSleepType(SleepTypeEnum.SLEEP_MODERATE.getCode());
sleepRangeList.add(sleepRangeVO);
}
}
if (CollUtil.isNotEmpty(deepList)) {
for (SleepTimeAnalysisVO analysisVO : deepList) {
if (CollUtil.isNotEmpty(lightList)) {
for (SleepTimeAnalysisVO analysisVO : lightList) {
PlatSleepRangeVO sleepRangeVO = new PlatSleepRangeVO();
sleepRangeVO.setStartTime(analysisVO.getStartTime());
sleepRangeVO.setEndTime(analysisVO.getEndTime());
sleepRangeVO.setSleepType(analysisVO.getType());
PlatElderSleep platElderSleep = new PlatElderSleep();
platElderSleep.setStartSleep(LocalDateTime.parse(analysisVO.getStartTime(), DEFAULT_FORMATTER));
platElderSleep.setEndSleep(LocalDateTime.parse(analysisVO.getEndTime(), DEFAULT_FORMATTER));
platElderSleep.setElderId(platElderId);
platElderSleep.setElderSleepType(SleepTypeEnum.SLEEP_DEEP.getType());
platElderSleep.setSleepRecord(Lists.newArrayList(sleepRangeVO));
platElderSleep.setInterval(analysisVO.getInterval());
platElderSleep.setHappenDate(currentDate);
elderSleepList.add(platElderSleep);
sleepRangeVO.setSleepType(SleepTypeEnum.SLEEP_LIGHTNESS.getCode());
sleepRangeList.add(sleepRangeVO);
}
}
if (CollUtil.isNotEmpty(moderateList)) {
for (SleepTimeAnalysisVO analysisVO : sleepTimeDTO.getMidList()) {
if (CollUtil.isNotEmpty(soberList)) {
for (SleepTimeAnalysisVO analysisVO : soberList) {
PlatSleepRangeVO sleepRangeVO = new PlatSleepRangeVO();
sleepRangeVO.setStartTime(analysisVO.getStartTime());
sleepRangeVO.setEndTime(analysisVO.getEndTime());
sleepRangeVO.setSleepType(analysisVO.getType());
PlatElderSleep platElderSleep = new PlatElderSleep();
platElderSleep.setStartSleep(LocalDateTime.parse(analysisVO.getStartTime(), DEFAULT_FORMATTER));
platElderSleep.setEndSleep(LocalDateTime.parse(analysisVO.getEndTime(), DEFAULT_FORMATTER));
platElderSleep.setElderId(platElderId);
platElderSleep.setElderSleepType(SleepTypeEnum.SLEEP_MODERATE.getType());
platElderSleep.setSleepRecord(Lists.newArrayList(sleepRangeVO));
platElderSleep.setInterval(analysisVO.getInterval());
platElderSleep.setHappenDate(currentDate);
elderSleepList.add(platElderSleep);
sleepRangeVO.setSleepType(SleepTypeEnum.SOBER.getCode());
sleepRangeList.add(sleepRangeVO);
}
}
if (CollUtil.isNotEmpty(lightList)) {
for (SleepTimeAnalysisVO analysisVO : lightList) {
List<SleepTimeAnalysisVO> getUpList = sleepTimeDTO.getGetUpList();
if (CollUtil.isNotEmpty(getUpList)) {
for (SleepTimeAnalysisVO analysisVO : getUpList) {
PlatSleepRangeVO sleepRangeVO = new PlatSleepRangeVO();
sleepRangeVO.setStartTime(analysisVO.getStartTime());
sleepRangeVO.setEndTime(analysisVO.getEndTime());
sleepRangeVO.setSleepType(analysisVO.getType());
PlatElderSleep platElderSleep = new PlatElderSleep();
platElderSleep.setStartSleep(LocalDateTime.parse(analysisVO.getStartTime(), DEFAULT_FORMATTER));
platElderSleep.setEndSleep(LocalDateTime.parse(analysisVO.getEndTime(), DEFAULT_FORMATTER));
platElderSleep.setElderId(platElderId);
platElderSleep.setElderSleepType(SleepTypeEnum.SLEEP_LIGHTNESS.getType());
platElderSleep.setSleepRecord(Lists.newArrayList(sleepRangeVO));
platElderSleep.setInterval(analysisVO.getInterval());
platElderSleep.setHappenDate(currentDate);
elderSleepList.add(platElderSleep);
sleepRangeVO.setSleepType(SleepTypeEnum.GETUP.getCode());
sleepRangeList.add(sleepRangeVO);
}
}
if (CollUtil.isNotEmpty(soberList)) {
for (SleepTimeAnalysisVO analysisVO : soberList) {
List<String> sleepTypes = Lists.newArrayList(SleepTypeEnum.SLEEP_DEEP.getCode(),
SleepTypeEnum.SLEEP_MODERATE.getCode(), SleepTypeEnum.SLEEP_LIGHTNESS.getCode(), SleepTypeEnum.GETUP.getCode());
if (CollUtil.isNotEmpty(sleepList)) {
for (SleepTimeAnalysisVO analysisVO : sleepList) {
PlatSleepRangeVO sleepRangeVO = new PlatSleepRangeVO();
sleepRangeVO.setStartTime(analysisVO.getStartTime());
sleepRangeVO.setEndTime(analysisVO.getEndTime());
sleepRangeVO.setSleepType(analysisVO.getType());
List<PlatSleepRangeVO> rangeList = sleepRangeList.stream().filter(f -> sleepTypes.contains(f.getSleepType())).collect(Collectors.toList());
rangeList.add(sleepRangeVO);
rangeList = rangeList.stream().sorted(Comparator.comparing(l -> LocalDateTime.parse(l.getStartTime(), DEFAULT_FORMATTER))).collect(Collectors.toList());
PlatElderSleep platElderSleep = new PlatElderSleep();
platElderSleep.setStartSleep(LocalDateTime.parse(analysisVO.getStartTime(), DEFAULT_FORMATTER));
platElderSleep.setEndSleep(LocalDateTime.parse(analysisVO.getEndTime(), DEFAULT_FORMATTER));
platElderSleep.setElderId(platElderId);
platElderSleep.setElderSleepType(SleepTypeEnum.SOBER.getType());
platElderSleep.setSleepRecord(Lists.newArrayList(sleepRangeVO));
platElderSleep.setElderSleepType(SleepTypeEnum.SLEEP.getType());
platElderSleep.setSleepRecord(rangeList);
platElderSleep.setInterval(analysisVO.getInterval());
platElderSleep.setHappenDate(currentDate);
elderSleepList.add(platElderSleep);
}
}
List<SleepTimeAnalysisVO> getUpList = sleepTimeDTO.getGetUpList();
if (CollUtil.isNotEmpty(getUpList)) {
for (SleepTimeAnalysisVO analysisVO : getUpList) {
if (CollUtil.isNotEmpty(restList)) {
for (SleepTimeAnalysisVO analysisVO : restList) {
PlatSleepRangeVO sleepRangeVO = new PlatSleepRangeVO();
sleepRangeVO.setStartTime(analysisVO.getStartTime());
sleepRangeVO.setEndTime(analysisVO.getEndTime());
sleepRangeVO.setSleepType(analysisVO.getType());
PlatElderSleep platElderSleep = new PlatElderSleep();
List<PlatSleepRangeVO> rangeList = sleepRangeList.stream().filter(f -> SleepTypeEnum.SOBER.getCode().equals(f.getSleepType())).collect(Collectors.toList());
rangeList.add(sleepRangeVO);
rangeList = rangeList.stream().sorted(Comparator.comparing(l -> LocalDateTime.parse(l.getStartTime(), DEFAULT_FORMATTER))).collect(Collectors.toList());
platElderSleep.setStartSleep(LocalDateTime.parse(analysisVO.getStartTime(), DEFAULT_FORMATTER));
platElderSleep.setEndSleep(LocalDateTime.parse(analysisVO.getEndTime(), DEFAULT_FORMATTER));
platElderSleep.setElderId(platElderId);
platElderSleep.setElderSleepType(SleepTypeEnum.GETUP.getType());
platElderSleep.setSleepRecord(Lists.newArrayList(sleepRangeVO));
platElderSleep.setElderSleepType(SleepTypeEnum.RESTING.getType());
platElderSleep.setSleepRecord(rangeList);
platElderSleep.setInterval(analysisVO.getInterval());
platElderSleep.setHappenDate(currentDate);
elderSleepList.add(platElderSleep);
......@@ -834,7 +839,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
// 清醒
sober(sleepTypeMap, sleepTimeAnalysisVOList);
// 起床
getUp(totalMap, riseLeaveThreshold, riseActionDuration, repeatSleepThreshold, sleepTimeAnalysisVOList, sleepCountDTO,sleepTypeMap);
getUp(totalMap, riseLeaveThreshold, riseActionDuration, repeatSleepThreshold, sleepTimeAnalysisVOList, sleepCountDTO);
//浅睡
SleepTimeDTO sleepTimeDTO = groupSleepData(sleepTimeAnalysisVOList);
List<PlatElderSleep> platElderSleeps = saveElderSleep(sleepTimeDTO, elder.getId(), currentDate);
......
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