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
549ae016
authored
Dec 20, 2023
by
huangjy
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
feat:openApi第三方接口上报和告警
parent
1e94d1b7
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
535 additions
and
7 deletions
db/上线后sql/update.sql
server-common/src/main/java/com/makeit/module/admin/dto/plat/PlatTenantDTOVO.java
server-common/src/main/java/com/makeit/module/admin/vo/plat/PlatTenantVO.java
server-module/src/main/java/com/makeit/module/controller/elder/PlatElderSleepController.java
server-service/src/main/java/com/makeit/entity/saas/PlatTenant.java
server-service/src/main/java/com/makeit/external/TenantLogoEnum.java
server-service/src/main/java/com/makeit/external/huineng/HuiNengService.java
server-service/src/main/java/com/makeit/external/huineng/HuinengBodyReportDTO.java
server-service/src/main/java/com/makeit/dto/external/HuinengReportDTO.java → server-service/src/main/java/com/makeit/external/huineng/HuinengHealthReportDTO.java
server-service/src/main/java/com/makeit/external/huineng/HuinengResultVO.java
server-service/src/main/java/com/makeit/external/strategy/HuiNengStrategy.java
server-service/src/main/java/com/makeit/external/strategy/OpenApiBaseStrategy.java
server-service/src/main/java/com/makeit/external/strategy/OpenApiBaseStrategyFactory.java
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/FallAlarm.java
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
server-web/src/test/java/com/makeit/iotapi/IotDeviceInfoContentFall.java
db/上线后sql/update.sql
View file @
549ae016
ALTER
TABLE
`plat_device_other`
ALTER
TABLE
`plat_device_other`
...
@@ -85,3 +85,9 @@ CREATE TABLE `saas_pid_manage` (
...
@@ -85,3 +85,9 @@ CREATE TABLE `saas_pid_manage` (
ALTER
TABLE
`plat_alarm_record`
ALTER
TABLE
`plat_alarm_record`
ADD
COLUMN
`wechat_read_flag`
char
(
1
)
DEFAULT
0
COMMENT
'小程序端是否读取 0未读 1已读'
AFTER
`misinformation_flag`
;
ADD
COLUMN
`wechat_read_flag`
char
(
1
)
DEFAULT
0
COMMENT
'小程序端是否读取 0未读 1已读'
AFTER
`misinformation_flag`
;
-- 12.15 end
ALTER
TABLE
`plat_tenant`
ADD
COLUMN
`open_api_url`
varchar
(
128
)
COMMENT
'第三方接口url'
AFTER
`secret`
;
\ No newline at end of file
server-common/src/main/java/com/makeit/module/admin/dto/plat/PlatTenantDTOVO.java
View file @
549ae016
...
@@ -65,4 +65,6 @@ public class PlatTenantDTOVO extends BaseIdDTO {
...
@@ -65,4 +65,6 @@ public class PlatTenantDTOVO extends BaseIdDTO {
private
String
appid
;
private
String
appid
;
@ApiModelProperty
(
value
=
"secret"
)
@ApiModelProperty
(
value
=
"secret"
)
private
String
secret
;
private
String
secret
;
@ApiModelProperty
(
value
=
"openApiUrl"
)
private
String
openApiUrl
;
}
}
server-common/src/main/java/com/makeit/module/admin/vo/plat/PlatTenantVO.java
View file @
549ae016
...
@@ -35,6 +35,8 @@ public class PlatTenantVO extends BaseIdDTO implements Serializable {
...
@@ -35,6 +35,8 @@ public class PlatTenantVO extends BaseIdDTO implements Serializable {
@ApiModelProperty
(
value
=
"租户管理员用户名"
)
@ApiModelProperty
(
value
=
"租户管理员用户名"
)
private
String
userName
;
private
String
userName
;
@ApiModelProperty
(
value
=
"openApiUrl"
)
private
String
openApiUrl
;
/**
/**
* 创建时间
* 创建时间
...
...
server-module/src/main/java/com/makeit/module/controller/elder/PlatElderSleepController.java
View file @
549ae016
package
com
.
makeit
.
module
.
controller
.
elder
;
package
com
.
makeit
.
module
.
controller
.
elder
;
import
com.alibaba.fastjson.JSONObject
;
import
com.makeit.common.response.ApiResponseEntity
;
import
com.makeit.common.response.ApiResponseEntity
;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO
;
import
com.makeit.dto.wechat.device.PlatDeviceAttrWechatDTO
;
import
com.makeit.external.huineng.HuiNengService
;
import
com.makeit.global.annotation.AuthIgnore
;
import
com.makeit.global.annotation.AuthIgnore
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.service.platform.device.PlatDeviceService
;
import
com.makeit.service.platform.device.PlatDeviceService
;
import
com.makeit.service.platform.elder.*
;
import
com.makeit.service.platform.elder.*
;
import
com.makeit.task.PlatElderReportTask
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -42,6 +43,8 @@ public class PlatElderSleepController {
...
@@ -42,6 +43,8 @@ public class PlatElderSleepController {
private
PlatElderBreatheAnalysisService
platElderBreatheAnalysisService
;
private
PlatElderBreatheAnalysisService
platElderBreatheAnalysisService
;
@Autowired
@Autowired
private
PlatElderCoordinateRecordService
platElderCoordinateRecordService
;
private
PlatElderCoordinateRecordService
platElderCoordinateRecordService
;
@Autowired
private
HuiNengService
huiNengService
;
...
@@ -103,5 +106,34 @@ public class PlatElderSleepController {
...
@@ -103,5 +106,34 @@ public class PlatElderSleepController {
return
ApiResponseUtils
.
success
(
platDeviceService
.
readDeviceProperties
(
dto
));
return
ApiResponseUtils
.
success
(
platDeviceService
.
readDeviceProperties
(
dto
));
}
}
@ApiOperation
(
"读设备属性"
)
@PostMapping
(
"healthReport"
)
@AuthIgnore
@TenantIdIgnore
public
ApiResponseEntity
<?>
healthReport
()
{
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"hr"
,
"80"
);
jsonObject
.
put
(
"br"
,
"30"
);
jsonObject
.
put
(
"person"
,
"1"
);
jsonObject
.
put
(
"personState"
,
"2"
);
jsonObject
.
put
(
"distance"
,
"100"
);
jsonObject
.
put
(
"bodymove"
,
"30"
);
huiNengService
.
healthReport
(
"1712384736845950978"
,
"1712376790484275200"
,
jsonObject
);
return
ApiResponseUtils
.
success
();
}
@ApiOperation
(
"读设备属性"
)
@PostMapping
(
"bodyAlarm"
)
@AuthIgnore
@TenantIdIgnore
public
ApiResponseEntity
<?>
bodyAlarm
()
{
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"person"
,
"1"
);
jsonObject
.
put
(
"personState"
,
"1"
);
huiNengService
.
bodyAlarm
(
"1712384736845950978"
,
"219A04X1856F6D8"
,
jsonObject
);
return
ApiResponseUtils
.
success
();
}
}
}
server-service/src/main/java/com/makeit/entity/saas/PlatTenant.java
View file @
549ae016
...
@@ -65,6 +65,8 @@ public class PlatTenant extends BaseEntity {
...
@@ -65,6 +65,8 @@ public class PlatTenant extends BaseEntity {
private
String
url
;
private
String
url
;
private
String
appid
;
private
String
appid
;
private
String
secret
;
private
String
secret
;
private
String
openApiUrl
;
}
}
\ No newline at end of file
server-service/src/main/java/com/makeit/external/TenantLogoEnum.java
0 → 100644
View file @
549ae016
package
com
.
makeit
.
external
;
public
enum
TenantLogoEnum
{
HNGZ
(
"汇能感知"
,
"hngz"
);
private
String
tenantName
;
private
String
value
;
public
String
getTenantName
()
{
return
tenantName
;
}
public
String
getValue
()
{
return
value
;
}
TenantLogoEnum
(
String
tenantName
,
String
value
)
{
this
.
tenantName
=
tenantName
;
this
.
value
=
value
;
}
}
server-service/src/main/java/com/makeit/external/huineng/HuiNengService.java
0 → 100644
View file @
549ae016
package
com
.
makeit
.
external
.
huineng
;
import
cn.hutool.http.HttpUtil
;
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.entity.platform.device.PlatDevice
;
import
com.makeit.entity.saas.PlatTenant
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.service.platform.device.PlatDeviceService
;
import
com.makeit.service.saas.PlatTenantService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.List
;
@Component
@Slf4j
public
class
HuiNengService
{
@Autowired
private
PlatTenantService
platTenantService
;
@Autowired
private
PlatDeviceService
platDeviceService
;
@TenantIdIgnore
public
void
healthReport
(
String
tenantId
,
String
deviceId
,
JSONObject
jsonObject
)
{
PlatTenant
platTenant
=
platTenantService
.
getById
(
tenantId
);
if
(
platTenant
==
null
)
{
return
;
}
PlatDevice
platDevice
=
platDeviceService
.
getOne
(
new
QueryWrapper
<
PlatDevice
>().
lambda
()
.
eq
(
PlatDevice:
:
getOriDeviceId
,
deviceId
)
.
eq
(
BaseBusEntity:
:
getTenantId
,
tenantId
));
if
(
platDevice
==
null
)
{
return
;
}
HuinengHealthReportDTO
dto
=
new
HuinengHealthReportDTO
();
dto
.
setId
(
platDevice
.
getOriDeviceId
());
dto
.
setDeviceType
(
"健康监测设备"
);
dto
.
setDtype
(
"实时上报"
);
dto
.
setUid
(
platDevice
.
getOriDeviceId
());
dto
.
setPk
(
""
);
dto
.
setDid
(
platDevice
.
getOriDeviceId
());
dto
.
setSite
(
""
);
dto
.
setLatitude
(
""
);
dto
.
setLongitude
(
""
);
dto
.
setTimestamp
(
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
LocalDateTime
.
now
()));
dto
.
setCompanyName
(
platTenant
.
getName
());
List
<
HuinengHealthReportDTO
.
ReportInfo
>
data
=
Lists
.
newArrayList
();
HuinengHealthReportDTO
.
ReportInfo
reportInfo
=
new
HuinengHealthReportDTO
.
ReportInfo
();
reportInfo
.
setECG
(
""
);
reportInfo
.
setBloodSugar
(
""
);
reportInfo
.
setBloodOxygen
(
""
);
reportInfo
.
setBloodPressure
(
""
);
reportInfo
.
setTemperature
(
""
);
reportInfo
.
setSleepQuality
(
""
);
reportInfo
.
setMedicationStatus
(
""
);
reportInfo
.
setAlarmReason
(
""
);
reportInfo
.
setAlarmType
(
""
);
reportInfo
.
setAlarmTime
(
""
);
reportInfo
.
setEventName
(
"设备上报"
);
reportInfo
.
setEventType
(
"1"
);
reportInfo
.
setHeartRate
(
jsonObject
.
getString
(
"hr"
));
reportInfo
.
setInBedState
(
jsonObject
.
getString
(
"person"
));
reportInfo
.
setRespiratoryRate
(
jsonObject
.
getString
(
"br"
));
String
bodymove
=
jsonObject
.
getString
(
"bodymove"
);
reportInfo
.
setTurn
(
bodymove
);
reportInfo
.
setTurnState
(
bodymove
.
equals
(
"0"
)
?
"0"
:
"1"
);
data
.
add
(
reportInfo
);
dto
.
setData
(
data
);
String
reqJson
=
JSON
.
toJSONString
(
dto
);
String
url
=
platTenant
.
getOpenApiUrl
()
+
"/admin-api/v1/HealthMonitoringEquipment/TimingdataPush?token=aHVpbmVuZ2dhbnpoaV9wdXNoc2V0"
;
log
.
info
(
"请求url:{},参数:{}"
,
url
,
reqJson
);
String
result
=
HttpUtil
.
createPost
(
url
)
.
body
(
reqJson
,
"application/json"
)
.
execute
().
body
();
HuinengResultVO
responseMessage
=
JSON
.
parseObject
(
result
,
HuinengResultVO
.
class
);
log
.
info
(
"接口:{},返回信息:{}"
,
url
,
JSON
.
toJSONString
(
responseMessage
));
}
@TenantIdIgnore
public
void
bodyAlarm
(
String
tenantId
,
String
deviceId
,
JSONObject
jsonObject
)
{
PlatTenant
platTenant
=
platTenantService
.
getById
(
tenantId
);
if
(
platTenant
==
null
)
{
return
;
}
PlatDevice
platDevice
=
platDeviceService
.
getOne
(
new
QueryWrapper
<
PlatDevice
>().
lambda
()
.
eq
(
PlatDevice:
:
getOriDeviceId
,
deviceId
)
.
eq
(
BaseBusEntity:
:
getTenantId
,
tenantId
));
if
(
platDevice
==
null
)
{
return
;
}
HuinengBodyReportDTO
dto
=
new
HuinengBodyReportDTO
();
dto
.
setId
(
platDevice
.
getOriDeviceId
());
dto
.
setDeviceType
(
"人体感应探测器\""
);
dto
.
setDtype
(
"报警上报"
);
dto
.
setUid
(
platDevice
.
getOriDeviceId
());
dto
.
setPk
(
""
);
dto
.
setDid
(
platDevice
.
getOriDeviceId
());
dto
.
setSite
(
""
);
dto
.
setLatitude
(
""
);
dto
.
setLongitude
(
""
);
String
currentDate
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
LocalDateTime
.
now
());
dto
.
setTimestamp
(
currentDate
);
dto
.
setCompanyName
(
platTenant
.
getName
());
List
<
HuinengBodyReportDTO
.
AlarmInfo
>
data
=
Lists
.
newArrayList
();
HuinengBodyReportDTO
.
AlarmInfo
alarmInfo
=
new
HuinengBodyReportDTO
.
AlarmInfo
();
alarmInfo
.
setQuantityElectricity
(
""
);
alarmInfo
.
setSignalStrength
(
""
);
alarmInfo
.
setPerson
(
jsonObject
.
getString
(
"person"
));
alarmInfo
.
setAlarmReason
(
"跌倒触发报警"
);
alarmInfo
.
setAlarmType
(
"3"
);
alarmInfo
.
setAlarmTime
(
currentDate
);
alarmInfo
.
setEventName
(
"设备告警"
);
alarmInfo
.
setEventType
(
"1"
);
data
.
add
(
alarmInfo
);
dto
.
setData
(
data
);
String
reqJson
=
JSON
.
toJSONString
(
dto
);
String
url
=
platTenant
.
getOpenApiUrl
()
+
"/admin-api/v1/HumanBodyInductionDetector/TimingdataPush?token=aHVpbmVuZ2dhbnpoaV9wdXNoc2V0"
;
log
.
info
(
"请求url:{},参数:{}"
,
url
,
reqJson
);
String
result
=
HttpUtil
.
createPost
(
url
)
.
body
(
JSON
.
toJSONString
(
dto
),
"application/json"
)
.
execute
().
body
();
HuinengResultVO
responseMessage
=
JSON
.
parseObject
(
result
,
HuinengResultVO
.
class
);
log
.
info
(
"接口:{},返回信息:{}"
,
url
,
JSON
.
toJSONString
(
responseMessage
));
}
}
server-service/src/main/java/com/makeit/external/huineng/HuinengBodyReportDTO.java
0 → 100644
View file @
549ae016
package
com
.
makeit
.
external
.
huineng
;
import
lombok.Data
;
import
java.util.List
;
/**
* 人体感应探测器数据接口
*/
@Data
public
class
HuinengBodyReportDTO
{
private
String
id
;
private
String
pk
;
private
String
did
;
private
String
deviceType
;
private
String
deviceModel
;
private
String
uid
;
private
String
dtype
;
private
String
site
;
private
String
longitude
;
private
String
latitude
;
private
String
companyName
;
private
String
timestamp
;
private
List
<
AlarmInfo
>
data
;
@Data
public
static
class
AlarmInfo
{
private
String
signalStrength
;
private
String
quantityElectricity
;
private
String
person
;
private
String
alarmReason
;
private
String
alarmType
;
private
String
eventName
;
private
String
eventType
;
private
String
alarmTime
;
}
}
server-service/src/main/java/com/makeit/
dto/external/Huineng
ReportDTO.java
→
server-service/src/main/java/com/makeit/
external/huineng/HuinengHealth
ReportDTO.java
View file @
549ae016
package
com
.
makeit
.
dto
.
external
;
package
com
.
makeit
.
external
.
huineng
;
import
lombok.Data
;
import
lombok.Data
;
import
java.util.List
;
import
java.util.List
;
/**
* 健康监测设备
*/
@Data
@Data
public
class
HuinengReportDTO
{
public
class
Huineng
Health
ReportDTO
{
private
String
id
;
private
String
id
;
private
String
pk
;
private
String
pk
;
...
@@ -23,7 +26,7 @@ public class HuinengReportDTO {
...
@@ -23,7 +26,7 @@ public class HuinengReportDTO {
private
List
<
ReportInfo
>
data
;
private
List
<
ReportInfo
>
data
;
@Data
@Data
static
class
ReportInfo
{
public
static
class
ReportInfo
{
private
String
signalStrength
;
private
String
signalStrength
;
private
String
quantityElectricity
;
private
String
quantityElectricity
;
private
String
ECG
;
private
String
ECG
;
...
@@ -41,6 +44,7 @@ public class HuinengReportDTO {
...
@@ -41,6 +44,7 @@ public class HuinengReportDTO {
private
String
alarmReason
;
private
String
alarmReason
;
private
String
alarmType
;
private
String
alarmType
;
private
String
eventName
;
private
String
eventName
;
private
String
eventType
;
private
String
alarmTime
;
private
String
alarmTime
;
}
}
...
...
server-service/src/main/java/com/makeit/external/huineng/HuinengResultVO.java
0 → 100644
View file @
549ae016
package
com
.
makeit
.
external
.
huineng
;
import
lombok.Data
;
@Data
public
class
HuinengResultVO
{
private
Integer
code
;
private
String
msg
;
private
boolean
data
;
}
server-service/src/main/java/com/makeit/external/strategy/HuiNengStrategy.java
0 → 100644
View file @
549ae016
package
com
.
makeit
.
external
.
strategy
;
import
cn.hutool.http.HttpUtil
;
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.entity.platform.device.PlatDevice
;
import
com.makeit.entity.saas.PlatTenant
;
import
com.makeit.external.TenantLogoEnum
;
import
com.makeit.external.huineng.HuinengBodyReportDTO
;
import
com.makeit.external.huineng.HuinengHealthReportDTO
;
import
com.makeit.external.huineng.HuinengResultVO
;
import
com.makeit.service.platform.device.PlatDeviceService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.List
;
@Service
@Slf4j
public
class
HuiNengStrategy
implements
OpenApiBaseStrategy
{
@Autowired
private
PlatDeviceService
platDeviceService
;
@Override
public
void
report
(
PlatTenant
platTenant
,
String
deviceId
,
JSONObject
jsonObject
)
{
log
.
info
(
"{},开始执行上报"
,
platTenant
.
getName
());
PlatDevice
platDevice
=
platDeviceService
.
getOne
(
new
QueryWrapper
<
PlatDevice
>().
lambda
()
.
eq
(
PlatDevice:
:
getOriDeviceId
,
deviceId
)
.
eq
(
BaseBusEntity:
:
getTenantId
,
platTenant
.
getId
()));
if
(
platDevice
==
null
)
{
return
;
}
if
(
StringUtils
.
isEmpty
(
platTenant
.
getUrl
()))
{
log
.
info
(
"当前租户为配置openapi地址"
);
return
;
}
HuinengHealthReportDTO
dto
=
new
HuinengHealthReportDTO
();
dto
.
setId
(
platDevice
.
getOriDeviceId
());
dto
.
setDeviceType
(
"健康监测设备"
);
dto
.
setDtype
(
"实时上报"
);
dto
.
setUid
(
platDevice
.
getOriDeviceId
());
dto
.
setPk
(
""
);
dto
.
setDid
(
platDevice
.
getOriDeviceId
());
dto
.
setSite
(
""
);
dto
.
setLatitude
(
""
);
dto
.
setLongitude
(
""
);
dto
.
setTimestamp
(
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
LocalDateTime
.
now
()));
dto
.
setCompanyName
(
platTenant
.
getName
());
List
<
HuinengHealthReportDTO
.
ReportInfo
>
data
=
Lists
.
newArrayList
();
HuinengHealthReportDTO
.
ReportInfo
reportInfo
=
new
HuinengHealthReportDTO
.
ReportInfo
();
reportInfo
.
setECG
(
""
);
reportInfo
.
setBloodSugar
(
""
);
reportInfo
.
setBloodOxygen
(
""
);
reportInfo
.
setBloodPressure
(
""
);
reportInfo
.
setTemperature
(
""
);
reportInfo
.
setSleepQuality
(
""
);
reportInfo
.
setMedicationStatus
(
""
);
reportInfo
.
setAlarmReason
(
""
);
reportInfo
.
setAlarmType
(
""
);
reportInfo
.
setAlarmTime
(
""
);
reportInfo
.
setEventName
(
"设备上报"
);
reportInfo
.
setEventType
(
"1"
);
reportInfo
.
setHeartRate
(
jsonObject
.
getString
(
"hr"
));
reportInfo
.
setInBedState
(
jsonObject
.
getString
(
"person"
));
reportInfo
.
setRespiratoryRate
(
jsonObject
.
getString
(
"br"
));
String
bodymove
=
jsonObject
.
getString
(
"bodymove"
);
reportInfo
.
setTurn
(
bodymove
);
reportInfo
.
setTurnState
(
bodymove
.
equals
(
"0"
)
?
"0"
:
"1"
);
data
.
add
(
reportInfo
);
dto
.
setData
(
data
);
String
reqJson
=
JSON
.
toJSONString
(
dto
);
String
url
=
platTenant
.
getOpenApiUrl
()
+
"/admin-api/v1/HealthMonitoringEquipment/TimingdataPush?token=aHVpbmVuZ2dhbnpoaV9wdXNoc2V0"
;
log
.
info
(
"请求url:{},参数:{}"
,
url
,
reqJson
);
String
result
=
HttpUtil
.
createPost
(
url
)
.
body
(
reqJson
,
"application/json"
)
.
execute
().
body
();
HuinengResultVO
responseMessage
=
JSON
.
parseObject
(
result
,
HuinengResultVO
.
class
);
log
.
info
(
"接口:{},返回信息:{}"
,
url
,
JSON
.
toJSONString
(
responseMessage
));
}
@Override
public
void
alarm
(
PlatTenant
platTenant
,
String
deviceId
,
JSONObject
jsonObject
)
{
log
.
info
(
"{},开始执行告警"
,
platTenant
.
getName
());
PlatDevice
platDevice
=
platDeviceService
.
getOne
(
new
QueryWrapper
<
PlatDevice
>().
lambda
()
.
eq
(
PlatDevice:
:
getOriDeviceId
,
deviceId
)
.
eq
(
BaseBusEntity:
:
getTenantId
,
platTenant
.
getId
()));
if
(
platDevice
==
null
)
{
return
;
}
if
(
StringUtils
.
isEmpty
(
platTenant
.
getUrl
()))
{
log
.
info
(
"当前租户为配置openapi地址"
);
return
;
}
HuinengBodyReportDTO
dto
=
new
HuinengBodyReportDTO
();
dto
.
setId
(
platDevice
.
getOriDeviceId
());
dto
.
setDeviceType
(
"人体感应探测器\""
);
dto
.
setDtype
(
"报警上报"
);
dto
.
setUid
(
platDevice
.
getOriDeviceId
());
dto
.
setPk
(
""
);
dto
.
setDid
(
platDevice
.
getOriDeviceId
());
dto
.
setSite
(
""
);
dto
.
setLatitude
(
""
);
dto
.
setLongitude
(
""
);
String
currentDate
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
LocalDateTime
.
now
());
dto
.
setTimestamp
(
currentDate
);
dto
.
setCompanyName
(
platTenant
.
getName
());
List
<
HuinengBodyReportDTO
.
AlarmInfo
>
data
=
Lists
.
newArrayList
();
HuinengBodyReportDTO
.
AlarmInfo
alarmInfo
=
new
HuinengBodyReportDTO
.
AlarmInfo
();
alarmInfo
.
setQuantityElectricity
(
""
);
alarmInfo
.
setSignalStrength
(
""
);
alarmInfo
.
setPerson
(
jsonObject
.
getString
(
"person"
));
alarmInfo
.
setAlarmReason
(
"跌倒触发报警"
);
alarmInfo
.
setAlarmType
(
"3"
);
alarmInfo
.
setAlarmTime
(
currentDate
);
alarmInfo
.
setEventName
(
"设备告警"
);
alarmInfo
.
setEventType
(
"1"
);
data
.
add
(
alarmInfo
);
dto
.
setData
(
data
);
String
reqJson
=
JSON
.
toJSONString
(
dto
);
String
url
=
platTenant
.
getOpenApiUrl
()
+
"/admin-api/v1/HumanBodyInductionDetector/TimingdataPush?token=aHVpbmVuZ2dhbnpoaV9wdXNoc2V0"
;
log
.
info
(
"请求url:{},参数:{}"
,
url
,
reqJson
);
String
result
=
HttpUtil
.
createPost
(
url
)
.
body
(
JSON
.
toJSONString
(
dto
),
"application/json"
)
.
execute
().
body
();
HuinengResultVO
responseMessage
=
JSON
.
parseObject
(
result
,
HuinengResultVO
.
class
);
log
.
info
(
"接口:{},返回信息:{}"
,
url
,
JSON
.
toJSONString
(
responseMessage
));
}
@Override
public
String
getTenantLogo
()
{
return
TenantLogoEnum
.
HNGZ
.
getValue
();
}
}
server-service/src/main/java/com/makeit/external/strategy/OpenApiBaseStrategy.java
0 → 100644
View file @
549ae016
package
com
.
makeit
.
external
.
strategy
;
import
com.alibaba.fastjson.JSONObject
;
import
com.makeit.entity.saas.PlatTenant
;
public
interface
OpenApiBaseStrategy
{
void
report
(
PlatTenant
platTenant
,
String
deviceId
,
JSONObject
jsonObject
);
void
alarm
(
PlatTenant
platTenant
,
String
deviceId
,
JSONObject
jsonObject
);
String
getTenantLogo
();
}
server-service/src/main/java/com/makeit/external/strategy/OpenApiBaseStrategyFactory.java
0 → 100644
View file @
549ae016
package
com
.
makeit
.
external
.
strategy
;
import
com.google.common.collect.Maps
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
@Component
public
class
OpenApiBaseStrategyFactory
implements
InitializingBean
,
ApplicationContextAware
{
private
static
final
Map
<
String
,
OpenApiBaseStrategy
>
HANDLER_MAP
=
Maps
.
newConcurrentMap
();
private
ApplicationContext
appContext
;
public
OpenApiBaseStrategy
getHandler
(
String
logo
)
{
return
HANDLER_MAP
.
get
(
logo
);
}
@Override
public
void
afterPropertiesSet
()
{
appContext
.
getBeansOfType
(
OpenApiBaseStrategy
.
class
)
.
values
()
.
forEach
(
handler
->
HANDLER_MAP
.
put
(
handler
.
getTenantLogo
(),
handler
));
}
@Override
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
appContext
=
applicationContext
;
}
}
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/FallAlarm.java
View file @
549ae016
...
@@ -11,11 +11,15 @@ import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
...
@@ -11,11 +11,15 @@ import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.platform.elder.PlatElder
;
import
com.makeit.entity.platform.elder.PlatElder
;
import
com.makeit.entity.platform.space.PlatRoom
;
import
com.makeit.entity.platform.space.PlatRoom
;
import
com.makeit.entity.saas.PlatTenant
;
import
com.makeit.enums.CommonEnum
;
import
com.makeit.enums.CommonEnum
;
import
com.makeit.enums.platform.alarm.PlatAlarmConfigEnum
;
import
com.makeit.enums.platform.alarm.PlatAlarmConfigEnum
;
import
com.makeit.enums.redis.RedisConst
;
import
com.makeit.enums.redis.RedisConst
;
import
com.makeit.external.strategy.OpenApiBaseStrategy
;
import
com.makeit.external.strategy.OpenApiBaseStrategyFactory
;
import
com.makeit.service.platform.alarm.PlatAlarmRecordService
;
import
com.makeit.service.platform.alarm.PlatAlarmRecordService
;
import
com.makeit.service.platform.alarm.PlatDayDurationRecordService
;
import
com.makeit.service.platform.alarm.PlatDayDurationRecordService
;
import
com.makeit.service.saas.PlatTenantService
;
import
com.makeit.utils.AlarmConfigCacheUtil
;
import
com.makeit.utils.AlarmConfigCacheUtil
;
import
com.makeit.utils.AlarmRedisDTO
;
import
com.makeit.utils.AlarmRedisDTO
;
import
com.makeit.utils.DayDurationUtil
;
import
com.makeit.utils.DayDurationUtil
;
...
@@ -47,7 +51,10 @@ public class FallAlarm implements IAlarm {
...
@@ -47,7 +51,10 @@ public class FallAlarm implements IAlarm {
@Autowired
@Autowired
private
DayDurationUtil
dayDurationUtil
;
private
DayDurationUtil
dayDurationUtil
;
@Autowired
private
OpenApiBaseStrategyFactory
openApiBaseStrategyFactory
;
@Autowired
private
PlatTenantService
platTenantService
;
private
final
PlatAlarmConfigEnum
.
AlarmTypeEnum
alarmTypeEnum
=
PlatAlarmConfigEnum
.
AlarmTypeEnum
.
FALL
;
private
final
PlatAlarmConfigEnum
.
AlarmTypeEnum
alarmTypeEnum
=
PlatAlarmConfigEnum
.
AlarmTypeEnum
.
FALL
;
@Override
@Override
...
@@ -90,6 +97,21 @@ public class FallAlarm implements IAlarm {
...
@@ -90,6 +97,21 @@ public class FallAlarm implements IAlarm {
alarmRedisDTO
.
setAlarm
(
CommonEnum
.
YES
.
getValue
());
alarmRedisDTO
.
setAlarm
(
CommonEnum
.
YES
.
getValue
());
RedisUtil
.
set
(
RedisConst
.
ALARM_DEVICE_FALL_ID
+
deviceId
,
alarmRedisDTO
);
RedisUtil
.
set
(
RedisConst
.
ALARM_DEVICE_FALL_ID
+
deviceId
,
alarmRedisDTO
);
notice
(
platAlarmCheckDTO
);
notice
(
platAlarmCheckDTO
);
// 跌倒了设备需要发送告警到第三方平台
PlatTenant
platTenant
=
platTenantService
.
getById
(
platDevice
.
getTenantId
());
if
(
platTenant
!=
null
)
{
OpenApiBaseStrategy
strategyFactoryHandler
=
openApiBaseStrategyFactory
.
getHandler
(
platTenant
.
getCode
());
if
(
strategyFactoryHandler
!=
null
)
{
try
{
strategyFactoryHandler
.
alarm
(
platTenant
,
deviceId
,
properties
);
}
catch
(
Exception
e
)
{
log
.
error
(
"调用openapi告警接口失败:{}"
,
e
.
getMessage
(),
e
);
}
}
}
}
else
{
}
else
{
if
(
StringUtils
.
equals
(
alarmRedisDTO
.
getAlarm
(),
CommonEnum
.
YES
.
getValue
()))
{
if
(
StringUtils
.
equals
(
alarmRedisDTO
.
getAlarm
(),
CommonEnum
.
YES
.
getValue
()))
{
alarmRedisDTO
.
setAlarm
(
CommonEnum
.
NO
.
getValue
());
alarmRedisDTO
.
setAlarm
(
CommonEnum
.
NO
.
getValue
());
...
...
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
View file @
549ae016
...
@@ -8,7 +8,10 @@ import com.makeit.common.entity.BaseEntity;
...
@@ -8,7 +8,10 @@ import com.makeit.common.entity.BaseEntity;
import
com.makeit.dto.platform.alarm.PlatAlarmCheckDTO
;
import
com.makeit.dto.platform.alarm.PlatAlarmCheckDTO
;
import
com.makeit.entity.platform.alarm.PlatAlarmConfig
;
import
com.makeit.entity.platform.alarm.PlatAlarmConfig
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.platform.device.PlatDevice
;
import
com.makeit.entity.saas.PlatTenant
;
import
com.makeit.entity.saas.analysis.SaasSleepAnalysisModel
;
import
com.makeit.entity.saas.analysis.SaasSleepAnalysisModel
;
import
com.makeit.external.strategy.OpenApiBaseStrategy
;
import
com.makeit.external.strategy.OpenApiBaseStrategyFactory
;
import
com.makeit.enums.platform.alarm.PlatAlarmConfigEnum
;
import
com.makeit.enums.platform.alarm.PlatAlarmConfigEnum
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.global.aspect.tenant.TenantIdIgnore
;
import
com.makeit.module.iot.enums.DeviceState
;
import
com.makeit.module.iot.enums.DeviceState
;
...
@@ -17,6 +20,7 @@ import com.makeit.module.iot.vo.HeaderInfo;
...
@@ -17,6 +20,7 @@ import com.makeit.module.iot.vo.HeaderInfo;
import
com.makeit.service.platform.alarm.PlatAlarmConfigService
;
import
com.makeit.service.platform.alarm.PlatAlarmConfigService
;
import
com.makeit.service.platform.alarm.alarmStrategy.IAlarm
;
import
com.makeit.service.platform.alarm.alarmStrategy.IAlarm
;
import
com.makeit.service.platform.device.PlatDeviceService
;
import
com.makeit.service.platform.device.PlatDeviceService
;
import
com.makeit.service.saas.PlatTenantService
;
import
com.makeit.service.saas.SaasSleepAnalysisModelService
;
import
com.makeit.service.saas.SaasSleepAnalysisModelService
;
import
com.makeit.utils.AlarmConfigCacheUtil
;
import
com.makeit.utils.AlarmConfigCacheUtil
;
import
com.makeit.utils.DeviceCacheUtil
;
import
com.makeit.utils.DeviceCacheUtil
;
...
@@ -67,6 +71,8 @@ public class PushCallback implements MqttCallback {
...
@@ -67,6 +71,8 @@ public class PushCallback implements MqttCallback {
public
static
final
String
WRITE_PROPERTY_REPLY
=
"WRITE_PROPERTY_REPLY"
;
public
static
final
String
WRITE_PROPERTY_REPLY
=
"WRITE_PROPERTY_REPLY"
;
public
static
final
String
OPEN_API_KEY_COUNT
=
"open:api:key:count"
;
@Autowired
@Autowired
private
MqttConfig
mqttConfig
;
private
MqttConfig
mqttConfig
;
...
@@ -87,7 +93,10 @@ public class PushCallback implements MqttCallback {
...
@@ -87,7 +93,10 @@ public class PushCallback implements MqttCallback {
private
SaasSleepAnalysisModelService
saasSleepAnalysisModelService
;
private
SaasSleepAnalysisModelService
saasSleepAnalysisModelService
;
@Resource
@Resource
private
PlatAlarmConfigService
alarmConfigService
;
private
PlatAlarmConfigService
alarmConfigService
;
@Autowired
private
OpenApiBaseStrategyFactory
openApiBaseStrategyFactory
;
@Autowired
private
PlatTenantService
platTenantService
;
@Override
@Override
public
void
connectionLost
(
Throwable
cause
)
{
public
void
connectionLost
(
Throwable
cause
)
{
...
@@ -196,6 +205,9 @@ public class PushCallback implements MqttCallback {
...
@@ -196,6 +205,9 @@ public class PushCallback implements MqttCallback {
String
iot_tenantId
=
binding
.
getId
();
String
iot_tenantId
=
binding
.
getId
();
JSONObject
properties
=
device
.
getProperties
();
JSONObject
properties
=
device
.
getProperties
();
// 设备上报到第三方,一分钟一次
reportBrData
(
device
,
iot_tenantId
);
//iot设备id
//iot设备id
PlatDevice
platDevice
=
deviceCacheUtil
.
get
(
deviceId
+
":"
+
iot_tenantId
);
PlatDevice
platDevice
=
deviceCacheUtil
.
get
(
deviceId
+
":"
+
iot_tenantId
);
if
(
platDevice
==
null
)
{
if
(
platDevice
==
null
)
{
...
@@ -281,6 +293,30 @@ public class PushCallback implements MqttCallback {
...
@@ -281,6 +293,30 @@ public class PushCallback implements MqttCallback {
}
}
private
void
reportBrData
(
DeviceInfo
device
,
String
iot_tenantId
)
{
HeaderInfo
headers
=
device
.
getHeaders
();
String
deviceId
=
device
.
getDeviceId
();
JSONObject
properties
=
device
.
getProperties
();
if
(
REPORT_PROPERTY
.
equals
(
device
.
getMessageType
())
&&
headers
.
getProductName
().
contains
(
"呼吸"
))
{
Long
increment
=
redisTemplate
.
opsForValue
().
increment
(
OPEN_API_KEY_COUNT
+
deviceId
+
":"
+
iot_tenantId
,
1
);
if
(
increment
!=
null
&&
increment
==
60
)
{
redisTemplate
.
delete
(
OPEN_API_KEY_COUNT
+
deviceId
+
":"
+
iot_tenantId
);
PlatTenant
platTenant
=
platTenantService
.
getOne
(
new
QueryWrapper
<
PlatTenant
>()
.
lambda
().
eq
(
PlatTenant:
:
getIotOrgId
,
iot_tenantId
));
if
(
platTenant
!=
null
)
{
OpenApiBaseStrategy
strategyFactoryHandler
=
openApiBaseStrategyFactory
.
getHandler
(
platTenant
.
getCode
());
if
(
strategyFactoryHandler
!=
null
)
{
try
{
strategyFactoryHandler
.
report
(
platTenant
,
deviceId
,
properties
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"调用呼吸设备上报数据接口失败:{}"
,
e
.
getMessage
(),
e
);
}
}
}
}
}
}
private
void
cacheSpaceFallDeviceData
(
String
deviceSpaceTempData
,
DeviceInfo
device
,
long
currentSecond
)
{
private
void
cacheSpaceFallDeviceData
(
String
deviceSpaceTempData
,
DeviceInfo
device
,
long
currentSecond
)
{
long
maxSize
=
10L
;
long
maxSize
=
10L
;
String
key
=
deviceSpaceTempData
+
device
.
getDeviceId
();
String
key
=
deviceSpaceTempData
+
device
.
getDeviceId
();
...
...
server-web/src/test/java/com/makeit/iotapi/IotDeviceInfoContentFall.java
View file @
549ae016
...
@@ -101,4 +101,6 @@ public class IotDeviceInfoContentFall {
...
@@ -101,4 +101,6 @@ public class IotDeviceInfoContentFall {
platAlarmCheckDTO
.
setProperties
(
properties
);
platAlarmCheckDTO
.
setProperties
(
properties
);
offBedAlarm
.
checkConfig
(
platAlarmCheckDTO
);
offBedAlarm
.
checkConfig
(
platAlarmCheckDTO
);
}
}
}
}
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