Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
黄嘉阳
/
iot-platform-server
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
f0889f06
authored
Jan 05, 2024
by
汪志阳
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
fix:睡眠定时任务代码优化
parent
614a22a4
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
120 additions
and
572 deletions
server-common/src/main/java/com/makeit/module/iot/vo/analysis/SleepCountDTO.java
server-common/src/main/java/com/makeit/module/iot/vo/analysis/SleepTimeDTO.java
server-module/src/main/java/com/makeit/module/controller/elder/PlatElderSleepController.java
server-service/src/main/java/com/makeit/enums/report/SleepTypeEnum.java
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderSleepService.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderSleepServiceImpl.java
server-web/src/test/java/com/makeit/iotapi/IotDeviceInfoContentFall.java
server-common/src/main/java/com/makeit/module/iot/vo/analysis/SleepCountDTO.java
View file @
f0889f06
...
@@ -2,6 +2,8 @@ package com.makeit.module.iot.vo.analysis;
...
@@ -2,6 +2,8 @@ package com.makeit.module.iot.vo.analysis;
import
lombok.Data
;
import
lombok.Data
;
import
java.util.TreeMap
;
/**
/**
* @author wangzy
* @author wangzy
* @description
* @description
...
@@ -13,4 +15,9 @@ public class SleepCountDTO {
...
@@ -13,4 +15,9 @@ public class SleepCountDTO {
private
Integer
totalActionCount
;
private
Integer
totalActionCount
;
private
Integer
totalTurnedCount
;
private
Integer
totalTurnedCount
;
private
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
daySleepMap
;
private
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
restSleepMap
;
}
}
server-common/src/main/java/com/makeit/module/iot/vo/analysis/SleepTimeDTO.java
View file @
f0889f06
...
@@ -14,7 +14,7 @@ public class SleepTimeDTO {
...
@@ -14,7 +14,7 @@ public class SleepTimeDTO {
/**
/**
*
入睡
*
睡眠:入睡时间>3小时
*/
*/
private
List
<
SleepTimeAnalysisVO
>
sleepList
;
private
List
<
SleepTimeAnalysisVO
>
sleepList
;
...
@@ -47,7 +47,7 @@ public class SleepTimeDTO {
...
@@ -47,7 +47,7 @@ public class SleepTimeDTO {
/**
/**
*
睡眠:深度睡眠和浅度睡眠>3小时
*
入睡
*/
*/
private
List
<
SleepTimeAnalysisVO
>
daySleepList
;
private
List
<
SleepTimeAnalysisVO
>
daySleepList
;
}
}
server-module/src/main/java/com/makeit/module/controller/elder/PlatElderSleepController.java
View file @
f0889f06
...
@@ -52,16 +52,6 @@ public class PlatElderSleepController {
...
@@ -52,16 +52,6 @@ public class PlatElderSleepController {
private
HuiNengService
huiNengService
;
private
HuiNengService
huiNengService
;
@ApiOperation
(
"测试"
)
@PostMapping
(
"test1"
)
@AuthIgnore
@TenantIdIgnore
public
ApiResponseEntity
<
Void
>
test1
()
{
platElderSleepService
.
test1
();
return
ApiResponseUtils
.
success
();
}
@ApiOperation
(
"测试"
)
@ApiOperation
(
"测试"
)
@PostMapping
(
"test2"
)
@PostMapping
(
"test2"
)
@AuthIgnore
@AuthIgnore
...
...
server-service/src/main/java/com/makeit/enums/report/SleepTypeEnum.java
View file @
f0889f06
...
@@ -8,7 +8,7 @@ import lombok.Getter;
...
@@ -8,7 +8,7 @@ import lombok.Getter;
public
enum
SleepTypeEnum
{
public
enum
SleepTypeEnum
{
/**
/**
* 睡眠类型 1 睡眠
2 小憩,3:深度睡眠,4:中度睡眠,5:浅度睡眠, 6:清醒,7:离床
* 睡眠类型 1 睡眠
(入睡时间大于3小时)2 小憩,3:深度睡眠,4:中度睡眠,5:浅度睡眠, 6:清醒,7:起床 8:入睡
*/
*/
SLEEP_DEEP
(
"sleepDeep"
,
"深度睡眠"
,
3
),
SLEEP_DEEP
(
"sleepDeep"
,
"深度睡眠"
,
3
),
SLEEP_MODERATE
(
"sleepModerate"
,
"中度睡眠"
,
4
),
SLEEP_MODERATE
(
"sleepModerate"
,
"中度睡眠"
,
4
),
...
@@ -16,7 +16,8 @@ public enum SleepTypeEnum {
...
@@ -16,7 +16,8 @@ public enum SleepTypeEnum {
SOBER
(
"sober"
,
"清醒"
,
6
),
SOBER
(
"sober"
,
"清醒"
,
6
),
GETUP
(
"getup"
,
"起床"
,
7
),
GETUP
(
"getup"
,
"起床"
,
7
),
SLEEP
(
"sleep"
,
"睡觉"
,
1
),
SLEEP
(
"sleep"
,
"睡觉"
,
1
),
RESTING
(
"resting"
,
"小憩"
,
2
);
RESTING
(
"resting"
,
"小憩"
,
2
),
DAY_SLEEP
(
"day_sleep"
,
"睡眠"
,
8
);
private
final
String
code
;
private
final
String
code
;
private
final
String
value
;
private
final
String
value
;
...
...
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderSleepService.java
View file @
f0889f06
...
@@ -19,10 +19,7 @@ public interface PlatElderSleepService extends IService<PlatElderSleep> {
...
@@ -19,10 +19,7 @@ public interface PlatElderSleepService extends IService<PlatElderSleep> {
List
<
ElderSleepAnalysisVO
>
elderSleepSleepAnalysisTask
(
Integer
month
,
Integer
day
);
List
<
ElderSleepAnalysisVO
>
elderSleepSleepAnalysisTask
(
Integer
month
,
Integer
day
);
void
test1
();
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
);
}
}
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderSleepServiceImpl.java
View file @
f0889f06
...
@@ -12,11 +12,13 @@ import com.google.common.collect.Lists;
...
@@ -12,11 +12,13 @@ import com.google.common.collect.Lists;
import
com.google.common.collect.Maps
;
import
com.google.common.collect.Maps
;
import
com.makeit.common.entity.BaseEntity
;
import
com.makeit.common.entity.BaseEntity
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.platform.elder.*
;
import
com.makeit.entity.platform.elder.ElderSleepAnalysisVO
;
import
com.makeit.entity.platform.elder.PlatElder
;
import
com.makeit.entity.platform.elder.PlatElderSleep
;
import
com.makeit.entity.platform.elder.PlatElderSleepAnalysis
;
import
com.makeit.entity.platform.space.PlatRoomBedDevice
;
import
com.makeit.entity.platform.space.PlatRoomBedDevice
;
import
com.makeit.entity.saas.analysis.SaasSleepAnalysisModel
;
import
com.makeit.entity.saas.analysis.SaasSleepAnalysisModel
;
import
com.makeit.entity.saas.analysis.SaasSleepEvaluateStandardReport
;
import
com.makeit.entity.saas.analysis.SaasSleepEvaluateStandardReport
;
import
com.makeit.enums.report.ElderSleepType
;
import
com.makeit.enums.report.SleepTypeEnum
;
import
com.makeit.enums.report.SleepTypeEnum
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.mapper.platform.elder.PlatElderSleepMapper
;
import
com.makeit.mapper.platform.elder.PlatElderSleepMapper
;
...
@@ -32,16 +34,17 @@ import com.makeit.utils.data.convert.JsonUtil;
...
@@ -32,16 +34,17 @@ import com.makeit.utils.data.convert.JsonUtil;
import
com.makeit.utils.data.convert.StreamUtil
;
import
com.makeit.utils.data.convert.StreamUtil
;
import
com.makeit.vo.platform.elder.report.day.PlatSleepRangeVO
;
import
com.makeit.vo.platform.elder.report.day.PlatSleepRangeVO
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.RandomUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
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.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -86,7 +89,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -86,7 +89,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
@Autowired
@Autowired
private
PlatElderReportMonthService
platElderReportMonthService
;
private
PlatElderReportMonthService
platElderReportMonthService
;
private
TreeMap
<
String
,
AnalysisVO
>
getPerMinuteData
(
Map
<
String
,
List
<
DeviceInfoContentBreathe
>>
minuteMap
,
SaasSleepAnalysisModel
analysisModel
)
{
private
TreeMap
<
String
,
AnalysisVO
>
getPerMinuteData
(
Map
<
String
,
List
<
DeviceInfoContentBreathe
>>
minuteMap
,
SaasSleepAnalysisModel
analysisModel
)
{
int
turnedThreshold
=
Integer
.
parseInt
(
analysisModel
.
getTurnedThreshold
());
int
turnedThreshold
=
Integer
.
parseInt
(
analysisModel
.
getTurnedThreshold
());
int
sleepTimeActionThreshold
=
Integer
.
parseInt
(
analysisModel
.
getSleepTimeActionThreshold
());
int
sleepTimeActionThreshold
=
Integer
.
parseInt
(
analysisModel
.
getSleepTimeActionThreshold
());
...
@@ -214,6 +217,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -214,6 +217,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
/**
/**
* 获取满足入睡时间条件数据(体动值小于20且连续0.5小时)
* 获取满足入睡时间条件数据(体动值小于20且连续0.5小时)
*
* @param totalMap
* @param totalMap
* @param sleepTimeActionDuration 体动值持续时间 0.5h
* @param sleepTimeActionDuration 体动值持续时间 0.5h
* @param sleepTimeAnalysisVOList
* @param sleepTimeAnalysisVOList
...
@@ -241,7 +245,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -241,7 +245,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
SleepTimeAnalysisVO
sleepTimeAnalysisVO
=
new
SleepTimeAnalysisVO
();
SleepTimeAnalysisVO
sleepTimeAnalysisVO
=
new
SleepTimeAnalysisVO
();
sleepTimeAnalysisVO
.
setStartTime
(
startSleepTime
);
sleepTimeAnalysisVO
.
setStartTime
(
startSleepTime
);
sleepTimeAnalysisVO
.
setEndTime
(
entry
.
getKey
());
sleepTimeAnalysisVO
.
setEndTime
(
entry
.
getKey
());
sleepTimeAnalysisVO
.
setType
(
SleepTypeEnum
.
SLEEP
.
getCode
());
sleepTimeAnalysisVO
.
setType
(
SleepTypeEnum
.
DAY_
SLEEP
.
getCode
());
sleepTimeAnalysisVOList
.
add
(
sleepTimeAnalysisVO
);
sleepTimeAnalysisVOList
.
add
(
sleepTimeAnalysisVO
);
}
}
startSleepTime
=
null
;
startSleepTime
=
null
;
...
@@ -274,18 +278,24 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -274,18 +278,24 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
/**
/**
* 获取起床数据(离床大于0.5小时,或者每分钟大于30秒体动值大于50持续10min,且在两小时内无再次入睡
* 获取起床数据(离床大于0.5小时,或者每分钟大于30秒体动值大于50持续10min,且在两小时内无再次入睡
*
* @param totalMap
* @param totalMap
* @param riseLeaveThreshold
* @param riseLeaveThreshold
* @param riseActionDuration
* @param riseActionDuration
* @param sleepTimeAnalysisVOList
* @param sleepTimeAnalysisVOList
*/
*/
private
void
getUp
(
TreeMap
<
String
,
AnalysisVO
>
totalMap
,
double
riseLeaveThreshold
,
int
riseActionDuration
,
private
void
getUp
(
TreeMap
<
String
,
AnalysisVO
>
totalMap
,
double
riseLeaveThreshold
,
int
riseActionDuration
,
double
repeatSleepThreshold
,
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
double
repeatSleepThreshold
,
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
,
SleepCountDTO
sleepCountDTO
)
{
Integer
actionCount
=
0
;
Integer
turnedCount
=
0
;
// 起床时间
// 起床时间
String
startGetupTime
=
null
;
String
startGetupTime
=
null
;
int
getupMinute
=
0
;
int
getupMinute
=
0
;
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
entry
:
totalMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
entry
:
totalMap
.
entrySet
())
{
AnalysisVO
analysisVO
=
entry
.
getValue
();
AnalysisVO
analysisVO
=
entry
.
getValue
();
actionCount
+=
analysisVO
.
getActionCount
();
turnedCount
+=
analysisVO
.
getTurnedCount
();
if
(
analysisVO
.
getIsMoveBed
())
{
if
(
analysisVO
.
getIsMoveBed
())
{
if
(
StrUtil
.
isBlank
(
startGetupTime
))
{
if
(
StrUtil
.
isBlank
(
startGetupTime
))
{
startGetupTime
=
entry
.
getKey
();
startGetupTime
=
entry
.
getKey
();
...
@@ -306,11 +316,11 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -306,11 +316,11 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
startGetupTime
=
null
;
startGetupTime
=
null
;
getupMinute
=
0
;
getupMinute
=
0
;
}
}
sleepCountDTO
.
setTotalActionCount
(
actionCount
);
sleepCountDTO
.
setTotalTurnedCount
(
turnedCount
);
List
<
SleepTimeAnalysisVO
>
sleepList
=
sleepTimeAnalysisVOList
.
stream
().
List
<
SleepTimeAnalysisVO
>
sleepList
=
sleepTimeAnalysisVOList
.
stream
().
filter
(
f
->
SleepTypeEnum
.
SLEEP
.
getCode
().
equals
(
f
.
getType
())).
collect
(
Collectors
.
toList
());
filter
(
f
->
SleepTypeEnum
.
SLEEP
.
getCode
().
equals
(
f
.
getType
())).
collect
(
Collectors
.
toList
());
// 起床时间
String
startGetupTime2
=
null
;
String
startGetupTime2
=
null
;
int
getupMinute2
=
0
;
int
getupMinute2
=
0
;
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
entry
:
totalMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
entry
:
totalMap
.
entrySet
())
{
...
@@ -346,34 +356,28 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -346,34 +356,28 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
/**
/**
* 深度睡眠(体动和翻身次数10分钟内等于0次,且呼吸率在10-20范围内)
* 深度睡眠(体动和翻身次数10分钟内等于0次,且呼吸率在10-20范围内)
*
* @param sleepTypeMap
* @param sleepTypeMap
* @param analysisModel
* @param analysisModel
* @param sleepTimeAnalysisVOList
* @param sleepTimeAnalysisVOList
*/
*/
private
SleepCountDTO
deepSleepData
(
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepTypeMap
,
SaasSleepAnalysisModel
analysisModel
,
private
void
deepSleepData
(
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepTypeMap
,
SaasSleepAnalysisModel
analysisModel
,
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
int
sleepDeepMinute
=
0
;
int
sleepDeepMinute
=
0
;
int
totalActionCount
=
0
;
int
totalTurnedCount
=
0
;
// 入睡时间开始
String
startSleepDeepTime
=
null
;
String
startSleepDeepTime
=
null
;
int
sleepDeepActionThreshold
=
Integer
.
parseInt
(
analysisModel
.
getSleepDeepActionThreshold
());
int
sleepDeepActionThreshold
=
Integer
.
parseInt
(
analysisModel
.
getSleepDeepActionThreshold
());
int
sleepDeepActionTimeBegin
=
Integer
.
parseInt
(
analysisModel
.
getSleepDeepActionTimeBegin
());
int
sleepDeepActionTimeBegin
=
Integer
.
parseInt
(
analysisModel
.
getSleepDeepActionTimeBegin
());
int
sleepDeepBreatheMin
=
Integer
.
parseInt
(
analysisModel
.
getSleepDeepBreatheMin
());
int
sleepDeepBreatheMin
=
Integer
.
parseInt
(
analysisModel
.
getSleepDeepBreatheMin
());
int
sleepDeepBreatheMax
=
Integer
.
parseInt
(
analysisModel
.
getSleepDeepBreatheMax
());
int
sleepDeepBreatheMax
=
Integer
.
parseInt
(
analysisModel
.
getSleepDeepBreatheMax
());
// 判断深度睡眠时间
if
(
CollUtil
.
isEmpty
(
sleepTypeMap
))
{
return
;
}
for
(
Map
.
Entry
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
entry
:
sleepTypeMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
entry
:
sleepTypeMap
.
entrySet
())
{
TreeMap
<
String
,
AnalysisVO
>
sleepMap
=
entry
.
getValue
();
TreeMap
<
String
,
AnalysisVO
>
sleepMap
=
entry
.
getValue
();
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
voEntry
:
sleepMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
voEntry
:
sleepMap
.
entrySet
())
{
AnalysisVO
analysisVO
=
voEntry
.
getValue
();
AnalysisVO
analysisVO
=
voEntry
.
getValue
();
boolean
actionFlag
=
analysisVO
.
getActionCount
()
==
sleepDeepActionThreshold
;
boolean
actionFlag
=
analysisVO
.
getActionCount
()
==
sleepDeepActionThreshold
;
boolean
turnedFlag
=
analysisVO
.
getTurnedCount
()
==
sleepDeepActionThreshold
;
boolean
turnedFlag
=
analysisVO
.
getTurnedCount
()
==
sleepDeepActionThreshold
;
if
(!
actionFlag
)
{
totalActionCount
+=
analysisVO
.
getActionCount
()
==
0
?
1
:
analysisVO
.
getActionCount
();
}
if
(!
turnedFlag
)
{
totalTurnedCount
+=
analysisVO
.
getTurnedCount
()
==
0
?
1
:
analysisVO
.
getTurnedCount
();
}
if
(
actionFlag
&&
turnedFlag
if
(
actionFlag
&&
turnedFlag
&&
sleepDeepBreatheMin
<=
analysisVO
.
getAvgBr
()
&&
sleepDeepBreatheMax
>=
analysisVO
.
getAvgBr
())
{
&&
sleepDeepBreatheMin
<=
analysisVO
.
getAvgBr
()
&&
sleepDeepBreatheMax
>=
analysisVO
.
getAvgBr
())
{
if
(
StringUtils
.
isEmpty
(
startSleepDeepTime
))
{
if
(
StringUtils
.
isEmpty
(
startSleepDeepTime
))
{
...
@@ -397,14 +401,57 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -397,14 +401,57 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
}
}
}
}
private
SleepCountDTO
deepSleepAndRestData
(
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepTypeMap
,
SaasSleepAnalysisModel
analysisModel
,
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
String
startSleepDeepTime
;
int
napThreshold
=
Integer
.
parseInt
(
analysisModel
.
getNapThreshold
());
int
napDuration
=
Integer
.
parseInt
(
analysisModel
.
getNapDuration
());
List
<
String
>
startTimeList
=
new
ArrayList
<>(
sleepTypeMap
.
keySet
());
List
<
LocalDateTime
>
timeList
=
new
ArrayList
<>();
startTimeList
.
forEach
(
t
->
timeList
.
add
(
LocalDateTime
.
parse
(
t
,
DEFAULT_FORMATTER
)));
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
daySleepMap
=
new
TreeMap
<>();
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
restSleepMap
=
new
TreeMap
<>();
for
(
Map
.
Entry
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
entry
:
sleepTypeMap
.
entrySet
())
{
TreeMap
<
String
,
AnalysisVO
>
sleepMap
=
entry
.
getValue
();
// 每分钟的数据
int
sleepMinute
=
sleepMap
.
size
();
Map
.
Entry
<
String
,
AnalysisVO
>
lastEntry
=
sleepMap
.
lastEntry
();
startSleepDeepTime
=
entry
.
getKey
();
// 睡眠:深度睡眠和浅度睡眠>3小时
if
(
sleepMinute
>
napThreshold
*
60
)
{
SleepTimeAnalysisVO
sleepTimeAnalysisVO
=
new
SleepTimeAnalysisVO
();
sleepTimeAnalysisVO
.
setStartTime
(
startSleepDeepTime
);
sleepTimeAnalysisVO
.
setEndTime
(
lastEntry
.
getKey
());
sleepTimeAnalysisVO
.
setType
(
SleepTypeEnum
.
SLEEP
.
getCode
());
sleepTimeAnalysisVOList
.
add
(
sleepTimeAnalysisVO
);
daySleepMap
.
put
(
startSleepDeepTime
,
sleepMap
);
}
LocalDateTime
startTime
=
LocalDateTime
.
parse
(
startSleepDeepTime
,
DEFAULT_FORMATTER
);
LocalDateTime
repeatSleepTime
=
timeList
.
stream
().
filter
(
f
->
Duration
.
between
(
startTime
,
f
).
toMinutes
()
<=
napDuration
*
60L
).
findFirst
().
orElse
(
null
);
// 小憩:深度睡眠和浅度睡眠<=3小时,且2小时内无再次入睡
if
(
sleepMinute
<=
napThreshold
*
60
&&
repeatSleepTime
==
null
)
{
SleepTimeAnalysisVO
sleepTimeAnalysisVO
=
new
SleepTimeAnalysisVO
();
sleepTimeAnalysisVO
.
setStartTime
(
startSleepDeepTime
);
sleepTimeAnalysisVO
.
setEndTime
(
lastEntry
.
getKey
());
sleepTimeAnalysisVO
.
setType
(
SleepTypeEnum
.
RESTING
.
getCode
());
sleepTimeAnalysisVOList
.
add
(
sleepTimeAnalysisVO
);
daySleepMap
.
put
(
startSleepDeepTime
,
sleepMap
);
}
}
SleepCountDTO
sleepCountDTO
=
new
SleepCountDTO
();
SleepCountDTO
sleepCountDTO
=
new
SleepCountDTO
();
sleepCountDTO
.
set
TotalTurnedCount
(
totalTurnedCount
);
sleepCountDTO
.
set
DaySleepMap
(
daySleepMap
);
sleepCountDTO
.
set
TotalActionCount
(
totalActionCount
);
sleepCountDTO
.
set
RestSleepMap
(
restSleepMap
);
return
sleepCountDTO
;
return
sleepCountDTO
;
}
}
/**
/**
* 中度睡眠(体动和翻身次数10分钟内小于3次)
* 中度睡眠(体动和翻身次数10分钟内小于3次)
*
* @param sleepTypeMap
* @param sleepTypeMap
* @param analysisModel
* @param analysisModel
* @param sleepTimeAnalysisVOList
* @param sleepTimeAnalysisVOList
...
@@ -413,9 +460,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -413,9 +460,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
int
sleepModerateActionThreshold
=
Integer
.
parseInt
(
analysisModel
.
getSleepModerateActionThreshold
());
int
sleepModerateActionThreshold
=
Integer
.
parseInt
(
analysisModel
.
getSleepModerateActionThreshold
());
int
sleepModerateActionTimeBegin
=
Integer
.
parseInt
(
analysisModel
.
getSleepModerateActionTimeBegin
());
int
sleepModerateActionTimeBegin
=
Integer
.
parseInt
(
analysisModel
.
getSleepModerateActionTimeBegin
());
// 中度睡眠
int
sleepMidMinute
=
0
;
int
sleepMidMinute
=
0
;
String
startSleepMidTime
=
null
;
// 入睡时间开始
String
startSleepMidTime
=
null
;
for
(
Map
.
Entry
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
entry
:
sleepTypeMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
entry
:
sleepTypeMap
.
entrySet
())
{
TreeMap
<
String
,
AnalysisVO
>
sleepMap
=
entry
.
getValue
();
TreeMap
<
String
,
AnalysisVO
>
sleepMap
=
entry
.
getValue
();
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
voEntry
:
sleepMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
voEntry
:
sleepMap
.
entrySet
())
{
...
@@ -445,14 +491,14 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -445,14 +491,14 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
/**
/**
* 清醒(每分钟体动值大于60或无人)
* 清醒(每分钟体动值大于60或无人)
*
* @param sleepTypeMap
* @param sleepTypeMap
* @param sleepTimeAnalysisVOList
* @param sleepTimeAnalysisVOList
*/
*/
private
void
sober
(
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepTypeMap
,
private
void
sober
(
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepTypeMap
,
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
// 清醒
int
awakeMinute
=
0
;
int
awakeMinute
=
0
;
String
startAwakeTime
=
null
;
// 入睡时间开始
String
startAwakeTime
=
null
;
for
(
Map
.
Entry
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
entry
:
sleepTypeMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
entry
:
sleepTypeMap
.
entrySet
())
{
TreeMap
<
String
,
AnalysisVO
>
sleepMap
=
entry
.
getValue
();
TreeMap
<
String
,
AnalysisVO
>
sleepMap
=
entry
.
getValue
();
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
voEntry
:
sleepMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
voEntry
:
sleepMap
.
entrySet
())
{
...
@@ -478,139 +524,36 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -478,139 +524,36 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
}
}
}
private
List
<
SleepTimeAnalysisVO
>
getFinalSleepData
(
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
private
SleepTimeDTO
groupSleepData
(
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
Map
<
String
,
List
<
SleepTimeAnalysisVO
>>
sleepMap
=
StreamUtil
.
groupBy
(
sleepTimeAnalysisVOList
,
SleepTimeAnalysisVO:
:
getType
);
List
<
SleepTimeAnalysisVO
>
sleepList
=
sleepMap
.
get
(
SleepTypeEnum
.
SLEEP
.
getCode
());
List
<
SleepTimeAnalysisVO
>
finalSleepTimeAnalysisList
=
Lists
.
newArrayList
();
if
(
CollectionUtils
.
isEmpty
(
sleepList
))
{
return
finalSleepTimeAnalysisList
;
}
// 遍历得出长者一天多次睡眠中包含的不同睡眠类型
for
(
int
i
=
0
;
i
<
sleepList
.
size
();
i
++)
{
SleepTimeAnalysisVO
sleepTimeAnalysis
=
new
SleepTimeAnalysisVO
();
List
<
SleepTimeAnalysisVO
>
deepList
=
Lists
.
newArrayList
();
List
<
SleepTimeAnalysisVO
>
midList
=
Lists
.
newArrayList
();
List
<
SleepTimeAnalysisVO
>
lightList
=
Lists
.
newArrayList
();
List
<
SleepTimeAnalysisVO
>
soberList
=
Lists
.
newArrayList
();
SleepTimeAnalysisVO
timeAnalysisVO
=
sleepList
.
get
(
i
);
BeanUtils
.
copyProperties
(
timeAnalysisVO
,
sleepTimeAnalysis
);
String
startTime
=
timeAnalysisVO
.
getStartTime
();
String
endTime
=
timeAnalysisVO
.
getEndTime
();
Long
durationRange
=
getDurationRange
(
timeAnalysisVO
.
getStartTime
(),
timeAnalysisVO
.
getEndTime
());
timeAnalysisVO
.
setInterval
(
durationRange
);
LocalDateTime
startDateTime
=
LocalDateTime
.
parse
(
startTime
,
DEFAULT_FORMATTER
);
LocalDateTime
endDateTime
=
LocalDateTime
.
parse
(
endTime
,
DEFAULT_FORMATTER
);
boolean
lightSleepFlag
=
true
;
// 如果不满足下面条件,就默认都是浅睡
for
(
SleepTimeAnalysisVO
otherSleepTime
:
sleepTimeAnalysisVOList
)
{
if
(
otherSleepTime
.
getType
().
equals
(
SleepTypeEnum
.
SLEEP
.
getCode
())
||
otherSleepTime
.
getType
().
equals
(
SleepTypeEnum
.
GETUP
.
getCode
()))
{
continue
;
}
String
deepStartTime
=
otherSleepTime
.
getStartTime
();
String
deepEndTime
=
otherSleepTime
.
getEndTime
();
LocalDateTime
startDeepDateTime
=
LocalDateTime
.
parse
(
deepStartTime
,
DEFAULT_FORMATTER
);
LocalDateTime
endDeepDateTime
=
LocalDateTime
.
parse
(
deepEndTime
,
DEFAULT_FORMATTER
);
if
((
startDateTime
.
isBefore
(
startDeepDateTime
)
||
startDateTime
.
equals
(
startDeepDateTime
))
&&
(
endDateTime
.
isAfter
(
endDeepDateTime
)
||
endDateTime
.
equals
(
endDeepDateTime
)))
{
if
(
otherSleepTime
.
getType
().
equals
(
SleepTypeEnum
.
SLEEP_DEEP
.
getCode
()))
{
deepList
.
add
(
otherSleepTime
);
}
else
if
(
otherSleepTime
.
getType
().
equals
(
SleepTypeEnum
.
SLEEP_MODERATE
.
getCode
()))
{
midList
.
add
(
otherSleepTime
);
}
else
if
(
timeAnalysisVO
.
getType
().
equals
(
SleepTypeEnum
.
SOBER
.
getCode
()))
{
soberList
.
add
(
otherSleepTime
);
}
else
{
otherSleepTime
.
setType
(
SleepTypeEnum
.
SLEEP_LIGHTNESS
.
getCode
());
lightList
.
add
(
otherSleepTime
);
}
lightSleepFlag
=
false
;
}
}
if
(
lightSleepFlag
)
{
SleepTimeAnalysisVO
lightSleepTime
=
new
SleepTimeAnalysisVO
();
lightSleepTime
.
setType
(
SleepTypeEnum
.
SLEEP_LIGHTNESS
.
getCode
());
lightSleepTime
.
setStartTime
(
startTime
);
lightSleepTime
.
setEndTime
(
endTime
);
lightList
.
add
(
lightSleepTime
);
}
sleepTimeAnalysis
.
setDeepList
(
deepList
);
sleepTimeAnalysis
.
setInterval
(
durationRange
);
sleepTimeAnalysis
.
setMidList
(
midList
);
sleepTimeAnalysis
.
setLightList
(
lightList
);
sleepTimeAnalysis
.
setSoberList
(
soberList
);
finalSleepTimeAnalysisList
.
add
(
sleepTimeAnalysis
);
}
return
finalSleepTimeAnalysisList
;
}
private
SleepTimeDTO
groupSleepData
(
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
,
double
repeatSleepThreshold
,
double
sleepThreshold
)
{
sleepTimeAnalysisVOList
.
forEach
(
s
->
{
sleepTimeAnalysisVOList
.
forEach
(
s
->
{
Long
durationRange
=
getDurationRange
(
s
.
getStartTime
(),
s
.
getEndTime
());
Long
durationRange
=
getDurationRange
(
s
.
getStartTime
(),
s
.
getEndTime
());
s
.
setInterval
(
durationRange
);
s
.
setInterval
(
durationRange
);
});
});
Map
<
String
,
List
<
SleepTimeAnalysisVO
>>
sleepMap
=
StreamUtil
.
groupBy
(
sleepTimeAnalysisVOList
,
SleepTimeAnalysisVO:
:
getType
);
Map
<
String
,
List
<
SleepTimeAnalysisVO
>>
sleepMap
=
StreamUtil
.
groupBy
(
sleepTimeAnalysisVOList
,
SleepTimeAnalysisVO:
:
getType
);
List
<
SleepTimeAnalysisVO
>
sleepList
=
sleepMap
.
get
(
SleepTypeEnum
.
SLEEP
.
getCode
());
List
<
SleepTimeAnalysisVO
>
daySleepList
=
sleepMap
.
containsKey
(
SleepTypeEnum
.
DAY_SLEEP
.
getCode
())
?
sleepMap
.
get
(
SleepTypeEnum
.
DAY_SLEEP
.
getCode
())
:
new
ArrayList
<>();
List
<
SleepTimeAnalysisVO
>
allSleepList
=
sleepMap
.
get
(
SleepTypeEnum
.
SLEEP
.
getCode
());
List
<
SleepTimeAnalysisVO
>
sleepList
=
sleepMap
.
containsKey
(
SleepTypeEnum
.
SLEEP
.
getCode
())
?
sleepMap
.
get
(
SleepTypeEnum
.
SLEEP
.
getCode
())
:
new
ArrayList
<>();
List
<
SleepTimeAnalysisVO
>
deepList
=
sleepMap
.
containsKey
(
SleepTypeEnum
.
SLEEP_DEEP
.
getCode
())
?
sleepMap
.
get
(
SleepTypeEnum
.
SLEEP_DEEP
.
getCode
())
:
new
ArrayList
<>();
List
<
SleepTimeAnalysisVO
>
moderateList
=
sleepMap
.
containsKey
(
SleepTypeEnum
.
SLEEP_MODERATE
.
getCode
())
?
sleepMap
.
get
(
SleepTypeEnum
.
SLEEP_MODERATE
.
getCode
())
:
new
ArrayList
<>();
List
<
SleepTimeAnalysisVO
>
getUpList
=
sleepMap
.
containsKey
(
SleepTypeEnum
.
GETUP
.
getCode
())
?
sleepMap
.
get
(
SleepTypeEnum
.
GETUP
.
getCode
())
:
new
ArrayList
<>();
List
<
SleepTimeAnalysisVO
>
soberList
=
sleepMap
.
containsKey
(
SleepTypeEnum
.
SOBER
.
getCode
())
?
sleepMap
.
get
(
SleepTypeEnum
.
SOBER
.
getCode
())
:
new
ArrayList
<>();
SleepTimeDTO
sleepTimeDTO
=
new
SleepTimeDTO
();
SleepTimeDTO
sleepTimeDTO
=
new
SleepTimeDTO
();
if
(
CollectionUtils
.
isEmpty
(
sleepList
))
{
return
sleepTimeDTO
;
}
List
<
SleepTimeAnalysisVO
>
deepList
=
sleepMap
.
get
(
SleepTypeEnum
.
SLEEP_DEEP
.
getCode
());
List
<
SleepTimeAnalysisVO
>
moderateList
=
sleepMap
.
get
(
SleepTypeEnum
.
SLEEP_MODERATE
.
getCode
());
List
<
SleepTimeAnalysisVO
>
getUpList
=
sleepMap
.
get
(
SleepTypeEnum
.
GETUP
.
getCode
());
List
<
SleepTimeAnalysisVO
>
soberList
=
sleepMap
.
get
(
SleepTypeEnum
.
SOBER
.
getCode
());
sleepTimeDTO
.
setDeepList
(
deepList
);
sleepTimeDTO
.
setDeepList
(
deepList
);
sleepTimeDTO
.
setMidList
(
moderateList
);
sleepTimeDTO
.
setMidList
(
moderateList
);
sleepTimeDTO
.
setSoberList
(
soberList
);
sleepTimeDTO
.
setSoberList
(
soberList
);
sleepTimeDTO
.
setSleepList
(
allS
leepList
);
sleepTimeDTO
.
setSleepList
(
s
leepList
);
sleepTimeDTO
.
setGetUpList
(
getUpList
);
sleepTimeDTO
.
setGetUpList
(
getUpList
);
sleepTimeDTO
.
setDaySleepList
(
daySleepList
);
if
(
CollUtil
.
isNotEmpty
(
deepList
)){
List
<
SleepTimeAnalysisVO
>
lightSleepList
=
new
ArrayList
<>();
sleepList
.
removeAll
(
deepList
);
if
(
CollUtil
.
isNotEmpty
(
sleepList
))
{
}
lightSleepList
=
sleepList
;
if
(
CollUtil
.
isNotEmpty
(
moderateList
)){
if
(
CollUtil
.
isNotEmpty
(
deepList
))
{
sleepList
.
removeAll
(
moderateList
);
lightSleepList
.
removeAll
(
deepList
);
}
if
(
CollUtil
.
isNotEmpty
(
getUpList
)){
sleepList
.
removeAll
(
getUpList
);
}
if
(
CollUtil
.
isNotEmpty
(
soberList
)){
sleepList
.
removeAll
(
soberList
);
}
}
sleepTimeDTO
.
setLightList
(
sleepList
);
if
(
CollUtil
.
isNotEmpty
(
moderateList
))
{
lightSleepList
.
removeAll
(
moderateList
);
List
<
SleepTimeAnalysisVO
>
deepAndLightList
=
Lists
.
newArrayList
();
CollUtil
.
addAll
(
deepAndLightList
,
deepList
);
CollUtil
.
addAll
(
deepAndLightList
,
sleepTimeDTO
.
getLightList
());
if
(
CollUtil
.
isNotEmpty
(
deepAndLightList
))
{
List
<
SleepTimeAnalysisVO
>
restList
=
Lists
.
newArrayList
();
List
<
SleepTimeAnalysisVO
>
sleepOverTimeList
=
Lists
.
newArrayList
();
deepList
.
forEach
(
d
->
{
boolean
isOverTime
=
d
.
getInterval
()
>
sleepThreshold
*
60
;
if
(
isOverTime
)
{
sleepOverTimeList
.
add
(
d
);
}
else
{
// 两小时内不再入睡
LocalDateTime
startDateTime
=
LocalDateTime
.
parse
(
d
.
getStartTime
(),
DEFAULT_FORMATTER
);
SleepTimeAnalysisVO
repeatSleep
=
allSleepList
.
stream
().
filter
(
f
->
Duration
.
between
(
startDateTime
,
LocalDateTime
.
parse
(
f
.
getStartTime
(),
DEFAULT_FORMATTER
)).
toMinutes
()
<
repeatSleepThreshold
*
60
)
.
findFirst
().
orElse
(
null
);
// 深度睡眠和浅度睡眠小于等于3小时,且两小时内不再入睡,则为小憩
if
(
repeatSleep
==
null
)
{
restList
.
add
(
d
);
}
}
}
}
sleepTimeDTO
.
setLightList
(
lightSleepList
);
});
sleepTimeDTO
.
setRestList
(
restList
);
sleepTimeDTO
.
setDaySleepList
(
sleepOverTimeList
);
}
return
sleepTimeDTO
;
return
sleepTimeDTO
;
}
}
...
@@ -626,10 +569,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -626,10 +569,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
long
dayRestTime
=
sleepTimeMinute
.
getDayRestTime
()
!=
null
?
sleepTimeMinute
.
getDayRestTime
()
:
0L
;
long
dayRestTime
=
sleepTimeMinute
.
getDayRestTime
()
!=
null
?
sleepTimeMinute
.
getDayRestTime
()
:
0L
;
long
soberTime
=
sleepTimeMinute
.
getSoberTime
()
!=
null
?
sleepTimeMinute
.
getSoberTime
()
:
0L
;
long
soberTime
=
sleepTimeMinute
.
getSoberTime
()
!=
null
?
sleepTimeMinute
.
getSoberTime
()
:
0L
;
long
lightTime
=
sleepTimeMinute
.
getLightTime
()
!=
null
?
sleepTimeMinute
.
getLightTime
()
:
0L
;
long
lightTime
=
sleepTimeMinute
.
getLightTime
()
!=
null
?
sleepTimeMinute
.
getLightTime
()
:
0L
;
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
));
// 长者一天的睡眠分析
// 长者一天的睡眠分析
PlatElderSleepAnalysis
elderSleepAnalysis
=
new
PlatElderSleepAnalysis
();
PlatElderSleepAnalysis
elderSleepAnalysis
=
new
PlatElderSleepAnalysis
();
elderSleepAnalysis
.
setElderId
(
elderId
);
elderSleepAnalysis
.
setElderId
(
elderId
);
...
@@ -653,10 +594,10 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -653,10 +594,10 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
List
<
SleepTimeAnalysisVO
>
moderateList
=
sleepTimeDTO
.
getMidList
();
List
<
SleepTimeAnalysisVO
>
moderateList
=
sleepTimeDTO
.
getMidList
();
List
<
SleepTimeAnalysisVO
>
lightList
=
sleepTimeDTO
.
getLightList
();
List
<
SleepTimeAnalysisVO
>
lightList
=
sleepTimeDTO
.
getLightList
();
List
<
SleepTimeAnalysisVO
>
soberList
=
sleepTimeDTO
.
getSoberList
();
List
<
SleepTimeAnalysisVO
>
soberList
=
sleepTimeDTO
.
getSoberList
();
List
<
SleepTimeAnalysisVO
>
daySleepList
=
sleepTimeDTO
.
getDay
SleepList
();
List
<
SleepTimeAnalysisVO
>
sleepList
=
sleepTimeDTO
.
get
SleepList
();
List
<
SleepTimeAnalysisVO
>
restList
=
sleepTimeDTO
.
getRestList
();
List
<
SleepTimeAnalysisVO
>
restList
=
sleepTimeDTO
.
getRestList
();
if
(
CollUtil
.
isNotEmpty
(
dayS
leepList
))
{
if
(
CollUtil
.
isNotEmpty
(
s
leepList
))
{
for
(
SleepTimeAnalysisVO
analysisVO
:
dayS
leepList
)
{
for
(
SleepTimeAnalysisVO
analysisVO
:
s
leepList
)
{
PlatSleepRangeVO
sleepRangeVO
=
new
PlatSleepRangeVO
();
PlatSleepRangeVO
sleepRangeVO
=
new
PlatSleepRangeVO
();
sleepRangeVO
.
setStartTime
(
analysisVO
.
getStartTime
());
sleepRangeVO
.
setStartTime
(
analysisVO
.
getStartTime
());
sleepRangeVO
.
setEndTime
(
analysisVO
.
getEndTime
());
sleepRangeVO
.
setEndTime
(
analysisVO
.
getEndTime
());
...
@@ -788,38 +729,34 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -788,38 +729,34 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
private
SleepTimeMinuteDTO
getSleepTimeMinute
(
SleepTimeDTO
sleepTimeDTO
)
{
private
SleepTimeMinuteDTO
getSleepTimeMinute
(
SleepTimeDTO
sleepTimeDTO
)
{
SleepTimeMinuteDTO
result
=
new
SleepTimeMinuteDTO
();
SleepTimeMinuteDTO
result
=
new
SleepTimeMinuteDTO
();
result
.
setDaySleepTime
(
sleepTimeDTO
.
getDaySleepList
().
stream
().
mapToLong
(
SleepTimeAnalysisVO:
:
getInterval
).
reduce
(
0L
,
Long:
:
sum
)
);
result
.
setDaySleepTime
(
CollUtil
.
isNotEmpty
(
sleepTimeDTO
.
getSleepList
())
?
sleepTimeDTO
.
getSleepList
().
stream
().
mapToLong
(
SleepTimeAnalysisVO:
:
getInterval
).
reduce
(
0L
,
Long:
:
sum
)
:
0
);
result
.
setDeepTime
(
sleepTimeDTO
.
getDeepList
().
stream
().
mapToLong
(
SleepTimeAnalysisVO:
:
getInterval
).
reduce
(
0L
,
Long:
:
sum
)
);
result
.
setDeepTime
(
CollUtil
.
isNotEmpty
(
sleepTimeDTO
.
getDeepList
())
?
sleepTimeDTO
.
getDeepList
().
stream
().
mapToLong
(
SleepTimeAnalysisVO:
:
getInterval
).
reduce
(
0L
,
Long:
:
sum
)
:
0
);
result
.
setLightTime
(
sleepTimeDTO
.
getLightList
().
stream
().
mapToLong
(
SleepTimeAnalysisVO:
:
getInterval
).
reduce
(
0L
,
Long:
:
sum
)
);
result
.
setLightTime
(
CollUtil
.
isNotEmpty
(
sleepTimeDTO
.
getLightList
())
?
sleepTimeDTO
.
getLightList
().
stream
().
mapToLong
(
SleepTimeAnalysisVO:
:
getInterval
).
reduce
(
0L
,
Long:
:
sum
)
:
0
);
result
.
setSoberTime
(
sleepTimeDTO
.
getSoberList
().
stream
().
mapToLong
(
SleepTimeAnalysisVO:
:
getInterval
).
reduce
(
0L
,
Long:
:
sum
)
);
result
.
setSoberTime
(
CollUtil
.
isNotEmpty
(
sleepTimeDTO
.
getSoberList
())
?
sleepTimeDTO
.
getSoberList
().
stream
().
mapToLong
(
SleepTimeAnalysisVO:
:
getInterval
).
reduce
(
0L
,
Long:
:
sum
)
:
0
);
return
result
;
return
result
;
}
}
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
@TenantIdIgnore
@TenantIdIgnore
public
List
<
ElderSleepAnalysisVO
>
elderSleepSleepAnalysisTask
(
Integer
month
,
Integer
day
)
{
public
List
<
ElderSleepAnalysisVO
>
elderSleepSleepAnalysisTask
(
Integer
month
,
Integer
day
)
{
List
<
String
>
dayHourRangeList
=
getLastDayHourRange
(
month
,
day
);
List
<
String
>
dayHourRangeList
=
getLastDayHourRange
(
month
,
day
);
String
currentDate
=
LocalDate
.
now
().
minusDays
(
1
).
toString
();
String
currentDate
=
LocalDate
.
now
().
minusDays
(
1
).
toString
();
if
(
month
!=
null
&&
day
!=
null
)
{
if
(
month
!=
null
&&
day
!=
null
)
{
currentDate
=
LocalDate
.
of
(
2024
,
month
,
day
).
minusDays
(
1
).
toString
();
currentDate
=
LocalDate
.
of
(
2024
,
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
)
.
last
(
"limit 1"
));
.
last
(
"limit 1"
));
List
<
PlatRoomBedDevice
>
platRoomBedDeviceList
=
roomBedDeviceService
.
list
(
new
QueryWrapper
<
PlatRoomBedDevice
>()
List
<
PlatRoomBedDevice
>
platRoomBedDeviceList
=
roomBedDeviceService
.
list
(
new
QueryWrapper
<
PlatRoomBedDevice
>()
.
lambda
().
isNotNull
(
PlatRoomBedDevice:
:
getBedId
));
.
lambda
().
isNotNull
(
PlatRoomBedDevice:
:
getBedId
));
SaasSleepEvaluateStandardReport
evaluateStandardReport
=
saasSleepEvaluateStandardReportService
.
getOne
(
new
QueryWrapper
<
SaasSleepEvaluateStandardReport
>().
lambda
()
SaasSleepEvaluateStandardReport
evaluateStandardReport
=
saasSleepEvaluateStandardReportService
.
getOne
(
new
QueryWrapper
<
SaasSleepEvaluateStandardReport
>().
lambda
()
.
orderByDesc
(
BaseEntity:
:
getCreateDate
)
.
orderByDesc
(
BaseEntity:
:
getCreateDate
)
.
last
(
"limit 1"
));
.
last
(
"limit 1"
));
double
sleepTimeActionDuration
=
Double
.
parseDouble
(
analysisModel
.
getSleepTimeActionDuration
());
double
sleepTimeActionDuration
=
Double
.
parseDouble
(
analysisModel
.
getSleepTimeActionDuration
());
int
riseActionDuration
=
Integer
.
parseInt
(
analysisModel
.
getRiseActionDuration
());
int
riseActionDuration
=
Integer
.
parseInt
(
analysisModel
.
getRiseActionDuration
());
double
riseLeaveThreshold
=
Double
.
parseDouble
(
analysisModel
.
getRiseLeaveThreshold
());
double
riseLeaveThreshold
=
Double
.
parseDouble
(
analysisModel
.
getRiseLeaveThreshold
());
double
sleepThreshold
=
Double
.
parseDouble
(
analysisModel
.
getSleepThreshold
());
double
repeatSleepThreshold
=
Double
.
parseDouble
(
analysisModel
.
getRiseRepeatThreshold
());
double
repeatSleepThreshold
=
Double
.
parseDouble
(
analysisModel
.
getRiseRepeatThreshold
());
List
<
ElderSleepAnalysisVO
>
result
=
new
ArrayList
<>();
List
<
ElderSleepAnalysisVO
>
result
=
new
ArrayList
<>();
...
@@ -837,7 +774,6 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -837,7 +774,6 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
continue
;
continue
;
}
}
String
tenantId
=
elder
.
getTenantId
();
String
tenantId
=
elder
.
getTenantId
();
for
(
String
hourRange
:
dayHourRangeList
)
{
for
(
String
hourRange
:
dayHourRangeList
)
{
String
[]
hourRangeArray
=
hourRange
.
split
(
"~"
);
String
[]
hourRangeArray
=
hourRange
.
split
(
"~"
);
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntities
=
productDeviceService
.
getDeviceLogByTimeRange
(
platDevice
.
getOriDeviceId
(),
"reportProperty"
,
5000
,
hourRangeArray
[
0
],
hourRangeArray
[
1
]);
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntities
=
productDeviceService
.
getDeviceLogByTimeRange
(
platDevice
.
getOriDeviceId
(),
"reportProperty"
,
5000
,
hourRangeArray
[
0
],
hourRangeArray
[
1
]);
...
@@ -863,93 +799,32 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -863,93 +799,32 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
if
(
CollUtil
.
isEmpty
(
totalMap
))
{
if
(
CollUtil
.
isEmpty
(
totalMap
))
{
continue
;
continue
;
}
}
int
totalActionCount
=
0
;
int
totalTurnedCount
=
0
;
// 记录长者不同类型的睡眠时间
// 记录长者不同类型的睡眠时间
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
=
Lists
.
newArrayList
();
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
=
Lists
.
newArrayList
();
// 入睡时间
// 入睡时间
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepTypeMap
=
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepTypeMap
=
getFallAsleepData
(
totalMap
,
sleepTimeActionDuration
,
sleepTimeAnalysisVOList
);
getFallAsleepData
(
totalMap
,
sleepTimeActionDuration
,
sleepTimeAnalysisVOList
);
// 获取睡眠和小憩
SleepCountDTO
sleepCountDTO
=
deepSleepAndRestData
(
sleepTypeMap
,
analysisModel
,
sleepTimeAnalysisVOList
);
// 满足睡眠条件的map
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
daySleepMap
=
sleepCountDTO
.
getDaySleepMap
();
// 深度睡眠
// 深度睡眠
SleepCountDTO
sleepCountDTO
=
deepSleepData
(
sleepType
Map
,
analysisModel
,
sleepTimeAnalysisVOList
);
deepSleepData
(
daySleep
Map
,
analysisModel
,
sleepTimeAnalysisVOList
);
// 中度睡眠
// 中度睡眠
middleSleep
(
sleepType
Map
,
analysisModel
,
sleepTimeAnalysisVOList
);
middleSleep
(
daySleep
Map
,
analysisModel
,
sleepTimeAnalysisVOList
);
// 清醒
// 清醒
sober
(
sleepTypeMap
,
sleepTimeAnalysisVOList
);
sober
(
sleepTypeMap
,
sleepTimeAnalysisVOList
);
// 起床
// 起床
getUp
(
totalMap
,
riseLeaveThreshold
,
riseActionDuration
,
repeatSleepThreshold
,
sleepTimeAnalysisVOList
);
getUp
(
totalMap
,
riseLeaveThreshold
,
riseActionDuration
,
repeatSleepThreshold
,
sleepTimeAnalysisVOList
,
sleepCountDTO
);
// 小憩、睡眠
//浅睡
SleepTimeDTO
sleepTimeDTO
=
groupSleepData
(
sleepTimeAnalysisVOList
,
repeatSleepThreshold
,
sleepThreshold
);
SleepTimeDTO
sleepTimeDTO
=
groupSleepData
(
sleepTimeAnalysisVOList
);
if
(
CollUtil
.
isEmpty
(
sleepTimeDTO
.
getSleepList
()))
{
continue
;
}
List
<
PlatElderSleep
>
platElderSleeps
=
saveElderSleep
(
sleepTimeDTO
,
elder
.
getId
(),
currentDate
);
List
<
PlatElderSleep
>
platElderSleeps
=
saveElderSleep
(
sleepTimeDTO
,
elder
.
getId
(),
currentDate
);
PlatElderSleepAnalysis
platElderSleepAnalysis
=
savePlatElderSleepAnalysis
(
sleepTimeDTO
,
evaluateStandardReport
,
elder
.
getId
(),
currentDate
,
PlatElderSleepAnalysis
platElderSleepAnalysis
=
savePlatElderSleepAnalysis
(
sleepTimeDTO
,
evaluateStandardReport
,
elder
.
getId
(),
currentDate
,
sleepCountDTO
,
tenantId
,
platDevice
.
getOriDeviceId
());
sleepCountDTO
,
tenantId
,
platDevice
.
getOriDeviceId
());
ElderSleepAnalysisVO
analysisVO
=
BeanUtil
.
copyProperties
(
platElderSleepAnalysis
,
ElderSleepAnalysisVO
.
class
);
ElderSleepAnalysisVO
analysisVO
=
BeanUtil
.
copyProperties
(
platElderSleepAnalysis
,
ElderSleepAnalysisVO
.
class
);
analysisVO
.
setPlatElderSleeps
(
platElderSleeps
);
analysisVO
.
setPlatElderSleeps
(
platElderSleeps
);
result
.
add
(
analysisVO
);
result
.
add
(
analysisVO
);
}
return
result
;
}
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
);
}
}
/**
* @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
()).
toMinutes
()
<
riseRepeatThreshold
*
60L
).
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
;
return
result
;
}
}
...
@@ -1008,7 +883,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -1008,7 +883,7 @@ 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
(
Integer
month
,
Integer
day
)
{
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
)
{
if
(
month
!=
null
&&
day
!=
null
)
{
...
@@ -1025,298 +900,4 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
...
@@ -1025,298 +900,4 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return
list
;
return
list
;
}
}
public
static
LocalDateTime
getDayStart
(
LocalDate
time
)
{
return
time
.
atTime
(
0
,
0
,
0
);
}
@Override
public
void
test1
()
{
int
days
=
30
;
LocalDateTime
localDateTime
=
LocalDateTime
.
now
().
minusDays
(
28
);
List
<
String
>
timeRangeList
=
Lists
.
newArrayList
();
PlatElder
elder
=
platElderService
.
getById
(
"1704706233484742658"
);
DateTimeFormatter
timeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
int
sleepNumber
=
6
;
SleepTypeEnum
[]
values
=
SleepTypeEnum
.
values
();
for
(
int
i
=
0
;
i
<
days
;
i
++)
{
String
lastDate
=
localDateTime
.
format
(
timeFormatter
);
localDateTime
=
localDateTime
.
plusDays
(
1
);
String
currentDate
=
localDateTime
.
format
(
timeFormatter
);
PlatElderSleep
platElderSleep
=
new
PlatElderSleep
();
String
sleepStartTime
=
lastDate
+
" 22:00"
;
String
sleepEndTime
=
currentDate
+
" 08:00"
;
LocalDateTime
startTime
=
LocalDateTime
.
parse
(
sleepStartTime
,
DEFAULT_FORMATTER
);
LocalDateTime
endTime
=
LocalDateTime
.
parse
(
sleepEndTime
,
DEFAULT_FORMATTER
);
platElderSleep
.
setStartSleep
(
startTime
);
platElderSleep
.
setEndSleep
(
endTime
);
platElderSleep
.
setElderSleepType
(
1
);
platElderSleep
.
setElderId
(
elder
.
getId
());
platElderSleep
.
setHappenDate
(
currentDate
);
platElderSleep
.
setTenantId
(
elder
.
getTenantId
());
List
<
PlatSleepRangeVO
>
rangeVOList
=
Lists
.
newArrayList
();
String
start
=
""
;
String
end
=
""
;
for
(
int
i1
=
0
;
i1
<
sleepNumber
;
i1
++)
{
PlatSleepRangeVO
rangeVO
=
new
PlatSleepRangeVO
();
int
random
=
RandomUtils
.
nextInt
(
0
,
4
);
long
randomLong
=
RandomUtils
.
nextLong
(
1
,
3
);
SleepTypeEnum
sleepTypeEnum
=
values
[
random
];
rangeVO
.
setSleepType
(
sleepTypeEnum
.
getCode
());
start
=
startTime
.
format
(
DEFAULT_FORMATTER
);
LocalDateTime
dateTime
=
startTime
.
plusHours
(
randomLong
);
end
=
dateTime
.
format
(
DEFAULT_FORMATTER
);
rangeVO
.
setStartTime
(
start
);
rangeVO
.
setEndTime
(
end
);
startTime
=
LocalDateTime
.
parse
(
end
,
DEFAULT_FORMATTER
);
rangeVOList
.
add
(
rangeVO
);
}
platElderSleep
.
setSleepRecord
(
rangeVOList
);
//platElderSleepService.save(platElderSleep);
PlatElderSleepAnalysis
elderSleepAnalysis
=
new
PlatElderSleepAnalysis
();
elderSleepAnalysis
.
setElderId
(
elder
.
getId
());
elderSleepAnalysis
.
setActionCount
(
700
);
elderSleepAnalysis
.
setTurnedCount
(
500
);
elderSleepAnalysis
.
setHappenDate
(
currentDate
);
elderSleepAnalysis
.
setSleepScore
(
"80"
);
elderSleepAnalysis
.
setSleepTime
(
"600"
);
elderSleepAnalysis
.
setRestTime
(
"840"
);
elderSleepAnalysis
.
setSleepResult
(
"良好"
);
elderSleepAnalysis
.
setTenantId
(
elder
.
getTenantId
());
elderSleepAnalysis
.
setSleepEvaluate
(
"不错"
);
//platElderSleepAnalysisService.save(elderSleepAnalysis);
PlatElderBreatheDayStat
elderBreatheDayStat
=
new
PlatElderBreatheDayStat
();
elderBreatheDayStat
.
setElderId
(
elder
.
getId
());
elderBreatheDayStat
.
setDeviceId
(
"1704705639248334849"
);
elderBreatheDayStat
.
setOriDeviceId
(
"218A00XE26691FC"
);
elderBreatheDayStat
.
setDay
(
localDateTime
.
toLocalDate
());
elderBreatheDayStat
.
setHeartRateMax
(
72
);
elderBreatheDayStat
.
setHeartRateMax
(
60
);
elderBreatheDayStat
.
setHeartRateMax
(
65
);
elderBreatheDayStat
.
setRespiratoryRateAvg
(
14
);
elderBreatheDayStat
.
setRespiratoryRateMax
(
18
);
elderBreatheDayStat
.
setRespiratoryRateMin
(
12
);
elderBreatheDayStat
.
setTenantId
(
elder
.
getTenantId
());
//platElderBreatheDayStatService.save(elderBreatheDayStat);
PlatElderReportMonth
platElderReportMonth
=
new
PlatElderReportMonth
();
platElderReportMonth
.
setElderId
(
elder
.
getId
());
platElderReportMonth
.
setDay
(
localDateTime
.
toLocalDate
());
platElderReportMonth
.
setTenantId
(
elder
.
getTenantId
());
platElderReportMonth
.
setSleepResult
(
"良好"
);
platElderReportMonth
.
setRespiratoryExceptionCount
(
0
);
platElderReportMonth
.
setHeartExceptionCount
(
0
);
platElderReportMonth
.
setBehaviorExceptionCount
(
0
);
platElderReportMonth
.
setOffBedExceptionCount
(
0
);
platElderReportMonth
.
setHeartRate
(
80
);
platElderReportMonth
.
setRespiratoryRate
(
20
);
platElderReportMonth
.
setFailCount
(
0
);
platElderReportMonthService
.
save
(
platElderReportMonth
);
PlatElderBreatheAnalysis
platElderBreatheAnalysis
=
new
PlatElderBreatheAnalysis
();
platElderBreatheAnalysis
.
setElderId
(
elder
.
getId
());
platElderBreatheAnalysis
.
setAvgBreatheRate
(
"65"
);
platElderBreatheAnalysis
.
setAvgHeartRate
(
"14"
);
platElderBreatheAnalysis
.
setBreatheScore
(
"60"
);
platElderBreatheAnalysis
.
setBreatheResult
(
"良好"
);
platElderBreatheAnalysis
.
setHappenDate
(
currentDate
);
platElderBreatheAnalysis
.
setTenantId
(
elder
.
getTenantId
());
platElderBreatheAnalysis
.
setBreatheEvaluate
(
"还不错"
);
//platElderBreatheAnalysisService.save(platElderBreatheAnalysis);
}
}
private
void
oldMethod
(
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
,
SaasSleepEvaluateStandardReport
evaluateStandardReport
,
PlatElder
elder
,
String
currentDate
,
String
tenantId
,
SaasSleepAnalysisModel
analysisModel
,
PlatDevice
platDevice
)
{
int
totalActionCount
=
0
;
int
totalTurnedCount
=
0
;
List
<
SleepTimeAnalysisVO
>
finalSleepTimeAnalysisList
=
getFinalSleepData
(
sleepTimeAnalysisVOList
);
if
(
CollUtil
.
isEmpty
(
finalSleepTimeAnalysisList
))
{
return
;
}
// 算出每一段睡觉的不同睡眠类型的时间段
SaasSleepEvaluateStandardReportVO
saasSleepEvaluateStandardReportVO
=
new
SaasSleepEvaluateStandardReportVO
();
List
<
PlatElderSleep
>
elderSleepList
=
Lists
.
newArrayList
();
PlatSleepRangeVO
sleepRangeVO
;
for
(
SleepTimeAnalysisVO
timeAnalysisVO
:
finalSleepTimeAnalysisList
)
{
List
<
PlatSleepRangeVO
>
sleepRangeVOList
=
Lists
.
newArrayList
();
PlatElderSleep
elderSleep
=
new
PlatElderSleep
();
for
(
SleepTimeAnalysisVO
analysisVO
:
timeAnalysisVO
.
getDeepList
())
{
sleepRangeVO
=
new
PlatSleepRangeVO
();
sleepRangeVO
.
setStartTime
(
analysisVO
.
getStartTime
());
sleepRangeVO
.
setEndTime
(
analysisVO
.
getEndTime
());
sleepRangeVO
.
setSleepType
(
analysisVO
.
getType
());
sleepRangeVOList
.
add
(
sleepRangeVO
);
}
for
(
SleepTimeAnalysisVO
analysisVO
:
timeAnalysisVO
.
getMidList
())
{
sleepRangeVO
=
new
PlatSleepRangeVO
();
sleepRangeVO
.
setStartTime
(
analysisVO
.
getStartTime
());
sleepRangeVO
.
setEndTime
(
analysisVO
.
getEndTime
());
sleepRangeVO
.
setSleepType
(
analysisVO
.
getType
());
sleepRangeVOList
.
add
(
sleepRangeVO
);
}
for
(
SleepTimeAnalysisVO
analysisVO
:
timeAnalysisVO
.
getLightList
())
{
sleepRangeVO
=
new
PlatSleepRangeVO
();
sleepRangeVO
.
setStartTime
(
analysisVO
.
getStartTime
());
sleepRangeVO
.
setEndTime
(
analysisVO
.
getEndTime
());
sleepRangeVO
.
setSleepType
(
analysisVO
.
getType
());
sleepRangeVOList
.
add
(
sleepRangeVO
);
}
for
(
SleepTimeAnalysisVO
analysisVO
:
timeAnalysisVO
.
getSoberList
())
{
sleepRangeVO
=
new
PlatSleepRangeVO
();
sleepRangeVO
.
setStartTime
(
analysisVO
.
getStartTime
());
sleepRangeVO
.
setEndTime
(
analysisVO
.
getEndTime
());
sleepRangeVO
.
setSleepType
(
analysisVO
.
getType
());
sleepRangeVOList
.
add
(
sleepRangeVO
);
}
elderSleep
.
setStartSleep
(
LocalDateTime
.
parse
(
timeAnalysisVO
.
getStartTime
(),
DEFAULT_FORMATTER
));
elderSleep
.
setEndSleep
(
LocalDateTime
.
parse
(
timeAnalysisVO
.
getEndTime
(),
DEFAULT_FORMATTER
));
if
(
timeAnalysisVO
.
getInterval
()
/
60
>
3
)
{
elderSleep
.
setElderSleepType
(
ElderSleepType
.
SLEEP
.
getCode
());
}
else
{
elderSleep
.
setElderSleepType
(
ElderSleepType
.
REST
.
getCode
());
}
elderSleep
.
setInterval
(
timeAnalysisVO
.
getInterval
());
elderSleep
.
setSleepRecord
(
sleepRangeVOList
);
elderSleepList
.
add
(
elderSleep
);
}
// 获取睡眠评估标准配置
String
sleepDeepConfig
=
evaluateStandardReport
.
getSleepDeepConfig
();
String
soberConfig
=
evaluateStandardReport
.
getSoberConfig
();
String
sleepTimeConfig
=
evaluateStandardReport
.
getSleepTime
();
String
lightnessConfig
=
evaluateStandardReport
.
getSleepLightnessConfig
();
List
<
SleepConfigVO
>
sleepDeepConfigList
=
JSON
.
parseArray
(
sleepDeepConfig
,
SleepConfigVO
.
class
);
List
<
SleepConfigVO
>
soberConfigList
=
JSON
.
parseArray
(
soberConfig
,
SleepConfigVO
.
class
);
List
<
SleepConfigVO
>
sleepTimeConfigList
=
JSON
.
parseArray
(
sleepTimeConfig
,
SleepConfigVO
.
class
);
SleepConfigVO
lightnessConfigVO
=
JSON
.
parseObject
(
lightnessConfig
,
SleepConfigVO
.
class
);
long
deepTime
=
0
;
long
soberTime
=
0
;
long
soberCount
=
0
;
long
sleepTime
=
0
;
long
lightTime
=
0
;
// 算出不同睡眠类型的总时长
for
(
SleepTimeAnalysisVO
timeAnalysisVO
:
sleepTimeAnalysisVOList
)
{
Long
durationRange
=
getDurationRange
(
timeAnalysisVO
.
getStartTime
(),
timeAnalysisVO
.
getEndTime
());
timeAnalysisVO
.
setInterval
(
durationRange
);
if
(
timeAnalysisVO
.
getType
().
equals
(
SleepTypeEnum
.
SLEEP_DEEP
.
getCode
()))
{
deepTime
+=
durationRange
;
}
if
(
timeAnalysisVO
.
getType
().
equals
(
SleepTypeEnum
.
SOBER
.
getCode
()))
{
soberTime
+=
durationRange
;
}
if
(
timeAnalysisVO
.
getType
().
equals
(
SleepTypeEnum
.
SLEEP_LIGHTNESS
.
getCode
()))
{
lightTime
+=
durationRange
;
soberCount
++;
}
if
(
timeAnalysisVO
.
getType
().
equals
(
SleepTypeEnum
.
SLEEP
.
getCode
()))
{
sleepTime
+=
durationRange
;
}
}
long
deepScore
=
0
;
for
(
int
i
=
0
;
i
<
sleepDeepConfigList
.
size
();
i
++)
{
long
hour
=
deepTime
/
60
;
SleepConfigVO
sleepConfigVO
=
sleepDeepConfigList
.
get
(
i
);
long
configHour
=
Long
.
parseLong
(
sleepConfigVO
.
getHour
());
if
(
i
==
0
&&
Objects
.
equals
(
hour
,
configHour
))
{
deepScore
=
Long
.
parseLong
(
sleepConfigVO
.
getScore
());
}
if
(
i
>
0
&&
hour
>
configHour
)
{
deepScore
+=
Long
.
parseLong
(
sleepConfigVO
.
getScore
());
}
}
saasSleepEvaluateStandardReportVO
.
setDeepScore
(
deepScore
);
long
soberScore
=
0
;
for
(
int
i
=
0
;
i
<
soberConfigList
.
size
();
i
++)
{
SleepConfigVO
sleepConfigVO
=
soberConfigList
.
get
(
i
);
long
configHour
=
Long
.
parseLong
(
sleepConfigVO
.
getHour
());
if
(
i
==
0
&&
soberCount
!=
0
)
{
soberScore
=
Long
.
parseLong
(
sleepConfigVO
.
getScore
())
*
soberCount
;
}
if
(
i
>
0
&&
soberTime
>
configHour
)
{
soberScore
+=
Long
.
parseLong
(
sleepConfigVO
.
getScore
());
}
}
saasSleepEvaluateStandardReportVO
.
setSoberScore
(
soberScore
);
long
lightScore
=
0
;
long
lightHour
=
lightTime
/
60
;
long
lightnessConfigHour
=
Long
.
parseLong
(
lightnessConfigVO
.
getHour
());
if
(
Objects
.
equals
(
lightHour
,
lightnessConfigHour
))
{
lightScore
=
Long
.
parseLong
(
lightnessConfigVO
.
getScore
());
}
saasSleepEvaluateStandardReportVO
.
setLightScore
(
lightScore
);
long
sleepScore
=
0
;
for
(
int
i
=
0
;
i
<
sleepTimeConfigList
.
size
();
i
++)
{
long
hour
=
sleepTime
/
60
;
SleepConfigVO
sleepConfigVO
=
sleepTimeConfigList
.
get
(
i
);
long
configHour
=
Long
.
parseLong
(
sleepConfigVO
.
getHour
());
if
(
i
==
0
&&
Objects
.
equals
(
hour
,
configHour
))
{
sleepScore
=
Long
.
parseLong
(
sleepConfigVO
.
getScore
());
}
if
(
i
>
0
&&
hour
>
configHour
)
{
sleepScore
+=
Long
.
parseLong
(
sleepConfigVO
.
getScore
());
}
}
saasSleepEvaluateStandardReportVO
.
setSleepScore
(
sleepScore
);
long
totalScore
=
sleepScore
+
deepScore
+
lightScore
-
soberScore
;
saasSleepEvaluateStandardReportVO
.
setTotalScore
(
totalScore
);
// 记录长者一天睡眠的记录
long
daySleepTime
=
0
;
long
dayRestTime
=
0
;
for
(
PlatElderSleep
elderSleep
:
elderSleepList
)
{
elderSleep
.
setElderId
(
elder
.
getId
());
elderSleep
.
setHappenDate
(
currentDate
);
elderSleep
.
setTenantId
(
tenantId
);
if
(
ElderSleepType
.
SLEEP
.
getCode
()
==
elderSleep
.
getElderSleepType
())
{
daySleepTime
+=
elderSleep
.
getInterval
();
}
if
(
ElderSleepType
.
REST
.
getCode
()
==
elderSleep
.
getElderSleepType
())
{
dayRestTime
+=
elderSleep
.
getInterval
();
}
}
int
riseRepeatThreshold
=
Integer
.
parseInt
(
analysisModel
.
getRiseRepeatThreshold
());
List
<
PlatElderSleep
>
mergeElderSleepList
=
recursion
(
elderSleepList
,
elderSleepList
.
size
()
/
2
,
riseRepeatThreshold
);
// platElderSleepService.saveBatch(mergeElderSleepList);
String
score
=
calculateScores
(
daySleepTime
,
dayRestTime
,
deepTime
,
soberTime
,
lightTime
,
evaluateStandardReport
);
EvaluateReportVO
sleepReport
=
saasSleepEvaluateReportService
.
getByScore
(
Long
.
parseLong
(
score
));
// 长者一天的睡眠分析
PlatElderSleepAnalysis
elderSleepAnalysis
=
new
PlatElderSleepAnalysis
();
elderSleepAnalysis
.
setElderId
(
elder
.
getId
());
elderSleepAnalysis
.
setActionCount
(
totalActionCount
);
elderSleepAnalysis
.
setTurnedCount
(
totalTurnedCount
);
elderSleepAnalysis
.
setHappenDate
(
currentDate
);
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
.
setOriDeviceId
(
platDevice
.
getOriDeviceId
());
// platElderSleepAnalysisService.save(elderSleepAnalysis);
}
}
}
server-web/src/test/java/com/makeit/iotapi/IotDeviceInfoContentFall.java
View file @
f0889f06
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
;
...
@@ -127,27 +122,4 @@ public class IotDeviceInfoContentFall {
...
@@ -127,27 +122,4 @@ 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
);
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment