Commit 43732a0c by 汪志阳

fix:起床清醒时间合并

parent 0e53f7c2
...@@ -23,4 +23,6 @@ public interface PlatElderSleepService extends IService<PlatElderSleep> { ...@@ -23,4 +23,6 @@ public interface PlatElderSleepService extends IService<PlatElderSleep> {
String calculateScores(long daySleepTime, long dayRestTime, long deepTime, long soberTime, long lightTime, String calculateScores(long daySleepTime, long dayRestTime, long deepTime, long soberTime, long lightTime,
SaasSleepEvaluateStandardReport evaluateStandardReport); SaasSleepEvaluateStandardReport evaluateStandardReport);
List<PlatElderSleep> mergeWakeUpList(List<PlatElderSleep> elderSleepList, int riseRepeatThreshold);
} }
package com.makeit.service.platform.elder.impl; package com.makeit.service.platform.elder.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
...@@ -697,7 +698,9 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -697,7 +698,9 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
dayRestTime += elderSleep.getInterval(); dayRestTime += elderSleep.getInterval();
} }
} }
platElderSleepService.saveBatch(elderSleepList); int riseRepeatThreshold = Integer.parseInt(analysisModel.getRiseRepeatThreshold());
List<PlatElderSleep> mergeElderSleepList = mergeWakeUpList(elderSleepList, riseRepeatThreshold);
platElderSleepService.saveBatch(mergeElderSleepList);
String score = calculateScores(daySleepTime, dayRestTime, deepTime, soberTime, lightTime, evaluateStandardReport); String score = calculateScores(daySleepTime, dayRestTime, deepTime, soberTime, lightTime, evaluateStandardReport);
EvaluateReportVO sleepReport = saasSleepEvaluateReportService.getByScore(Long.parseLong(score)); EvaluateReportVO sleepReport = saasSleepEvaluateReportService.getByScore(Long.parseLong(score));
...@@ -720,6 +723,52 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -720,6 +723,52 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return result; return result;
} }
/**
* @param elderSleepList
* @param riseRepeatThreshold 且在 (2) 小时内无再次入睡
* @return
*/
@Override
public List<PlatElderSleep> mergeWakeUpList(List<PlatElderSleep> elderSleepList, int riseRepeatThreshold) {
List<PlatElderSleep> result = new ArrayList<>();
if (CollUtil.isEmpty(elderSleepList)) {
return elderSleepList;
}
elderSleepList = elderSleepList.stream().sorted(Comparator.comparing(PlatElderSleep::getStartSleep))
.collect(Collectors.toList());
List<PlatElderSleep> finalElderSleepList = elderSleepList;
List<PlatElderSleep> mergeSleepList = new ArrayList<>();
finalElderSleepList.forEach(e -> {
if (mergeSleepList.contains(e)) {
return;
}
// 2小时内再次入睡的数据,合并
List<PlatElderSleep> riseSleepList = finalElderSleepList.stream().filter(f -> Duration.between(e.getEndSleep(),
f.getStartSleep()).toHours() < riseRepeatThreshold).collect(Collectors.toList());
if (CollUtil.isEmpty(riseSleepList)) {
result.add(e);
return;
}
mergeSleepList.addAll(riseSleepList);
PlatElderSleep maxSleepTime = finalElderSleepList.stream().max(Comparator.comparing(f -> Duration.between(f.getStartSleep(),
f.getEndSleep()).toMinutes() > Duration.between(e.getStartSleep(),
e.getEndSleep()).toMinutes())).orElse(e);
PlatElderSleep last = riseSleepList.get(riseSleepList.size() - 1);
e.setElderSleepType(maxSleepTime.getElderSleepType());
e.setEndSleep(last.getEndSleep());
List<PlatSleepRangeVO> sleepRecord = e.getSleepRecord();
Set<PlatSleepRangeVO> platSleepRangeVOS = new LinkedHashSet<>(sleepRecord);
riseSleepList.forEach(r -> platSleepRangeVOS.addAll(r.getSleepRecord()));
e.setSleepRecord(new ArrayList<>(platSleepRangeVOS));
result.add(e);
});
return result;
}
@Override @Override
public String calculateScores(long daySleepTime, long dayRestTime, long deepTime, long soberTime, long lightTime, public String calculateScores(long daySleepTime, long dayRestTime, long deepTime, long soberTime, long lightTime,
SaasSleepEvaluateStandardReport evaluateStandardReport) { SaasSleepEvaluateStandardReport evaluateStandardReport) {
......
package com.makeit.iotapi; package com.makeit.iotapi;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO; import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElderSleep;
import com.makeit.global.annotation.AuthIgnore;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.admin.vo.plat.PlatTenantVO; import com.makeit.module.admin.vo.plat.PlatTenantVO;
import com.makeit.module.iot.service.IotOrgService; import com.makeit.module.iot.service.IotOrgService;
import com.makeit.module.iot.service.IotProductDeviceService; import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.service.IotTokenService; import com.makeit.module.iot.service.IotTokenService;
import com.makeit.service.platform.alarm.alarmStrategy.OffBedAlarm; import com.makeit.service.platform.alarm.alarmStrategy.OffBedAlarm;
import com.makeit.service.platform.elder.PlatElderSleepService;
import com.makeit.utils.redis.RedisUtil; import com.makeit.utils.redis.RedisUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
...@@ -27,6 +35,11 @@ public class IotDeviceInfoContentFall { ...@@ -27,6 +35,11 @@ public class IotDeviceInfoContentFall {
private IotProductDeviceService iotProductDeviceService; private IotProductDeviceService iotProductDeviceService;
@Autowired @Autowired
private OffBedAlarm offBedAlarm; private OffBedAlarm offBedAlarm;
@Autowired
private PlatElderSleepService platElderSleepService;
private static final Logger logger = LoggerFactory.getLogger(IotDeviceInfoContentFall.class);
@Test @Test
...@@ -114,4 +127,27 @@ public class IotDeviceInfoContentFall { ...@@ -114,4 +127,27 @@ public class IotDeviceInfoContentFall {
System.out.println(list); System.out.println(list);
} }
@Test
@TenantIdIgnore
@AuthIgnore
void mergeElderSleepList() {
List<PlatElderSleep> sleepList = platElderSleepService.list(Wrappers.<PlatElderSleep>lambdaQuery()
.eq(PlatElderSleep::getHappenDate, "2024-01-01").eq(PlatElderSleep::getElderId, "1712648603580764161"));
logger.info("ori sleep data :{}", JSONUtil.toJsonStr(sleepList));
List<PlatElderSleep> platElderSleeps = recursion(sleepList, sleepList.size() / 2, 3);
logger.info("end sleep data :{}", JSONUtil.toJsonStr(platElderSleeps));
List<PlatElderSleep> list = platElderSleepService.mergeWakeUpList(sleepList, 3);
System.out.println(list);
}
private List<PlatElderSleep> recursion(List<PlatElderSleep> elderSleepList, int count, int riseRepeatThreshold) {
List<PlatElderSleep> platElderSleeps = platElderSleepService.mergeWakeUpList(elderSleepList, riseRepeatThreshold);
if (count == 0) {
return platElderSleeps;
} else {
count--;
return recursion(platElderSleeps, count, riseRepeatThreshold);
}
}
} }
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