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
710a7f6c
authored
Sep 14, 2023
by
李小龙
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
fixBug
parent
71935f53
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
204 additions
and
19 deletions
db/inti.sql
server-common/src/main/java/com/makeit/global/aspect/tenant/TenantIdUtil.java
server-service/src/main/java/com/makeit/entity/platform/alarm/PlatDayDurationRecord.java
server-service/src/main/java/com/makeit/mapper/platform/alarm/PlatDayDurationRecordMapper.java
server-service/src/main/java/com/makeit/service/platform/alarm/PlatDayDurationRecordService.java
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/BehaviorAlarm.java
server-service/src/main/java/com/makeit/service/platform/alarm/impl/PlatAlarmConfigServiceImpl.java
server-service/src/main/java/com/makeit/service/platform/alarm/impl/PlatDayDurationRecordServiceImpl.java
server-service/src/main/java/com/makeit/utils/AlarmRedisDTO.java
server-web/src/main/resources/application.yml
db/inti.sql
View file @
710a7f6c
...
@@ -453,4 +453,21 @@ CREATE TABLE `plafform_setting` (
...
@@ -453,4 +453,21 @@ CREATE TABLE `plafform_setting` (
)
ENGINE
=
INNODB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'平台设置'
;
)
ENGINE
=
INNODB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'平台设置'
;
CREATE
TABLE
`plat_day_duration_record`
(
`id`
varchar
(
64
)
NOT
NULL
COMMENT
'id'
,
`elder_ids`
varchar
(
1024
)
NOT
NULL
COMMENT
'长者id,逗号拼接'
,
`duration`
bigint
(
64
)
NOT
NULL
COMMENT
'当天本次进入该区域的时长'
,
`ori_device_id`
varchar
(
64
)
NOT
NULL
COMMENT
'iot设备id'
,
`day`
varchar
(
64
)
NOT
NULL
COMMENT
'日期 yyyyMMdd'
,
`start_date`
datetime
DEFAULT
NULL
COMMENT
'本次进入时间'
,
`end_date`
datetime
DEFAULT
NULL
COMMENT
'本次离开时间'
,
`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`
int
(
1
)
DEFAULT
'0'
COMMENT
'删除标记'
,
`tenant_id`
varchar
(
64
)
DEFAULT
NULL
COMMENT
' 租户id '
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'每天停留时长记录'
;
server-common/src/main/java/com/makeit/global/aspect/tenant/TenantIdUtil.java
View file @
710a7f6c
...
@@ -34,8 +34,9 @@ public class TenantIdUtil {
...
@@ -34,8 +34,9 @@ public class TenantIdUtil {
public
static
String
getTenantId
()
{
public
static
String
getTenantId
()
{
List
<
Supplier
<
String
>>
supplierList
=
Arrays
.
asList
(
List
<
Supplier
<
String
>>
supplierList
=
Arrays
.
asList
(
//TenantIdUtil::getFromThreadLocal,
TenantIdUtil:
:
getFromThreadLocal
,
TenantIdUtil:
:
getFromHeader
//,
TenantIdUtil:
:
getFromHeader
);
);
for
(
Supplier
<
String
>
supplier
:
supplierList
)
{
for
(
Supplier
<
String
>
supplier
:
supplierList
)
{
...
...
server-service/src/main/java/com/makeit/entity/platform/alarm/PlatDayDurationRecord.java
0 → 100644
View file @
710a7f6c
package
com
.
makeit
.
entity
.
platform
.
alarm
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.makeit.common.entity.BaseBusEntity
;
import
lombok.Data
;
import
java.util.Date
;
/**
* 每天停留时长记录
* @TableName plat_day_duration_record
*/
@TableName
(
value
=
"plat_day_duration_record"
)
@Data
public
class
PlatDayDurationRecord
extends
BaseBusEntity
{
/**
* 长者id,逗号拼接
*/
private
String
elderIds
;
/**
* 当天本次进入该区域的时长
*/
private
Long
duration
;
/**
* iot设备id
*/
private
String
oriDeviceId
;
/**
* 日期 yyyyMMdd
*/
private
String
day
;
/**
* 本次进入时间
*/
private
Date
startDate
;
/**
* 本次离开时间
*/
private
Date
endDate
;
}
\ No newline at end of file
server-service/src/main/java/com/makeit/mapper/platform/alarm/PlatDayDurationRecordMapper.java
0 → 100644
View file @
710a7f6c
package
com
.
makeit
.
mapper
.
platform
.
alarm
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.makeit.entity.platform.alarm.PlatDayDurationRecord
;
/**
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Mapper
* @createDate 2023-09-14 10:14:20
* @Entity generator.entity.PlatDayDurationRecord
*/
public
interface
PlatDayDurationRecordMapper
extends
BaseMapper
<
PlatDayDurationRecord
>
{
}
server-service/src/main/java/com/makeit/service/platform/alarm/PlatDayDurationRecordService.java
0 → 100644
View file @
710a7f6c
package
com
.
makeit
.
service
.
platform
.
alarm
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.makeit.entity.platform.alarm.PlatDayDurationRecord
;
/**
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service
* @createDate 2023-09-14 10:14:20
*/
public
interface
PlatDayDurationRecordService
extends
IService
<
PlatDayDurationRecord
>
{
}
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/BehaviorAlarm.java
View file @
710a7f6c
...
@@ -2,16 +2,21 @@ package com.makeit.service.platform.alarm.alarmStrategy;
...
@@ -2,16 +2,21 @@ package com.makeit.service.platform.alarm.alarmStrategy;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.convert.Convert
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.makeit.common.entity.BaseEntity
;
import
com.makeit.dto.platform.alarm.PlatAlarmCheckDTO
;
import
com.makeit.dto.platform.alarm.PlatAlarmCheckDTO
;
import
com.makeit.dto.platform.alarm.PlatAlarmConfigBehaviorDTOVO
;
import
com.makeit.dto.platform.alarm.PlatAlarmConfigBehaviorDTOVO
;
import
com.makeit.entity.platform.alarm.PlatAlarmConfig
;
import
com.makeit.entity.platform.alarm.PlatAlarmConfig
;
import
com.makeit.entity.platform.alarm.PlatAlarmRecord
;
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.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.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.service.platform.alarm.PlatAlarmRecordService
;
import
com.makeit.service.platform.alarm.PlatAlarmRecordService
;
import
com.makeit.service.platform.alarm.PlatDayDurationRecordService
;
import
com.makeit.utils.AlarmRedisDTO
;
import
com.makeit.utils.data.convert.JsonUtil
;
import
com.makeit.utils.data.convert.JsonUtil
;
import
com.makeit.utils.redis.RedisUtil
;
import
com.makeit.utils.redis.RedisUtil
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
...
@@ -20,15 +25,21 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -20,15 +25,21 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDateTime
;
import
java.time.ZoneOffset
;
import
java.time.format.DateTimeFormatter
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Component
@Component
public
class
BehaviorAlarm
implements
IAlarm
{
public
class
BehaviorAlarm
implements
IAlarm
{
@Autowired
@Autowired
private
PlatAlarmRecordService
platAlarmRecordService
;
private
PlatAlarmRecordService
platAlarmRecordService
;
@Autowired
private
PlatDayDurationRecordService
platDayDurationRecordService
;
private
PlatAlarmConfigEnum
.
AlarmTypeEnum
alarmTypeEnum
=
PlatAlarmConfigEnum
.
AlarmTypeEnum
.
BEHAVIOR
;
private
PlatAlarmConfigEnum
.
AlarmTypeEnum
alarmTypeEnum
=
PlatAlarmConfigEnum
.
AlarmTypeEnum
.
BEHAVIOR
;
...
@@ -39,6 +50,9 @@ public class BehaviorAlarm implements IAlarm{
...
@@ -39,6 +50,9 @@ public class BehaviorAlarm implements IAlarm{
/**
/**
* 3.行为异常:若长者当在某个空间停留的时间高于长者最近7天在每个空间区域停留时间的平均值+区间(区间在行为异常告警处配置)
* 3.行为异常:若长者当在某个空间停留的时间高于长者最近7天在每个空间区域停留时间的平均值+区间(区间在行为异常告警处配置)
* 取前七天的日最长时间,然后取中位数
* 前七天:没有满足七条记录则跳过,如果七条没都包含长者则跳过
* 记录的保存和缓存读取
* @param platAlarmCheckDTO
* @param platAlarmCheckDTO
*/
*/
@Override
@Override
...
@@ -59,20 +73,48 @@ public class BehaviorAlarm implements IAlarm{
...
@@ -59,20 +73,48 @@ public class BehaviorAlarm implements IAlarm{
List
<
String
>
personStateList
=
Arrays
.
asList
(
"1"
,
"2"
,
"3"
);
List
<
String
>
personStateList
=
Arrays
.
asList
(
"1"
,
"2"
,
"3"
);
//有人
//有人
//计数
//计数
long
endLong
=
new
Date
().
getTime
();
Date
now
=
new
Date
();
Long
startLong
=
RedisUtil
.
get
(
RedisConst
.
ALARM_DEVICE_ID
+
deviceId
);
long
endLong
=
now
.
getTime
();
AlarmRedisDTO
alarmRedisDTO
=
RedisUtil
.
get
(
RedisConst
.
ALARM_DEVICE_ID
+
deviceId
);
if
(
alarmRedisDTO
==
null
){
alarmRedisDTO
=
new
AlarmRedisDTO
();
}
if
(
personStateList
.
contains
(
personState
))
{
if
(
personStateList
.
contains
(
personState
))
{
long
count
=
endLong
-
startLong
;
//第一次进入空间
Long
startLong
=
alarmRedisDTO
.
getStartLong
();
if
(
startLong
==
null
){
if
(
startLong
==
null
){
RedisUtil
.
set
(
RedisConst
.
ALARM_DEVICE_ID
+
deviceId
,
endLong
);
alarmRedisDTO
.
setStartLong
(
endLong
);
alarmRedisDTO
.
setStart
(
now
);
RedisUtil
.
set
(
RedisConst
.
ALARM_DEVICE_ID
+
deviceId
,
alarmRedisDTO
);
return
;
return
;
}
}
if
(
count
>=
duration
)
{
long
count
=
endLong
-
startLong
;
//进入空间时间满足告警时长,判断是否已经告警过了
if
(
count
>=
duration
&&
StringUtils
.
equals
(
alarmRedisDTO
.
getAlarm
(),
CommonEnum
.
NO
.
getValue
()))
{
notice
(
platAlarmCheckDTO
);
notice
(
platAlarmCheckDTO
);
RedisUtil
.
set
(
RedisConst
.
ALARM_DEVICE_ID
+
deviceId
,
startLong
);
alarmRedisDTO
.
setAlarm
(
CommonEnum
.
YES
.
getValue
());
RedisUtil
.
set
(
RedisConst
.
ALARM_DEVICE_ID
+
deviceId
,
alarmRedisDTO
);
}
}
}
else
{
}
else
{
//
//todo 是否有第一次进入记录,有则保存db
Long
startLong
=
alarmRedisDTO
.
getStartLong
();
if
(
startLong
==
null
){
return
;
}
long
count
=
endLong
-
alarmRedisDTO
.
getStartLong
();
//save db
platAlarmRecordService
.
getElderListByDeviceId
(
platAlarmCheckDTO
);
List
<
PlatElder
>
platElderList
=
platAlarmCheckDTO
.
getPlatElderList
();
PlatDayDurationRecord
durationRecord
=
new
PlatDayDurationRecord
();
durationRecord
.
setElderIds
(
platElderList
.
stream
().
map
(
BaseEntity:
:
getId
).
collect
(
Collectors
.
joining
(
","
)));
durationRecord
.
setDuration
(
count
);
durationRecord
.
setOriDeviceId
(
platDevice
.
getOriDeviceId
());
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyyMMdd"
);
durationRecord
.
setDay
(
dateTimeFormatter
.
format
(
LocalDateTime
.
ofEpochSecond
(
startLong
/
1000
,
0
,
ZoneOffset
.
ofHours
(
8
))));
durationRecord
.
setStartDate
(
alarmRedisDTO
.
getStart
());
durationRecord
.
setEndDate
(
now
);
durationRecord
.
setTenantId
(
config
.
getTenantId
());
RedisUtil
.
set
(
RedisConst
.
ALARM_DEVICE_ID
+
deviceId
,
null
);
RedisUtil
.
set
(
RedisConst
.
ALARM_DEVICE_ID
+
deviceId
,
null
);
}
}
}
}
...
@@ -80,6 +122,7 @@ public class BehaviorAlarm implements IAlarm{
...
@@ -80,6 +122,7 @@ public class BehaviorAlarm implements IAlarm{
@Override
@Override
@Async
@Async
public
void
notice
(
PlatAlarmCheckDTO
platAlarmCheckDTO
)
{
public
void
notice
(
PlatAlarmCheckDTO
platAlarmCheckDTO
)
{
//获取长者 空间信息
platAlarmRecordService
.
getElderListByDeviceId
(
platAlarmCheckDTO
);
platAlarmRecordService
.
getElderListByDeviceId
(
platAlarmCheckDTO
);
List
<
PlatElder
>
platElderList
=
platAlarmCheckDTO
.
getPlatElderList
();
List
<
PlatElder
>
platElderList
=
platAlarmCheckDTO
.
getPlatElderList
();
if
(
CollectionUtils
.
isEmpty
(
platElderList
)){
if
(
CollectionUtils
.
isEmpty
(
platElderList
)){
...
...
server-service/src/main/java/com/makeit/service/platform/alarm/impl/PlatAlarmConfigServiceImpl.java
View file @
710a7f6c
...
@@ -177,6 +177,7 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
...
@@ -177,6 +177,7 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
@Transactional
@Transactional
@Override
@Override
//@TenantIdIgnore
public
void
copyForOrg
(
PlatOrg
org
)
{
public
void
copyForOrg
(
PlatOrg
org
)
{
List
<
PlatAlarmConfig
>
configList
=
TenantIdUtil
.
execute
(
IdConst
.
DEFAULT_TENANT_ID
,
()
->
list
());
List
<
PlatAlarmConfig
>
configList
=
TenantIdUtil
.
execute
(
IdConst
.
DEFAULT_TENANT_ID
,
()
->
list
());
...
@@ -190,20 +191,23 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
...
@@ -190,20 +191,23 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
String
[]
split
=
orgPath
.
split
(
","
);
String
[]
split
=
orgPath
.
split
(
","
);
configList
.
forEach
(
e
->
{
TenantIdUtil
.
execute
(
org
.
getTenantId
(),()->{
e
.
setId
(
null
);
configList
.
forEach
(
e
->
{
e
.
setTenantId
(
org
.
getTenantId
());
e
.
setId
(
null
);
for
(
int
i
=
1
;
i
<
split
.
length
;
i
++)
{
for
(
int
i
=
1
;
i
<
split
.
length
;
i
++)
{
BiConsumer
<
PlatAlarmConfig
,
String
>
consumer
=
list
.
get
(
i
-
1
);
BiConsumer
<
PlatAlarmConfig
,
String
>
consumer
=
list
.
get
(
i
-
1
);
consumer
.
accept
(
e
,
split
[
i
]);
consumer
.
accept
(
e
,
split
[
i
]);
}
}
e
.
setOrgId
(
org
.
getId
());
e
.
setOrgId
(
org
.
getId
());
e
.
setOrgPath
(
orgPath
);
e
.
setOrgPath
(
orgPath
);
});
});
saveBatch
(
configList
);
saveBatch
(
configList
);
});
alarmConfigUtil
.
putAll
(
configList
);
alarmConfigUtil
.
putAll
(
configList
);
}
}
...
...
server-service/src/main/java/com/makeit/service/platform/alarm/impl/PlatDayDurationRecordServiceImpl.java
0 → 100644
View file @
710a7f6c
package
com
.
makeit
.
service
.
platform
.
alarm
.
impl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.makeit.entity.platform.alarm.PlatDayDurationRecord
;
import
com.makeit.mapper.platform.alarm.PlatDayDurationRecordMapper
;
import
com.makeit.service.platform.alarm.PlatDayDurationRecordService
;
import
org.springframework.stereotype.Service
;
/**
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service实现
* @createDate 2023-09-14 10:14:20
*/
@Service
public
class
PlatDayDurationRecordServiceImpl
extends
ServiceImpl
<
PlatDayDurationRecordMapper
,
PlatDayDurationRecord
>
implements
PlatDayDurationRecordService
{
}
server-service/src/main/java/com/makeit/utils/AlarmRedisDTO.java
0 → 100644
View file @
710a7f6c
package
com
.
makeit
.
utils
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
@Data
public
class
AlarmRedisDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
1136022758968665492L
;
/**
* 雷达第一次记录时间/进入空间时间
*/
private
Long
startLong
;
/**
* 是否告警过 0-未告警 1-告警了
*/
private
String
alarm
=
"0"
;
private
Date
start
;
}
server-web/src/main/resources/application.yml
View file @
710a7f6c
...
@@ -147,6 +147,7 @@ tenant:
...
@@ -147,6 +147,7 @@ tenant:
-
plat_tenant_menu
-
plat_tenant_menu
-
plat_user
-
plat_user
-
plat_menu
-
plat_menu
-
plat_day_duration_record
rsa
:
rsa
:
...
...
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