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
3127da68
Commit
3127da68
authored
Feb 15, 2023
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 增加海康实时数据返回实体,增加线程池配置,增加通过路口编号获取实时数据
parent
90e67c0a
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
587 additions
and
40 deletions
+587
-40
ThreadPoolConfig.java
.../src/main/java/net/wanji/utc/config/ThreadPoolConfig.java
+47
-0
HKRequest.java
.../src/main/java/net/wanji/utc/po/hk/request/HKRequest.java
+15
-0
RealTimeStateInfoQueryPO.java
...net/wanji/utc/po/hk/request/RealTimeStateInfoQueryPO.java
+14
-0
ChannelStatePO.java
...ain/java/net/wanji/utc/po/hk/response/ChannelStatePO.java
+19
-0
HKResponse.java
...rc/main/java/net/wanji/utc/po/hk/response/HKResponse.java
+14
-0
PhaseChannelRelationPO.java
.../net/wanji/utc/po/hk/response/PhaseChannelRelationPO.java
+22
-0
PhaseInfoPO.java
...c/main/java/net/wanji/utc/po/hk/response/PhaseInfoPO.java
+54
-0
RealTimeStateInfoListPO.java
...net/wanji/utc/po/hk/response/RealTimeStateInfoListPO.java
+14
-0
RealTimeStateInfoPO.java
...ava/net/wanji/utc/po/hk/response/RealTimeStateInfoPO.java
+75
-0
RingsPO.java
...e/src/main/java/net/wanji/utc/po/hk/response/RingsPO.java
+16
-0
HkLightsStatusService.java
.../wanji/utc/service/runninginfo/HkLightsStatusService.java
+1
-0
SignalStatusService.java
...et/wanji/utc/service/runninginfo/SignalStatusService.java
+2
-0
HkLightsStatusServiceImpl.java
...c/service/runninginfo/impl/HkLightsStatusServiceImpl.java
+213
-32
HkRunningStatusServiceImpl.java
.../service/runninginfo/impl/HkRunningStatusServiceImpl.java
+1
-0
SignalStatusServiceImpl.java
...utc/service/runninginfo/impl/SignalStatusServiceImpl.java
+28
-0
SignalStatusTask.java
...ce/src/main/java/net/wanji/utc/task/SignalStatusTask.java
+43
-8
application.yml
signal-utc-service/src/main/resources/application.yml
+9
-0
No files found.
signal-utc-service/src/main/java/net/wanji/utc/config/ThreadPoolConfig.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
config
;
import
com.google.common.util.concurrent.ThreadFactoryBuilder
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
;
import
java.util.concurrent.ThreadFactory
;
import
java.util.concurrent.ThreadPoolExecutor
;
/**
* @author duanruiming
* @date 2023/02/14 10:17
*/
@Configuration
public
class
ThreadPoolConfig
{
@Value
(
"${threadPoolConfig.threadPoolName}"
)
private
String
threadPoolName
;
@Value
(
"${threadPoolConfig.coreSize}"
)
private
int
coreSize
;
@Value
(
"${threadPoolConfig.maxSize}"
)
private
int
maxSize
;
@Value
(
"${threadPoolConfig.queueCapacity}"
)
private
int
queueCapacity
;
@Value
(
"${threadPoolConfig.keepAliveTime}"
)
private
int
keepAliveTime
;
@Value
(
"${threadPoolConfig.allowCoreTimeOut}"
)
private
boolean
allowCoreTimeOut
;
@Bean
public
ThreadPoolTaskExecutor
threadPoolExecutor
()
{
ThreadPoolTaskExecutor
executor
=
new
ThreadPoolTaskExecutor
();
ThreadFactory
build
=
new
ThreadFactoryBuilder
().
setNameFormat
(
threadPoolName
).
build
();
executor
.
setThreadFactory
(
build
);
executor
.
setCorePoolSize
(
coreSize
);
executor
.
setMaxPoolSize
(
maxSize
);
executor
.
setQueueCapacity
(
queueCapacity
);
executor
.
setKeepAliveSeconds
(
keepAliveTime
);
executor
.
setAllowCoreThreadTimeOut
(
allowCoreTimeOut
);
executor
.
setRejectedExecutionHandler
(
new
ThreadPoolExecutor
.
DiscardOldestPolicy
());
executor
.
initialize
();
return
executor
;
}
}
signal-utc-service/src/main/java/net/wanji/utc/po/hk/request/HKRequest.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
po
.
hk
.
request
;
import
lombok.Data
;
/**
* @author duanruiming
* @date 2023/02/14 14:28
*/
@Data
public
class
HKRequest
{
private
int
pageNo
;
private
int
pageSize
;
private
Object
searchObj
;
}
signal-utc-service/src/main/java/net/wanji/utc/po/hk/request/RealTimeStateInfoQueryPO.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
po
.
hk
.
request
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author duanruiming
* @date 2023/02/14 14:36
*/
@Data
public
class
RealTimeStateInfoQueryPO
{
private
List
<
String
>
crossCodes
;
}
signal-utc-service/src/main/java/net/wanji/utc/po/hk/response/ChannelStatePO.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
po
.
hk
.
response
;
import
lombok.Data
;
/**
* @author duanruiming
* @date 2023/02/14 15:17
*/
@Data
public
class
ChannelStatePO
{
/**
* 通道号(灯组号)
*/
private
Integer
channelNo
;
/**
* 状态:1绿灯;2红灯;3黄灯;4绿闪;5黄闪;6全红(预留);7灭灯;8红闪;9红黄
*/
private
Integer
state
;
}
signal-utc-service/src/main/java/net/wanji/utc/po/hk/response/HKResponse.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
po
.
hk
.
response
;
import
lombok.Data
;
/**
* @author duanruiming
* @date 2023/02/14 14:30
*/
@Data
public
class
HKResponse
{
private
String
code
;
private
String
msg
;
private
Object
data
;
}
signal-utc-service/src/main/java/net/wanji/utc/po/hk/response/PhaseChannelRelationPO.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
po
.
hk
.
response
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author duanruiming
* @date 2023/02/14 15:31
*/
@Data
public
class
PhaseChannelRelationPO
{
/**
* 相位号
*/
private
Integer
phaseNo
;
/**
* 通道号(灯组号)
*/
private
List
<
Integer
>
channels
;
}
signal-utc-service/src/main/java/net/wanji/utc/po/hk/response/PhaseInfoPO.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
po
.
hk
.
response
;
import
lombok.Data
;
/**
* @author duanruiming
* @date 2023/02/14 15:35
*/
@Data
public
class
PhaseInfoPO
{
/**
* 当前相位运行时长 单位s
*/
private
Integer
runTime
;
/**
* 绿闪时间
*/
private
Integer
greenLight
;
/**
* 黄灯时长
*/
private
Integer
yellow
;
/**
* 红灯时长
*/
private
Integer
red
;
/**
* 当前相位倒计时数据 单位s
*/
private
Integer
countdown
;
/**
* 相位号
*/
private
Integer
phaseNo
;
private
String
phaseName
;
/**
* 相位序号
*/
private
Integer
phaseSequence
;
/**
* 相位时长
*/
private
Integer
phaseLength
;
/**
* 机动车状态:0无效;1绿灯;2红灯;3黄灯;4绿闪;5黄闪;6全红;7灭灯;8红闪;9红黄
*/
private
Integer
vehicleStatus
;
/**
* 行人状态:无效;1绿灯;2红灯;3黄灯;4绿闪;5黄闪;6全红;7灭灯;8红闪;9红黄
*/
private
Integer
pedestrianStatus
;
}
signal-utc-service/src/main/java/net/wanji/utc/po/hk/response/RealTimeStateInfoListPO.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
po
.
hk
.
response
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author duanruiming
* @date 2023/02/14 16:46
*/
@Data
public
class
RealTimeStateInfoListPO
{
private
List
<
RealTimeStateInfoPO
>
list
;
}
signal-utc-service/src/main/java/net/wanji/utc/po/hk/response/RealTimeStateInfoPO.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
po
.
hk
.
response
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
import
java.util.List
;
/**
* @author duanruiming
* @date 2023/02/14 14:49
*/
@Data
public
class
RealTimeStateInfoPO
{
/**
* 信号机编号
*/
private
String
crossCode
;
/**
* 控制方式:1关灯;2黄闪;3全红;4定周期;5协调绿波;6协调红波;7全感应;8半感应;9协调绿波全感应;10步进控制;12通道锁定
*/
private
String
controlType
;
/**
* 文档说明,实际返回0
*/
private
String
controlMode
;
/**
* 锁定行为
*/
private
List
<
Integer
>
lockPhases
;
private
List
<
ChannelStatePO
>
channelState
;
/**
* 当前周期已运行时间
*/
private
Integer
curRunTime
;
private
Integer
lockLeft
;
private
Integer
coorclinatedPhaseNo
;
private
Boolean
hasFault
;
private
Boolean
coordinateTrans
;
private
Boolean
downGrade
;
/**
* 当前运行方案号
*/
private
Integer
patternNo
;
private
String
patternName
;
/**
* 方案周期 单位s
*/
private
Integer
cycle
;
private
LocalDateTime
cycleBeginTime
;
/**
* 相位差 单位s
*/
private
Integer
offset
;
private
List
<
PhaseChannelRelationPO
>
phaseChannelRelation
;
/**
* 换列表
*/
private
List
<
RingsPO
>
rings
;
}
signal-utc-service/src/main/java/net/wanji/utc/po/hk/response/RingsPO.java
0 → 100644
View file @
3127da68
package
net
.
wanji
.
utc
.
po
.
hk
.
response
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author duanruiming
* @date 2023/02/14 15:34
*/
@Data
public
class
RingsPO
{
private
Integer
ringNo
;
private
List
<
PhaseInfoPO
>
phaseList
;
}
signal-utc-service/src/main/java/net/wanji/utc/service/runninginfo/HkLightsStatusService.java
View file @
3127da68
...
@@ -11,4 +11,5 @@ import java.util.List;
...
@@ -11,4 +11,5 @@ import java.util.List;
*/
*/
public
interface
HkLightsStatusService
{
public
interface
HkLightsStatusService
{
List
<
LightsStatusVO
>
getHkLightsStatus
(
List
<
BaseCrossInfo
>
baseCrossInfoList
);
List
<
LightsStatusVO
>
getHkLightsStatus
(
List
<
BaseCrossInfo
>
baseCrossInfoList
);
List
<
LightsStatusVO
>
getHkLightsStatus
(
String
crossId
);
}
}
signal-utc-service/src/main/java/net/wanji/utc/service/runninginfo/SignalStatusService.java
View file @
3127da68
...
@@ -20,4 +20,6 @@ public interface SignalStatusService {
...
@@ -20,4 +20,6 @@ public interface SignalStatusService {
List
<
SignalStatusLogPO
>
runningStatusAlarm
(
String
crossId
);
List
<
SignalStatusLogPO
>
runningStatusAlarm
(
String
crossId
);
List
<
LightsStatusVO
>
lightStatus
();
List
<
LightsStatusVO
>
lightStatus
();
List
<
LightsStatusVO
>
lightStatus
(
String
crossId
);
}
}
signal-utc-service/src/main/java/net/wanji/utc/service/runninginfo/impl/HkLightsStatusServiceImpl.java
View file @
3127da68
This diff is collapsed.
Click to expand it.
signal-utc-service/src/main/java/net/wanji/utc/service/runninginfo/impl/HkRunningStatusServiceImpl.java
View file @
3127da68
...
@@ -47,6 +47,7 @@ public class HkRunningStatusServiceImpl implements HkRunningStatusService {
...
@@ -47,6 +47,7 @@ public class HkRunningStatusServiceImpl implements HkRunningStatusService {
null
,
null
,
"application/json"
,
null
);
null
,
null
,
"application/json"
,
null
);
JSONObject
object
=
JSON
.
parseObject
(
strResult
);
JSONObject
object
=
JSON
.
parseObject
(
strResult
);
Object
o
=
object
.
get
(
"code"
);
Object
o
=
object
.
get
(
"code"
);
// 多信号机情况下,跳过返回信息不成功的获取返回消息成功的信号机数据
if
(!
Objects
.
equals
(
o
,
0
))
{
if
(!
Objects
.
equals
(
o
,
0
))
{
continue
;
continue
;
}
}
...
...
signal-utc-service/src/main/java/net/wanji/utc/service/runninginfo/impl/SignalStatusServiceImpl.java
View file @
3127da68
...
@@ -23,7 +23,9 @@ import org.springframework.stereotype.Service;
...
@@ -23,7 +23,9 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -84,6 +86,32 @@ public class SignalStatusServiceImpl implements SignalStatusService {
...
@@ -84,6 +86,32 @@ public class SignalStatusServiceImpl implements SignalStatusService {
return
signalStatusLogPOList
;
return
signalStatusLogPOList
;
}
}
@Override
public
List
<
LightsStatusVO
>
lightStatus
(
String
crossId
)
{
List
<
LightsStatusVO
>
lightsStatusVOList
=
new
ArrayList
<>();
String
manufacturerCode
=
getManufacturerCode
(
crossId
);
if
(
Objects
.
equals
(
BasicEnum
.
ManufacturerEnum
.
HK
.
getCode
(),
manufacturerCode
))
{
// 海康
lightsStatusVOList
.
addAll
(
hkLightsStatusService
.
getHkLightsStatus
(
crossId
));
}
else
{
// 默认万集
lightsStatusVOList
.
addAll
(
wanJiRunningStatusService
.
lightsStatus
(
Arrays
.
asList
(
crossId
)));
}
return
lightsStatusVOList
;
}
private
String
getManufacturerCode
(
String
crossId
)
{
CrossInfoPO
crossInfoPO
=
crossInfoMapper
.
selectByPrimaryKey
(
crossId
);
if
(
Objects
.
nonNull
(
crossInfoPO
))
{
Integer
manufacturerId
=
crossInfoPO
.
getManufacturerId
();
ManufacturerInfoPO
manufacturerInfoPO
=
manufacturerInfoMapper
.
selectById
(
manufacturerId
);
if
(
Objects
.
nonNull
(
manufacturerInfoPO
))
{
return
manufacturerInfoPO
.
getCode
();
}
}
return
"WJ"
;
}
@Override
@Override
@Transactional
@Transactional
public
List
<
LightsStatusVO
>
lightStatus
()
{
public
List
<
LightsStatusVO
>
lightStatus
()
{
...
...
signal-utc-service/src/main/java/net/wanji/utc/task/SignalStatusTask.java
View file @
3127da68
...
@@ -4,15 +4,23 @@ import com.alibaba.fastjson.JSONObject;
...
@@ -4,15 +4,23 @@ import com.alibaba.fastjson.JSONObject;
import
com.alibaba.fastjson.serializer.SerializerFeature
;
import
com.alibaba.fastjson.serializer.SerializerFeature
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.utc.po.SignalStatusLogPO
;
import
net.wanji.utc.po.SignalStatusLogPO
;
import
net.wanji.utc.service.runninginfo.HkLightsStatusService
;
import
net.wanji.utc.service.runninginfo.SignalStatusService
;
import
net.wanji.utc.service.runninginfo.SignalStatusService
;
import
net.wanji.utc.vo.LightsStatusVO
;
import
net.wanji.utc.vo.LightsStatusVO
;
import
net.wanji.utc.websocket.RealTimeDataWebSocket
;
import
net.wanji.utc.websocket.RealTimeDataWebSocket
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
import
java.time.LocalDateTime
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
/**
...
@@ -27,6 +35,13 @@ import java.util.concurrent.ConcurrentHashMap;
...
@@ -27,6 +35,13 @@ import java.util.concurrent.ConcurrentHashMap;
public
class
SignalStatusTask
{
public
class
SignalStatusTask
{
@Autowired
@Autowired
SignalStatusService
signalStatusService
;
SignalStatusService
signalStatusService
;
@Resource
(
name
=
"threadPoolExecutor"
)
ThreadPoolTaskExecutor
threadPoolExecutor
;
@Resource
private
HkLightsStatusService
hkLightsStatusService
;
private
static
Map
<
String
,
List
<
LightsStatusVO
>>
lightStatusCache
=
new
HashMap
<>();
// 运行状态、告警,5分钟一次
// 运行状态、告警,5分钟一次
@Scheduled
(
fixedRate
=
1
*
60
*
1000
)
@Scheduled
(
fixedRate
=
1
*
60
*
1000
)
...
@@ -34,21 +49,41 @@ public class SignalStatusTask {
...
@@ -34,21 +49,41 @@ public class SignalStatusTask {
List
<
SignalStatusLogPO
>
signalStatusLogPOS
=
signalStatusService
.
runningStatusAlarm
();
List
<
SignalStatusLogPO
>
signalStatusLogPOS
=
signalStatusService
.
runningStatusAlarm
();
}
}
// 灯态,
5
秒一次
// 灯态,
每
秒一次
@Scheduled
(
fixedRate
=
1
*
1000
)
@Scheduled
(
fixedRate
=
1
*
1000
)
public
void
lightStatus
()
{
public
void
lightStatus
()
{
try
{
ConcurrentHashMap
<
String
,
RealTimeDataWebSocket
>
evenWarnWebSocketMap
=
RealTimeDataWebSocket
.
getEvenWarnWebSocketMap
();
ConcurrentHashMap
<
String
,
RealTimeDataWebSocket
>
evenWarnWebSocketMap
=
RealTimeDataWebSocket
.
getEvenWarnWebSocketMap
();
try
{
if
(!
evenWarnWebSocketMap
.
isEmpty
())
{
if
(!
evenWarnWebSocketMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>
entry
:
evenWarnWebSocketMap
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
RealTimeDataWebSocket
>
entry
:
evenWarnWebSocketMap
.
entrySet
())
{
String
crossId
=
entry
.
getKey
();
threadPoolExecutor
.
execute
(()
->
{
RealTimeDataWebSocket
webSocket
=
entry
.
getValue
();
String
crossId
=
null
;
List
<
LightsStatusVO
>
lightsStatusVOS
=
signalStatusService
.
lightStatus
();
String
crossIdStr
=
entry
.
getKey
();
webSocket
.
sendInfo
(
JSONObject
.
toJSONString
(
lightsStatusVOS
,
SerializerFeature
.
WriteMapNullValue
),
crossId
);
if
(
StringUtils
.
isNotBlank
(
crossIdStr
))
{
String
[]
split
=
crossIdStr
.
split
(
","
);
crossId
=
split
[
0
];
}
long
start
=
System
.
currentTimeMillis
();
List
<
LightsStatusVO
>
lightsStatusVOS
=
hkLightsStatusService
.
getHkLightsStatus
(
"14Q1409IRF0"
);
long
end
=
System
.
currentTimeMillis
();
System
.
err
.
println
(
crossId
+
":线程池名称:"
+
Thread
.
currentThread
().
getName
());
System
.
err
.
println
(
crossId
+
":海康平台返回灯态数据时间: "
+
(
end
-
start
)
/
1000
+
"--"
+
LocalDateTime
.
now
());
RealTimeDataWebSocket
webSocket
=
entry
.
getValue
();
for
(
LightsStatusVO
lightsStatusVO
:
lightsStatusVOS
)
{
if
(
Objects
.
equals
(
lightsStatusVO
.
getCrossId
(),
crossId
))
{
try
{
webSocket
.
sendInfo
(
JSONObject
.
toJSONString
(
lightsStatusVOS
,
SerializerFeature
.
WriteMapNullValue
),
crossIdStr
);
}
catch
(
IOException
e
)
{
log
.
error
(
"RealTimeDataWebSocket发送异常,"
);
}
}
}
});
}
}
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"实时推送灯态数据失败"
,
e
);
log
.
error
(
"实时推送灯态数据失败"
,
e
);
}
}
...
...
signal-utc-service/src/main/resources/application.yml
View file @
3127da68
...
@@ -57,3 +57,12 @@ pagehelper:
...
@@ -57,3 +57,12 @@ pagehelper:
helperDialect
:
mysql
helperDialect
:
mysql
supportMethodsArguments
:
true
supportMethodsArguments
:
true
params
:
count=countSql
params
:
count=countSql
#线程池配置
threadPoolConfig
:
threadPoolName
:
threadPoolExecutor
coreSize
:
8
maxSize
:
16
queueCapacity
:
200
keepAliveTime
:
6000
allowCoreTimeOut
:
false
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