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
1e1e50e4
authored
Dec 13, 2023
by
huangjy
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
fix:状态判断逻辑变更
parent
49311086
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
48 deletions
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderRealTimeServiceImpl.java
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
server-service/src/main/java/com/makeit/service/platform/elder/impl/PlatElderRealTimeServiceImpl.java
View file @
1e1e50e4
...
@@ -180,7 +180,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
...
@@ -180,7 +180,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
if
(
platDevice
==
null
)
{
if
(
platDevice
==
null
)
{
return
platElderRealTimeNowVO
;
return
platElderRealTimeNowVO
;
}
}
long
currentSecond
=
System
.
currentTimeMillis
()
/
1000
;
boolean
brNoPersonFlag
=
false
;
boolean
brNoPersonFlag
=
false
;
String
brResult
=
redisTemplate
.
opsForValue
().
get
(
DEVICE_BR_DATA
+
platDevice
.
getOriDeviceId
());
String
brResult
=
redisTemplate
.
opsForValue
().
get
(
DEVICE_BR_DATA
+
platDevice
.
getOriDeviceId
());
if
(
brResult
!=
null
)
{
if
(
brResult
!=
null
)
{
...
@@ -190,14 +190,13 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
...
@@ -190,14 +190,13 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
if
(
StringUtils
.
equals
(
person
,
"1"
))
{
if
(
StringUtils
.
equals
(
person
,
"1"
))
{
// 判断是否在床睡觉
// 判断是否在床睡觉
Integer
sleepTimeActionThreshold
=
getSleepTimeActionThreshold
();
Integer
sleepTimeActionThreshold
=
getSleepTimeActionThreshold
();
Long
sleepTimeActionDuration
=
getSleepTimeActionDuration
();
Set
<
String
>
dataSet
=
redisTemplate
.
opsForZSet
().
rangeByScore
(
DEVICE_BR_ANALYSIS
+
platDevice
.
getOriDeviceId
(),
currentSecond
-
30
,
currentSecond
);
Set
<
String
>
dataSet
=
redisTemplate
.
opsForZSet
().
rangeByScore
(
DEVICE_BR_ANALYSIS
+
platDevice
.
getOriDeviceId
(),
0
,
Integer
.
MAX_VALUE
);
if
(
CollectionUtils
.
isNotEmpty
(
dataSet
))
{
if
(
CollectionUtils
.
isNotEmpty
(
dataSet
)
&&
sleepTimeActionDuration
-
dataSet
.
size
()
<=
2
)
{
boolean
flag
=
dataSet
.
stream
().
allMatch
(
s
->
{
boolean
flag
=
dataSet
.
stream
().
allMatch
(
s
->
{
JSONObject
result
=
JSON
.
parseObject
(
s
);
JSONObject
result
=
JSON
.
parseObject
(
s
);
JSONObject
properties
=
(
JSONObject
)
result
.
get
(
"properties"
);
JSONObject
properties
=
(
JSONObject
)
result
.
get
(
"properties"
);
Integer
bodymove
=
Integer
.
valueOf
(
properties
.
getString
(
"bodymove"
));
Integer
bodymove
=
Integer
.
valueOf
(
properties
.
getString
(
"bodymove"
));
return
bodymove
.
compareTo
(
sleepTimeActionThreshold
)
<=
0
;
return
bodymove
.
compareTo
(
sleepTimeActionThreshold
)
<=
0
&&
Integer
.
parseInt
(
properties
.
getString
(
"person"
))
==
1
;
});
});
log
.
info
(
"计算后睡眠集合大小:{}"
,
dataSet
.
size
());
log
.
info
(
"计算后睡眠集合大小:{}"
,
dataSet
.
size
());
if
(
flag
)
{
if
(
flag
)
{
...
@@ -224,6 +223,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
...
@@ -224,6 +223,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
}
}
}
else
{
}
else
{
log
.
info
(
"当前呼吸设备没有上报数据直接返回:"
+
platElderIdDTO
.
getElderId
());
log
.
info
(
"当前呼吸设备没有上报数据直接返回:"
+
platElderIdDTO
.
getElderId
());
redisTemplate
.
delete
(
DEVICE_BR_ANALYSIS
+
platDevice
.
getOriDeviceId
());
return
platElderRealTimeNowVO
;
return
platElderRealTimeNowVO
;
}
}
List
<
PlatDevice
>
spaceDeviceList
=
getSpaceDevice
(
platElderIdDTO
.
getElderId
(),
platElderIdDTO
.
getDeviceId
());
List
<
PlatDevice
>
spaceDeviceList
=
getSpaceDevice
(
platElderIdDTO
.
getElderId
(),
platElderIdDTO
.
getDeviceId
());
...
@@ -233,28 +233,26 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
...
@@ -233,28 +233,26 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
boolean
spaceNoPersonFlag
=
false
;
boolean
spaceNoPersonFlag
=
false
;
for
(
PlatDevice
device
:
spaceDeviceList
)
{
for
(
PlatDevice
device
:
spaceDeviceList
)
{
// 无人
// 无人
Map
<
Object
,
Object
>
entries
=
redisTemplate
.
opsForHash
().
entries
(
DEVICE_SPACE_TEMP_DATA
+
device
.
getOriDeviceId
()
);
Set
<
String
>
dataSet
=
redisTemplate
.
opsForZSet
().
rangeByScore
(
DEVICE_SPACE_TEMP_DATA
+
platDevice
.
getOriDeviceId
(),
currentSecond
-
30
,
currentSecond
);
if
(
entries
.
isEmpty
(
))
{
if
(
CollectionUtils
.
isEmpty
(
dataSet
))
{
spaceNoPersonFlag
=
true
;
spaceNoPersonFlag
=
true
;
continue
;
continue
;
}
}
Collection
<
Object
>
values
=
entries
.
values
();
log
.
info
(
"空间设备当前大小:{}"
,
dataSet
.
size
());
log
.
info
(
"空间设备当前大小:{}"
,
values
.
size
());
List
<
PlatElderCoordinateVO
>
voList
=
dataSet
.
stream
().
map
(
entity
->
{
if
(
values
.
size
()
<
10
)
{
continue
;
}
if
(
values
.
size
()
>
11
)
{
redisTemplate
.
delete
(
Objects
.
requireNonNull
(
redisTemplate
.
keys
(
DEVICE_SPACE_TEMP_DATA
+
"*"
)));
continue
;
}
List
<
PlatElderCoordinateVO
>
voList
=
values
.
stream
().
map
(
entity
->
{
PlatElderCoordinateVO
vo
=
new
PlatElderCoordinateVO
();
PlatElderCoordinateVO
vo
=
new
PlatElderCoordinateVO
();
JSONObject
result
=
JSON
.
parseObject
(
entity
.
toString
());
JSONObject
result
=
JSON
.
parseObject
(
entity
);
String
distance
=
result
.
getString
(
"distance"
);
JSONObject
properties
=
(
JSONObject
)
result
.
get
(
"properties"
);
String
angle
=
result
.
getString
(
"angle"
);
String
distance
=
properties
.
getString
(
"distance"
);
String
angle
=
properties
.
getString
(
"angle"
);
vo
.
setX
(
Integer
.
parseInt
(
distance
)
*
Math
.
cos
(
90
-
Integer
.
parseInt
(
angle
)));
vo
.
setX
(
Integer
.
parseInt
(
distance
)
*
Math
.
cos
(
90
-
Integer
.
parseInt
(
angle
)));
vo
.
setY
(
Integer
.
parseInt
(
distance
)
*
Math
.
sin
(
90
-
Integer
.
parseInt
(
angle
)));
vo
.
setY
(
Integer
.
parseInt
(
distance
)
*
Math
.
sin
(
90
-
Integer
.
parseInt
(
angle
)));
vo
.
setPersonState
(
Integer
.
valueOf
(
result
.
getString
(
"personState"
)));
int
personState
=
Integer
.
parseInt
(
properties
.
getString
(
"personState"
));
vo
.
setPersonState
(
personState
);
if
(
personState
==
0
)
{
vo
.
setX
(
0.0
);
vo
.
setY
(
0.0
);
}
return
vo
;
return
vo
;
}).
collect
(
Collectors
.
toList
());
}).
collect
(
Collectors
.
toList
());
...
@@ -281,29 +279,27 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
...
@@ -281,29 +279,27 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
boolean
fallNoPersonFlag
=
false
;
boolean
fallNoPersonFlag
=
false
;
for
(
PlatDevice
device
:
fallDeviceList
)
{
for
(
PlatDevice
device
:
fallDeviceList
)
{
// 无人
// 无人
Map
<
Object
,
Object
>
entries
=
redisTemplate
.
opsForHash
().
entries
(
DEVICE_FALL_TEMP_DATA
+
device
.
getOriDeviceId
()
);
Set
<
String
>
dataSet
=
redisTemplate
.
opsForZSet
().
rangeByScore
(
DEVICE_FALL_TEMP_DATA
+
platDevice
.
getOriDeviceId
(),
currentSecond
-
30
,
currentSecond
);
if
(
entries
.
isEmpty
(
))
{
if
(
CollectionUtils
.
isEmpty
(
dataSet
))
{
fallNoPersonFlag
=
true
;
fallNoPersonFlag
=
true
;
continue
;
continue
;
}
}
Collection
<
Object
>
values
=
entries
.
values
();
log
.
info
(
"跌倒设备当前大小:{}"
,
dataSet
.
size
());
if
(
values
.
size
()
<
10
)
{
List
<
PlatElderCoordinateVO
>
voList
=
dataSet
.
stream
().
map
(
entity
->
{
continue
;
}
if
(
values
.
size
()
>
11
)
{
redisTemplate
.
delete
(
Objects
.
requireNonNull
(
redisTemplate
.
keys
(
DEVICE_FALL_TEMP_DATA
+
"*"
)));
continue
;
}
log
.
info
(
"跌倒设备当前大小:{}"
,
values
.
size
());
List
<
PlatElderCoordinateVO
>
voList
=
values
.
stream
().
map
(
entity
->
{
PlatElderCoordinateVO
vo
=
new
PlatElderCoordinateVO
();
PlatElderCoordinateVO
vo
=
new
PlatElderCoordinateVO
();
JSONObject
result
=
JSON
.
parseObject
(
entity
.
toString
());
JSONObject
result
=
JSON
.
parseObject
(
entity
);
Object
track
=
result
.
get
(
"track"
);
JSONObject
properties
=
(
JSONObject
)
result
.
get
(
"properties"
);
Object
track
=
properties
.
get
(
"track"
);
List
<
Integer
>
list
=
track
==
null
?
Lists
.
newArrayList
()
:
(
List
<
Integer
>)
track
;
List
<
Integer
>
list
=
track
==
null
?
Lists
.
newArrayList
()
:
(
List
<
Integer
>)
track
;
vo
.
setX
(
CollectionUtils
.
isNotEmpty
(
list
)
?
list
.
get
(
1
).
doubleValue
()
:
null
);
vo
.
setX
(
CollectionUtils
.
isNotEmpty
(
list
)
?
list
.
get
(
1
).
doubleValue
()
:
null
);
vo
.
setY
(
CollectionUtils
.
isNotEmpty
(
list
)
?
list
.
get
(
2
).
doubleValue
():
null
);
vo
.
setY
(
CollectionUtils
.
isNotEmpty
(
list
)
?
list
.
get
(
2
).
doubleValue
():
null
);
vo
.
setPersonState
(
Integer
.
valueOf
(
result
.
getString
(
"personState"
)));
int
personState
=
Integer
.
parseInt
(
properties
.
getString
(
"personState"
));
vo
.
setPerson
(
Integer
.
valueOf
(
result
.
getString
(
"person"
)));
vo
.
setPersonState
(
personState
);
if
(
personState
==
0
)
{
vo
.
setX
(
0.0
);
vo
.
setY
(
0.0
);
}
vo
.
setPerson
(
Integer
.
valueOf
(
properties
.
getString
(
"person"
)));
return
vo
;
return
vo
;
}).
collect
(
Collectors
.
toList
());
}).
collect
(
Collectors
.
toList
());
...
@@ -340,6 +336,9 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
...
@@ -340,6 +336,9 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
if
(
brNoPersonFlag
&&
spaceNoPersonFlag
&&
fallNoPersonFlag
)
{
if
(
brNoPersonFlag
&&
spaceNoPersonFlag
&&
fallNoPersonFlag
)
{
log
.
info
(
"所有设备都无人,判断为外出:"
+
platElderIdDTO
.
getElderId
());
log
.
info
(
"所有设备都无人,判断为外出:"
+
platElderIdDTO
.
getElderId
());
platElderRealTimeNowVO
.
setStatus
(
PlatElderRealtimeReportEnum
.
NowStatus
.
OUT
.
getValue
());
platElderRealTimeNowVO
.
setStatus
(
PlatElderRealtimeReportEnum
.
NowStatus
.
OUT
.
getValue
());
redisTemplate
.
delete
(
Objects
.
requireNonNull
(
redisTemplate
.
keys
(
DEVICE_BR_ANALYSIS
+
"*"
)));
redisTemplate
.
delete
(
Objects
.
requireNonNull
(
redisTemplate
.
keys
(
DEVICE_SPACE_TEMP_DATA
+
"*"
)));
redisTemplate
.
delete
(
Objects
.
requireNonNull
(
redisTemplate
.
keys
(
DEVICE_FALL_TEMP_DATA
+
"*"
)));
return
platElderRealTimeNowVO
;
return
platElderRealTimeNowVO
;
}
}
...
...
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
View file @
1e1e50e4
...
@@ -234,23 +234,14 @@ public class PushCallback implements MqttCallback {
...
@@ -234,23 +234,14 @@ public class PushCallback implements MqttCallback {
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
();
Long
size
=
redisTemplate
.
opsForHash
().
size
(
key
);
redisTemplate
.
opsForZSet
().
add
(
key
,
JSON
.
toJSONString
(
device
),
currentSecond
);
redisTemplate
.
opsForHash
().
put
(
key
,
currentSecond
,
JSON
.
toJSONString
(
device
.
getProperties
()));
redisTemplate
.
expire
(
key
,
maxSize
+
1
,
TimeUnit
.
MINUTES
);
redisTemplate
.
expire
(
key
,
maxSize
+
1
,
TimeUnit
.
SECONDS
);
if
(
size
==
maxSize
)
{
redisTemplate
.
opsForHash
().
delete
(
key
,
currentSecond
-
maxSize
);
}
}
}
private
void
cacheBrDeviceData
(
DeviceInfo
device
,
long
currentSecond
)
{
private
void
cacheBrDeviceData
(
DeviceInfo
device
,
long
currentSecond
)
{
// 缓存呼吸设备某段时间的数据,hash 最大长度 duration
// 缓存呼吸设备某段时间的数据,hash 最大长度 duration
String
key
=
DEVICE_BR_ANALYSIS
+
device
.
getDeviceId
();
String
key
=
DEVICE_BR_ANALYSIS
+
device
.
getDeviceId
();
long
duration
=
getSleepTimeActionDuration
();
long
duration
=
getSleepTimeActionDuration
();
long
size
=
redisTemplate
.
opsForZSet
().
zCard
(
key
);
long
differenceValue
=
currentSecond
-
duration
;
if
(
size
>
duration
)
{
redisTemplate
.
opsForZSet
().
removeRangeByScore
(
key
,
differenceValue
-
60
,
differenceValue
-
1
);
}
redisTemplate
.
opsForZSet
().
add
(
key
,
JSON
.
toJSONString
(
device
),
currentSecond
);
redisTemplate
.
opsForZSet
().
add
(
key
,
JSON
.
toJSONString
(
device
),
currentSecond
);
redisTemplate
.
expire
(
key
,
duration
+
3
,
TimeUnit
.
MINUTES
);
redisTemplate
.
expire
(
key
,
duration
+
3
,
TimeUnit
.
MINUTES
);
}
}
...
...
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