Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
traffic-signal-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
signal
traffic-signal-platform
Commits
1d1a19ea
Commit
1d1a19ea
authored
Jun 01, 2023
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 优化告警数据和页面统计联动4
parent
b9bb2ea4
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
65 additions
and
23 deletions
+65
-23
SignalStatusTask.java
...ce/src/main/java/net/wanji/web/task/SignalStatusTask.java
+65
-23
No files found.
signal-control-service/src/main/java/net/wanji/web/task/SignalStatusTask.java
View file @
1d1a19ea
package
net
.
wanji
.
web
.
task
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.common.utils.tool.BeanMapUtils
;
import
net.wanji.databus.cache.BaseCrossInfoCache
;
import
net.wanji.databus.dao.mapper.BaseCrossInfoMapper
;
import
net.wanji.databus.po.BaseCrossInfoPO
;
import
net.wanji.databus.vo.SignalStatusVO
;
import
net.wanji.feign.service.UtcFeignClients
;
import
net.wanji.web.common.constant.Constant
;
import
net.wanji.web.entity.TCrossControlHist
;
import
net.wanji.web.entity.TDeviceStatusInfo
;
import
net.wanji.web.entity.TDeviceStatusLog
;
import
net.wanji.web.mapper.ControlHistMapper
;
import
net.wanji.web.mapper.TDeviceStatusLogMapper
;
import
net.wanji.web.mapper.TDeviceStatusMapper
;
import
net.wanji.web.service.SituationDetectionService
;
import
net.wanji.web.vo.situationDetection.CommonEventAlarmOutVo
;
import
net.wanji.web.websocket.WebSocketServer
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
java.time.LocalDateTime
;
import
java.time.ZoneOffset
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -41,16 +46,15 @@ public class SignalStatusTask {
private
final
TDeviceStatusLogMapper
tDeviceStatusLogMapper
;
private
final
BaseCrossInfoMapper
baseCrossInfoMapper
;
private
final
CommonEventWarnTask
commonEventWarnTask
;
@Autowired
SituationDetectionService
situationDetectionService
;
private
final
BaseCrossInfoCache
baseCrossInfoCache
;
@Scheduled
(
fixedRate
=
30
*
1000
)
@Transactional
public
void
syncSignalStatus
()
{
try
{
// 先对比数据,推送告警事件,然后修改状态
commonEventWarnTask
.
pushEvenWarnData
();
long
start
=
LocalDateTime
.
now
().
toEpochSecond
(
ZoneOffset
.
of
(
"+8"
));
log
.
info
(
"===当前时间:{}"
,
LocalDateTime
.
now
());
JsonViewObject
jsonViewObject
=
utcFeignClients
.
runningStatusAlarm
();
if
(
Objects
.
isNull
(
jsonViewObject
)
||
jsonViewObject
.
getCode
()
!=
200
)
{
log
.
error
(
"定时任务同步信号机设备状态utcService调用异常"
);
...
...
@@ -61,14 +65,11 @@ public class SignalStatusTask {
List
<
SignalStatusVO
>
content
=
BeanMapUtils
.
mapsToObjects
(
source
,
SignalStatusVO
.
class
);
List
<
String
>
crossIdList
=
content
.
stream
().
map
(
SignalStatusVO:
:
getCrossId
).
collect
(
Collectors
.
toList
());
// 信号机状态信息
List
<
BaseCrossInfoPO
>
baseCrossInfoPOList
=
new
ArrayList
<>();
if
(!
CollectionUtils
.
isEmpty
(
crossIdList
))
{
baseCrossInfoPOList
=
baseCrossInfoMapper
.
selectByCrossIds
(
crossIdList
);
}
List
<
BaseCrossInfoPO
>
finalBaseCrossInfoPOList
=
baseCrossInfoPOList
;
List
<
BaseCrossInfoPO
>
baseCrossInfoPOS
=
baseCrossInfoCache
.
getCrossInfoCache
();
List
<
CommonEventAlarmOutVo
>
results
=
new
ArrayList
<>();
content
.
forEach
(
signalStatusVO
->
{
String
crossId
=
signalStatusVO
.
getCrossId
();
String
name
=
getSignalName
(
finalBaseCrossInfoPOList
,
crossId
);
String
name
=
getSignalName
(
baseCrossInfoPOS
,
crossId
);
Integer
currentSignalStatus
=
signalStatusVO
.
getStatus
()
==
null
?
0
:
signalStatusVO
.
getStatus
();
Integer
currentFaultType
=
signalStatusVO
.
getFaultType
()
==
null
?
0
:
signalStatusVO
.
getFaultType
();
// 信号机在线,但是故障,数据库状态为2
...
...
@@ -77,23 +78,26 @@ public class SignalStatusTask {
}
// 更新数据库状态
updateSignalStatus
(
signalStatusVO
,
crossId
,
name
,
currentSignalStatus
,
currentFaultType
);
updateSignalStatus
(
signalStatusVO
,
crossId
,
name
,
currentSignalStatus
,
currentFaultType
,
results
);
insertControlHist
(
signalStatusVO
);
log
.
info
(
"更新信号机状态成功,{}"
,
currentSignalStatus
);
});
extracted
();
long
end
=
LocalDateTime
.
now
().
toEpochSecond
(
ZoneOffset
.
of
(
"+8"
));
log
.
info
(
"===定时任务消费时间:{}s"
,
end
-
start
);
// 无告警数据不推送
if
(!
CollectionUtils
.
isEmpty
(
results
))
{
JsonViewObject
warnData
=
JsonViewObject
.
newInstance
();
LocalDateTime
now
=
LocalDateTime
.
now
();
warnData
.
setTimestamp
(
now
.
toInstant
(
ZoneOffset
.
of
(
"+8"
)).
toEpochMilli
());
warnData
.
setContent
(
results
);
WebSocketServer
.
sendTopicInfo2All
(
JSONObject
.
toJSONString
(
warnData
),
Constant
.
WEBSOCKET_TOPIC_EVENT_WARN
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"定时任务同步信号机设备状态远程utcService调用异常"
,
e
);
}
}
@Transactional
(
propagation
=
Propagation
.
REQUIRES_NEW
)
public
void
extracted
()
{
Map
<
String
,
Map
<
String
,
Integer
>>
stringMapMap
=
situationDetectionService
.
allDeviceStatus
(
null
);
log
.
info
(
"当前设备在线数量:{}"
,
stringMapMap
.
toString
());
}
private
static
String
getSignalName
(
List
<
BaseCrossInfoPO
>
finalBaseCrossInfoPOList
,
String
crossId
)
{
String
name
=
null
;
for
(
BaseCrossInfoPO
baseCrossInfoPO
:
finalBaseCrossInfoPOList
)
{
...
...
@@ -114,7 +118,7 @@ public class SignalStatusTask {
* @param currentSignalStatus
* @param currentFaultType
*/
private
void
updateSignalStatus
(
SignalStatusVO
signalStatusVO
,
String
crossId
,
String
name
,
Integer
currentSignalStatus
,
Integer
currentFaultType
)
{
private
void
updateSignalStatus
(
SignalStatusVO
signalStatusVO
,
String
crossId
,
String
name
,
Integer
currentSignalStatus
,
Integer
currentFaultType
,
List
<
CommonEventAlarmOutVo
>
results
)
{
LambdaQueryWrapper
<
TDeviceStatusInfo
>
lambdaQueryWrapper
=
new
LambdaQueryWrapper
<>();
if
(
StringUtils
.
isNotEmpty
(
crossId
))
{
lambdaQueryWrapper
.
eq
(
TDeviceStatusInfo:
:
getCode
,
crossId
);
...
...
@@ -126,6 +130,8 @@ public class SignalStatusTask {
tDeviceStatusInfo
.
setGmtCreate
(
new
Date
());
// 实时数据,创建和修改时间一致
tDeviceStatusMapper
.
updateById
(
tDeviceStatusInfo
);
insertDeviceStatusLog
(
signalStatusVO
,
crossId
,
currentSignalStatus
,
currentFaultType
,
name
);
// 信号机状态发生改变,进行告警通知
buildSignalWarnData
(
results
,
crossId
,
currentSignalStatus
,
currentFaultType
,
name
);
}
}
else
{
TDeviceStatusInfo
deviceStatusInfo
=
new
TDeviceStatusInfo
();
...
...
@@ -191,4 +197,40 @@ public class SignalStatusTask {
int
status
=
tDeviceStatusInfo
.
getStatus
()
==
2
?
1
:
tDeviceStatusInfo
.
getStatus
();
return
currentSignalStatus
!=
status
||
currentFaultType
!=
tDeviceStatusInfo
.
getFaultType
();
}
/**
* 构建告警推送数据,放入results统一推送
*
* @param results
* @param crossId
* @param currentStatus
* @param currentFaultType
* @param crossName
*/
private
void
buildSignalWarnData
(
List
<
CommonEventAlarmOutVo
>
results
,
String
crossId
,
Integer
currentStatus
,
Integer
currentFaultType
,
String
crossName
)
{
try
{
CommonEventAlarmOutVo
commonEventAlarmOutVo
=
new
CommonEventAlarmOutVo
();
commonEventAlarmOutVo
.
setEventType
(
3
);
commonEventAlarmOutVo
.
setEventId
(
crossId
);
commonEventAlarmOutVo
.
setEventName
(
crossName
);
if
(
currentStatus
==
0
)
{
commonEventAlarmOutVo
.
setStatus
(
"11"
);
commonEventAlarmOutVo
.
setEventDesc
(
crossName
.
concat
(
"信号机离线"
));
}
else
if
(
currentStatus
==
1
)
{
commonEventAlarmOutVo
.
setStatus
(
String
.
valueOf
(
0
));
commonEventAlarmOutVo
.
setEventDesc
(
crossName
.
concat
(
"信号机上线"
));
}
else
{
commonEventAlarmOutVo
.
setStatus
(
String
.
valueOf
(
currentFaultType
));
commonEventAlarmOutVo
.
setEventDesc
(
crossName
.
concat
(
"信号机故障"
));
}
LocalDateTime
now
=
LocalDateTime
.
now
();
String
formatNow
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
now
);
commonEventAlarmOutVo
.
setStartTime
(
formatNow
);
String
coordinate
=
baseCrossInfoCache
.
getCoordinateByCrossId
(
crossId
);
commonEventAlarmOutVo
.
setCoordinate
(
coordinate
);
results
.
add
(
commonEventAlarmOutVo
);
}
catch
(
Exception
e
)
{
log
.
error
(
"构建信号机告警数据失败"
,
e
);
}
}
}
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