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
cc7b9fa8
authored
Jan 25, 2024
by
汪志阳
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
fix:bug修改
parent
58bbfd5d
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
406 additions
and
12 deletions
server-common/src/main/java/com/makeit/module/iot/vo/analysis/AnalysisVO.java
server-common/src/main/java/com/makeit/module/iot/vo/analysis/SleepTimeAnalysisVO.java
server-service/src/main/java/com/makeit/dto/SaveLogDTO.java
server-service/src/main/java/com/makeit/mapper/platform/auth/PlatOrgMapper.java
server-service/src/main/java/com/makeit/service/platform/elder/TestLogService.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderSleepServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/TestLogServiceImpl.java
server-service/src/main/resources/mappers/PlatOrgMapper.xml
server-common/src/main/java/com/makeit/module/iot/vo/analysis/AnalysisVO.java
View file @
cc7b9fa8
...
...
@@ -49,6 +49,8 @@ public class AnalysisVO {
private
int
hrSlow
;
// 当前心率
private
String
hrSlowTime
;
// 发生时间
private
String
createdTime
;
// private Integer sleepDeepMinuteCount; // 深睡每分钟体动和翻身次数
...
...
server-common/src/main/java/com/makeit/module/iot/vo/analysis/SleepTimeAnalysisVO.java
View file @
cc7b9fa8
...
...
@@ -17,6 +17,10 @@ public class SleepTimeAnalysisVO {
*/
private
String
endTime
;
private
String
getUpTime
;
private
String
remark
;
/**
* 间隔时间(分钟)
*/
...
...
server-service/src/main/java/com/makeit/dto/SaveLogDTO.java
0 → 100644
View file @
cc7b9fa8
package
com
.
makeit
.
dto
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
/**
* @author wangzy
* @description
* @createDate 2024-01-24-16:42
*/
@Data
public
class
SaveLogDTO
{
@JsonProperty
(
"messageType"
)
private
String
messageType
;
@JsonProperty
(
"deviceId"
)
private
String
deviceId
;
@JsonProperty
(
"reportTime"
)
private
LocalDateTime
reportTime
;
@JsonProperty
(
"createdTime"
)
private
LocalDateTime
createdTime
;
@JsonProperty
(
"br"
)
private
Integer
br
;
@JsonProperty
(
"bodyMove"
)
private
Integer
bodyMove
;
@JsonProperty
(
"personState"
)
private
Integer
personState
;
@JsonProperty
(
"person"
)
private
Integer
person
;
@JsonProperty
(
"hr"
)
private
Integer
hr
;
}
server-service/src/main/java/com/makeit/mapper/platform/auth/PlatOrgMapper.java
View file @
cc7b9fa8
...
...
@@ -2,7 +2,10 @@ package com.makeit.mapper.platform.auth;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.makeit.dto.SaveLogDTO
;
import
com.makeit.entity.platform.auth.PlatOrg
;
import
com.makeit.module.iot.vo.analysis.AnalysisVO
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
...
...
@@ -15,4 +18,10 @@ import java.util.List;
public
interface
PlatOrgMapper
extends
BaseMapper
<
PlatOrg
>
{
List
<
PlatOrg
>
getSelfAndParents
(
String
id
);
void
insertBatch
(
@Param
(
"list"
)
List
<
SaveLogDTO
>
saveList
);
void
saveBatch
(
@Param
(
"list"
)
List
<
AnalysisVO
>
list
);
List
<
AnalysisVO
>
getData
();
}
server-service/src/main/java/com/makeit/service/platform/elder/TestLogService.java
0 → 100644
View file @
cc7b9fa8
package
com
.
makeit
.
service
.
platform
.
elder
;
import
com.makeit.module.iot.vo.analysis.AnalysisVO
;
import
com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
/**
* @author wangzy
* @description
* @createDate 2024-01-24-16:38
*/
public
interface
TestLogService
{
void
save
(
Map
<
String
,
List
<
DeviceInfoContentBreathe
>>
minuteMap
);
void
saveEntity
(
TreeMap
<
String
,
AnalysisVO
>
statisticsMap
);
TreeMap
<
String
,
AnalysisVO
>
getData
();
void
fillDefaultData
(
TreeMap
<
String
,
AnalysisVO
>
statisticsMap
);
}
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderSleepServiceImpl.java
View file @
cc7b9fa8
...
...
@@ -27,21 +27,27 @@ import com.makeit.module.iot.vo.DeviceOperationLogEntity;
import
com.makeit.module.iot.vo.analysis.*
;
import
com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe
;
import
com.makeit.service.platform.device.PlatDeviceService
;
import
com.makeit.service.platform.elder.*
;
import
com.makeit.service.platform.elder.PlatElderService
;
import
com.makeit.service.platform.elder.PlatElderSleepAnalysisService
;
import
com.makeit.service.platform.elder.PlatElderSleepService
;
import
com.makeit.service.platform.elder.TestLogService
;
import
com.makeit.service.platform.space.PlatRoomBedDeviceService
;
import
com.makeit.service.saas.*
;
import
com.makeit.service.saas.SaasSleepAnalysisModelService
;
import
com.makeit.service.saas.SaasSleepEvaluateReportService
;
import
com.makeit.service.saas.SaasSleepEvaluateStandardReportService
;
import
com.makeit.utils.data.convert.JsonUtil
;
import
com.makeit.utils.data.convert.StreamUtil
;
import
com.makeit.vo.platform.elder.report.day.PlatSleepRangeVO
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
java.time.*
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.stream.Collectors
;
...
...
@@ -76,6 +82,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
private
PlatElderSleepAnalysisService
platElderSleepAnalysisService
;
@Autowired
private
PlatElderSleepService
platElderSleepService
;
@Resource
private
TestLogService
testLogService
;
private
TreeMap
<
String
,
AnalysisVO
>
getPerMinuteData
(
Map
<
String
,
List
<
DeviceInfoContentBreathe
>>
minuteMap
,
SaasSleepAnalysisModel
analysisModel
)
{
...
...
@@ -211,10 +219,20 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
* @param sleepTimeAnalysisVOList
* @return key:开始入睡时间,value:睡眠时间段内的数据
*/
private
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
getFallAsleepData
(
TreeMap
<
String
,
AnalysisVO
>
totalMap
,
double
sleepTimeActionDuration
,
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
)
{
private
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
getFallAsleepData
(
TreeMap
<
String
,
AnalysisVO
>
totalMap
,
double
sleepTimeActionDuration
,
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
,
SaasSleepAnalysisModel
analysisModel
)
{
String
startSleepTime
=
null
;
String
getUpTime1
=
null
;
String
getUpTime2
=
null
;
String
getUpTime
=
null
;
boolean
isSleep
=
false
;
int
moveMinute
=
0
;
int
minuteActionCount
=
0
;
int
sleepMinute
=
0
;
int
riseActionDuration
=
Integer
.
parseInt
(
analysisModel
.
getRiseActionDuration
());
double
riseLeaveThreshold
=
Double
.
parseDouble
(
analysisModel
.
getRiseLeaveThreshold
());
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
entry
:
totalMap
.
entrySet
())
{
AnalysisVO
analysisVO
=
entry
.
getValue
();
// 非离床且体动值<20
...
...
@@ -228,16 +246,55 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
if
(
StringUtils
.
isEmpty
(
startSleepTime
)
&&
sleepMinute
==
0
)
{
continue
;
}
if
(
sleepMinute
>
sleepTimeActionDuration
*
60
)
{
SleepTimeAnalysisVO
sleepTimeAnalysisVO
=
new
SleepTimeAnalysisVO
();
if
(
sleepMinute
>
sleepTimeActionDuration
*
60
)
{
sleepTimeAnalysisVO
.
setStartTime
(
startSleepTime
);
sleepTimeAnalysisVO
.
setEndTime
(
entry
.
getKey
());
sleepTimeAnalysisVO
.
setType
(
SleepTypeEnum
.
DAY_SLEEP
.
getCode
());
sleepTimeAnalysisVOList
.
add
(
sleepTimeAnalysisVO
);
// sleepTimeAnalysisVOList.add(sleepTimeAnalysisVO);
isSleep
=
true
;
}
getUpTime
=
sleepTimeAnalysisVO
.
getGetUpTime
();
// 离床数据计算起床时间
if
(
isSleep
&&
analysisVO
.
getIsMoveBed
())
{
if
(
StrUtil
.
isBlank
(
getUpTime1
))
{
getUpTime1
=
entry
.
getKey
();
}
moveMinute
++;
}
if
(
moveMinute
>
riseLeaveThreshold
*
60
&&
StrUtil
.
isBlank
(
getUpTime
))
{
getUpTime
=
entry
.
getKey
();
sleepTimeAnalysisVO
.
setGetUpTime
(
getUpTime
);
sleepTimeAnalysisVO
.
setEndTime
(
getUpTime
);
sleepTimeAnalysisVO
.
setRemark
(
"离床数据计算起床时间"
);
}
// 体动值计算起床时间
if
(
isSleep
&&
analysisVO
.
getIsMinuteActionFlag
())
{
if
(
StrUtil
.
isBlank
(
getUpTime2
))
{
getUpTime2
=
entry
.
getKey
();
}
minuteActionCount
++;
}
if
(
minuteActionCount
>
riseActionDuration
&&
StrUtil
.
isBlank
(
getUpTime
))
{
getUpTime
=
entry
.
getKey
();
sleepTimeAnalysisVO
.
setGetUpTime
(
getUpTime
);
sleepTimeAnalysisVO
.
setEndTime
(
getUpTime
);
sleepTimeAnalysisVO
.
setRemark
(
"体动值计算起床时间"
);
}
if
(!
isSleep
)
{
startSleepTime
=
null
;
sleepMinute
=
0
;
}
if
(
isSleep
&&
StrUtil
.
isNotBlank
(
getUpTime
))
{
startSleepTime
=
null
;
sleepMinute
=
0
;
sleepTimeAnalysisVOList
.
add
(
sleepTimeAnalysisVO
);
isSleep
=
false
;
}
}
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepTypeMap
=
new
TreeMap
<>();
if
(
CollUtil
.
isEmpty
(
sleepTimeAnalysisVOList
))
{
return
sleepTypeMap
;
...
...
@@ -268,6 +325,89 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return
sleepTypeMap
;
}
private
void
setGetUpTime
(
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepMap
,
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
,
SaasSleepAnalysisModel
analysisModel
)
{
int
riseActionDuration
=
Integer
.
parseInt
(
analysisModel
.
getRiseActionDuration
());
double
riseLeaveThreshold
=
Double
.
parseDouble
(
analysisModel
.
getRiseLeaveThreshold
());
List
<
SleepTimeAnalysisVO
>
sleepList
=
sleepTimeAnalysisVOList
.
stream
().
filter
(
f
->
f
.
getType
().
equals
(
SleepTypeEnum
.
DAY_SLEEP
.
getCode
())).
collect
(
Collectors
.
toList
());
if
(
CollUtil
.
isEmpty
(
sleepList
))
{
return
;
}
sleepList
.
forEach
(
s
->
{
TreeMap
<
String
,
AnalysisVO
>
treeMap
=
sleepMap
.
get
(
s
.
getStartTime
());
if
(
CollUtil
.
isEmpty
(
treeMap
))
{
return
;
}
final
String
[]
startGetupTime
=
{
null
};
AtomicInteger
getupMinute
=
new
AtomicInteger
();
treeMap
.
forEach
((
k
,
analysisVO
)
->
{
if
(
analysisVO
.
getIsMoveBed
())
{
if
(
StrUtil
.
isBlank
(
startGetupTime
[
0
]))
{
startGetupTime
[
0
]
=
k
;
}
getupMinute
.
getAndIncrement
();
return
;
}
if
(
StringUtils
.
isEmpty
(
startGetupTime
[
0
])
&&
getupMinute
.
get
()
==
0
)
{
return
;
}
if
(
getupMinute
.
get
()
>
riseLeaveThreshold
*
60
)
{
SleepTimeAnalysisVO
sleepTimeAnalysisVO
=
new
SleepTimeAnalysisVO
();
sleepTimeAnalysisVO
.
setStartTime
(
startGetupTime
[
0
]);
sleepTimeAnalysisVO
.
setEndTime
(
k
);
sleepTimeAnalysisVO
.
setType
(
SleepTypeEnum
.
GETUP
.
getCode
());
sleepTimeAnalysisVO
.
setRemark
(
"人离床时间时效满足起床"
);
sleepTimeAnalysisVOList
.
add
(
sleepTimeAnalysisVO
);
s
.
setGetUpTime
(
startGetupTime
[
0
]);
}
startGetupTime
[
0
]
=
null
;
getupMinute
.
set
(
0
);
});
});
List
<
SleepTimeAnalysisVO
>
getUpList
=
sleepTimeAnalysisVOList
.
stream
()
.
filter
(
f
->
SleepTypeEnum
.
GETUP
.
getCode
().
equals
(
f
.
getType
())).
collect
(
Collectors
.
toList
());
sleepList
.
forEach
(
s
->
{
TreeMap
<
String
,
AnalysisVO
>
treeMap
=
sleepMap
.
get
(
s
.
getStartTime
());
if
(
CollUtil
.
isEmpty
(
treeMap
))
{
return
;
}
final
String
[]
startGetupTime
=
{
null
};
AtomicInteger
getupMinute
=
new
AtomicInteger
();
treeMap
.
forEach
((
k
,
analysisVO
)
->
{
if
(
analysisVO
.
getIsMinuteActionFlag
())
{
if
(
StrUtil
.
isBlank
(
startGetupTime
[
0
]))
{
startGetupTime
[
0
]
=
k
;
}
getupMinute
.
getAndIncrement
();
return
;
}
if
(
StringUtils
.
isEmpty
(
startGetupTime
[
0
])
&&
getupMinute
.
get
()
==
0
)
{
return
;
}
if
(
getupMinute
.
get
()
>
riseActionDuration
&&
startGetupTime
[
0
]
!=
null
)
{
String
finalStartGetupTime
=
startGetupTime
[
0
];
boolean
exist
=
getUpList
.
stream
().
anyMatch
(
f
->
f
.
getStartTime
().
equals
(
finalStartGetupTime
));
if
(!
exist
)
{
SleepTimeAnalysisVO
sleepTimeAnalysisVO
=
new
SleepTimeAnalysisVO
();
sleepTimeAnalysisVO
.
setStartTime
(
startGetupTime
[
0
]);
sleepTimeAnalysisVO
.
setEndTime
(
k
);
sleepTimeAnalysisVO
.
setType
(
SleepTypeEnum
.
GETUP
.
getCode
());
sleepTimeAnalysisVO
.
setRemark
(
"每分钟大于30秒体动值满足起床"
);
sleepTimeAnalysisVOList
.
add
(
sleepTimeAnalysisVO
);
}
if
(
StrUtil
.
isBlank
(
s
.
getGetUpTime
()))
{
s
.
setGetUpTime
(
startGetupTime
[
0
]);
}
}
startGetupTime
[
0
]
=
null
;
getupMinute
.
set
(
0
);
});
});
}
/**
* 获取起床数据(离床大于0.5小时,或者每分钟大于30秒体动值大于50持续10min,且在两小时内无再次入睡
*
...
...
@@ -646,7 +786,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleepAnalysis
.
setTenantId
(
tenantId
);
elderSleepAnalysis
.
setSleepEvaluate
(
sleepReport
.
getEvaluate
());
elderSleepAnalysis
.
setOriDeviceId
(
oriDeviceId
);
platElderSleepAnalysisService
.
save
(
elderSleepAnalysis
);
//
platElderSleepAnalysisService.save(elderSleepAnalysis);
return
elderSleepAnalysis
;
}
...
...
@@ -750,7 +890,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleepList
.
add
(
platElderSleep
);
}
}
platElderSleepService
.
saveBatch
(
elderSleepList
);
//
platElderSleepService.saveBatch(elderSleepList);
return
elderSleepList
;
}
...
...
@@ -797,14 +937,14 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
continue
;
}
PlatDevice
platDevice
=
platDeviceService
.
getById
(
platRoomBedDevice
.
getDeviceId
());
if
(
platDevice
==
null
)
{
if
(
platDevice
==
null
||
!
"218A00XE2669104"
.
equals
(
platDevice
.
getOriDeviceId
())
)
{
continue
;
}
String
tenantId
=
elder
.
getTenantId
();
for
(
String
hourRange
:
dayHourRangeList
)
{
String
[]
hourRangeArray
=
hourRange
.
split
(
"~"
);
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntities
=
productDeviceService
.
getDeviceLogByTimeRange
(
platDevice
.
getOriDeviceId
(),
"reportProperty"
,
5000
,
hourRangeArray
[
0
],
hourRangeArray
[
1
]);
if
(
Coll
ectionUtils
.
isEmpty
(
deviceOperationLogEntities
))
{
if
(
Coll
Util
.
isEmpty
(
deviceOperationLogEntities
))
{
continue
;
}
List
<
DeviceInfoContentBreathe
>
deviceInfoContentBreatheList
=
deviceOperationLogEntities
.
stream
()
...
...
@@ -816,21 +956,28 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return
deviceInfoContentBreathe
;
})
.
collect
(
Collectors
.
toList
());
deviceInfoContentBreatheList
=
deviceInfoContentBreatheList
.
stream
().
filter
(
f
->
f
.
getTimestamp
()
>=
1704786060000L
&&
f
.
getTimestamp
()
<=
1704814860000L
).
collect
(
Collectors
.
toList
());
Map
<
String
,
List
<
DeviceInfoContentBreathe
>>
minuteMap
=
StreamUtil
.
groupBy
(
deviceInfoContentBreatheList
,
DeviceInfoContentBreathe:
:
getReportTime
);
// testLogService.save(minuteMap);
deviceOperationLogEntities
.
clear
();
TreeMap
<
String
,
AnalysisVO
>
statisticsMap
=
getPerMinuteData
(
minuteMap
,
analysisModel
);
if
(
CollUtil
.
isNotEmpty
(
statisticsMap
))
{
// device_minute_info
// testLogService.saveEntity(statisticsMap);
totalMap
.
putAll
(
statisticsMap
);
}
}
// totalMap = testLogService.getData();
if
(
CollUtil
.
isEmpty
(
totalMap
))
{
continue
;
}
// 没有上报数据的时间,填默认值
testLogService
.
fillDefaultData
(
totalMap
);
// 记录长者不同类型的睡眠时间
List
<
SleepTimeAnalysisVO
>
sleepTimeAnalysisVOList
=
Lists
.
newArrayList
();
// 入睡时间
TreeMap
<
String
,
TreeMap
<
String
,
AnalysisVO
>>
sleepTypeMap
=
getFallAsleepData
(
totalMap
,
sleepTimeActionDuration
,
sleepTimeAnalysisVOList
);
getFallAsleepData
(
totalMap
,
sleepTimeActionDuration
,
sleepTimeAnalysisVOList
,
analysisModel
);
// 获取睡眠和小憩
SleepCountDTO
sleepCountDTO
=
deepSleepAndRestData
(
sleepTypeMap
,
analysisModel
,
sleepTimeAnalysisVOList
);
// 满足睡眠条件的map
...
...
server-service/src/main/java/com/makeit/service/platform/elder/impl/TestLogServiceImpl.java
0 → 100644
View file @
cc7b9fa8
package
com
.
makeit
.
service
.
platform
.
elder
.
impl
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.date.DatePattern
;
import
cn.hutool.core.date.DateUtil
;
import
com.google.common.collect.Lists
;
import
com.makeit.dto.SaveLogDTO
;
import
com.makeit.mapper.platform.auth.PlatOrgMapper
;
import
com.makeit.module.iot.vo.analysis.AnalysisVO
;
import
com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe
;
import
com.makeit.service.platform.elder.TestLogService
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.time.Instant
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @author wangzy
* @description
* @createDate 2024-01-24-16:38
*/
@Service
public
class
TestLogServiceImpl
implements
TestLogService
{
@Resource
private
PlatOrgMapper
platOrgMapper
;
@Override
public
void
save
(
Map
<
String
,
List
<
DeviceInfoContentBreathe
>>
minuteMap
)
{
if
(
CollUtil
.
isEmpty
(
minuteMap
))
{
return
;
}
DateTimeFormatter
fmt
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm"
);
List
<
SaveLogDTO
>
saveList
=
new
ArrayList
<>();
minuteMap
.
forEach
((
k
,
v
)
->
{
v
.
forEach
(
value
->
{
SaveLogDTO
saveLogDTO
=
new
SaveLogDTO
();
saveLogDTO
.
setReportTime
(
LocalDateTime
.
parse
(
k
,
fmt
));
saveLogDTO
.
setCreatedTime
(
LocalDateTime
.
ofInstant
(
Instant
.
ofEpochMilli
(
value
.
getTimestamp
()),
ZoneId
.
systemDefault
()));
DeviceInfoContentBreathe
.
Properties
properties
=
value
.
getProperties
();
saveLogDTO
.
setBodyMove
(
properties
.
getBodymove
());
saveLogDTO
.
setBr
(
properties
.
getBr
());
saveLogDTO
.
setDeviceId
(
value
.
getDeviceId
());
saveLogDTO
.
setHr
(
properties
.
getHr
());
saveLogDTO
.
setPerson
(
properties
.
getPerson
());
saveLogDTO
.
setMessageType
(
value
.
getMessageType
());
saveLogDTO
.
setPersonState
(
properties
.
getPersonState
());
saveList
.
add
(
saveLogDTO
);
});
});
platOrgMapper
.
insertBatch
(
saveList
);
}
@Override
public
void
saveEntity
(
TreeMap
<
String
,
AnalysisVO
>
statisticsMap
)
{
List
<
AnalysisVO
>
list
=
new
ArrayList
<>();
statisticsMap
.
forEach
((
k
,
v
)
->
{
v
.
setCreatedTime
(
k
);
list
.
add
(
v
);
});
platOrgMapper
.
saveBatch
(
list
);
}
@Override
public
TreeMap
<
String
,
AnalysisVO
>
getData
()
{
List
<
AnalysisVO
>
data
=
platOrgMapper
.
getData
();
LinkedHashMap
<
String
,
AnalysisVO
>
collect1
=
data
.
stream
().
collect
(
Collectors
.
toMap
(
AnalysisVO:
:
getCreatedTime
,
a
->
a
,
(
u
,
v
)
->
{
throw
new
IllegalStateException
(
String
.
format
(
"Duplicate key %s"
,
u
));
},
LinkedHashMap:
:
new
));
TreeMap
<
String
,
AnalysisVO
>
result
=
new
TreeMap
<>();
collect1
.
forEach
(
result:
:
put
);
getDayMinute
().
forEach
(
minute
->
{
boolean
key
=
result
.
containsKey
(
minute
);
if
(!
key
)
{
AnalysisVO
analysisVO
=
buildDefaultData
(
minute
);
result
.
put
(
minute
,
analysisVO
);
}
});
return
result
;
}
public
static
List
<
String
>
getDayMinute
()
{
List
<
String
>
list
=
Lists
.
newArrayList
();
LocalDateTime
now
=
LocalDateTime
.
of
(
2024
,
1
,
9
,
8
,
0
);
for
(
int
i
=
0
;
i
<
24
;
i
++)
{
int
hour
=
now
.
getHour
();
for
(
int
j
=
0
;
j
<
60
;
j
++)
{
LocalDateTime
of
=
LocalDateTime
.
of
(
2024
,
1
,
now
.
getDayOfMonth
(),
hour
,
j
);
list
.
add
(
DateUtil
.
format
(
of
,
DatePattern
.
NORM_DATETIME_MINUTE_PATTERN
));
}
now
=
now
.
plusHours
(
1
);
}
return
list
;
}
@Override
public
void
fillDefaultData
(
TreeMap
<
String
,
AnalysisVO
>
statisticsMap
)
{
List
<
String
>
dayMinute
=
getDayMinute
();
dayMinute
.
forEach
(
minute
->
{
boolean
key
=
statisticsMap
.
containsKey
(
minute
);
if
(!
key
)
{
AnalysisVO
analysisVO
=
buildDefaultData
(
minute
);
statisticsMap
.
put
(
minute
,
analysisVO
);
}
});
}
private
AnalysisVO
buildDefaultData
(
String
minute
)
{
AnalysisVO
analysisVO
=
new
AnalysisVO
();
analysisVO
.
setCreatedTime
(
minute
);
analysisVO
.
setActionCount
(
0
);
analysisVO
.
setAvgBr
(
0
);
analysisVO
.
setAvgHr
(
0
);
analysisVO
.
setIsAction
(
false
);
analysisVO
.
setIsMinuteActionFlag
(
false
);
analysisVO
.
setIsMoveBed
(
true
);
analysisVO
.
setAwakeMinuteActionFlag
(
false
);
return
analysisVO
;
}
}
server-service/src/main/resources/mappers/PlatOrgMapper.xml
View file @
cc7b9fa8
...
...
@@ -19,4 +19,46 @@
ON T1._id COLLATE utf8mb4_general_ci = T2.id COLLATE utf8mb4_general_ci
</select>
<!-- 批量插入数据 查询主键ID注入到是实体中-->
<insert
id=
"insertBatch"
parameterType=
"java.util.List"
useGeneratedKeys=
"true"
>
<selectKey
resultType=
"long"
keyProperty=
"id"
order=
"AFTER"
>
SELECT
LAST_INSERT_ID()
</selectKey>
insert into device_info_log
(message_type,device_id,report_time,br,body_move,person_state,person,hr,created_time)
values
<foreach
collection=
"list"
item=
"item"
index=
"index"
separator=
","
>
(#{item.messageType},#{item.deviceId},#{item.reportTime},#{item.br},#{item.bodyMove},
#{item.personState},#{item.person},#{item.hr},#{item.createdTime})
</foreach>
</insert>
<insert
id=
"saveBatch"
parameterType=
"java.util.List"
useGeneratedKeys=
"true"
>
<selectKey
resultType=
"long"
keyProperty=
"id"
order=
"AFTER"
>
SELECT
LAST_INSERT_ID()
</selectKey>
insert into device_minute_info(total_hr, avg_hr, max_hr, min_hr, total_br, avg_br, max_br, min_br, hr_br_count,
action_count, turned_count, is_action, is_move_bed, is_minute_action_flag,
awake_minute_action_flag, br_stop_threshold, br_stop, br_stop_time, br_fast_threshold,
br_fast, br_fast_time, br_slow_threshold, br_slow, br_slow_time, hr_fast_threshold,
hr_fast, hr_fast_time, hr_slow_threshold, hr_slow, hr_slow_time, created_time)
values
<foreach
collection=
"list"
item=
"item"
index=
"index"
separator=
","
>
(#{item.totalHr},#{item.avgHr},#{item.maxHr},#{item.minHr},#{item.totalBr},#{item.avgBr},#{item.maxBr},#{item.minBr},#{item.hrBrCount},
#{item.actionCount},#{item.turnedCount},#{item.isAction},#{item.isMoveBed},#{item.isMinuteActionFlag},
#{item.awakeMinuteActionFlag},#{item.brStopThreshold},#{item.brStop},#{item.brStopTime},#{item.brFastThreshold},
#{item.brFast},#{item.brFastTime},#{item.brSlowThreshold},#{item.brSlow},#{item.brSlowTime},#{item.hrFastThreshold},
#{item.hrFast},#{item.hrFastTime},#{item.hrSlowThreshold},#{item.hrSlow},#{item.hrSlowTime},#{item.createdTime})
</foreach>
</insert>
<select
id=
"getData"
resultType=
"com.makeit.module.iot.vo.analysis.AnalysisVO"
>
select * from device_minute_info group by created_time order by created_time
</select>
</mapper>
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