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
16949764
authored
Dec 29, 2023
by
罗志长
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'dev'
parents
633933d2
1d7be20b
Show whitespace changes
Inline
Side-by-side
Showing
49 changed files
with
1109 additions
and
401 deletions
db/上线后sql/update.sql
saas-module/src/main/java/com/makeit/controller/device/SaasDeviceReportDayController.java
server-api/src/main/java/com/makeit/api/external/controller/IotPlatExternalController.java
server-api/src/main/java/com/makeit/api/external/util/RSAUtils.java
server-common/src/main/java/com/makeit/global/inteceptor/RequestIdInterceptor.java
server-common/src/main/java/com/makeit/module/iot/service/IotDevicePropertiesOperateService.java
server-common/src/main/java/com/makeit/module/iot/service/IotOrgService.java
server-common/src/main/java/com/makeit/module/iot/vo/analysis/SaasSleepEvaluateStandardReportVO.java
server-module/src/main/java/com/makeit/module/controller/children/space/PlatRegionSettingFixChildrenController.java
server-module/src/main/java/com/makeit/module/controller/elder/PlatElderSleepController.java
server-module/src/main/java/com/makeit/module/controller/space/PlatRegionSettingFixController.java
server-module/src/main/java/com/makeit/module/controller/wechat/alarm/PlatAlarmRecordWechatController.java
server-module/src/main/java/com/makeit/module/controller/wechat/space/PlatRegionSettingFixWechatController.java
server-service/src/main/java/com/makeit/dto/platform/alarm/PlatAlarmCheckDTO.java
server-service/src/main/java/com/makeit/dto/platform/elder/PlatElderIdDTO.java
server-service/src/main/java/com/makeit/dto/platform/space/PlatRegionSettingFixQueryDTO.java
server-service/src/main/java/com/makeit/entity/platform/alarm/PlatAlarmRecord.java
server-service/src/main/java/com/makeit/entity/platform/elder/PlatElderBreatheAnalysis.java
server-service/src/main/java/com/makeit/entity/platform/elder/PlatElderBreatheHeartRateRecord.java
server-service/src/main/java/com/makeit/entity/platform/elder/PlatElderSleepAnalysis.java
server-service/src/main/java/com/makeit/enums/report/SleepTypeEnum.java
server-service/src/main/java/com/makeit/external/strategy/HuiNengStrategy.java
server-service/src/main/java/com/makeit/mapper/platform/elder/PlatElderBreatheHeartRateRecordMapper.java
server-service/src/main/java/com/makeit/service/platform/alarm/PlatAlarmRecordService.java
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/BehaviorAlarm.java
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/BreathAlarm.java
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/FallAlarm.java
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/HeartAlarm.java
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/OffBedAlarm.java
server-service/src/main/java/com/makeit/service/platform/alarm/impl/PlatAlarmRecordServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderBreatheHeartRateRecordService.java
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderCoordinateRecordService.java
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderDayReportDayService.java
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderRealTimeService.java
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderSleepService.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderBreatheAnalysisServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderBreatheHeartRateRecordServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderCoordinateRecordServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderDayReportDayServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderDayReportWeekServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderRealTimeServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderSleepServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/space/PlatRegionSettingFixService.java
server-service/src/main/java/com/makeit/service/platform/space/impl/PlatRegionSettingFixServiceImpl.java
server-service/src/main/java/com/makeit/task/PlatElderReportTask.java
server-service/src/main/java/com/makeit/vo/platform/alarm/PlatAlarmExternalRecordVO.java
server-service/src/main/java/com/makeit/vo/platform/elder/realtime/PlatElderRealTimeHeartRespiratoryVO.java
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
server-web/src/main/resources/logback-spring-prod.xml
db/上线后sql/update.sql
View file @
16949764
ALTER
TABLE
`plat_device_other`
ALTER
TABLE
`plat_device_other`
...
...
@@ -91,3 +91,34 @@ ALTER TABLE `plat_alarm_record`
ALTER
TABLE
`plat_tenant`
ADD
COLUMN
`open_api_url`
varchar
(
128
)
COMMENT
'第三方接口url'
AFTER
`secret`
;
CREATE
TABLE
`plat_elder_breathe_heart_rate_record`
(
`id`
varchar
(
64
)
NOT
NULL
COMMENT
'id'
,
`create_by`
varchar
(
64
)
DEFAULT
NULL
COMMENT
'创建者'
,
`create_date`
datetime
DEFAULT
NULL
COMMENT
'创建时间'
,
`update_by`
varchar
(
64
)
DEFAULT
NULL
COMMENT
'更新者'
,
`update_date`
datetime
DEFAULT
NULL
COMMENT
'更新时间'
,
`del_flag`
char
(
1
)
NOT
NULL
COMMENT
' 删除标志 0否 1是 '
,
`tenant_id`
varchar
(
64
)
DEFAULT
NULL
COMMENT
' 租户id '
,
`elder_id`
varchar
(
64
)
DEFAULT
NULL
COMMENT
'长者id'
,
`report_time`
bigint
(
20
)
DEFAULT
NULL
COMMENT
'上报时间'
,
`heart_rate`
int
(
11
)
DEFAULT
NULL
COMMENT
'心率'
,
`respiratory_rate`
int
(
11
)
DEFAULT
NULL
COMMENT
'呼吸率'
,
`body_move`
int
(
11
)
DEFAULT
NULL
COMMENT
'体动值'
,
`device_id`
varchar
(
255
)
DEFAULT
NULL
COMMENT
'设备id'
,
`iot_device_id`
varchar
(
64
)
DEFAULT
NULL
COMMENT
'iot设备id'
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
ROW_FORMAT
=
COMPACT
COMMENT
=
'长者呼吸心率记录'
;
-- end
ALTER
TABLE
`plat_alarm_record`
ADD
COLUMN
`device_time`
varchar
(
64
)
COMMENT
'当前上报时间'
AFTER
`wechat_read_flag`
;
alter
table
plat_elder_sleep_analysis
add
column
`ori_device_id`
varchar
(
64
)
default
NULL
COMMENT
'iot设备id'
;
alter
table
plat_elder_breathe_analysis
add
column
`ori_device_id`
varchar
(
64
)
default
NULL
COMMENT
'iot设备id'
;
\ No newline at end of file
saas-module/src/main/java/com/makeit/controller/device/SaasDeviceReportDayController.java
View file @
16949764
...
...
@@ -59,6 +59,7 @@ public class SaasDeviceReportDayController {
@ApiOperation
(
"心率呼吸评价"
)
@PostMapping
(
"heartRespiratoryEvaluation"
)
@TenantIdIgnore
@AuthIgnore
public
ApiResponseEntity
<
PlatElderHeartRespiratoryEvaluationVO
>
heartRespiratoryEvaluation
(
@RequestBody
PlatElderReportDTO
platElderIdDTO
)
{
return
ApiResponseUtils
.
success
(
platElderDayReportDayService
.
heartRespiratoryEvaluation
(
platElderIdDTO
));
}
...
...
server-api/src/main/java/com/makeit/api/external/controller/IotPlatExternalController.java
View file @
16949764
...
...
@@ -7,16 +7,20 @@ import com.makeit.common.response.ApiResponseEntity;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO
;
import
com.makeit.dto.platform.device.PlatDeviceQueryDTO
;
import
com.makeit.dto.platform.elder.PlatElderIdDTO
;
import
com.makeit.dto.platform.elder.PlatElderQueryDTO
;
import
com.makeit.global.annotation.AuthIgnore
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.service.platform.alarm.PlatAlarmRecordService
;
import
com.makeit.service.platform.device.PlatDeviceService
;
import
com.makeit.service.platform.elder.PlatElderRealTimeService
;
import
com.makeit.service.platform.elder.PlatElderService
;
import
com.makeit.utils.old.StringUtils
;
import
com.makeit.vo.platform.alarm.PlatAlarmExternalRecordVO
;
import
com.makeit.vo.platform.alarm.PlatAlarmRecordVO
;
import
com.makeit.vo.platform.device.PlatDeviceListVO
;
import
com.makeit.vo.platform.elder.PlatElderListVO
;
import
com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ApplicationContextAware
;
...
...
@@ -40,6 +44,8 @@ public class IotPlatExternalController {
private
PlatDeviceService
platDeviceService
;
@Autowired
private
PlatAlarmRecordService
platAlarmRecordService
;
@Autowired
private
PlatElderRealTimeService
platElderRealTimeService
;
@ApiOperation
(
"长者列表"
)
@PostMapping
(
"elderPage"
)
...
...
@@ -48,7 +54,7 @@ public class IotPlatExternalController {
public
ApiResponseEntity
<
PageVO
<
PlatElderListVO
>>
elderPage
(
@RequestBody
PageReqDTO
<
PlatElderQueryDTO
>
page
)
{
PlatElderQueryDTO
dto
=
page
.
getData
();
if
(
dto
==
null
||
StringUtils
.
isEmpty
(
dto
.
getOrgId
()))
{
return
ApiResponseUtils
.
success
(
new
PageVO
<>
());
return
ApiResponseUtils
.
success
(
PageVO
.
emptyPage
());
}
return
ApiResponseUtils
.
success
(
platElderService
.
page
(
page
));
}
...
...
@@ -61,7 +67,7 @@ public class IotPlatExternalController {
public
ApiResponseEntity
<
PageVO
<
PlatDeviceListVO
>>
devicePage
(
@RequestBody
PageReqDTO
<
PlatDeviceQueryDTO
>
pageReqDTO
)
{
PlatDeviceQueryDTO
dto
=
pageReqDTO
.
getData
();
if
(
dto
==
null
||
StringUtils
.
isEmpty
(
dto
.
getOrgId
()))
{
return
ApiResponseUtils
.
success
(
new
PageVO
<>
());
return
ApiResponseUtils
.
success
(
PageVO
.
emptyPage
());
}
return
ApiResponseUtils
.
success
(
platDeviceService
.
page
(
pageReqDTO
));
}
...
...
@@ -74,7 +80,7 @@ public class IotPlatExternalController {
public
ApiResponseEntity
<
PageVO
<
PlatAlarmRecordVO
>>
page
(
@RequestBody
PageReqDTO
<
PlatAlarmRecordQueryDTO
>
pageReqDTO
)
{
PlatAlarmRecordQueryDTO
dto
=
pageReqDTO
.
getData
();
if
(
dto
==
null
||
StringUtils
.
isEmpty
(
dto
.
getOrgId
()))
{
return
ApiResponseUtils
.
success
(
new
PageVO
<>
());
return
ApiResponseUtils
.
success
(
PageVO
.
emptyPage
());
}
return
ApiResponseUtils
.
success
(
platAlarmRecordService
.
page
(
pageReqDTO
));
}
...
...
@@ -88,4 +94,25 @@ public class IotPlatExternalController {
return
ApiResponseUtils
.
success
();
}
@ApiOperation
(
"获取呼吸上报数据"
)
@PostMapping
(
"deviceHealthReport"
)
@TenantIdIgnore
@AuthIgnore
public
ApiResponseEntity
<
PlatElderRealTimeHeartRespiratoryVO
>
deviceHealthData
(
@RequestBody
PlatElderIdDTO
dto
)
{
return
ApiResponseUtils
.
success
(
platElderRealTimeService
.
deviceHealthReport
(
dto
));
}
@ApiOperation
(
"获取跌倒记录数据"
)
@PostMapping
(
"fallRecord"
)
@TenantIdIgnore
@AuthIgnore
public
ApiResponseEntity
<
PageVO
<
PlatAlarmExternalRecordVO
>>
fallRecord
(
@RequestBody
PageReqDTO
<
PlatAlarmRecordQueryDTO
>
pageReqDTO
)
{
PlatAlarmRecordQueryDTO
dto
=
pageReqDTO
.
getData
();
if
(
dto
==
null
||
StringUtils
.
isEmpty
(
dto
.
getOrgId
()))
{
return
ApiResponseUtils
.
success
(
PageVO
.
emptyPage
());
}
return
ApiResponseUtils
.
success
(
platAlarmRecordService
.
fallRecord
(
pageReqDTO
));
}
}
server-api/src/main/java/com/makeit/api/external/util/RSAUtils.java
View file @
16949764
...
...
@@ -40,7 +40,16 @@ public class RSAUtils {
RSAPublicKey
publicKey
=
getPublicKey
(
PUBLIC_KEY
);
System
.
out
.
println
(
"------------"
);
String
encrypt
=
publicEncrypt
(
"{\"page\":1,\"limit\":10,\"data\":{}}"
,
publicKey
,
"UTF-8"
);
String
encrypt
=
publicEncrypt
(
"{\n"
+
" \"page\": 1,\n"
+
" \"limit\": 10,\n"
+
" \"data\": {\n"
+
" \"alarmType\": \"1\",\n"
+
" \"orgId\": \"1701420402418446337\",\n"
+
" \"createDateFrom\": \"2023-12-15 00:00:00\",\n"
+
" \"createDateTo\": \"2023-12-15 23:59:59\"\n"
+
" }\n"
+
"}"
,
publicKey
,
"UTF-8"
);
System
.
out
.
println
(
encrypt
);
...
...
server-common/src/main/java/com/makeit/global/inteceptor/RequestIdInterceptor.java
View file @
16949764
...
...
@@ -23,8 +23,8 @@ public class RequestIdInterceptor implements HandlerInterceptor {
RequestIdUtil
.
set
();
logger
.
info
(
"本次请求ip:{},remoteAddr:{}"
,
IpUtil
.
getIp
(),
IpUtil
.
getRemoteAddr
());
logger
.
info
(
"本次请求路径: {}"
,
request
.
getRequestURI
());
//
logger.info("本次请求ip:{},remoteAddr:{}", IpUtil.getIp(),IpUtil.getRemoteAddr());
//
logger.info("本次请求路径: {}", request.getRequestURI());
return
true
;
}
...
...
server-common/src/main/java/com/makeit/module/iot/service/IotDevicePropertiesOperateService.java
View file @
16949764
...
...
@@ -102,11 +102,11 @@ public class IotDevicePropertiesOperateService extends IotCommonService {
return
""
;
}
public
String
deviceFunctionAttr
(
String
deviceId
,
Long
timestamp
)
{
public
String
deviceFunctionAttr
(
String
deviceId
,
String
alarmId
)
{
String
url
=
iotUrl
+
"device/invoked/"
+
deviceId
+
"/function/misinformation"
;
Map
<
String
,
Map
<
String
,
Object
>>
map
=
Maps
.
newHashMap
();
Map
<
String
,
Object
>
reqMap
=
Maps
.
newHashMap
();
reqMap
.
put
(
"
timestamp"
,
timestamp
);
reqMap
.
put
(
"
alarmId"
,
alarmId
);
reqMap
.
put
(
"url"
,
uploadUrl
);
map
.
put
(
"misinformationNotify"
,
reqMap
);
HttpRequest
request
=
buildRequest
(
url
,
JSON
.
toJSONString
(
map
));
...
...
server-common/src/main/java/com/makeit/module/iot/service/IotOrgService.java
View file @
16949764
...
...
@@ -7,6 +7,7 @@ import com.google.common.collect.Maps;
import
com.makeit.module.admin.vo.plat.PlatTenantVO
;
import
com.makeit.module.iot.dto.IotQueryParam
;
import
com.makeit.module.iot.util.HttpRequest
;
import
com.makeit.module.iot.util.Response
;
import
com.makeit.module.iot.util.SimpleHttpRequest
;
import
com.makeit.module.iot.vo.DeviceInstanceEntity
;
import
com.makeit.module.iot.vo.DeviceProductEntity
;
...
...
@@ -141,7 +142,9 @@ public class IotOrgService extends IotCommonService{
HttpRequest
request
=
buildRequest
(
url
,
body
);
try
{
ResponseMessage
responseMessage
=
sendPost
(
url
,
request
);
Response
response
=
request
.
post
();
Object
result
=
JSON
.
parse
(
response
.
asBytes
());
ResponseMessage
responseMessage
=
JSON
.
parseObject
(
result
.
toString
(),
ResponseMessage
.
class
);
if
(
responseMessage
.
getStatus
()
==
200
)
{
IotPagerResult
pagerResult
=
JSON
.
parseObject
(
responseMessage
.
getResult
().
toString
(),
IotPagerResult
.
class
);
...
...
server-common/src/main/java/com/makeit/module/iot/vo/analysis/SaasSleepEvaluateStandardReportVO.java
View file @
16949764
package
com
.
makeit
.
module
.
iot
.
vo
.
analysis
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
@Data
public
class
SaasSleepEvaluateStandardReportVO
{
@ApiModelProperty
(
"深睡"
)
private
Long
deepScore
;
@ApiModelProperty
(
"浅睡"
)
private
Long
lightScore
;
@ApiModelProperty
(
"清醒"
)
private
Long
soberScore
;
@ApiModelProperty
(
"睡眠"
)
private
Long
sleepScore
;
@ApiModelProperty
(
"总得分"
)
private
Long
totalScore
;
...
...
server-module/src/main/java/com/makeit/module/controller/children/space/PlatRegionSettingFixChildrenController.java
0 → 100644
View file @
16949764
package
com
.
makeit
.
module
.
controller
.
children
.
space
;
import
com.makeit.common.response.ApiResponseEntity
;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.dto.platform.space.PlatRegionSettingDTO
;
import
com.makeit.dto.platform.space.PlatRegionSettingFixQueryDTO
;
import
com.makeit.service.platform.space.PlatRegionSettingFixService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
@Api
(
tags
=
"子女端小程序-区域设置固化"
)
@RestController
@RequestMapping
(
"/children/plat/region/setting/fix"
)
public
class
PlatRegionSettingFixChildrenController
{
@Autowired
private
PlatRegionSettingFixService
platRegionSettingFixService
;
@ApiOperation
(
"列表"
)
@PostMapping
(
"list"
)
public
ApiResponseEntity
<
List
<
PlatRegionSettingDTO
>>
list
(
@RequestBody
PlatRegionSettingFixQueryDTO
dto
)
{
List
<
PlatRegionSettingDTO
>
data
=
platRegionSettingFixService
.
list
(
dto
);
return
ApiResponseUtils
.
success
(
data
);
}
}
server-module/src/main/java/com/makeit/module/controller/elder/PlatElderSleepController.java
View file @
16949764
...
...
@@ -6,6 +6,7 @@ import com.makeit.common.response.ApiResponseEntity;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO
;
import
com.makeit.entity.platform.elder.PlatElderBreatheAnalysis
;
import
com.makeit.entity.platform.elder.PlatElderSleepAnalysis
;
import
com.makeit.external.huineng.HuiNengService
;
import
com.makeit.global.annotation.AuthIgnore
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
...
...
@@ -44,6 +45,8 @@ public class PlatElderSleepController {
@Autowired
private
PlatElderCoordinateRecordService
platElderCoordinateRecordService
;
@Autowired
private
PlatElderBreatheHeartRateRecordService
platElderBreatheHeartRateRecordService
;
@Autowired
private
HuiNengService
huiNengService
;
...
...
@@ -60,6 +63,7 @@ public class PlatElderSleepController {
@ApiOperation
(
"测试"
)
@PostMapping
(
"test2"
)
@AuthIgnore
@TenantIdIgnore
public
ApiResponseEntity
<
Void
>
heartRespiratoryTask
()
{
platElderBreatheDayStatService
.
heartRespiratoryTask
();
return
ApiResponseUtils
.
success
();
...
...
@@ -68,17 +72,19 @@ public class PlatElderSleepController {
@ApiOperation
(
"测试"
)
@GetMapping
(
"test3"
)
@AuthIgnore
@TenantIdIgnore
public
ApiResponseEntity
<
List
<
PlatElderBreatheAnalysis
>>
elderHeartRespiratoryAnalysisTask
(
@RequestParam
Integer
month
,
@RequestParam
Integer
day
)
{
return
ApiResponseUtils
.
success
(
platElderBreatheAnalysisService
.
elderHeartRespiratoryAnalysisTask
(
month
,
day
));
}
@ApiOperation
(
"测试"
)
@
Pos
tMapping
(
"test4"
)
@
Ge
tMapping
(
"test4"
)
@AuthIgnore
public
ApiResponseEntity
<
Void
>
elderSleepSleepAnalysisTask
()
{
platElderSleepService
.
elderSleepSleepAnalysisTask
();
return
ApiResponseUtils
.
success
();
@TenantIdIgnore
public
ApiResponseEntity
<
List
<
PlatElderSleepAnalysis
>>
elderSleepSleepAnalysisTask
(
@RequestParam
Integer
month
,
@RequestParam
Integer
day
)
{
return
ApiResponseUtils
.
success
(
platElderSleepService
.
elderSleepSleepAnalysisTask
(
month
,
day
));
}
@ApiOperation
(
"测试"
)
...
...
@@ -89,6 +95,15 @@ public class PlatElderSleepController {
return
ApiResponseUtils
.
success
();
}
@ApiOperation
(
"测试"
)
@PostMapping
(
"test6"
)
@AuthIgnore
@TenantIdIgnore
public
ApiResponseEntity
<
Void
>
breatheHeartRateRecordTask
()
{
platElderBreatheHeartRateRecordService
.
breatheHeartRateRecordTask
();
return
ApiResponseUtils
.
success
();
}
@ApiOperation
(
"编辑设备属性"
)
@PostMapping
(
"editDeviceProperties"
)
@AuthIgnore
...
...
server-module/src/main/java/com/makeit/module/controller/space/PlatRegionSettingFixController.java
0 → 100644
View file @
16949764
package
com
.
makeit
.
module
.
controller
.
space
;
import
com.makeit.common.response.ApiResponseEntity
;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.dto.platform.space.PlatRegionSettingDTO
;
import
com.makeit.dto.platform.space.PlatRegionSettingFixQueryDTO
;
import
com.makeit.dto.platform.space.PlatRegionSettingQueryDTO
;
import
com.makeit.service.platform.space.PlatRegionSettingFixService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
@Api
(
tags
=
"区域设置固化"
)
@RestController
@RequestMapping
(
"/plat/region/setting/fix"
)
public
class
PlatRegionSettingFixController
{
@Autowired
private
PlatRegionSettingFixService
platRegionSettingFixService
;
@ApiOperation
(
"列表"
)
@PostMapping
(
"list"
)
public
ApiResponseEntity
<
List
<
PlatRegionSettingDTO
>>
list
(
@RequestBody
PlatRegionSettingFixQueryDTO
dto
)
{
List
<
PlatRegionSettingDTO
>
data
=
platRegionSettingFixService
.
list
(
dto
);
return
ApiResponseUtils
.
success
(
data
);
}
}
server-module/src/main/java/com/makeit/module/controller/wechat/alarm/PlatAlarmRecordWechatController.java
View file @
16949764
...
...
@@ -10,7 +10,6 @@ import com.makeit.common.response.ApiResponseEntity;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO
;
import
com.makeit.enums.report.PlatformTypeEnum
;
import
com.makeit.global.annotation.AuthIgnore
;
import
com.makeit.service.platform.alarm.PlatAlarmRecordService
;
import
com.makeit.utils.user.common.CommonUserUtil
;
import
com.makeit.vo.platform.alarm.PlatAlarmRecordVO
;
...
...
@@ -34,17 +33,14 @@ public class PlatAlarmRecordWechatController {
@ApiOperation
(
"列表"
)
@PostMapping
(
"page"
)
@AuthIgnore
public
ApiResponseEntity
<
Map
<
String
,
Object
>>
page
(
@RequestBody
PageReqDTO
<
PlatAlarmRecordQueryDTO
>
dto
)
{
//小程序告警记录只看到发给自己的告警
String
userId
=
CommonUserUtil
.
getUserId
();
// String userId = "1700085146788667394";
PlatAlarmRecordQueryDTO
data
=
dto
.
getData
();
data
.
setNotifyUser
(
userId
);
Map
<
String
,
Object
>
resMap
=
Maps
.
newHashMap
();
PageVO
<
PlatAlarmRecordVO
>
page
=
platAlarmRecordService
.
page
(
dto
);
// boolean b = page.getList().stream().anyMatch(platAlarmRecord -> StringUtils.equals(CommonEnum.NO.getValue(), platAlarmRecord.getStatus()));
boolean
b
=
CollUtil
.
isNotEmpty
(
page
.
getList
())
&&
page
.
getList
().
get
(
0
).
getStatusFlag
();
resMap
.
put
(
"todoFlag"
,
b
);
resMap
.
put
(
"page"
,
page
);
...
...
server-module/src/main/java/com/makeit/module/controller/wechat/space/PlatRegionSettingFixWechatController.java
0 → 100644
View file @
16949764
package
com
.
makeit
.
module
.
controller
.
wechat
.
space
;
import
com.makeit.common.response.ApiResponseEntity
;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.dto.platform.space.PlatRegionSettingDTO
;
import
com.makeit.dto.platform.space.PlatRegionSettingFixQueryDTO
;
import
com.makeit.service.platform.space.PlatRegionSettingFixService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
@Api
(
tags
=
"平台端小程序-区域设置固化"
)
@RestController
@RequestMapping
(
"/wechat/plat/region/setting/fix"
)
public
class
PlatRegionSettingFixWechatController
{
@Autowired
private
PlatRegionSettingFixService
platRegionSettingFixService
;
@ApiOperation
(
"列表"
)
@PostMapping
(
"list"
)
public
ApiResponseEntity
<
List
<
PlatRegionSettingDTO
>>
list
(
@RequestBody
PlatRegionSettingFixQueryDTO
dto
)
{
List
<
PlatRegionSettingDTO
>
data
=
platRegionSettingFixService
.
list
(
dto
);
return
ApiResponseUtils
.
success
(
data
);
}
}
server-service/src/main/java/com/makeit/dto/platform/alarm/PlatAlarmCheckDTO.java
View file @
16949764
...
...
@@ -32,6 +32,7 @@ public class PlatAlarmCheckDTO {
private
String
abnormalValue
;
//设备状态
private
String
messageType
;
private
String
deviceTime
;
}
server-service/src/main/java/com/makeit/dto/platform/elder/PlatElderIdDTO.java
View file @
16949764
...
...
@@ -19,7 +19,7 @@ public class PlatElderIdDTO {
@ApiModelProperty
(
value
=
"长者id"
)
private
String
elderId
;
@ApiModelProperty
(
value
=
"
长者
id"
)
@ApiModelProperty
(
value
=
"
机构
id"
)
private
String
orgId
;
@ApiModelProperty
(
value
=
"设备id"
)
...
...
server-service/src/main/java/com/makeit/dto/platform/space/PlatRegionSettingFixQueryDTO.java
0 → 100644
View file @
16949764
package
com
.
makeit
.
dto
.
platform
.
space
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
@Data
@ApiModel
(
"PlatRegionSettingFixQueryDTO"
)
public
class
PlatRegionSettingFixQueryDTO
{
@ApiModelProperty
(
"报告类型 0:日报 1:周报"
)
private
String
reportType
;
@ApiModelProperty
(
"房间ID"
)
private
String
roomId
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
@ApiModelProperty
(
"日期 yyyy-MM-dd"
)
private
LocalDate
now
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@ApiModelProperty
(
"开始时间 yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
startTime
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@ApiModelProperty
(
"结束时间 yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
endTime
;
}
server-service/src/main/java/com/makeit/entity/platform/alarm/PlatAlarmRecord.java
View file @
16949764
...
...
@@ -93,8 +93,8 @@ public class PlatAlarmRecord extends BaseBusEntity {
@ApiModelProperty
(
value
=
"微信端 0-未读 1-已读"
)
private
String
wechatReadFlag
;
@ApiModelProperty
(
value
=
"记录当前时间"
)
private
String
deviceTime
;
}
server-service/src/main/java/com/makeit/entity/platform/elder/PlatElderBreatheAnalysis.java
View file @
16949764
...
...
@@ -42,7 +42,7 @@ public class PlatElderBreatheAnalysis extends BaseBusEntity {
@ApiModelProperty
(
value
=
"当前日期 yyyy-mm-dd"
)
private
String
happenDate
;
// @TableField(exist = false
)
// private String remake
;
@ApiModelProperty
(
value
=
"原始设备ID"
)
private
String
oriDeviceId
;
}
server-service/src/main/java/com/makeit/entity/platform/elder/PlatElderBreatheHeartRateRecord.java
0 → 100644
View file @
16949764
package
com
.
makeit
.
entity
.
platform
.
elder
;
import
com.makeit.common.entity.BaseBusEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"PlatElderBreatheHeartRateRecord对象"
,
description
=
"长者呼吸心率记录"
)
public
class
PlatElderBreatheHeartRateRecord
extends
BaseBusEntity
{
@ApiModelProperty
(
value
=
"长者id"
)
private
String
elderId
;
@ApiModelProperty
(
value
=
"上报时间"
)
private
Long
reportTime
;
@ApiModelProperty
(
value
=
"心率"
)
private
Integer
heartRate
;
@ApiModelProperty
(
value
=
"呼吸率"
)
private
Integer
respiratoryRate
;
@ApiModelProperty
(
value
=
"体动值"
)
private
Integer
bodyMove
;
@ApiModelProperty
(
value
=
"设备Id"
)
private
String
deviceId
;
@ApiModelProperty
(
value
=
"设备Id"
)
private
String
iotDeviceId
;
}
server-service/src/main/java/com/makeit/entity/platform/elder/PlatElderSleepAnalysis.java
View file @
16949764
...
...
@@ -47,5 +47,8 @@ public class PlatElderSleepAnalysis extends BaseBusEntity {
@ApiModelProperty
(
value
=
"翻身次数"
)
private
Integer
turnedCount
;
@ApiModelProperty
(
value
=
"原始设备ID"
)
private
String
oriDeviceId
;
}
server-service/src/main/java/com/makeit/enums/report/SleepTypeEnum.java
View file @
16949764
...
...
@@ -19,5 +19,15 @@ public enum SleepTypeEnum {
private
String
value
;
public
static
SleepTypeEnum
getSleepType
(
String
code
)
{
for
(
SleepTypeEnum
typeEnum
:
SleepTypeEnum
.
values
())
{
if
(
typeEnum
.
getCode
().
equals
(
code
))
{
return
typeEnum
;
}
}
return
null
;
}
}
server-service/src/main/java/com/makeit/external/strategy/HuiNengStrategy.java
View file @
16949764
...
...
@@ -65,6 +65,8 @@ public class HuiNengStrategy implements OpenApiBaseStrategy {
reportInfo
.
setSignalStrength
(
""
);
reportInfo
.
setQuantityElectricity
(
""
);
reportInfo
.
setECG
(
""
);
reportInfo
.
setSignalStrength
(
""
);
reportInfo
.
setQuantityElectricity
(
""
);
reportInfo
.
setBloodSugar
(
""
);
reportInfo
.
setBloodOxygen
(
""
);
reportInfo
.
setBloodPressure
(
""
);
...
...
server-service/src/main/java/com/makeit/mapper/platform/elder/PlatElderBreatheHeartRateRecordMapper.java
0 → 100644
View file @
16949764
package
com
.
makeit
.
mapper
.
platform
.
elder
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.makeit.entity.platform.elder.PlatElderBreatheHeartRateRecord
;
public
interface
PlatElderBreatheHeartRateRecordMapper
extends
BaseMapper
<
PlatElderBreatheHeartRateRecord
>
{
}
server-service/src/main/java/com/makeit/service/platform/alarm/PlatAlarmRecordService.java
View file @
16949764
...
...
@@ -12,6 +12,7 @@ import com.makeit.entity.platform.elder.PlatElder;
import
com.makeit.enums.report.PlatformTypeEnum
;
import
com.makeit.shengwang.agora.dto.PlatCallingDeviceDTO
;
import
com.makeit.shengwang.agora.vo.PlatAlarmCallDeviceVO
;
import
com.makeit.vo.platform.alarm.PlatAlarmExternalRecordVO
;
import
com.makeit.vo.platform.alarm.PlatAlarmRecordVO
;
/**
...
...
@@ -74,4 +75,6 @@ public interface PlatAlarmRecordService extends IService<PlatAlarmRecord> {
PlatAlarmCallDeviceVO
callingDevice
(
PlatCallingDeviceDTO
dto
);
PlatAlarmCallDeviceVO
callingDeviceAuthIgnoreRtm
(
PlatCallingDeviceDTO
id
);
PageVO
<
PlatAlarmExternalRecordVO
>
fallRecord
(
PageReqDTO
<
PlatAlarmRecordQueryDTO
>
pageReqDTO
);
}
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/BehaviorAlarm.java
View file @
16949764
...
...
@@ -112,7 +112,6 @@ public class BehaviorAlarm implements IAlarm {
long
count
=
endLong
-
startLong
;
//进入空间时间满足告警时长,判断是否已经告警过了
if
(
duration
!=
0
&&
count
/
1000
>=
duration
&&
StringUtils
.
equals
(
alarmRedisDTO
.
getAlarm
(),
CommonEnum
.
NO
.
getValue
()))
{
log
.
error
(
"空间雷达发出告警,设备plat_id:"
+
platDevice
.
getId
());
if
(
duration1
!=
0
)
{
alarmRedisDTO
.
setAlarm
(
CommonEnum
.
YES
.
getValue
());
RedisUtil
.
set
(
RedisConst
.
ALARM_DEVICE_BEHAVIOR_ID
+
deviceId
,
alarmRedisDTO
);
...
...
@@ -127,6 +126,7 @@ public class BehaviorAlarm implements IAlarm {
if
(
startLong
==
null
)
{
return
;
}
log
.
info
(
"设备离线或者没有人删除缓存,保存空间时长:{}"
,
deviceId
);
//保存每次进入空间时长
platDayDurationRecordService
.
saveDayDurationRecord
(
platAlarmCheckDTO
,
alarmRedisDTO
);
RedisUtil
.
delete
(
RedisConst
.
ALARM_DEVICE_BEHAVIOR_ID
+
deviceId
);
...
...
@@ -150,7 +150,7 @@ public class BehaviorAlarm implements IAlarm {
platAlarmRecordService
.
getElderListByDeviceId
(
platAlarmCheckDTO
);
List
<
PlatElder
>
platElderList
=
platAlarmCheckDTO
.
getPlatElderList
();
if
(
CollectionUtils
.
isEmpty
(
platElderList
))
{
log
.
error
(
"未关联长者,设备id:"
+
platAlarmCheckDTO
.
getPlatDevice
().
getId
());
//
log.error("未关联长者,设备id:"+platAlarmCheckDTO.getPlatDevice().getId());
return
;
}
...
...
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/BreathAlarm.java
View file @
16949764
...
...
@@ -59,12 +59,10 @@ public class BreathAlarm implements IAlarm {
platAlarmRecordService
.
getElderListByDeviceId
(
platAlarmCheckDTO
);
List
<
PlatElder
>
platElderList
=
platAlarmCheckDTO
.
getPlatElderList
();
if
(
CollectionUtils
.
isEmpty
(
platElderList
)){
log
.
error
(
"呼吸设备未关联长者,设备plat_id:"
+
platAlarmCheckDTO
.
getPlatDevice
().
getId
());
return
;
}
PlatAlarmConfig
config
=
platAlarmCheckDTO
.
getPlatAlarmConfig
();
if
(
CommonEnum
.
NO
.
getValue
().
equals
(
config
.
getStatus
()))
{
log
.
error
(
"呼吸告警配置为禁用,告警配置id:"
+
config
.
getId
());
return
;
}
PlatElder
platElder
=
platElderList
.
get
(
0
);
...
...
@@ -94,7 +92,6 @@ public class BreathAlarm implements IAlarm {
int
hasPerson
=
(
int
)
properties
.
get
(
"person"
);
if
(
0
==
hasPerson
)
{
log
.
info
(
"当前上报数据无人,不需要告警"
);
RedisUtil
.
delete
(
RedisConst
.
ALARM_DEVICE_BR_ID
+
deviceId
);
return
;
}
...
...
@@ -184,6 +181,7 @@ public class BreathAlarm implements IAlarm {
PlatAlarmRecord
platAlarmRecord
=
platAlarmRecordService
.
convertToPlatAlarmRecord
(
platAlarmCheckDTO
,
platElder
);
platAlarmRecord
.
setElderIds
(
platElder
.
getId
());
platAlarmRecord
.
setElderName
(
platElder
.
getName
());
platAlarmRecord
.
setDeviceTime
(
platAlarmCheckDTO
.
getDeviceTime
());
platAlarmRecordService
.
noticeDeviceAlarm
(
platAlarmCheckDTO
.
getPlatAlarmConfig
(),
platAlarmRecord
);
log
.
error
(
"长者呼吸异常,发出告警,设备id:"
+
platDevice
.
getId
()+
", 长者名称:"
+
platElder
.
getName
());
}
...
...
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/FallAlarm.java
View file @
16949764
...
...
@@ -69,7 +69,7 @@ public class FallAlarm implements IAlarm {
*/
@Override
public
void
checkConfig
(
PlatAlarmCheckDTO
platAlarmCheckDTO
)
{
log
.
info
(
"跌倒预警config开始"
);
//
log.info("跌倒预警config开始");
JSONObject
properties
=
platAlarmCheckDTO
.
getProperties
();
PlatDevice
platDevice
=
platAlarmCheckDTO
.
getPlatDevice
();
String
deviceId
=
platDevice
.
getId
();
...
...
@@ -77,7 +77,7 @@ public class FallAlarm implements IAlarm {
properties
=
new
JSONObject
();
}
String
personState
=
Convert
.
toStr
(
properties
.
get
(
"personState"
));
log
.
info
(
"跌倒预警personState:{}"
,
personState
);
//
log.info("跌倒预警personState:{}", personState);
//记录停留时长
recordDuration
(
platAlarmCheckDTO
);
...
...
@@ -232,6 +232,7 @@ public class FallAlarm implements IAlarm {
PlatAlarmRecord
platAlarmRecord
=
platAlarmRecordService
.
convertToPlatAlarmRecord
(
platAlarmCheckDTO
,
platElder
);
platAlarmRecord
.
setElderIds
(
platElder
.
getId
());
platAlarmRecord
.
setElderName
(
platElder
.
getName
());
platAlarmRecord
.
setDeviceTime
(
platAlarmCheckDTO
.
getDeviceTime
());
platAlarmRecordService
.
noticeDeviceAlarm
(
platAlarmCheckDTO
.
getPlatAlarmConfig
(),
platAlarmRecord
);
log
.
error
(
"长者跌倒,发出告警,设备id:"
+
platDevice
.
getId
()
+
", 长者名称:"
+
platElder
.
getName
());
}
...
...
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/HeartAlarm.java
View file @
16949764
...
...
@@ -50,13 +50,13 @@ public class HeartAlarm implements IAlarm {
platAlarmRecordService
.
getElderListByDeviceId
(
platAlarmCheckDTO
);
List
<
PlatElder
>
platElderList
=
platAlarmCheckDTO
.
getPlatElderList
();
if
(
CollectionUtils
.
isEmpty
(
platElderList
)){
log
.
error
(
"心率设备未关联长者,设备plat_id:"
+
platAlarmCheckDTO
.
getPlatDevice
().
getId
());
//
log.error("心率设备未关联长者,设备plat_id:" + platAlarmCheckDTO.getPlatDevice().getId());
return
;
}
PlatAlarmConfig
config
=
platAlarmCheckDTO
.
getPlatAlarmConfig
();
String
messageType
=
platAlarmCheckDTO
.
getMessageType
();
if
(
CommonEnum
.
NO
.
getValue
().
equals
(
config
.
getStatus
()))
{
log
.
error
(
"呼吸告警配置为禁用,告警配置id:"
+
config
.
getId
());
//
log.error("呼吸告警配置为禁用,告警配置id:" + config.getId());
return
;
}
PlatElder
platElder
=
platElderList
.
get
(
0
);
...
...
@@ -107,7 +107,6 @@ public class HeartAlarm implements IAlarm {
RedisUtil
.
delete
(
RedisConst
.
ALARM_DEVICE_HR_ID
+
deviceId
);
return
;
}
log
.
info
(
"hr:{},end:{},start:{},mes:{}"
,
hr
,
end
,
start
,
messageType
);
if
((
hr
>
end
||
hr
<
start
)
&&
StringUtils
.
equalsAnyIgnoreCase
(
messageType
,
"REPORT_PROPERTY"
))
{
if
(
alarmRedisDTO
==
null
){
alarmRedisDTO
=
new
AlarmRedisDTO
();
...
...
@@ -167,6 +166,7 @@ public class HeartAlarm implements IAlarm {
PlatAlarmRecord
platAlarmRecord
=
platAlarmRecordService
.
convertToPlatAlarmRecord
(
platAlarmCheckDTO
,
platElder
);
platAlarmRecord
.
setElderIds
(
platElder
.
getId
());
platAlarmRecord
.
setElderName
(
platElder
.
getName
());
platAlarmRecord
.
setDeviceTime
(
platAlarmCheckDTO
.
getDeviceTime
());
platAlarmRecordService
.
noticeDeviceAlarm
(
platAlarmCheckDTO
.
getPlatAlarmConfig
(),
platAlarmRecord
);
log
.
error
(
"长者心率异常,发出告警,设备plat_id:"
+
platDevice
.
getId
()+
", 长者名称:"
+
platElder
.
getName
());
}
...
...
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/OffBedAlarm.java
View file @
16949764
...
...
@@ -51,10 +51,9 @@ public class OffBedAlarm implements IAlarm {
public
void
checkConfig
(
PlatAlarmCheckDTO
platAlarmCheckDTO
)
{
PlatDevice
platDevice
=
platAlarmCheckDTO
.
getPlatDevice
();
platAlarmRecordService
.
getElderListByDeviceId
(
platAlarmCheckDTO
);
log
.
info
(
"执行离床checkConfig方法:"
);
//
log.info("执行离床checkConfig方法:");
List
<
PlatElder
>
platElderList
=
platAlarmCheckDTO
.
getPlatElderList
();
if
(
CollectionUtils
.
isEmpty
(
platElderList
))
{
log
.
error
(
"离床告警心率设备未关联长者,设备plat_id:"
+
platAlarmCheckDTO
.
getPlatDevice
().
getId
());
return
;
}
PlatAlarmConfig
config
=
alarmConfigCacheUtil
.
get
(
platDevice
.
getOrgId
(),
PlatAlarmConfigEnum
.
AlarmTypeEnum
.
OFF_BED
.
getValue
());
...
...
@@ -105,13 +104,13 @@ public class OffBedAlarm implements IAlarm {
// 1-有人 0-无人
AlarmRedisDTO
alarmRedisDTO
=
RedisUtil
.
get
(
RedisConst
.
ALARM_DEVICE_OFF_BED_ID
+
deviceId
);
if
(
"1"
.
equals
(
personState
))
{
log
.
info
(
"deviceId:{},离床告警有人状态下,删除redis"
,
deviceId
);
//
log.info("deviceId:{},离床告警有人状态下,删除redis", deviceId);
RedisUtil
.
delete
(
RedisConst
.
ALARM_DEVICE_OFF_BED_ID
+
deviceId
);
return
;
}
String
messageType
=
platAlarmCheckDTO
.
getMessageType
();
if
(
StringUtils
.
equalsAnyIgnoreCase
(
messageType
,
"OFFLINE"
,
"DISCONNECT"
))
{
log
.
info
(
"deviceId:{},离床告警设备下线,删除redis off_bed 预警"
,
deviceId
);
//
log.info("deviceId:{},离床告警设备下线,删除redis off_bed 预警", deviceId);
RedisUtil
.
delete
(
RedisConst
.
ALARM_DEVICE_OFF_BED_ID
+
deviceId
);
}
if
(
isOffBed
)
{
...
...
server-service/src/main/java/com/makeit/service/platform/alarm/impl/PlatAlarmRecordServiceImpl.java
View file @
16949764
...
...
@@ -57,6 +57,7 @@ import com.makeit.utils.sql.join.JoinUtil;
import
com.makeit.utils.user.common.CommonUserUtil
;
import
com.makeit.utils.user.common.CommonUserVO
;
import
com.makeit.utils.user.wechat.WechatUserUtil
;
import
com.makeit.vo.platform.alarm.PlatAlarmExternalRecordVO
;
import
com.makeit.vo.platform.alarm.PlatAlarmRecordVO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
...
...
@@ -65,7 +66,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.sql.Timestamp
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.regex.Matcher
;
...
...
@@ -143,6 +143,22 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
return
PageUtil
.
toPageVO
(
dtos
,
page
);
}
@Override
public
PageVO
<
PlatAlarmExternalRecordVO
>
fallRecord
(
PageReqDTO
<
PlatAlarmRecordQueryDTO
>
pageReqDTO
)
{
PlatAlarmRecordQueryDTO
data
=
pageReqDTO
.
getData
();
if
(
StringUtils
.
isEmpty
(
data
.
getOrgId
())){
throw
new
RuntimeException
(
"机构id不能为空"
);
}
if
(
data
.
getCreateDateFrom
()
==
null
&&
data
.
getCreateDateTo
()
==
null
)
{
throw
new
RuntimeException
(
"告警起始时间不能为空"
);
}
data
.
setAlarmType
(
"1"
);
data
.
setStatus
(
"0"
);
PageVO
<
PlatAlarmRecordVO
>
page
=
page
(
pageReqDTO
);
List
<
PlatAlarmRecordVO
>
list
=
page
.
getList
();
return
PageUtil
.
toPageVO
(
BeanDtoVoUtils
.
listVo
(
list
,
PlatAlarmExternalRecordVO
.
class
),
page
);
}
/**
* 子女端告警列表
*
...
...
@@ -477,7 +493,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
//todo 要支持 设备绑定多个空间
List
<
PlatRoomBedDevice
>
platRoomBedDeviceList
=
platRoomBedDeviceService
.
list
(
roomBedDeviceLambdaQueryWrapper
);
if
(
CollectionUtils
.
isEmpty
(
platRoomBedDeviceList
)){
log
.
error
(
"设备没绑定房间:"
+
platDevice
.
getId
());
//
log.error("设备没绑定房间:"+platDevice.getId());
return
;
}
...
...
@@ -617,9 +633,10 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
if
(
platDevice
==
null
)
{
throw
new
RuntimeException
(
"找不到告警关联的设备,设备已解绑"
+
deviceId
);
}
Timestamp
timestamp
=
Timestamp
.
valueOf
(
platAlarmRecord
.
getCreateDate
());
log
.
info
(
"开始想设备发送误报通知"
);
String
result
=
iotDevicePropertiesOperateService
.
deviceFunctionAttr
(
platDevice
.
getOriDeviceId
(),
timestamp
.
getTime
());
String
result
=
iotDevicePropertiesOperateService
.
deviceFunctionAttr
(
platDevice
.
getOriDeviceId
(),
StringUtils
.
isEmpty
(
platAlarmRecord
.
getDeviceTime
())
?
""
:
platAlarmRecord
.
getDeviceTime
());
if
(
StringUtils
.
isNotEmpty
(
result
))
{
throw
new
RuntimeException
(
"发送误报通知失败:"
+
result
);
}
...
...
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderBreatheHeartRateRecordService.java
0 → 100644
View file @
16949764
package
com
.
makeit
.
service
.
platform
.
elder
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.makeit.entity.platform.elder.PlatElderBreatheHeartRateRecord
;
import
java.util.List
;
public
interface
PlatElderBreatheHeartRateRecordService
extends
IService
<
PlatElderBreatheHeartRateRecord
>
{
void
breatheHeartRateRecordTask
();
List
<
PlatElderBreatheHeartRateRecord
>
list
(
String
elderId
,
String
iotDeviceId
,
String
tenantId
,
long
start
,
long
end
);
}
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderCoordinateRecordService.java
View file @
16949764
...
...
@@ -14,4 +14,5 @@ import com.makeit.entity.platform.elder.PlatElderCoordinateRecord;
public
interface
PlatElderCoordinateRecordService
extends
IService
<
PlatElderCoordinateRecord
>
{
void
coordinateRecordTask
();
}
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderDayReportDayService.java
View file @
16949764
...
...
@@ -41,6 +41,8 @@ public interface PlatElderDayReportDayService {
List
<
String
>
failRecordList
(
PlatElderReportDTO
platElderIdDTO
);
List
<
PlatElderCoordinateVO
>
coordinateList
(
String
elderId
,
long
start
,
long
end
);
List
<
PlatElderCoordinateVO
>
coordinateList
(
String
elderId
,
String
deviceId
,
LocalDateTime
start
,
LocalDateTime
end
);
List
<
PlatElderCoordinateVO
>
coordinateList
(
PlatElderReportDTO
platElderIdDTO
);
...
...
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderRealTimeService.java
View file @
16949764
...
...
@@ -33,5 +33,5 @@ public interface PlatElderRealTimeService {
List
<
PlatElderCoordinateVO
>
coordinate
(
PlatElderIdDTO
platElderIdDTO
);
PlatElderRealTimeHeartRespiratoryVO
deviceHealthReport
(
PlatElderIdDTO
dto
);
}
server-service/src/main/java/com/makeit/service/platform/elder/PlatElderSleepService.java
View file @
16949764
...
...
@@ -2,6 +2,10 @@ package com.makeit.service.platform.elder;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.makeit.entity.platform.elder.PlatElderSleep
;
import
com.makeit.entity.platform.elder.PlatElderSleepAnalysis
;
import
com.makeit.entity.saas.analysis.SaasSleepEvaluateStandardReport
;
import
java.util.List
;
/**
* <p>
...
...
@@ -13,7 +17,10 @@ import com.makeit.entity.platform.elder.PlatElderSleep;
*/
public
interface
PlatElderSleepService
extends
IService
<
PlatElderSleep
>
{
void
elderSleepSleepAnalysisTask
(
);
List
<
PlatElderSleepAnalysis
>
elderSleepSleepAnalysisTask
(
Integer
month
,
Integer
day
);
void
test1
();
String
calculateScores
(
long
daySleepTime
,
long
dayRestTime
,
long
deepTime
,
long
soberTime
,
long
lightTime
,
SaasSleepEvaluateStandardReport
evaluateStandardReport
);
}
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderBreatheAnalysisServiceImpl.java
View file @
16949764
...
...
@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.makeit.common.entity.BaseEntity
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.platform.elder.PlatElder
;
...
...
@@ -21,8 +20,6 @@ import com.makeit.enums.report.ConditionTypeEnum;
import
com.makeit.mapper.platform.elder.PlatElderBreatheAnalysisMapper
;
import
com.makeit.module.iot.service.IotProductDeviceService
;
import
com.makeit.module.iot.vo.DeviceOperationLogEntity
;
import
com.makeit.module.iot.vo.analysis.AnalysisVO
;
import
com.makeit.module.iot.vo.analysis.BreatheAbnormalVO
;
import
com.makeit.module.iot.vo.analysis.DiseaseReportVO
;
import
com.makeit.module.iot.vo.analysis.EvaluateReportVO
;
import
com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe
;
...
...
@@ -37,22 +34,22 @@ import com.makeit.service.saas.SaasSleepAnalysisModelService;
import
com.makeit.utils.data.convert.JsonUtil
;
import
com.makeit.utils.data.convert.StreamUtil
;
import
com.makeit.utils.time.LocalDateTimeUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.*
;
import
java.time.format.DateTimeFormatter
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.concurrent.atomic.AtomicLong
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -64,6 +61,7 @@ import java.util.stream.Collectors;
* @since 2023-09-15
*/
@Service
@Slf4j
public
class
PlatElderBreatheAnalysisServiceImpl
extends
ServiceImpl
<
PlatElderBreatheAnalysisMapper
,
PlatElderBreatheAnalysis
>
implements
PlatElderBreatheAnalysisService
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
PlatElderBreatheAnalysisServiceImpl
.
class
);
...
...
@@ -89,45 +87,15 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
private
static
final
DateTimeFormatter
DEFAULT_FORMATTER
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm"
);
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
List
<
PlatElderBreatheAnalysis
>
elderHeartRespiratoryAnalysisTask
(
Integer
month
,
Integer
day
)
{
// 12-06,12-18 12-07、 12-12(70分)
LocalDate
nowDate
=
LocalDate
.
now
();
if
(
month
!=
null
&&
day
!=
null
)
{
nowDate
=
LocalDate
.
of
(
2023
,
month
,
day
);
}
LocalDate
yesDate
=
nowDate
.
minusDays
(
1
);
LocalDateTime
yesStart
=
LocalDateTimeUtils
.
getDayStart
(
yesDate
);
LocalDateTime
yesEnd
=
LocalDateTimeUtils
.
getDayEnd
(
yesDate
);
List
<
PlatElder
>
elderList
=
platElderService
.
list
(
new
QueryWrapper
<
PlatElder
>().
lambda
()
.
isNotNull
(
PlatElder:
:
getBedId
));
List
<
PlatElderBreatheAnalysis
>
result
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
elderList
))
{
return
result
;
private
LocalDateTime
longToTime
(
Long
longTime
)
{
return
LocalDateTime
.
ofInstant
(
Instant
.
ofEpochMilli
(
longTime
),
ZoneOffset
.
of
(
"+8"
));
}
List
<
String
>
elderIdList
=
StreamUtil
.
map
(
elderList
,
BaseEntity:
:
getId
);
List
<
PlatElderBreatheDayStat
>
elderBreatheDayStatList
=
platElderBreatheDayStatService
.
list
(
new
QueryWrapper
<
PlatElderBreatheDayStat
>().
lambda
()
.
in
(
PlatElderBreatheDayStat:
:
getElderId
,
elderIdList
)
.
eq
(
PlatElderBreatheDayStat:
:
getDay
,
yesDate
));
Map
<
String
,
PlatElderBreatheDayStat
>
breatheDayStatMap
=
StreamUtil
.
toMapDep
(
elderBreatheDayStatList
,
PlatElderBreatheDayStat:
:
getElderId
);
SaasSleepAnalysisModel
analysisModel
=
saasSleepAnalysisModelService
.
getOne
(
new
QueryWrapper
<
SaasSleepAnalysisModel
>().
lambda
()
.
orderByDesc
(
BaseEntity:
:
getCreateBy
)
.
last
(
"limit 1"
));
SaasDiseaseModel
saasDiseaseModel
=
saasDiseaseModelService
.
getOne
(
new
QueryWrapper
<
SaasDiseaseModel
>().
lambda
()
.
orderByDesc
(
BaseEntity:
:
getCreateBy
)
.
last
(
"limit 1"
));
Map
<
String
,
PlatElderBreatheAnalysis
>
analysisMap
=
StreamUtil
.
toMapDep
(
platElderBreatheAnalysisService
.
list
(
Wrappers
.<
PlatElderBreatheAnalysis
>
lambdaQuery
()
.
in
(
PlatElderBreatheAnalysis:
:
getElderId
,
elderIdList
)
.
eq
(
PlatElderBreatheAnalysis:
:
getHappenDate
,
yesDate
).
last
(
"limit 1"
)),
PlatElderBreatheAnalysis:
:
getElderId
);
private
PlatElderBreatheAnalysis
elderHeartAnalysis
(
PlatElder
platElder
,
Map
<
String
,
PlatElderBreatheDayStat
>
breatheDayStatMap
,
LocalDateTime
yesStart
,
SaasSleepAnalysisModel
analysisModel
,
SaasDiseaseModel
saasDiseaseModel
,
LocalDate
yesDate
,
Map
<
String
,
PlatElderBreatheAnalysis
>
analysisMap
,
SaasDiseaseEvaluateReport
saasDiseaseEvaluateReport
)
{
// 呼吸率
int
breatheThresholdMin
=
Integer
.
parseInt
(
analysisModel
.
getBreatheThresholdMin
());
int
breatheThresholdMax
=
Integer
.
parseInt
(
analysisModel
.
getBreatheThresholdMax
());
...
...
@@ -137,23 +105,36 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
int
heartThresholdMin
=
Integer
.
parseInt
(
analysisModel
.
getHeartThresholdMin
());
int
heartThresholdMax
=
Integer
.
parseInt
(
analysisModel
.
getHeartThresholdMax
());
int
heartDuration
=
Integer
.
parseInt
(
analysisModel
.
getHeartDuration
());
for
(
PlatElder
platElder
:
elderList
)
{
PlatElderBreatheDayStat
elderBreatheDayStat
=
breatheDayStatMap
.
get
(
platElder
.
getId
());
if
(
elderBreatheDayStat
==
null
)
{
continue
;
return
new
PlatElderBreatheAnalysis
()
;
}
PlatDevice
platDevice
=
platElderRealTimeService
.
getBreathDevice
(
platElder
.
getId
(),
null
);
if
(
platDevice
==
null
)
{
continue
;
return
new
PlatElderBreatheAnalysis
()
;
}
List
<
String
>
dayHourRange
=
getLastDayHourRange
(
yesStart
);
TreeMap
<
String
,
AnalysisVO
>
totalMap
=
new
TreeMap
<>();
String
reportStartTime
=
""
;
String
reportEndTime
=
""
;
// 呼吸暂停
AtomicInteger
brStopCount
=
new
AtomicInteger
(
0
);
AtomicLong
brStopSecond
=
new
AtomicLong
(
0
);
// 呼吸过速
AtomicInteger
brFastCount
=
new
AtomicInteger
(
0
);
;
AtomicLong
brFastSecond
=
new
AtomicLong
();
// 呼吸过缓
AtomicInteger
brSlowCount
=
new
AtomicInteger
(
0
);
AtomicLong
brSlowSecond
=
new
AtomicLong
();
// 心率过速
AtomicInteger
hrFastCount
=
new
AtomicInteger
(
0
);
AtomicLong
hrFastSecond
=
new
AtomicLong
();
// 心率过缓
AtomicInteger
hrSlowCount
=
new
AtomicInteger
(
0
);
AtomicLong
hrSlowSecond
=
new
AtomicLong
();
for
(
String
hourRange
:
dayHourRange
)
{
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
]);
if
(
CollectionUtils
.
isEmpty
(
deviceOperationLogEntities
))
{
continue
;
}
...
...
@@ -161,213 +142,160 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
.
filter
(
deviceOperationLogEntity
->
deviceOperationLogEntity
.
getType
().
contains
(
"reportProperty"
))
.
map
(
deviceOperationLogEntity
->
{
DeviceInfoContentBreathe
deviceInfoContentBreathe
=
JsonUtil
.
toObj
((
String
)
deviceOperationLogEntity
.
getContent
(),
DeviceInfoContentBreathe
.
class
);
assert
deviceInfoContentBreathe
!=
null
;
deviceInfoContentBreathe
.
setReportTime
(
formatLongTime
(
deviceInfoContentBreathe
.
getTimestamp
()));
return
deviceInfoContentBreathe
;
})
.
collect
(
Collectors
.
toList
());
Map
<
String
,
List
<
DeviceInfoContentBreathe
>>
minuteMap
=
StreamUtil
.
groupBy
(
deviceInfoContentBreatheList
,
DeviceInfoContentBreathe:
:
getReportTime
);
deviceOperationLogEntities
.
clear
();
// 统计每小时的体动和翻身
Map
<
String
,
AnalysisVO
>
statisticsMap
=
Maps
.
newHashMap
();
List
<
DeviceInfoContentBreathe
>
deviceInfoContentBreathes
;
for
(
Map
.
Entry
<
String
,
List
<
DeviceInfoContentBreathe
>>
entry
:
minuteMap
.
entrySet
())
{
if
(
StringUtils
.
isEmpty
(
reportStartTime
))
{
reportStartTime
=
entry
.
getKey
();
}
reportEndTime
=
entry
.
getKey
();
deviceInfoContentBreathes
=
entry
.
getValue
();
DeviceInfoContentBreathe
.
Properties
breatheProperties
;
// 呼吸暂停
int
brStopCount
=
0
;
int
brStopSecond
=
0
;
// 呼吸过速
int
brFastCount
=
0
;
int
brFastSecond
=
0
;
int
brFast
=
0
;
// 呼吸过缓
int
brSlowCount
=
0
;
int
brSlowSecond
=
0
;
int
brSlow
=
0
;
// 心率过速
int
hrFastCount
=
0
;
int
hrFast
=
0
;
int
hrFastSecond
=
0
;
// 心率过缓
int
hrSlowCount
=
0
;
int
hrSlowSecond
=
0
;
int
hrSlow
=
0
;
AnalysisVO
analysisVO
=
new
AnalysisVO
();
for
(
DeviceInfoContentBreathe
infoContentBreathe
:
deviceInfoContentBreathes
)
{
// 体动指数
breatheProperties
=
infoContentBreathe
.
getProperties
();
int
br
=
breatheProperties
.
getBr
();
int
hr
=
breatheProperties
.
getHr
();
Integer
hasPerson
=
breatheProperties
.
getPerson
();
// 0无人,1有人
if
(
hasPerson
==
0
)
{
continue
;
}
AtomicBoolean
existHrFast
=
new
AtomicBoolean
(
false
);
AtomicBoolean
existHrSlow
=
new
AtomicBoolean
(
false
);
AtomicBoolean
existBrFast
=
new
AtomicBoolean
(
false
);
AtomicBoolean
existBrSlow
=
new
AtomicBoolean
(
false
);
AtomicBoolean
existBrStop
=
new
AtomicBoolean
(
false
);
deviceInfoContentBreatheList
.
forEach
(
deviceInfo
->
{
DeviceInfoContentBreathe
.
Properties
deviceProperties
=
deviceInfo
.
getProperties
();
int
br
=
deviceProperties
.
getBr
();
int
hr
=
deviceProperties
.
getHr
();
Integer
hasPerson
=
deviceProperties
.
getPerson
();
// 0无人,1有人
// 0和255设备误报直接跳过
if
(
hasPerson
==
0
||
hr
==
255
||
br
==
255
)
{
brStopSecond
.
set
(
0
);
brFastSecond
.
set
(
0
);
brSlowSecond
.
set
(
0
);
hrFastSecond
.
set
(
0
);
hrSlowSecond
.
set
(
0
);
existHrFast
.
set
(
false
);
existHrSlow
.
set
(
false
);
existBrFast
.
set
(
false
);
existBrSlow
.
set
(
false
);
existBrStop
.
set
(
false
);
return
;
}
Long
timestamp
=
deviceInfo
.
getTimestamp
();
// 判断呼吸暂停
if
(
br
==
0
)
{
brStopSecond
++;
if
(
brStopSecond
==
breatheDuration
)
{
brStopCount
++;
brStopSecond
=
0
;
}
}
else
{
brStopSecond
=
0
;
}
// 判断呼吸率阈值,记录发生时间和当前呼吸率
if
(
breatheThresholdMax
<
br
&&
br
!=
255
)
{
if
(
brFast
==
0
)
{
brFast
=
br
;
}
brFastSecond
++;
if
(
brFastSecond
==
breatheDuration
)
{
brFastCount
++;
brFastSecond
=
0
;
}
}
else
{
brFastSecond
=
0
;
}
if
(
br
<
breatheThresholdMin
)
{
if
(
brSlow
==
0
)
{
brSlow
=
br
;
}
brSlowSecond
++;
if
(
brSlowSecond
==
breatheDuration
)
{
brSlowCount
++;
brSlowSecond
=
0
;
}
}
else
{
brSlowSecond
=
0
;
}
if
(
heartThresholdMax
<
hr
&&
hr
!=
255
)
{
if
(
hrFast
==
0
)
{
hrFast
=
br
;
}
hrFastSecond
++;
if
(
hrFastSecond
==
heartDuration
)
{
hrFastCount
++;
hrFastSecond
=
0
;
}
}
else
{
hrFastSecond
=
0
;
}
if
(
heartThresholdMin
>
hr
)
{
if
(
hrSlow
==
0
)
{
hrSlow
=
br
;
}
hrSlowSecond
++;
if
(
hrSlowSecond
==
heartDuration
)
{
hrSlowCount
++;
hrSlowSecond
=
0
;
}
long
firstStopSecond
=
brStopSecond
.
get
();
if
(
firstStopSecond
==
0
)
{
log
.
info
(
"第一次呼吸暂停的时间:{}"
,
longToTime
(
timestamp
));
brStopSecond
.
set
(
timestamp
);
}
if
(
firstStopSecond
!=
0
&&
(
timestamp
-
firstStopSecond
)
/
1000
>=
breatheDuration
)
{
// 避免每10s生成一次统计的方式,切换状态后重新计算
if
(!
existBrStop
.
get
())
{
log
.
info
(
"第一次呼吸暂停持续时间满足:{}:now:{}"
,
breatheDuration
,
longToTime
(
timestamp
));
brStopCount
.
getAndIncrement
();
existBrStop
.
set
(
true
);
}
}
brFastSecond
.
set
(
0
);
brSlowSecond
.
set
(
0
);
existBrFast
.
set
(
false
);
existBrSlow
.
set
(
false
);
}
else
if
(
breatheThresholdMax
<
br
)
{
//呼吸过快
long
firstFastBr
=
brFastSecond
.
get
();
if
(
firstFastBr
==
0
)
{
log
.
info
(
"第一次呼吸:{},fast大于阈值:{},的时间:{}"
,
br
,
breatheThresholdMax
,
longToTime
(
timestamp
));
brFastSecond
.
set
(
timestamp
);
}
if
(
firstFastBr
!=
0
&&
(
timestamp
-
firstFastBr
)
/
1000
>=
breatheDuration
)
{
if
(!
existBrFast
.
get
())
{
log
.
info
(
"第一次呼吸:{},fast持续时间满足:{}:now:{}"
,
br
,
breatheDuration
,
longToTime
(
timestamp
));
brFastCount
.
getAndIncrement
();
existBrFast
.
set
(
true
);
}
}
brSlowSecond
.
set
(
0
);
brStopSecond
.
set
(
0
);
existBrSlow
.
set
(
false
);
existBrStop
.
set
(
false
);
}
else
if
(
br
<
breatheThresholdMin
)
{
// 呼吸过慢
long
firstSlowBr
=
brSlowSecond
.
get
();
if
(
firstSlowBr
==
0
)
{
log
.
info
(
"第一次呼吸:{},slow小于阈值:{},的时间:{}"
,
br
,
breatheThresholdMin
,
longToTime
(
timestamp
));
brSlowSecond
.
set
(
timestamp
);
}
if
(
firstSlowBr
!=
0
&&
(
timestamp
-
firstSlowBr
)
/
1000
>=
breatheDuration
)
{
if
(!
existBrSlow
.
get
())
{
log
.
info
(
"第一次呼吸:{},slow持续时间满足:{}:now:{}"
,
br
,
breatheDuration
,
longToTime
(
timestamp
));
brSlowCount
.
getAndIncrement
();
}
}
brFastSecond
.
set
(
0
);
brStopSecond
.
set
(
0
);
existBrFast
.
set
(
false
);
existBrStop
.
set
(
false
);
}
else
{
hrSlowSecond
=
0
;
}
}
analysisVO
.
setBrStopThreshold
(
brStopCount
);
analysisVO
.
setBrFastThreshold
(
brFastCount
);
analysisVO
.
setBrSlowThreshold
(
brSlowCount
);
analysisVO
.
setHrFastThreshold
(
hrFastCount
);
analysisVO
.
setHrSlowThreshold
(
hrSlowCount
);
statisticsMap
.
put
(
entry
.
getKey
(),
analysisVO
);
}
TreeMap
<
String
,
AnalysisVO
>
treeMap
=
new
TreeMap
<>(
statisticsMap
);
totalMap
.
putAll
(
treeMap
);
statisticsMap
.
clear
();
treeMap
.
clear
();
}
if
(
totalMap
.
isEmpty
())
{
continue
;
brSlowSecond
.
set
(
0
);
brFastSecond
.
set
(
0
);
brStopSecond
.
set
(
0
);
existBrFast
.
set
(
false
);
existBrStop
.
set
(
false
);
existBrSlow
.
set
(
false
);
log
.
info
(
"呼吸正常:{},min:{},max:{},的时间:{}"
,
br
,
breatheThresholdMin
,
breatheThresholdMax
,
longToTime
(
timestamp
));
}
// 心率过快
if
(
heartThresholdMax
<
hr
)
{
long
firstHrMax
=
hrFastSecond
.
get
();
if
(
firstHrMax
==
0
)
{
log
.
info
(
"第一次心率:{},max大于阈值:{},的时间:{}"
,
hr
,
heartThresholdMax
,
longToTime
(
timestamp
));
hrFastSecond
.
set
(
timestamp
);
}
if
(
firstHrMax
!=
0
&&
(
timestamp
-
firstHrMax
)
/
1000
>=
heartDuration
)
{
if
(!
existHrFast
.
get
())
{
log
.
info
(
"第一次心率:{},max持续时间满足:{}:now:{}"
,
hr
,
heartDuration
,
longToTime
(
timestamp
));
hrFastCount
.
getAndIncrement
();
existHrFast
.
set
(
true
);
}
}
hrSlowSecond
.
set
(
0
);
existHrSlow
.
set
(
false
);
}
else
if
(
heartThresholdMin
>
hr
)
{
// 心率过慢
long
firstHrMin
=
hrSlowSecond
.
get
();
if
(
firstHrMin
==
0
)
{
log
.
info
(
"第一次心率:{},min小于阈值:{},的时间:{}"
,
hr
,
heartThresholdMin
,
longToTime
(
timestamp
));
hrSlowSecond
.
set
(
timestamp
);
}
if
(
firstHrMin
!=
0
&&
(
timestamp
-
firstHrMin
)
/
1000
>=
heartDuration
)
{
if
(!
existHrSlow
.
get
())
{
log
.
info
(
"第一次心率:{},min持续时间满足:{}:now:{}"
,
hr
,
heartDuration
,
longToTime
(
timestamp
));
hrSlowCount
.
getAndIncrement
();
existHrSlow
.
set
(
true
);
}
}
hrFastSecond
.
set
(
0
);
existHrFast
.
set
(
false
);
}
else
{
hrSlowSecond
.
set
(
0
);
existHrSlow
.
set
(
false
);
hrFastSecond
.
set
(
0
);
existHrFast
.
set
(
false
);
log
.
info
(
"心率正常:{},min:{},max:{},的时间:{}"
,
hr
,
heartThresholdMin
,
heartThresholdMax
,
longToTime
(
timestamp
));
}
});
}
// 呼吸暂停
int
apneaTime
=
Integer
.
parseInt
(
saasDiseaseModel
.
getApneaTime
());
int
apneaThreshold
=
Integer
.
parseInt
(
saasDiseaseModel
.
getApneaThreshold
());
BigDecimal
apneaRate
=
new
BigDecimal
(
apneaTime
).
divide
(
new
BigDecimal
(
apneaThreshold
),
2
,
RoundingMode
.
HALF_UP
);
// 呼吸过速
int
tachypneaTime
=
Integer
.
parseInt
(
saasDiseaseModel
.
getTachypneaTime
());
int
tachypneaThreshold
=
Integer
.
parseInt
(
saasDiseaseModel
.
getTachypneaThreshold
());
BigDecimal
tachypneaRate
=
new
BigDecimal
(
tachypneaTime
).
divide
(
new
BigDecimal
(
tachypneaThreshold
),
2
,
RoundingMode
.
HALF_UP
);
// 呼吸过缓
int
bradypneaTime
=
Integer
.
parseInt
(
saasDiseaseModel
.
getBradypneaTime
());
int
bradypneaThreshold
=
Integer
.
parseInt
(
saasDiseaseModel
.
getBradypneaThreshold
());
BigDecimal
bradypneaRate
=
new
BigDecimal
(
bradypneaTime
).
divide
(
new
BigDecimal
(
bradypneaThreshold
),
2
,
RoundingMode
.
HALF_UP
);
// 心率过缓
int
bradycardiaTime
=
Integer
.
parseInt
(
saasDiseaseModel
.
getBradycardiaTime
());
int
bradycardiaThreshold
=
Integer
.
parseInt
(
saasDiseaseModel
.
getBradycardiaThreshold
());
BigDecimal
bradycardiaRate
=
new
BigDecimal
(
bradycardiaTime
).
divide
(
new
BigDecimal
(
bradycardiaThreshold
),
2
,
RoundingMode
.
HALF_UP
);
// 心率过速
int
tachycardiaTime
=
Integer
.
parseInt
(
saasDiseaseModel
.
getTachycardiaTime
());
int
tachycardiaComparison
=
Integer
.
parseInt
(
saasDiseaseModel
.
getTachycardiaThreshold
());
BigDecimal
tachycardiaRate
=
new
BigDecimal
(
tachycardiaTime
).
divide
(
new
BigDecimal
(
tachycardiaComparison
),
2
,
RoundingMode
.
HALF_UP
);
// 呼吸疾病报告
int
brStopCount
=
0
;
int
brFastCount
=
0
;
int
brSlowCount
=
0
;
int
hrFastCount
=
0
;
int
hrSlowCount
=
0
;
// 计算异常的信息,并且统计异常的次数
List
<
BreatheAbnormalVO
>
breatheAbnormalVOList
=
Lists
.
newArrayList
();
for
(
Map
.
Entry
<
String
,
AnalysisVO
>
entry
:
totalMap
.
entrySet
())
{
AnalysisVO
analysisVO
=
entry
.
getValue
();
if
(
analysisVO
.
getBrStopThreshold
()
>
0
)
{
brStopCount
+=
analysisVO
.
getBrStopThreshold
();
}
if
(
analysisVO
.
getBrSlowThreshold
()
>
0
)
{
brSlowCount
+=
analysisVO
.
getBrSlowThreshold
();
}
if
(
analysisVO
.
getBrFastThreshold
()
>
0
)
{
brFastCount
+=
analysisVO
.
getBrFastThreshold
();
}
if
(
analysisVO
.
getHrFastThreshold
()
>
0
)
{
hrFastCount
+=
analysisVO
.
getHrFastThreshold
();
}
if
(
analysisVO
.
getHrSlowThreshold
()
>
0
)
{
hrSlowCount
+=
analysisVO
.
getHrSlowThreshold
();
}
}
int
timeHourRange
=
24
;
if
(
StringUtils
.
isNotEmpty
(
reportStartTime
)
&&
StringUtils
.
isNotEmpty
(
reportEndTime
))
{
Long
durationRange
=
getDurationRange
(
reportStartTime
,
reportEndTime
);
timeHourRange
=
(
int
)
(
durationRange
/
60
);
}
// 判断是否满足配置的呼吸心率异常类型
BigDecimal
dayBrStopRate
=
brStopCount
==
0
?
BigDecimal
.
ZERO
:
new
BigDecimal
(
timeHourRange
).
divide
(
new
BigDecimal
(
brStopCount
),
2
,
RoundingMode
.
HALF_UP
);
BigDecimal
dayBrSlowRate
=
brSlowCount
==
0
?
BigDecimal
.
ZERO
:
new
BigDecimal
(
timeHourRange
).
divide
(
new
BigDecimal
(
brSlowCount
),
2
,
RoundingMode
.
HALF_UP
);
BigDecimal
dayBrFastRate
=
brFastCount
==
0
?
BigDecimal
.
ZERO
:
new
BigDecimal
(
timeHourRange
).
divide
(
new
BigDecimal
(
brFastCount
),
2
,
RoundingMode
.
HALF_UP
);
BigDecimal
dayHrFastRate
=
hrFastCount
==
0
?
BigDecimal
.
ZERO
:
new
BigDecimal
(
timeHourRange
).
divide
(
new
BigDecimal
(
hrFastCount
),
2
,
RoundingMode
.
HALF_UP
);
BigDecimal
dayHrSlowRate
=
hrSlowCount
==
0
?
BigDecimal
.
ZERO
:
new
BigDecimal
(
timeHourRange
).
divide
(
new
BigDecimal
(
hrSlowCount
),
2
,
RoundingMode
.
HALF_UP
);
boolean
brStopFlag
=
false
;
boolean
brFastFlag
=
false
;
boolean
brSlowFlag
=
false
;
...
...
@@ -375,36 +303,30 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
boolean
hrSlowFlag
=
false
;
boolean
normalFlag
;
if
(
apneaRate
.
compareTo
(
dayBrStopRate
)
>
0
)
{
if
(
brStopCount
.
get
()
>
apneaThreshold
)
{
brStopFlag
=
true
;
}
if
(
tachypneaRate
.
compareTo
(
dayBrFastRate
)
>
0
)
{
if
(
brFastCount
.
get
()
>
tachypneaThreshold
)
{
brFastFlag
=
true
;
}
if
(
bradypneaRate
.
compareTo
(
dayBrSlowRate
)
>
0
)
{
if
(
brSlowCount
.
get
()
>
bradypneaThreshold
)
{
brSlowFlag
=
true
;
}
if
(
tachycardiaRate
.
compareTo
(
dayHrFastRate
)
>
0
)
{
if
(
hrFastCount
.
get
()
>
tachycardiaComparison
)
{
hrFastFlag
=
true
;
}
if
(
bradycardiaRate
.
compareTo
(
dayHrSlowRate
)
>
0
)
{
if
(
hrSlowCount
.
get
()
>
bradycardiaThreshold
)
{
hrSlowFlag
=
true
;
}
normalFlag
=
!(
hrFastFlag
||
brStopFlag
||
brFastFlag
||
brSlowFlag
||
hrSlowFlag
);
SaasDiseaseEvaluateReport
saasDiseaseEvaluateReport
=
saasDiseaseEvaluateReportService
.
getOne
(
new
QueryWrapper
<
SaasDiseaseEvaluateReport
>().
lambda
()
.
orderByDesc
(
BaseEntity:
:
getCreateBy
)
.
last
(
"limit 1"
));
String
resultContent
=
saasDiseaseEvaluateReport
.
getResultContent
();
List
<
DiseaseReportVO
>
evaluateReportList
=
JSON
.
parseArray
(
resultContent
,
DiseaseReportVO
.
class
);
List
<
DiseaseReportVO
>
evaluateReportList
=
JSON
.
parseArray
(
saasDiseaseEvaluateReport
.
getResultContent
(),
DiseaseReportVO
.
class
);
DiseaseReportVO
finalReport
=
new
DiseaseReportVO
();
// 根据疾病标准配置的规则判断满足哪个区间范围
for
(
DiseaseReportVO
diseaseReportVO
:
evaluateReportList
)
{
List
<
DiseaseReportVO
.
Condition
>
conditionList
=
diseaseReportVO
.
getCondition
();
if
(
CollUtil
.
isEmpty
(
conditionList
))
{
return
result
;
continue
;
}
boolean
conditionFlag
=
true
;
...
...
@@ -440,8 +362,13 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
finalReport
=
diseaseReportVO
;
}
}
long
scoreLong
=
Long
.
parseLong
(
finalReport
.
getScore
());
if
(
scoreLong
>
100
)
{
scoreLong
=
100
;
finalReport
.
setScore
(
"100"
);
}
EvaluateReportVO
diseaseReport
=
saasDiseaseReportService
.
getByScore
(
Long
.
parseLong
(
finalReport
.
getScore
())
);
EvaluateReportVO
diseaseReport
=
saasDiseaseReportService
.
getByScore
(
scoreLong
);
PlatElderBreatheAnalysis
platElderBreatheAnalysis
=
new
PlatElderBreatheAnalysis
();
platElderBreatheAnalysis
.
setElderId
(
platElder
.
getId
());
...
...
@@ -451,6 +378,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
platElderBreatheAnalysis
.
setHappenDate
(
String
.
valueOf
(
yesDate
));
platElderBreatheAnalysis
.
setTenantId
(
platElder
.
getTenantId
());
platElderBreatheAnalysis
.
setBreatheEvaluate
(
diseaseReport
==
null
?
""
:
diseaseReport
.
getEvaluate
());
platElderBreatheAnalysis
.
setOriDeviceId
(
platDevice
.
getOriDeviceId
());
// 修复数据
PlatElderBreatheAnalysis
breatheAnalysis
=
analysisMap
.
get
(
platElder
.
getId
());
...
...
@@ -460,11 +388,58 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
}
else
{
platElderBreatheAnalysisService
.
save
(
platElderBreatheAnalysis
);
}
result
.
add
(
platElderBreatheAnalysis
);
return
platElderBreatheAnalysis
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
List
<
PlatElderBreatheAnalysis
>
elderHeartRespiratoryAnalysisTask
(
Integer
month
,
Integer
day
)
{
// 12-06,12-18 12-07、 12-12(70分)
LocalDate
nowDate
=
LocalDate
.
now
();
if
(
month
!=
null
&&
day
!=
null
)
{
nowDate
=
LocalDate
.
of
(
2023
,
month
,
day
);
}
LocalDate
yesDate
=
nowDate
.
minusDays
(
1
);
LocalDateTime
yesStart
=
LocalDateTimeUtils
.
getDayStart
(
yesDate
);
LocalDateTime
yesEnd
=
LocalDateTimeUtils
.
getDayEnd
(
yesDate
);
List
<
PlatElder
>
elderList
=
platElderService
.
list
(
new
QueryWrapper
<
PlatElder
>().
lambda
()
.
isNotNull
(
PlatElder:
:
getBedId
));
List
<
PlatElderBreatheAnalysis
>
result
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isEmpty
(
elderList
))
{
return
result
;
}
List
<
String
>
elderIdList
=
StreamUtil
.
map
(
elderList
,
BaseEntity:
:
getId
);
List
<
PlatElderBreatheDayStat
>
elderBreatheDayStatList
=
platElderBreatheDayStatService
.
list
(
new
QueryWrapper
<
PlatElderBreatheDayStat
>().
lambda
()
.
in
(
PlatElderBreatheDayStat:
:
getElderId
,
elderIdList
)
.
eq
(
PlatElderBreatheDayStat:
:
getDay
,
yesDate
));
Map
<
String
,
PlatElderBreatheDayStat
>
breatheDayStatMap
=
StreamUtil
.
toMapDep
(
elderBreatheDayStatList
,
PlatElderBreatheDayStat:
:
getElderId
);
SaasSleepAnalysisModel
analysisModel
=
saasSleepAnalysisModelService
.
getOne
(
new
QueryWrapper
<
SaasSleepAnalysisModel
>().
lambda
()
.
orderByDesc
(
BaseEntity:
:
getCreateBy
)
.
last
(
"limit 1"
));
SaasDiseaseModel
saasDiseaseModel
=
saasDiseaseModelService
.
getOne
(
new
QueryWrapper
<
SaasDiseaseModel
>().
lambda
()
.
orderByDesc
(
BaseEntity:
:
getCreateBy
)
.
last
(
"limit 1"
));
Map
<
String
,
PlatElderBreatheAnalysis
>
analysisMap
=
StreamUtil
.
toMapDep
(
platElderBreatheAnalysisService
.
list
(
Wrappers
.<
PlatElderBreatheAnalysis
>
lambdaQuery
()
.
in
(
PlatElderBreatheAnalysis:
:
getElderId
,
elderIdList
)
.
eq
(
PlatElderBreatheAnalysis:
:
getHappenDate
,
yesDate
)),
PlatElderBreatheAnalysis:
:
getElderId
);
SaasDiseaseEvaluateReport
saasDiseaseEvaluateReport
=
saasDiseaseEvaluateReportService
.
getOne
(
new
QueryWrapper
<
SaasDiseaseEvaluateReport
>().
lambda
().
orderByDesc
(
BaseEntity:
:
getCreateBy
)
.
last
(
"limit 1"
));
for
(
PlatElder
platElder
:
elderList
)
{
PlatElderBreatheAnalysis
platAnalysis
=
elderHeartAnalysis
(
platElder
,
breatheDayStatMap
,
yesStart
,
analysisModel
,
saasDiseaseModel
,
yesDate
,
analysisMap
,
saasDiseaseEvaluateReport
);
result
.
add
(
platAnalysis
);
}
return
result
;
}
public
Long
getDurationRange
(
String
startTime
,
String
endTime
)
{
...
...
@@ -472,7 +447,7 @@ public class PlatElderBreatheAnalysisServiceImpl extends ServiceImpl<PlatElderBr
// 获取当前日期,此处为了保证后续结果固定,注掉自动获取当前日期,指定固定日期
// LocalDate today = LocalDate.now();
LocalDateTime
source
=
LocalDateTime
.
parse
(
endTime
,
DEFAULT_FORMATTER
);
return
Duration
.
between
(
target
,
source
).
to
Minutes
()
;
return
Duration
.
between
(
target
,
source
).
to
Hours
()
+
1
;
}
public
static
String
formatLongTime
(
long
time
)
{
...
...
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderBreatheHeartRateRecordServiceImpl.java
0 → 100644
View file @
16949764
package
com
.
makeit
.
service
.
platform
.
elder
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.google.common.collect.Lists
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.platform.elder.PlatElder
;
import
com.makeit.entity.platform.elder.PlatElderBreatheHeartRateRecord
;
import
com.makeit.mapper.platform.elder.PlatElderBreatheHeartRateRecordMapper
;
import
com.makeit.module.iot.service.IotProductDeviceService
;
import
com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe
;
import
com.makeit.service.platform.elder.PlatElderBreatheHeartRateRecordService
;
import
com.makeit.service.platform.elder.PlatElderRealTimeService
;
import
com.makeit.service.platform.elder.PlatElderService
;
import
com.makeit.utils.data.convert.StreamUtil
;
import
com.makeit.utils.time.LocalDateTimeUtils
;
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
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.util.List
;
@Service
public
class
PlatElderBreatheHeartRateRecordServiceImpl
extends
ServiceImpl
<
PlatElderBreatheHeartRateRecordMapper
,
PlatElderBreatheHeartRateRecord
>
implements
PlatElderBreatheHeartRateRecordService
{
@Autowired
private
PlatElderService
platElderService
;
@Autowired
private
PlatElderRealTimeService
platElderRealTimeService
;
@Autowired
private
IotProductDeviceService
iotProductDeviceService
;
@Override
public
void
breatheHeartRateRecordTask
()
{
LocalDate
nowDate
=
LocalDate
.
now
();
LocalDate
yesDate
=
nowDate
.
minusDays
(
1
);
LocalDateTime
start
=
LocalDateTimeUtils
.
getDayStart
(
yesDate
);
LocalDateTime
end
=
LocalDateTimeUtils
.
getDayEnd
(
yesDate
);
List
<
PlatElder
>
elderList
=
platElderService
.
list
(
new
QueryWrapper
<
PlatElder
>().
lambda
()
.
isNotNull
(
PlatElder:
:
getBedId
));
if
(
CollectionUtils
.
isEmpty
(
elderList
))
{
return
;
}
List
<
PlatElderBreatheHeartRateRecord
>
list
=
Lists
.
newArrayList
();
for
(
PlatElder
e
:
elderList
)
{
PlatDevice
platDevice
=
platElderRealTimeService
.
getBreathDevice
(
e
.
getId
(),
null
);
if
(
platDevice
==
null
)
{
continue
;
}
List
<
DeviceInfoContentBreathe
>
breatheList
=
iotProductDeviceService
.
getDeviceLogByTimeRangeBreathe
(
platDevice
.
getOriDeviceId
(),
2
*
24
*
3600
,
start
,
end
);
List
<
PlatElderBreatheHeartRateRecord
>
data
=
StreamUtil
.
map
(
breatheList
,
b
->
{
PlatElderBreatheHeartRateRecord
record
=
new
PlatElderBreatheHeartRateRecord
();
record
.
setElderId
(
e
.
getId
());
record
.
setReportTime
(
b
.
getTimestamp
());
record
.
setHeartRate
(
b
.
getProperties
().
getHr
());
record
.
setRespiratoryRate
(
b
.
getProperties
().
getBr
());
record
.
setBodyMove
(
b
.
getProperties
().
getBodymove
());
record
.
setDeviceId
(
platDevice
.
getId
());
record
.
setIotDeviceId
(
platDevice
.
getOriDeviceId
());
record
.
setTenantId
(
e
.
getTenantId
());
return
record
;
});
list
.
addAll
(
data
);
}
saveBatch
(
list
);
}
@Override
public
List
<
PlatElderBreatheHeartRateRecord
>
list
(
String
elderId
,
String
iotDeviceId
,
String
tenantId
,
long
start
,
long
end
)
{
LambdaQueryWrapper
<
PlatElderBreatheHeartRateRecord
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
StringUtils
.
isNotBlank
(
elderId
),
PlatElderBreatheHeartRateRecord:
:
getElderId
,
elderId
);
queryWrapper
.
eq
(
StringUtils
.
isNotBlank
(
iotDeviceId
),
PlatElderBreatheHeartRateRecord:
:
getIotDeviceId
,
iotDeviceId
);
queryWrapper
.
eq
(
StringUtils
.
isNotBlank
(
tenantId
),
PlatElderBreatheHeartRateRecord:
:
getTenantId
,
tenantId
);
queryWrapper
.
ge
(
PlatElderBreatheHeartRateRecord:
:
getReportTime
,
start
);
queryWrapper
.
le
(
PlatElderBreatheHeartRateRecord:
:
getReportTime
,
end
);
return
list
(
queryWrapper
);
}
}
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderCoordinateRecordServiceImpl.java
View file @
16949764
...
...
@@ -67,18 +67,12 @@ public class PlatElderCoordinateRecordServiceImpl extends ServiceImpl<PlatElderC
return
;
}
PlatElderCoordinateRecord
platElderCoordinateRecord
;
PlatRegionSettingFix
platRegionSettingFix
;
List
<
PlatRegionSetting
>
platRegionSettingList
=
platRegionSettingService
.
list
(
new
QueryWrapper
<>());
Function
<
PlatRegionSetting
,
String
>
function
=
entity
->
entity
.
getRoomId
()
+
"-"
+
entity
.
getDeviceId
();
Map
<
String
,
PlatRegionSetting
>
platRegionSettingMap
=
StreamUtil
.
toMap
(
platRegionSettingList
,
function
);
for
(
PlatElder
platElder
:
elderList
)
{
List
<
PlatElderCoordinateVO
>
elderCoordinateVOList
=
platElderDayReportDayService
.
coordinateList
(
platElder
.
getId
(),
null
,
datStart
,
dayEnd
);
Set
<
String
>
deviceIdSet
=
Sets
.
newHashSet
();
List
<
PlatElderCoordinateRecord
>
list
=
Lists
.
newArrayList
();
for
(
PlatElderCoordinateVO
vo
:
elderCoordinateVOList
)
{
platElderCoordinateRecord
=
new
PlatElderCoordinateRecord
();
...
...
@@ -93,21 +87,15 @@ public class PlatElderCoordinateRecordServiceImpl extends ServiceImpl<PlatElderC
platElderCoordinateRecord
.
setElderId
(
platElder
.
getId
());
platElderCoordinateRecord
.
setTenantId
(
platElder
.
getTenantId
());
list
.
add
(
platElderCoordinateRecord
);
deviceIdSet
.
add
(
vo
.
getDeviceId
());
}
saveBatch
(
list
);
for
(
String
deviceId
:
deviceIdSet
)
{
PlatRegionSetting
platRegionSetting
=
platRegionSettingMap
.
get
(
platElder
.
getRoomId
()
+
"-"
+
deviceId
);
if
(
platRegionSetting
!=
null
)
{
platRegionSettingFix
=
new
PlatRegionSettingFix
();
BeanUtils
.
copyProperties
(
platRegionSetting
,
platRegionSettingFix
,
"id"
);
platRegionSettingFix
.
setElderId
(
platElder
.
getId
());
platRegionSettingFix
.
setHappenDate
(
yesDate
.
toString
());
platRegionSettingFixService
.
save
(
platRegionSettingFix
);
}
}
}
List
<
PlatRegionSettingFix
>
settingFixList
=
StreamUtil
.
map
(
platRegionSettingList
,
setting
->
{
PlatRegionSettingFix
settingFix
=
new
PlatRegionSettingFix
();
BeanUtils
.
copyProperties
(
setting
,
settingFix
,
"id"
);
settingFix
.
setHappenDate
(
yesDate
.
toString
());
return
settingFix
;
});
platRegionSettingFixService
.
saveBatch
(
settingFixList
);
}
}
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderDayReportDayServiceImpl.java
View file @
16949764
package
com
.
makeit
.
service
.
platform
.
elder
.
impl
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.google.common.collect.Lists
;
import
com.makeit.common.entity.BaseEntity
;
import
com.makeit.dto.platform.elder.PlatElderReportDTO
;
...
...
@@ -8,15 +13,19 @@ import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import
com.makeit.entity.platform.alarm.PlatDayDurationRecord
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.platform.elder.*
;
import
com.makeit.entity.saas.analysis.SaasSleepEvaluateStandardReport
;
import
com.makeit.enums.CommonEnum
;
import
com.makeit.enums.platform.alarm.PlatAlarmConfigEnum
;
import
com.makeit.enums.report.SleepTypeEnum
;
import
com.makeit.module.iot.service.IotProductDeviceService
;
import
com.makeit.module.iot.vo.
breathe.DeviceInfoContentBreathe
;
import
com.makeit.module.iot.vo.
analysis.EvaluateReportVO
;
import
com.makeit.module.iot.vo.fall.DeviceInfoContentFall
;
import
com.makeit.module.iot.vo.space.DeviceInfoContentSpace
;
import
com.makeit.service.platform.alarm.PlatAlarmRecordService
;
import
com.makeit.service.platform.alarm.PlatDayDurationRecordService
;
import
com.makeit.service.platform.elder.*
;
import
com.makeit.service.saas.SaasSleepEvaluateReportService
;
import
com.makeit.service.saas.SaasSleepEvaluateStandardReportService
;
import
com.makeit.utils.LongTimestampUtil
;
import
com.makeit.utils.data.convert.MathUtil
;
import
com.makeit.utils.data.convert.StreamUtil
;
...
...
@@ -26,14 +35,18 @@ import com.makeit.utils.time.LocalDateTimeUtils;
import
com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO
;
import
com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO
;
import
com.makeit.vo.platform.elder.report.day.*
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.Duration
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.ZoneOffset
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.stream.Collectors
;
@Service
...
...
@@ -62,7 +75,13 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
@Autowired
private
PlatElderService
platElderService
;
@Autowired
private
SaasSleepEvaluateReportService
sleepEvaluateReportService
;
@Autowired
private
PlatElderCoordinateRecordService
platElderCoordinateRecordService
;
@Autowired
private
PlatElderBreatheHeartRateRecordService
platElderBreatheHeartRateRecordService
;
@Autowired
private
SaasSleepEvaluateStandardReportService
saasSleepEvaluateStandardReportService
;
private
static
LocalDateTime
dayStartNow
(
LocalDate
now
)
{
return
LocalDateTimeUtils
.
getDayStart
(
now
);
...
...
@@ -84,35 +103,42 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
public
PlatElderSleepEvaluationVO
sleepEvaluation
(
PlatElderReportDTO
platElderIdDTO
)
{
LocalDate
now
=
Optional
.
ofNullable
(
platElderIdDTO
.
getNow
()).
orElse
(
LocalDate
.
now
());
LocalDateTime
start
=
dayStartNow
(
now
);
LocalDateTime
end
=
dayEndNow
(
now
);
PlatElderSleepEvaluationVO
platElderSleepEvaluationVO
=
new
PlatElderSleepEvaluationVO
();
String
nowString
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
).
format
(
now
);
String
elderId
=
platElderIdDTO
.
getElderId
();
if
(
StringUtils
.
isNotEmpty
(
platElderIdDTO
.
getDeviceId
()))
{
PlatElder
platElder
=
platElderService
.
getByDeviceId
(
platElderIdDTO
.
getDeviceId
(),
platElderIdDTO
.
getTenantId
());
if
(
platElder
!=
null
)
{
elderId
=
platElder
.
getId
();
}
}
String
deviceId
=
platElderIdDTO
.
getDeviceId
();
String
tenantId
=
platElderIdDTO
.
getTenantId
();
// if (StringUtils.isNotEmpty(deviceId)) {
// PlatElder platElder = platElderService.getByDeviceId(deviceId,platElderIdDTO.getTenantId());
// if (platElder != null) {
// elderId = platElder.getId();
// }
// }
PlatElderSleepAnalysis
platElderSleepAnalysis
=
platElderSleepAnalysisService
.
getOne
(
new
QueryWrapper
<
PlatElderSleepAnalysis
>().
lambda
()
.
eq
(
PlatElderSleepAnalysis:
:
getElderId
,
elderId
)
.
eq
(
StrUtil
.
isNotBlank
(
elderId
),
PlatElderSleepAnalysis:
:
getElderId
,
elderId
)
.
eq
(
PlatElderSleepAnalysis:
:
getHappenDate
,
nowString
)
.
orderByDesc
(
BaseEntity:
:
getCreateDate
)
.
eq
(
StrUtil
.
isNotBlank
(
deviceId
),
PlatElderSleepAnalysis:
:
getOriDeviceId
,
deviceId
)
.
eq
(
StrUtil
.
isNotBlank
(
tenantId
),
PlatElderSleepAnalysis:
:
getTenantId
,
tenantId
)
.
last
(
"limit 1"
)
);
if
(
platElderSleepAnalysis
==
null
)
{
return
platElderSleepEvaluationVO
;
}
// String sleepScore = platElderSleepAnalysis.getSleepScore();
platElderSleepEvaluationVO
.
setScore
(
Integer
.
valueOf
(
platElderSleepAnalysis
.
getSleepScore
()
+
""
));
Long
sleepScore
=
getSleepScore
(
platElderSleepAnalysis
);
EvaluateReportVO
evaluateReport
=
sleepEvaluateReportService
.
getByScore
(
sleepScore
);
platElderSleepEvaluationVO
.
setScore
(
Integer
.
valueOf
(
sleepScore
+
""
));
platElderSleepEvaluationVO
.
setResult
(
platElderSleepAnalysis
.
getSleepResult
());
platElderSleepEvaluationVO
.
setEvaluation
(
platElderSleepAnalysis
.
getSleep
Evaluate
());
platElderSleepEvaluationVO
.
setEvaluation
(
evaluateReport
.
get
Evaluate
());
platElderSleepEvaluationVO
.
setSleepDuration
(
Integer
.
valueOf
(
platElderSleepAnalysis
.
getSleepTime
()
+
""
));
platElderSleepEvaluationVO
.
setRestDuration
(
Integer
.
valueOf
(
platElderSleepAnalysis
.
getRestTime
()
+
""
));
...
...
@@ -123,6 +149,53 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
}
private
Long
getSleepScore
(
PlatElderSleepAnalysis
platElderSleepAnalysis
)
{
SaasSleepEvaluateStandardReport
evaluateStandardReport
=
saasSleepEvaluateStandardReportService
.
getOne
(
new
QueryWrapper
<
SaasSleepEvaluateStandardReport
>().
lambda
().
orderByDesc
(
BaseEntity:
:
getCreateDate
)
.
last
(
"limit 1"
));
List
<
PlatElderSleep
>
sleepList
=
platElderSleepService
.
list
(
Wrappers
.<
PlatElderSleep
>
lambdaQuery
()
.
eq
(
PlatElderSleep:
:
getHappenDate
,
platElderSleepAnalysis
.
getHappenDate
())
.
eq
(
PlatElderSleep:
:
getElderId
,
platElderSleepAnalysis
.
getElderId
()));
String
baseScore
=
platElderSleepService
.
calculateScores
(
Long
.
parseLong
(
platElderSleepAnalysis
.
getSleepTime
()),
Long
.
parseLong
(
platElderSleepAnalysis
.
getRestTime
()),
0
,
0
,
0
,
evaluateStandardReport
);
if
(
CollUtil
.
isEmpty
(
sleepList
)){
return
Long
.
parseLong
(
baseScore
);
}
AtomicReference
<
Long
>
score
=
new
AtomicReference
<>(
0L
);
sleepList
.
forEach
(
s
->
{
List
<
PlatSleepRangeVO
>
sleepRecord
=
s
.
getSleepRecord
();
sleepRecord
.
forEach
(
l
->
{
LocalDateTime
start
=
LocalDateTime
.
parse
(
l
.
getStartTime
(),
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm"
));
LocalDateTime
end
=
LocalDateTime
.
parse
(
l
.
getEndTime
(),
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm"
));
long
minutes
=
Duration
.
between
(
start
,
end
).
toMinutes
();
SleepTypeEnum
sleepType
=
SleepTypeEnum
.
getSleepType
(
l
.
getSleepType
());
if
(
sleepType
==
null
)
{
return
;
}
String
sleepScore
=
"0"
;
switch
(
sleepType
)
{
case
SLEEP_LIGHTNESS:
sleepScore
=
platElderSleepService
.
calculateScores
(
0
,
0
,
0
,
0
,
minutes
,
evaluateStandardReport
);
break
;
case
SLEEP_DEEP:
sleepScore
=
platElderSleepService
.
calculateScores
(
0
,
0
,
minutes
,
0
,
0
,
evaluateStandardReport
);
break
;
default
:
}
String
finalSleepScore
=
sleepScore
;
score
.
updateAndGet
(
v
->
v
+
Long
.
parseLong
(
finalSleepScore
));
});
});
Long
result
=
Long
.
parseLong
(
baseScore
)
+
score
.
get
();
return
result
.
compareTo
(
100L
)
>
0
?
100L
:
result
;
}
@Override
public
List
<
PlatElderSleepDiagramVO
>
sleepDiagram
(
PlatElderReportDTO
platElderIdDTO
)
{
LocalDate
now
=
Optional
.
ofNullable
(
platElderIdDTO
.
getNow
()).
orElse
(
LocalDate
.
now
());
...
...
@@ -176,15 +249,20 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
String
nowString
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
).
format
(
now
);
String
elderId
=
platElderIdDTO
.
getElderId
();
if
(
StringUtils
.
isNotEmpty
(
platElderIdDTO
.
getDeviceId
()))
{
PlatElder
platElder
=
platElderService
.
getByDeviceId
(
platElderIdDTO
.
getDeviceId
(),
platElderIdDTO
.
getTenantId
());
if
(
platElder
!=
null
)
{
elderId
=
platElder
.
getId
();
}
}
String
deviceId
=
platElderIdDTO
.
getDeviceId
();
String
tenantId
=
platElderIdDTO
.
getTenantId
();
// if (StringUtils.isNotEmpty(deviceId)) {
// PlatElder platElder = platElderService.getByDeviceId(deviceId, platElderIdDTO.getTenantId());
// if (platElder != null) {
// elderId = platElder.getId();
// }
// }
PlatElderBreatheAnalysis
platElderSleepAnalysis
=
platElderBreatheAnalysisService
.
getOne
(
new
QueryWrapper
<
PlatElderBreatheAnalysis
>().
lambda
()
.
eq
(
PlatElderBreatheAnalysis:
:
getElderId
,
elderId
)
.
eq
(
StrUtil
.
isNotBlank
(
elderId
),
PlatElderBreatheAnalysis:
:
getElderId
,
elderId
)
.
eq
(
StrUtil
.
isNotBlank
(
deviceId
),
PlatElderBreatheAnalysis:
:
getOriDeviceId
,
deviceId
)
.
eq
(
StrUtil
.
isNotBlank
(
tenantId
),
PlatElderBreatheAnalysis:
:
getTenantId
,
tenantId
)
.
eq
(
PlatElderBreatheAnalysis:
:
getHappenDate
,
nowString
)
.
last
(
"limit 1"
)
);
if
(
platElderSleepAnalysis
==
null
)
{
...
...
@@ -258,25 +336,21 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
@Override
public
List
<
PlatElderRealTimeHeartRespiratoryVO
>
heartRespiratory
(
PlatElderReportDTO
platElderIdDTO
)
{
PlatDevice
platDevice
=
platElderRealTimeService
.
getBreathDevice
(
platElderIdDTO
.
getElderId
(),
platElderIdDTO
.
getDeviceId
());
if
(
platDevice
==
null
)
{
return
new
ArrayList
<>(
10
);
}
LocalDate
now
=
Optional
.
ofNullable
(
platElderIdDTO
.
getNow
()).
orElse
(
LocalDate
.
now
());
LocalDateTime
start
=
dayStartNow
(
now
);
LocalDateTime
end
=
dayEndNow
(
now
);
long
reportTimeStart
=
LocalDateTimeUtils
.
getMilliSecond
(
start
);
long
reportTimeEnd
=
LocalDateTimeUtils
.
getMilliSecond
(
end
);
List
<
DeviceInfoContentBreathe
>
breatheList
=
iotProductDeviceService
.
getDeviceLogByTimeRangeBreathe
(
platDevice
.
getOriDeviceId
(),
2
*
24
*
3600
,
start
,
end
);
return
StreamUtil
.
map
(
breatheL
ist
,
e
->
{
List
<
PlatElderBreatheHeartRateRecord
>
list
=
platElderBreatheHeartRateRecordService
.
list
(
platElderIdDTO
.
getElderId
(),
platElderIdDTO
.
getDeviceId
(),
platElderIdDTO
.
getTenantId
(),
reportTimeStart
,
reportTimeEnd
);
return
StreamUtil
.
map
(
l
ist
,
e
->
{
PlatElderRealTimeHeartRespiratoryVO
vo
=
new
PlatElderRealTimeHeartRespiratoryVO
();
vo
.
setTime
(
LongTimestampUtil
.
toLocalDateTime
(
e
.
get
Timestamp
()));
vo
.
setHeartRate
(
e
.
get
Properties
().
getHr
());
vo
.
setRespiratoryRate
(
e
.
get
Properties
().
getBr
());
vo
.
setTime
(
LongTimestampUtil
.
toLocalDateTime
(
e
.
get
ReportTime
()));
vo
.
setHeartRate
(
e
.
get
HeartRate
());
vo
.
setRespiratoryRate
(
e
.
get
RespiratoryRate
());
return
vo
;
});
...
...
@@ -373,6 +447,25 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
}
@Override
public
List
<
PlatElderCoordinateVO
>
coordinateList
(
String
elderId
,
long
start
,
long
end
)
{
LambdaQueryWrapper
<
PlatElderCoordinateRecord
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
PlatElderCoordinateRecord:
:
getElderId
,
elderId
);
queryWrapper
.
ge
(
PlatElderCoordinateRecord:
:
getReportTime
,
start
);
queryWrapper
.
le
(
PlatElderCoordinateRecord:
:
getReportTime
,
end
);
List
<
PlatElderCoordinateRecord
>
list
=
platElderCoordinateRecordService
.
list
(
queryWrapper
);
return
list
.
stream
().
map
(
r
->
{
PlatElderCoordinateVO
platElderCoordinateVO
=
new
PlatElderCoordinateVO
();
BeanUtils
.
copyProperties
(
r
,
platElderCoordinateVO
);
platElderCoordinateVO
.
setTimestamp
(
r
.
getReportTime
());
platElderCoordinateVO
.
setOriDeviceId
(
r
.
getIotDeviceId
());
if
(
StringUtils
.
isNotBlank
(
r
.
getTrack
()))
{
platElderCoordinateVO
.
setTrack
(
JSON
.
parseArray
(
r
.
getTrack
(),
Integer
.
class
));
}
return
platElderCoordinateVO
;
}).
collect
(
Collectors
.
toList
());
}
@Override
public
List
<
PlatElderCoordinateVO
>
coordinateList
(
String
elderId
,
String
deviceId
,
LocalDateTime
start
,
LocalDateTime
end
)
{
List
<
PlatDevice
>
platDeviceListSpace
=
platElderRealTimeService
.
getSpaceDevice
(
elderId
,
deviceId
);
...
...
@@ -387,7 +480,6 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
platDeviceListSpace
.
forEach
(
e
->
{
List
<
DeviceInfoContentSpace
>
spaceList
=
iotProductDeviceService
.
getDeviceLogByTimeRangeSpace
(
e
.
getOriDeviceId
(),
24
*
3600
,
start
,
end
);
voList
.
addAll
(
StreamUtil
.
map
(
spaceList
,
i
->
{
PlatElderCoordinateVO
vo
=
new
PlatElderCoordinateVO
();
...
...
@@ -409,7 +501,6 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
platDeviceListFall
.
forEach
(
e
->
{
List
<
DeviceInfoContentFall
>
fallList
=
iotProductDeviceService
.
getDeviceLogByTimeRangeFall
(
e
.
getOriDeviceId
(),
2
*
24
*
3600
,
start
,
end
);
voList
.
addAll
(
StreamUtil
.
map
(
fallList
,
i
->
{
PlatElderCoordinateVO
vo
=
new
PlatElderCoordinateVO
();
...
...
@@ -438,7 +529,10 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
LocalDateTime
start
=
dayStartNow
(
now
);
LocalDateTime
end
=
dayEndNow
(
now
);
return
coordinateList
(
platElderIdDTO
.
getElderId
(),
platElderIdDTO
.
getDeviceId
(),
start
,
end
);
long
reportTimeStart
=
start
.
toInstant
(
ZoneOffset
.
ofHours
(
8
)).
toEpochMilli
();
long
reportTimeEnd
=
end
.
toInstant
(
ZoneOffset
.
ofHours
(
8
)).
toEpochMilli
();
return
coordinateList
(
platElderIdDTO
.
getElderId
(),
reportTimeStart
,
reportTimeEnd
);
}
...
...
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderDayReportWeekServiceImpl.java
View file @
16949764
package
com
.
makeit
.
service
.
platform
.
elder
.
impl
;
import
cn.hutool.core.util.StrUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.makeit.common.entity.BaseBusEntity
;
...
...
@@ -29,10 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
java.math.BigDecimal
;
import
java.time.DayOfWeek
;
import
java.time.Duration
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.*
;
import
java.time.format.DateTimeFormatter
;
import
java.time.temporal.TemporalAdjusters
;
import
java.util.ArrayList
;
...
...
@@ -174,15 +172,19 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
String
elderId
=
platElderIdDTO
.
getElderId
();
if
(
StringUtils
.
isNotEmpty
(
platElderIdDTO
.
getDeviceId
()))
{
PlatElder
platElder
=
platElderService
.
getByDeviceId
(
platElderIdDTO
.
getDeviceId
(),
platElderIdDTO
.
getTenantId
());
if
(
platElder
!=
null
)
{
elderId
=
platElder
.
getId
();
}
}
String
deviceId
=
platElderIdDTO
.
getDeviceId
();
String
tenantId
=
platElderIdDTO
.
getTenantId
();
// if (StringUtils.isNotEmpty(deviceId)) {
// PlatElder platElder = platElderService.getByDeviceId(deviceId, platElderIdDTO.getTenantId());
// if (platElder != null) {
// elderId = platElder.getId();
// }
// }
List
<
PlatElderSleepAnalysis
>
sleepAnalysisList
=
platElderSleepAnalysisService
.
list
(
new
QueryWrapper
<
PlatElderSleepAnalysis
>().
lambda
()
.
eq
(
PlatElderSleepAnalysis:
:
getElderId
,
elderId
)
.
eq
(
StrUtil
.
isNotBlank
(
elderId
),
PlatElderSleepAnalysis:
:
getElderId
,
elderId
)
.
ge
(
PlatElderSleepAnalysis:
:
getHappenDate
,
dateTimeFormatter
.
format
(
weekStartDate
))
.
eq
(
StrUtil
.
isNotBlank
(
deviceId
),
PlatElderSleepAnalysis:
:
getOriDeviceId
,
deviceId
)
.
eq
(
StrUtil
.
isNotBlank
(
tenantId
),
PlatElderSleepAnalysis:
:
getTenantId
,
tenantId
)
.
le
(
PlatElderSleepAnalysis:
:
getHappenDate
,
dateTimeFormatter
.
format
(
weekEndDate
))
);
...
...
@@ -330,15 +332,19 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
String
elderId
=
platElderIdDTO
.
getElderId
();
if
(
StringUtils
.
isNotEmpty
(
platElderIdDTO
.
getDeviceId
()))
{
PlatElder
platElder
=
platElderService
.
getByDeviceId
(
platElderIdDTO
.
getDeviceId
(),
platElderIdDTO
.
getTenantId
());
if
(
platElder
!=
null
)
{
elderId
=
platElder
.
getId
();
}
}
String
deviceId
=
platElderIdDTO
.
getDeviceId
();
String
tenantId
=
platElderIdDTO
.
getTenantId
();
// if (StringUtils.isNotEmpty(deviceId)) {
// PlatElder platElder = platElderService.getByDeviceId(deviceId, platElderIdDTO.getTenantId());
// if (platElder != null) {
// elderId = platElder.getId();
// }
// }
List
<
PlatElderBreatheAnalysis
>
breatheAnalyses
=
platElderBreatheAnalysisService
.
list
(
new
QueryWrapper
<
PlatElderBreatheAnalysis
>().
lambda
()
.
eq
(
PlatElderBreatheAnalysis:
:
getElderId
,
elderId
)
.
eq
(
StrUtil
.
isNotBlank
(
elderId
),
PlatElderBreatheAnalysis:
:
getElderId
,
elderId
)
.
ge
(
PlatElderBreatheAnalysis:
:
getHappenDate
,
dateTimeFormatter
.
format
(
weekStartDate
))
.
eq
(
StrUtil
.
isNotBlank
(
deviceId
),
PlatElderBreatheAnalysis:
:
getOriDeviceId
,
deviceId
)
.
eq
(
StrUtil
.
isNotBlank
(
tenantId
),
PlatElderBreatheAnalysis:
:
getTenantId
,
tenantId
)
.
le
(
PlatElderBreatheAnalysis:
:
getHappenDate
,
dateTimeFormatter
.
format
(
weekEndDate
))
);
...
...
@@ -477,7 +483,11 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
@Override
public
List
<
PlatElderCoordinateVO
>
coordinateList
(
PlatElderReportDTO
platElderIdDTO
)
{
return
platElderDayReportDayService
.
coordinateList
(
platElderIdDTO
.
getElderId
(),
platElderIdDTO
.
getDeviceId
(),
weekStartDateTime
(
platElderIdDTO
.
getStartTime
()),
weekEndDateTime
(
platElderIdDTO
.
getEndTime
()));
LocalDateTime
start
=
weekStartDateTime
(
platElderIdDTO
.
getStartTime
());
LocalDateTime
end
=
weekEndDateTime
(
platElderIdDTO
.
getEndTime
());
long
reportTimeStart
=
start
.
toInstant
(
ZoneOffset
.
ofHours
(
8
)).
toEpochMilli
();
long
reportTimeEnd
=
end
.
toInstant
(
ZoneOffset
.
ofHours
(
8
)).
toEpochMilli
();
return
platElderDayReportDayService
.
coordinateList
(
platElderIdDTO
.
getElderId
(),
reportTimeStart
,
reportTimeEnd
);
}
@Override
...
...
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderRealTimeServiceImpl.java
View file @
16949764
...
...
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.google.common.collect.Lists
;
import
com.makeit.common.entity.BaseBusEntity
;
import
com.makeit.common.entity.BaseEntity
;
import
com.makeit.dto.platform.elder.PlatElderIdDTO
;
import
com.makeit.entity.platform.device.PlatDevice
;
...
...
@@ -519,5 +520,52 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
}
@Override
public
PlatElderRealTimeHeartRespiratoryVO
deviceHealthReport
(
PlatElderIdDTO
dto
)
{
if
(
StringUtils
.
isEmpty
(
dto
.
getOrgId
()))
{
throw
new
RuntimeException
(
"机构id不能为空"
);
}
if
(
StringUtils
.
isEmpty
(
dto
.
getDeviceId
()))
{
throw
new
RuntimeException
(
"设备id不能为空"
);
}
PlatDevice
platDevice
=
platDeviceService
.
getOne
(
new
QueryWrapper
<
PlatDevice
>().
lambda
()
.
eq
(
PlatDevice:
:
getOriDeviceId
,
dto
.
getDeviceId
())
.
eq
(
BaseBusEntity:
:
getTenantId
,
dto
.
getOrgId
())
.
last
(
"limit 1"
));
PlatElderRealTimeHeartRespiratoryVO
vo
=
new
PlatElderRealTimeHeartRespiratoryVO
();
vo
.
setTime
(
LocalDateTime
.
now
());
if
(
platDevice
==
null
)
{
return
vo
;
}
vo
.
setDeviceId
(
platDevice
.
getOriDeviceId
());
String
result
=
redisTemplate
.
opsForValue
().
get
(
DEVICE_BR_DATA
+
platDevice
.
getOriDeviceId
());
log
.
info
(
"实时获取设备呼吸数据:{}"
,
result
);
if
(
result
!=
null
)
{
JSONObject
jsonObject
=
JSON
.
parseObject
(
result
);
if
(
jsonObject
!=
null
)
{
String
person
=
jsonObject
.
getString
(
"person"
);
log
.
info
(
"当前人员人员状态:{}"
,
person
);
vo
.
setTime
(
LocalDateTime
.
now
());
if
(
StringUtils
.
equals
(
person
,
"0"
))
{
vo
.
setHeartRate
(
0
);
vo
.
setRespiratoryRate
(
0
);
vo
.
setBody
(
0
);
vo
.
setStatus
(
"0"
);
vo
.
setPersonState
(
0
);
vo
.
setPoint
(
Lists
.
newArrayList
());
}
else
{
vo
.
setHeartRate
(
Integer
.
valueOf
(
jsonObject
.
getString
(
"hr"
)));
vo
.
setRespiratoryRate
(
Integer
.
valueOf
(
jsonObject
.
getString
(
"br"
)));
vo
.
setBody
(
Integer
.
valueOf
(
jsonObject
.
getString
(
"bodymove"
)));
vo
.
setPersonState
(
Integer
.
valueOf
(
jsonObject
.
getString
(
"personState"
)));
Object
point
=
jsonObject
.
get
(
"point"
);
vo
.
setPoint
((
point
==
null
?
Lists
.
newArrayList
()
:
(
List
<
Integer
>)
point
));
vo
.
setStatus
(
person
);
}
}
return
vo
;
}
return
vo
;
}
}
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderSleepServiceImpl.java
View file @
16949764
...
...
@@ -40,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional;
import
java.time.*
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -87,14 +88,18 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@TenantIdIgnore
public
void
elderSleepSleepAnalysisTask
(
)
{
public
List
<
PlatElderSleepAnalysis
>
elderSleepSleepAnalysisTask
(
Integer
month
,
Integer
day
)
{
List
<
String
>
dayHourRangeList
=
getLastDayHourRange
();
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
new
Date
());
calendar
.
add
(
Calendar
.
DAY_OF_MONTH
,
-
1
);
Date
previousDate
=
calendar
.
getTime
();
String
currentDate
=
DateUtil
.
format
(
previousDate
,
DatePattern
.
NORM_DATE_PATTERN
);
List
<
String
>
dayHourRangeList
=
getLastDayHourRange
(
month
,
day
);
// Calendar calendar = Calendar.getInstance();
// calendar.setTime(new Date());
// calendar.add(Calendar.DAY_OF_MONTH, -1);
// Date previousDate = calendar.getTime();
// String currentDate = DateUtil.format(previousDate, DatePattern.NORM_DATE_PATTERN);
String
currentDate
=
LocalDate
.
now
().
minusDays
(
1
).
toString
();
if
(
month
!=
null
&&
day
!=
null
){
currentDate
=
LocalDate
.
of
(
2023
,
month
,
day
).
minusDays
(
1
).
toString
();
}
SaasSleepAnalysisModel
analysisModel
=
saasSleepAnalysisModelService
.
getOne
(
new
QueryWrapper
<
SaasSleepAnalysisModel
>().
lambda
()
.
orderByDesc
(
BaseEntity:
:
getCreateBy
)
...
...
@@ -125,7 +130,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
int
sleepModerateActionThreshold
=
Integer
.
parseInt
(
analysisModel
.
getSleepModerateActionThreshold
());
int
sleepModerateActionTimeBegin
=
Integer
.
parseInt
(
analysisModel
.
getSleepModerateActionTimeBegin
());
List
<
PlatElderSleepAnalysis
>
result
=
new
ArrayList
<>();
for
(
PlatRoomBedDevice
platRoomBedDevice
:
platRoomBedDeviceList
)
{
TreeMap
<
String
,
AnalysisVO
>
totalMap
=
new
TreeMap
<>();
...
...
@@ -552,7 +557,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
SaasSleepEvaluateStandardReport
evaluateStandardReport
=
saasSleepEvaluateStandardReportService
.
getOne
(
new
QueryWrapper
<
SaasSleepEvaluateStandardReport
>().
lambda
()
.
orderByDesc
(
BaseEntity:
:
getCreate
By
)
.
orderByDesc
(
BaseEntity:
:
getCreate
Date
)
.
last
(
"limit 1"
));
// 算出每一段睡觉的不同睡眠类型的时间段
...
...
@@ -689,9 +694,6 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
long
totalScore
=
sleepScore
+
deepScore
+
lightScore
-
soberScore
;
saasSleepEvaluateStandardReportVO
.
setTotalScore
(
totalScore
);
EvaluateReportVO
sleepReport
=
saasSleepEvaluateReportService
.
getByScore
(
totalScore
);
// 记录长者一天睡眠的记录
long
daySleepTime
=
0
;
long
dayRestTime
=
0
;
...
...
@@ -708,6 +710,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
}
}
platElderSleepService
.
saveBatch
(
elderSleepList
);
String
score
=
calculateScores
(
daySleepTime
,
dayRestTime
,
deepTime
,
soberTime
,
lightTime
,
evaluateStandardReport
);
EvaluateReportVO
sleepReport
=
saasSleepEvaluateReportService
.
getByScore
(
Long
.
parseLong
(
score
));
// 长者一天的睡眠分析
PlatElderSleepAnalysis
elderSleepAnalysis
=
new
PlatElderSleepAnalysis
();
...
...
@@ -715,15 +719,58 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleepAnalysis
.
setActionCount
(
totalActionCount
);
elderSleepAnalysis
.
setTurnedCount
(
totalTurnedCount
);
elderSleepAnalysis
.
setHappenDate
(
currentDate
);
elderSleepAnalysis
.
setSleepScore
(
String
.
valueOf
(
totalScore
)
);
elderSleepAnalysis
.
setSleepScore
(
score
);
elderSleepAnalysis
.
setSleepTime
(
String
.
valueOf
(
daySleepTime
));
elderSleepAnalysis
.
setRestTime
(
String
.
valueOf
(
dayRestTime
));
elderSleepAnalysis
.
setSleepResult
(
sleepReport
.
getResult
());
elderSleepAnalysis
.
setTenantId
(
tenantId
);
elderSleepAnalysis
.
setSleepEvaluate
(
sleepReport
.
getEvaluate
());
elderSleepAnalysis
.
setOriDeviceId
(
platDevice
.
getOriDeviceId
());
result
.
add
(
elderSleepAnalysis
);
platElderSleepAnalysisService
.
save
(
elderSleepAnalysis
);
}
return
result
;
}
@Override
public
String
calculateScores
(
long
daySleepTime
,
long
dayRestTime
,
long
deepTime
,
long
soberTime
,
long
lightTime
,
SaasSleepEvaluateStandardReport
evaluateStandardReport
)
{
List
<
SleepConfigVO
>
sleepDeepConfigList
=
JSON
.
parseArray
(
evaluateStandardReport
.
getSleepDeepConfig
(),
SleepConfigVO
.
class
);
List
<
SleepConfigVO
>
soberConfigList
=
JSON
.
parseArray
(
evaluateStandardReport
.
getSoberConfig
(),
SleepConfigVO
.
class
);
SleepConfigVO
lightnessConfig
=
JSON
.
parseObject
(
evaluateStandardReport
.
getSleepLightnessConfig
(),
SleepConfigVO
.
class
);
List
<
SleepConfigVO
>
sleepTimeConfigList
=
JSON
.
parseArray
(
evaluateStandardReport
.
getSleepTime
(),
SleepConfigVO
.
class
);
long
deepHour
=
deepTime
/
60
;
long
soberHour
=
soberTime
/
60
;
long
lightHour
=
lightTime
/
60
;
long
sleepHour
=
(
daySleepTime
+
dayRestTime
)
/
60
;
AtomicReference
<
Integer
>
sleepScore
=
new
AtomicReference
<>(
0
);
AtomicReference
<
Integer
>
deepScore
=
new
AtomicReference
<>(
0
);
AtomicReference
<
Integer
>
soberScore
=
new
AtomicReference
<>(
0
);
int
lightScore
=
0
;
sleepTimeConfigList
.
forEach
(
s
->
{
int
sleepKey
=
(
int
)
Math
.
floor
(
sleepHour
);
if
(
Integer
.
parseInt
(
s
.
getHour
())
<=
sleepKey
)
{
sleepScore
.
set
(
Integer
.
parseInt
(
s
.
getScore
()));
}
});
sleepDeepConfigList
.
forEach
(
s
->
{
int
sleepKey
=
(
int
)
Math
.
floor
(
deepHour
);
if
(
Integer
.
parseInt
(
s
.
getHour
())
<=
sleepKey
)
{
deepScore
.
set
(
Integer
.
parseInt
(
s
.
getScore
()));
}
});
soberConfigList
.
forEach
(
s
->
{
int
sleepKey
=
(
int
)
Math
.
floor
(
soberHour
);
if
(
Integer
.
parseInt
(
s
.
getHour
())
<=
sleepKey
)
{
soberScore
.
set
(
Integer
.
parseInt
(
s
.
getScore
()));
}
});
if
(
Integer
.
parseInt
(
lightnessConfig
.
getHour
())
<=
lightHour
)
{
int
multiplier
=
(
int
)
lightHour
/
Integer
.
parseInt
(
lightnessConfig
.
getHour
());
lightScore
=
Integer
.
parseInt
(
lightnessConfig
.
getScore
())
*
multiplier
;
}
Integer
totalScore
=
sleepScore
.
get
()
+
deepScore
.
get
()
+
lightScore
-
soberScore
.
get
();
return
String
.
valueOf
(
totalScore
);
}
...
...
@@ -740,9 +787,12 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return
DEFAULT_FORMATTER
.
format
(
LocalDateTime
.
ofInstant
(
Instant
.
ofEpochMilli
(
time
),
ZoneId
.
systemDefault
()));
}
public
List
<
String
>
getLastDayHourRange
()
{
public
List
<
String
>
getLastDayHourRange
(
Integer
month
,
Integer
day
)
{
int
count
=
24
;
LocalDateTime
localDateTime
=
LocalDateTime
.
now
();
if
(
month
!=
null
&&
day
!=
null
)
{
localDateTime
=
LocalDateTime
.
of
(
LocalDate
.
of
(
2023
,
month
,
day
),
LocalTime
.
now
());
}
List
<
String
>
list
=
Lists
.
newArrayList
();
String
startTime
;
String
endTime
;
...
...
@@ -758,14 +808,6 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
return
time
.
atTime
(
0
,
0
,
0
);
}
public
static
void
main
(
String
[]
args
)
{
PlatElderSleepServiceImpl
platElderSleepService1
=
new
PlatElderSleepServiceImpl
();
List
<
String
>
lastDayHourRange
=
platElderSleepService1
.
getLastDayHourRange
();
System
.
out
.
println
();
}
@Override
public
void
test1
()
{
int
days
=
30
;
...
...
server-service/src/main/java/com/makeit/service/platform/space/PlatRegionSettingFixService.java
View file @
16949764
package
com
.
makeit
.
service
.
platform
.
space
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.makeit.dto.platform.space.PlatRegionSettingDTO
;
import
com.makeit.dto.platform.space.PlatRegionSettingFixQueryDTO
;
import
com.makeit.entity.platform.space.PlatRegionSettingFix
;
import
java.util.List
;
/**
* <p>
* 区域设置固化 服务类
...
...
@@ -13,4 +17,6 @@ import com.makeit.entity.platform.space.PlatRegionSettingFix;
*/
public
interface
PlatRegionSettingFixService
extends
IService
<
PlatRegionSettingFix
>
{
List
<
PlatRegionSettingDTO
>
list
(
PlatRegionSettingFixQueryDTO
dto
);
}
server-service/src/main/java/com/makeit/service/platform/space/impl/PlatRegionSettingFixServiceImpl.java
View file @
16949764
package
com
.
makeit
.
service
.
platform
.
space
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.google.common.collect.Lists
;
import
com.makeit.dto.platform.space.PlatRegionSettingDTO
;
import
com.makeit.dto.platform.space.PlatRegionSettingFixQueryDTO
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.platform.space.PlatRegionSettingFix
;
import
com.makeit.mapper.platform.space.PlatRegionSettingFixMapper
;
import
com.makeit.service.platform.device.PlatDeviceService
;
import
com.makeit.service.platform.space.PlatRegionSettingFixService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.time.format.DateTimeFormatter
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.function.Function
;
import
java.util.function.Predicate
;
import
java.util.stream.Collectors
;
/**
* <p>
* 区域设置固化 服务实现类
...
...
@@ -18,4 +34,42 @@ import org.springframework.stereotype.Service;
@Service
public
class
PlatRegionSettingFixServiceImpl
extends
ServiceImpl
<
PlatRegionSettingFixMapper
,
PlatRegionSettingFix
>
implements
PlatRegionSettingFixService
{
@Autowired
private
PlatDeviceService
platDeviceService
;
@Override
public
List
<
PlatRegionSettingDTO
>
list
(
PlatRegionSettingFixQueryDTO
dto
)
{
if
(
StringUtils
.
isAnyBlank
(
dto
.
getReportType
(),
dto
.
getRoomId
()))
{
return
Lists
.
newArrayList
();
}
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
LambdaQueryWrapper
<
PlatRegionSettingFix
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
queryWrapper
.
eq
(
PlatRegionSettingFix:
:
getRoomId
,
dto
.
getRoomId
());
if
(
"0"
.
equals
(
dto
.
getReportType
()))
{
queryWrapper
.
eq
(
PlatRegionSettingFix:
:
getHappenDate
,
dateTimeFormatter
.
format
(
dto
.
getNow
()));
}
else
{
queryWrapper
.
ge
(
PlatRegionSettingFix:
:
getHappenDate
,
dateTimeFormatter
.
format
(
dto
.
getStartTime
()));
queryWrapper
.
le
(
PlatRegionSettingFix:
:
getHappenDate
,
dateTimeFormatter
.
format
(
dto
.
getEndTime
()));
}
queryWrapper
.
orderByDesc
(
PlatRegionSettingFix:
:
getCreateDate
);
List
<
PlatRegionSettingFix
>
list
=
this
.
list
(
queryWrapper
);
list
=
list
.
stream
().
filter
(
distinctByKey
(
PlatRegionSettingFix:
:
getDeviceId
)).
collect
(
Collectors
.
toList
());
List
<
String
>
deviceIds
=
list
.
stream
().
map
(
PlatRegionSettingFix:
:
getDeviceId
).
collect
(
Collectors
.
toList
());
Map
<
String
,
PlatDevice
>
deviceMap
=
platDeviceService
.
listByIds
(
deviceIds
).
stream
().
collect
(
Collectors
.
toMap
(
PlatDevice:
:
getId
,
Function
.
identity
()));
return
list
.
stream
().
map
(
p
->
{
PlatRegionSettingDTO
platRegionSettingDTO
=
new
PlatRegionSettingDTO
();
BeanUtils
.
copyProperties
(
p
,
platRegionSettingDTO
);
PlatDevice
device
=
deviceMap
.
getOrDefault
(
p
.
getDeviceId
(),
new
PlatDevice
());
platRegionSettingDTO
.
setOriDeviceId
(
device
.
getOriDeviceId
());
platRegionSettingDTO
.
setDeviceName
(
device
.
getName
());
platRegionSettingDTO
.
setCategory
(
device
.
getCategory
());
return
platRegionSettingDTO
;
}).
collect
(
Collectors
.
toList
());
}
private
static
<
T
>
Predicate
<
T
>
distinctByKey
(
Function
<?
super
T
,
Object
>
keyExtractor
)
{
Map
<
Object
,
Boolean
>
seen
=
new
ConcurrentHashMap
<>();
return
t
->
seen
.
putIfAbsent
(
keyExtractor
.
apply
(
t
),
Boolean
.
TRUE
)
==
null
;
}
}
server-service/src/main/java/com/makeit/task/PlatElderReportTask.java
View file @
16949764
package
com
.
makeit
.
task
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.service.platform.elder.PlatElderBreatheAnalysisService
;
import
com.makeit.service.platform.elder.PlatElderBreatheDayStatService
;
import
com.makeit.service.platform.elder.PlatElderCoordinateRecordService
;
import
com.makeit.service.platform.elder.PlatElderSleepService
;
import
com.makeit.service.platform.elder.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
...
...
@@ -24,6 +21,8 @@ public class PlatElderReportTask {
private
PlatElderBreatheAnalysisService
platElderBreatheAnalysisService
;
@Autowired
private
PlatElderCoordinateRecordService
platElderCoordinateRecordService
;
@Autowired
private
PlatElderBreatheHeartRateRecordService
platElderBreatheHeartRateRecordService
;
...
...
@@ -56,13 +55,24 @@ public class PlatElderReportTask {
}
/**
* 生成长者呼吸心率
*/
@Scheduled
(
cron
=
"0 30 2 * * ?"
)
@TenantIdIgnore
public
void
breatheHeartRateRecordTask
()
{
log
.
info
(
"开始生成长者呼吸心率"
);
platElderBreatheHeartRateRecordService
.
breatheHeartRateRecordTask
();
log
.
info
(
"生成长者呼吸心率结束"
);
}
/**
* 长者睡眠分析
*/
@Scheduled
(
cron
=
"0 0 8 * * ?"
)
@TenantIdIgnore
public
void
elderSleepSleepAnalysisTask
()
{
log
.
info
(
"开始定时分析长者睡眠质量"
);
platElderSleepService
.
elderSleepSleepAnalysisTask
();
platElderSleepService
.
elderSleepSleepAnalysisTask
(
null
,
null
);
log
.
info
(
"定时分析长者睡眠质量结束"
);
}
}
server-service/src/main/java/com/makeit/vo/platform/alarm/PlatAlarmExternalRecordVO.java
0 → 100644
View file @
16949764
package
com
.
makeit
.
vo
.
platform
.
alarm
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.makeit.common.dto.BaseTenantDTO
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
java.time.LocalDateTime
;
/**
* <p>
* 告警记录
* </p>
*
* @author eugene young
* @since 2023-09-04
*/
@Data
@ApiModel
(
value
=
"PlatAlarmRecord对象"
,
description
=
"告警记录"
)
public
class
PlatAlarmExternalRecordVO
{
/**
* 关联告警配置
*/
private
String
alarmId
;
@ApiModelProperty
(
value
=
"告警类型 数据字典 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常,5 离床异常"
)
private
String
alarmType
;
@ApiModelProperty
(
value
=
"告警时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
alarmDate
;
@ApiModelProperty
(
value
=
"状态 0 待处理 1 已处理"
)
private
String
status
;
@ApiModelProperty
(
value
=
"通知家属状态 0 未通知 1 已通知"
)
private
String
noticeStatus
;
@ApiModelProperty
(
value
=
"告警内容"
)
private
String
content
;
@ApiModelProperty
(
value
=
"处理人"
)
private
String
dealUser
;
@ApiModelProperty
(
value
=
"处理时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
dealDate
;
@ApiModelProperty
(
value
=
"所属组织id"
)
private
String
orgId
;
@ApiModelProperty
(
value
=
"告警时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
createDate
;
@ApiModelProperty
(
value
=
"是否误报 1 误报 0 没有误报"
)
private
String
misinformationFlag
;
private
String
deviceId
;
private
PlatDevice
device
;
}
server-service/src/main/java/com/makeit/vo/platform/elder/realtime/PlatElderRealTimeHeartRespiratoryVO.java
View file @
16949764
...
...
@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import
lombok.Data
;
import
java.time.LocalDateTime
;
import
java.util.List
;
@Data
public
class
PlatElderRealTimeHeartRespiratoryVO
{
...
...
@@ -23,6 +24,10 @@ public class PlatElderRealTimeHeartRespiratoryVO {
@ApiModelProperty
(
"状态"
)
private
String
status
;
@ApiModelProperty
(
"人员状态"
)
private
Integer
personState
;
@ApiModelProperty
(
"呼吸波形"
)
private
List
<
Integer
>
point
;
@ApiModelProperty
(
"设备id"
)
private
String
deviceId
;
...
...
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
View file @
16949764
...
...
@@ -27,6 +27,7 @@ import com.makeit.service.saas.PlatTenantService;
import
com.makeit.service.saas.SaasSleepAnalysisModelService
;
import
com.makeit.utils.AlarmConfigCacheUtil
;
import
com.makeit.utils.DeviceCacheUtil
;
import
com.makeit.utils.old.StringUtils
;
import
com.makeit.utils.redis.RedisUtil
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.eclipse.paho.client.mqttv3.IMqttDeliveryToken
;
...
...
@@ -195,7 +196,7 @@ public class PushCallback implements MqttCallback {
String
messageType
=
device
.
getMessageType
();
//更新设备状态
platDeviceService
.
updateDeviceStatus
(
messageType
,
deviceId
,
""
);
if
(
org
.
apache
.
commons
.
lang3
.
StringUtils
.
equalsAnyIgnoreCase
(
messageType
,
DeviceState
.
online
.
getValue
()))
{
if
(
StringUtils
.
equalsAnyIgnoreCase
(
messageType
,
DeviceState
.
online
.
getValue
()))
{
return
;
}
for
(
HeaderInfo
.
Bind
binding
:
bindings
)
{
...
...
@@ -209,13 +210,13 @@ public class PushCallback implements MqttCallback {
//iot设备id
PlatDevice
platDevice
=
deviceCacheUtil
.
get
(
deviceId
+
":"
+
iot_tenantId
);
if
(
platDevice
==
null
)
{
logger
.
error
(
"获取设备信息异常,设备iot-id,iot_tenantId:"
+
deviceId
+
","
+
iot_tenantId
);
//
logger.error("获取设备信息异常,设备iot-id,iot_tenantId:" + deviceId+","+iot_tenantId);
continue
;
}
List
<
PlatAlarmConfig
>
deviceAlarmConfigList
=
alarmConfigCacheUtil
.
getDeviceAlarmConfigMap
(
platDevice
);
deviceAlarmConfigList
.
removeIf
(
Objects:
:
isNull
);
if
(
CollectionUtils
.
isEmpty
(
deviceAlarmConfigList
))
{
logger
.
error
(
"该设备没有告警配置,设备iot-id,iot_tenantId:"
+
deviceId
+
","
+
iot_tenantId
);
//
logger.error("该设备没有告警配置,设备iot-id,iot_tenantId:" + deviceId+","+iot_tenantId);
continue
;
}
...
...
@@ -238,6 +239,9 @@ public class PushCallback implements MqttCallback {
platAlarmCheckDTO
.
setProperties
(
properties
);
//设备状态
platAlarmCheckDTO
.
setMessageType
(
messageType
);
if
(
properties
!=
null
)
{
platAlarmCheckDTO
.
setDeviceTime
(
properties
.
getString
(
"alarmId"
));
}
alarm
.
checkConfig
(
platAlarmCheckDTO
);
}
}
...
...
server-web/src/main/resources/logback-spring-prod.xml
View file @
16949764
...
...
@@ -59,7 +59,7 @@
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<FileNamePattern>
${logback.logdir}/${logback.appname}/info/log_info.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<maxHistory>
3
0
</maxHistory>
<maxHistory>
1
0
</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"
>
<maxFileSize>
20MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
...
...
@@ -82,7 +82,7 @@
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<FileNamePattern>
${logback.logdir}/${logback.appname}/error/log_error.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<maxHistory>
3
0
</maxHistory>
<maxHistory>
1
0
</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"
>
<maxFileSize>
20MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
...
...
@@ -104,7 +104,7 @@
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<FileNamePattern>
${logback.logdir}/${logback.appname}/warn/log_warn.%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<maxHistory>
3
0
</maxHistory>
<maxHistory>
1
0
</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"
>
<maxFileSize>
20MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
...
...
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