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
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
...
@@ -12,18 +12,19 @@ import net.wanji.utc.common.constant.Constants;
...
@@ -12,18 +12,19 @@ import net.wanji.utc.common.constant.Constants;
import
net.wanji.utc.mapper.CrossInfoMapper
;
import
net.wanji.utc.mapper.CrossInfoMapper
;
import
net.wanji.utc.mapper.CrossLightsMapper
;
import
net.wanji.utc.mapper.CrossLightsMapper
;
import
net.wanji.utc.mapper.ManufacturerInfoMapper
;
import
net.wanji.utc.mapper.ManufacturerInfoMapper
;
import
net.wanji.utc.po.CrossInfoPO
;
import
net.wanji.utc.po.CrossLightsPO
;
import
net.wanji.utc.po.CrossLightsPO
;
import
net.wanji.utc.po.ManufacturerInfoPO
;
import
net.wanji.utc.po.ManufacturerInfoPO
;
import
net.wanji.utc.po.hk.request.HKRequest
;
import
net.wanji.utc.po.hk.request.RealTimeStateInfoQueryPO
;
import
net.wanji.utc.po.hk.response.*
;
import
net.wanji.utc.service.runninginfo.HkLightsStatusService
;
import
net.wanji.utc.service.runninginfo.HkLightsStatusService
;
import
net.wanji.utc.util.PathUtil
;
import
net.wanji.utc.util.PathUtil
;
import
net.wanji.utc.util.StringUtils
;
import
net.wanji.utc.util.StringUtils
;
import
net.wanji.utc.vo.LightsStatusVO
;
import
net.wanji.utc.vo.LightsStatusVO
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.*
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* @author Kent HAN
* @author Kent HAN
...
@@ -40,6 +41,22 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
...
@@ -40,6 +41,22 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
public
static
Map
<
String
,
String
>
runModeParseMap
=
new
HashMap
<
String
,
String
>();
public
static
Map
<
String
,
String
>
runModeParseMap
=
new
HashMap
<
String
,
String
>();
public
static
Map
<
String
,
Integer
>
turnParseMap
=
new
HashMap
<>();
public
static
Map
<
String
,
String
>
directionParseMap
=
new
HashMap
<>();
static
{
// key: 万集灯组方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北
directionParseMap
.
put
(
"1"
,
"1"
);
directionParseMap
.
put
(
"2"
,
"5"
);
directionParseMap
.
put
(
"3"
,
"4"
);
directionParseMap
.
put
(
"4"
,
"6"
);
directionParseMap
.
put
(
"5"
,
"2"
);
directionParseMap
.
put
(
"6"
,
"8"
);
directionParseMap
.
put
(
"7"
,
"3"
);
directionParseMap
.
put
(
"8"
,
"7"
);
}
static
{
static
{
// key:海康控制模式 value:万集控制模式
// key:海康控制模式 value:万集控制模式
runModeParseMap
.
put
(
"2"
,
"4"
);
// 黄闪
runModeParseMap
.
put
(
"2"
,
"4"
);
// 黄闪
...
@@ -49,6 +66,148 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
...
@@ -49,6 +66,148 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
runModeParseMap
.
put
(
"12"
,
"2"
);
// 相位锁定
runModeParseMap
.
put
(
"12"
,
"2"
);
// 相位锁定
}
}
// key:万集车道转向:1左转;2直行;3右转;4掉头;5直左;6直右;7左直右;8左右;9左转掉头;10直行掉头;
// 11右转掉头;12左直掉头;13直右掉头;14左直右掉头;15左右掉头
static
{
turnParseMap
.
put
(
"1"
,
2
);
turnParseMap
.
put
(
"2"
,
1
);
turnParseMap
.
put
(
"3"
,
3
);
turnParseMap
.
put
(
"4"
,
4
);
turnParseMap
.
put
(
"5"
,
5
);
turnParseMap
.
put
(
"6"
,
6
);
turnParseMap
.
put
(
"7"
,
9
);
turnParseMap
.
put
(
"8"
,
8
);
turnParseMap
.
put
(
"9"
,
10
);
turnParseMap
.
put
(
"10"
,
4
);
turnParseMap
.
put
(
"11"
,
4
);
turnParseMap
.
put
(
"12"
,
4
);
turnParseMap
.
put
(
"13"
,
4
);
turnParseMap
.
put
(
"14"
,
4
);
turnParseMap
.
put
(
"15"
,
4
);
}
@Override
public
List
<
LightsStatusVO
>
getHkLightsStatus
(
String
crossId
)
{
List
<
LightsStatusVO
>
result
=
new
ArrayList
<>();
CrossInfoPO
crossInfoPO
=
crossInfoMapper
.
selectByPrimaryKey
(
crossId
);
List
<
CrossLightsPO
>
crossLightsPOList
=
crossLightsMapper
.
selectByCrossId
(
crossId
);
if
(
Objects
.
nonNull
(
crossInfoPO
))
{
String
signalCode
=
crossInfoPO
.
getCode
();
String
jsonBody
=
getRequestBody
(
signalCode
);
Object
data
=
callHKService
(
"getRealtimeSchemeStateInfo"
,
jsonBody
);
if
(
Objects
.
nonNull
(
data
))
{
RealTimeStateInfoListPO
realTimeStateInfoListPO
=
JSONObject
.
parseObject
(
String
.
valueOf
(
data
),
RealTimeStateInfoListPO
.
class
);
LightsStatusVO
infoVo
=
null
;
for
(
RealTimeStateInfoPO
resultPO
:
realTimeStateInfoListPO
.
getList
())
{
infoVo
=
new
LightsStatusVO
();
Integer
patternNo
=
resultPO
.
getPatternNo
();
List
<
RingsPO
>
rings
=
resultPO
.
getRings
();
// 环列表
List
<
ChannelStatePO
>
channelState
=
resultPO
.
getChannelState
();
// 灯组列表
String
HKControlType
=
resultPO
.
getControlType
();
String
WJControlType
=
null
;
if
(
StringUtils
.
isNotBlank
(
HKControlType
))
{
WJControlType
=
runModeParseMap
.
get
(
HKControlType
);
}
if
(
StringUtils
.
isEmpty
(
WJControlType
))
{
WJControlType
=
"255"
;
// 转换失败默认临时方案
}
infoVo
.
setRunMode
(
WJControlType
);
// 控制模式
infoVo
.
setPhasePlanId
(
String
.
valueOf
(
patternNo
));
// 相位方案号
int
cycleLen
=
resultPO
.
getCycle
();
// 周期时长
int
curRunTime
=
resultPO
.
getCurRunTime
();
// 当前运行时长
int
cycleCountDown
=
cycleLen
-
curRunTime
;
// 周期剩余时长
infoVo
.
setCode
(
signalCode
);
infoVo
.
setCrossId
(
crossId
);
// infoVo.setManufacturerCode(""); // 应该不需要
infoVo
.
setCycleCountDown
(
cycleCountDown
);
infoVo
.
setCycleLen
(
cycleLen
);
// 循环相位列表
Map
<
String
,
Object
>
phaseMap
=
new
HashMap
<>();
for
(
RingsPO
ring
:
rings
)
{
List
<
PhaseInfoPO
>
phaseList
=
ring
.
getPhaseList
();
for
(
PhaseInfoPO
phaseInfoPO
:
phaseList
)
{
Integer
phaseNo
=
phaseInfoPO
.
getPhaseNo
();
Integer
vehicleStatus
=
phaseInfoPO
.
getVehicleStatus
();
Integer
phaseLength
=
phaseInfoPO
.
getPhaseLength
();
Integer
red
=
phaseInfoPO
.
getRed
();
Integer
yellow
=
phaseInfoPO
.
getYellow
();
Integer
green
=
phaseLength
-
yellow
-
red
;
phaseMap
.
put
(
String
.
valueOf
(
phaseNo
),
green
);
if
(
2
!=
vehicleStatus
)
{
// 2红灯
infoVo
.
setPhaseId
(
String
.
valueOf
(
phaseNo
));
}
}
}
infoVo
.
setPhaseMap
(
phaseMap
);
Map
<
String
,
Object
>
dirLampGroupMap
=
new
HashMap
<>();
// 循环构建灯组对象(从灯组表获取灯组信息)
for
(
ChannelStatePO
channelStatePO
:
channelState
)
{
Integer
channelNo
=
channelStatePO
.
getChannelNo
();
Integer
state
=
channelStatePO
.
getState
();
String
color
=
transferHKLampGroup
(
state
);
for
(
CrossLightsPO
po
:
crossLightsPOList
)
{
if
(
StringUtils
.
equals
(
po
.
getLightsNo
(),
String
.
valueOf
(
channelNo
)))
{
String
direction
=
po
.
getDir
().
toString
();
String
turn
=
po
.
getTurn
().
toString
();
if
(
dirLampGroupMap
.
get
(
direction
)
!=
null
)
{
Map
<
String
,
String
>
mstr
=
(
Map
<
String
,
String
>)
dirLampGroupMap
.
get
(
direction
);
mstr
.
put
(
turn
,
color
);
dirLampGroupMap
.
put
(
direction
,
mstr
);
}
else
{
Map
<
String
,
String
>
lamp
=
new
HashMap
<>();
lamp
.
put
(
turn
,
color
);
dirLampGroupMap
.
put
(
direction
,
lamp
);
}
}
}
}
infoVo
.
setDirLampGroupMap
(
dirLampGroupMap
);
}
result
.
add
(
infoVo
);
}
}
return
result
;
}
/**
* 构建信号机请求参数
*
* @param signalCode
* @return
*/
private
String
getRequestBody
(
String
signalCode
)
{
RealTimeStateInfoQueryPO
queryPO
=
new
RealTimeStateInfoQueryPO
();
queryPO
.
setCrossCodes
(
Arrays
.
asList
(
signalCode
));
HKRequest
request
=
new
HKRequest
();
request
.
setPageNo
(
1
);
request
.
setPageSize
(
999
);
request
.
setSearchObj
(
queryPO
);
return
JSONObject
.
toJSONString
(
request
);
}
private
Object
callHKService
(
String
apiPath
,
String
jsonBody
)
{
try
{
Map
<
String
,
String
>
path
=
PathUtil
.
getPathMapByApiCode
(
apiPath
);
String
responseStr
=
ArtemisHttpUtil
.
doPostStringArtemis
(
artemisConfig
,
path
,
jsonBody
,
null
,
null
,
"application/json"
,
null
);
if
(
StringUtils
.
isNotBlank
(
responseStr
))
{
HKResponse
hkResponse
=
JSONObject
.
parseObject
(
responseStr
,
HKResponse
.
class
);
if
(
Objects
.
nonNull
(
hkResponse
)
&&
Objects
.
equals
(
hkResponse
.
getCode
(),
"0"
))
{
return
hkResponse
.
getData
();
}
else
{
log
.
error
(
"ArtemisHttpUtil海康服务调用异常,请求路径:{}, 返回信息: {}, 请求信息: {}"
,
apiPath
,
hkResponse
,
jsonBody
);
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"ArtemisHttpUtil海康服务调用异常, 异常信息: {}"
,
e
);
}
return
null
;
}
@Override
@Override
public
List
<
LightsStatusVO
>
getHkLightsStatus
(
List
<
BaseCrossInfo
>
baseCrossInfoList
)
{
public
List
<
LightsStatusVO
>
getHkLightsStatus
(
List
<
BaseCrossInfo
>
baseCrossInfoList
)
{
List
<
LightsStatusVO
>
result
=
new
ArrayList
<>();
List
<
LightsStatusVO
>
result
=
new
ArrayList
<>();
...
@@ -74,7 +233,7 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
...
@@ -74,7 +233,7 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
manufacturerInfoPO
.
getId
());
manufacturerInfoPO
.
getId
());
List
<
CrossLightsPO
>
crossLightsPOList
=
crossLightsMapper
.
selectByCrossId
(
crossId
);
List
<
CrossLightsPO
>
crossLightsPOList
=
crossLightsMapper
.
selectByCrossId
(
crossId
);
if
(
Constants
.
HK_SUCCESS_CODE
.
equals
(
object
.
getInteger
(
Constants
.
HK_CODE_KEY
)))
{
if
(
Constants
.
HK_SUCCESS_CODE
.
equals
(
object
.
getInteger
(
Constants
.
HK_CODE_KEY
)))
{
JSONObject
data
=
object
.
getJSONObject
(
"data"
);
JSONObject
data
=
object
.
getJSONObject
(
"data"
);
JSONArray
list
=
data
.
getJSONArray
(
"list"
);
JSONArray
list
=
data
.
getJSONArray
(
"list"
);
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
...
@@ -93,15 +252,16 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
...
@@ -93,15 +252,16 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
}
}
infoVo
.
setRunMode
(
WJControlType
);
// 控制模式
infoVo
.
setRunMode
(
WJControlType
);
// 控制模式
infoVo
.
setPhasePlanId
(
patternNo
);
// 相位方案号
infoVo
.
setPhasePlanId
(
patternNo
);
// 相位方案号
int
cycleLen
=
jsonObject
.
getIntValue
(
"cycle"
);
// 周期时长
int
cycleLen
=
jsonObject
.
getIntValue
(
"cycle"
);
// 周期时长
int
curRunTime
=
jsonObject
.
getIntValue
(
"curRunTime"
);
// 当前运行时长
int
curRunTime
=
jsonObject
.
getIntValue
(
"curRunTime"
);
// 当前运行时长
int
cycleCountDown
=
cycleLen
-
curRunTime
;
// 周期剩余时长
int
cycleCountDown
=
cycleLen
-
curRunTime
;
// 周期剩余时长
infoVo
.
setCode
(
entity
.
getCode
());
infoVo
.
setCode
(
entity
.
getCode
());
infoVo
.
setCrossId
(
entity
.
getCrossId
());
infoVo
.
setManufacturerCode
(
entity
.
getManufacturerCode
());
infoVo
.
setManufacturerCode
(
entity
.
getManufacturerCode
());
infoVo
.
setCycleCountDown
(
cycleCountDown
);
infoVo
.
setCycleCountDown
(
cycleCountDown
);
infoVo
.
setCycleLen
(
cycleLen
);
infoVo
.
setCycleLen
(
cycleLen
);
// 循环相位列表
// 循环相位列表
Map
<
String
,
Object
>
phaseMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
phaseMap
=
new
HashMap
<>();
for
(
int
j
=
0
;
j
<
rings
.
size
();
j
++)
{
for
(
int
j
=
0
;
j
<
rings
.
size
();
j
++)
{
JSONObject
jsonObj
=
rings
.
getJSONObject
(
j
);
JSONObject
jsonObj
=
rings
.
getJSONObject
(
j
);
JSONArray
phaseList
=
jsonObj
.
getJSONArray
(
"phaseList"
);
JSONArray
phaseList
=
jsonObj
.
getJSONArray
(
"phaseList"
);
...
@@ -114,31 +274,31 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
...
@@ -114,31 +274,31 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
Integer
yellow
=
phase
.
getInteger
(
"yellow"
);
Integer
yellow
=
phase
.
getInteger
(
"yellow"
);
Integer
green
=
phaseLength
-
yellow
-
red
;
Integer
green
=
phaseLength
-
yellow
-
red
;
phaseMap
.
put
(
phaseNo
,
green
);
phaseMap
.
put
(
phaseNo
,
green
);
if
(
2
!=
vehicleStatus
)
{
// 2红灯
if
(
2
!=
vehicleStatus
)
{
// 2红灯
infoVo
.
setPhaseId
(
phaseNo
);
infoVo
.
setPhaseId
(
phaseNo
);
}
}
}
}
}
}
infoVo
.
setPhaseMap
(
phaseMap
);
infoVo
.
setPhaseMap
(
phaseMap
);
Map
<
String
,
Object
>
dirLampGroupMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
dirLampGroupMap
=
new
HashMap
<>();
// 循环构建灯组对象(从灯组表获取灯组信息)
// 循环构建灯组对象(从灯组表获取灯组信息)
for
(
int
k
=
0
;
k
<
channelState
.
size
();
k
++)
{
for
(
int
k
=
0
;
k
<
channelState
.
size
();
k
++)
{
JSONObject
channelObj
=
channelState
.
getJSONObject
(
k
);
JSONObject
channelObj
=
channelState
.
getJSONObject
(
k
);
int
channelNo
=
channelObj
.
getIntValue
(
"channelNo"
);
int
channelNo
=
channelObj
.
getIntValue
(
"channelNo"
);
String
color
=
transferHKLampGroup
(
channelObj
.
getIntValue
(
"state"
));
String
color
=
transferHKLampGroup
(
channelObj
.
getIntValue
(
"state"
));
for
(
CrossLightsPO
po
:
crossLightsPOList
){
for
(
CrossLightsPO
po
:
crossLightsPOList
)
{
if
(
Integer
.
parseInt
(
po
.
getLightsNo
())
==
channelNo
)
{
if
(
StringUtils
.
equals
(
po
.
getLightsNo
(),
String
.
valueOf
(
channelNo
))
)
{
String
direction
=
po
.
getDir
().
toString
();
String
direction
=
po
.
getDir
().
toString
();
String
turn
=
po
.
getTurn
().
toString
();
String
turn
=
po
.
getTurn
().
toString
();
if
(
dirLampGroupMap
.
get
(
direction
)
!=
null
)
{
if
(
dirLampGroupMap
.
get
(
direction
)
!=
null
)
{
Map
<
String
,
String
>
mstr
=
(
Map
<
String
,
String
>)
dirLampGroupMap
.
get
(
direction
);
Map
<
String
,
String
>
mstr
=
(
Map
<
String
,
String
>)
dirLampGroupMap
.
get
(
direction
);
mstr
.
put
(
turn
,
color
);
mstr
.
put
(
turn
,
color
);
dirLampGroupMap
.
put
(
direction
,
mstr
);
dirLampGroupMap
.
put
(
direction
,
mstr
);
}
else
{
}
else
{
Map
<
String
,
String
>
lamp
=
new
HashMap
<>();
Map
<
String
,
String
>
lamp
=
new
HashMap
<>();
lamp
.
put
(
turn
,
color
);
lamp
.
put
(
turn
,
color
);
dirLampGroupMap
.
put
(
direction
,
lamp
);
dirLampGroupMap
.
put
(
direction
,
lamp
);
}
}
}
}
}
}
...
@@ -148,7 +308,7 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
...
@@ -148,7 +308,7 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
}
}
}
}
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"系统繁忙,服务器端内部错误!"
,
e
);
log
.
error
(
"系统繁忙,服务器端内部错误!"
,
e
);
}
}
return
result
;
return
result
;
...
@@ -156,23 +316,44 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
...
@@ -156,23 +316,44 @@ public class HkLightsStatusServiceImpl implements HkLightsStatusService {
/**
/**
* 灯组颜色转换
* 灯组颜色转换
*
* @param state
* @param state
* @return
* @return
*/
*/
private
String
transferHKLampGroup
(
int
state
){
private
String
transferHKLampGroup
(
int
state
)
{
String
color
=
""
;
String
color
=
""
;
switch
(
state
)
{
switch
(
state
)
{
case
1
:
color
=
"green"
;
break
;
case
1
:
case
2
:
color
=
"red"
;
break
;
color
=
"green"
;
case
3
:
color
=
"yellow"
;
break
;
break
;
case
4
:
color
=
"greenFlash"
;
break
;
case
2
:
case
5
:
color
=
"yellowFlash"
;
break
;
color
=
"red"
;
case
6
:
color
=
"red"
;
break
;
break
;
case
7
:
color
=
"lightsOut"
;
break
;
case
3
:
case
8
:
color
=
"redFlash"
;
break
;
color
=
"yellow"
;
case
9
:
color
=
"redYellow"
;
break
;
break
;
default
:
color
=
""
;
break
;
case
4
:
color
=
"greenFlash"
;
break
;
case
5
:
color
=
"yellowFlash"
;
break
;
case
6
:
color
=
"red"
;
break
;
case
7
:
color
=
"lightsOut"
;
break
;
case
8
:
color
=
"redFlash"
;
break
;
case
9
:
color
=
"redYellow"
;
break
;
default
:
color
=
""
;
break
;
}
}
return
color
;
return
color
;
}
}
...
...
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