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
a06a8b5c
Commit
a06a8b5c
authored
Mar 21, 2025
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 优化灯态相位;步进恢复逻辑优化
parent
2de1e01e
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
264 additions
and
40 deletions
+264
-40
CrossPhaseDirTurnCache.java
...main/java/net/wanji/utc/cache/CrossPhaseDirTurnCache.java
+1
-1
SignalStatusController.java
...java/net/wanji/utc/controller/SignalStatusController.java
+154
-38
CommandFaildTask.java
...ce/src/main/java/net/wanji/utc/task/CommandFaildTask.java
+2
-1
SignalStatusTask.java
...ce/src/main/java/net/wanji/utc/task/SignalStatusTask.java
+102
-0
CrossLightsStatusHistPO.java
...net/wanji/databus/dao/entity/CrossLightsStatusHistPO.java
+3
-0
LightsStatusVO2.java
...s/src/main/java/net/wanji/databus/vo/LightsStatusVO2.java
+2
-0
No files found.
signal-utc-service/src/main/java/net/wanji/utc/cache/CrossPhaseDirTurnCache.java
View file @
a06a8b5c
...
...
@@ -33,7 +33,7 @@ public class CrossPhaseDirTurnCache implements CommandLineRunner {
private
final
CrossPhaseLightsMapper
crossPhaseLightsMapper
;
private
final
CrossLightsMapper
crossLightsMapper
;
p
rivate
static
final
Map
<
String
,
List
<
CrossPhaseDirTurnPojo
>>
crossInfoMap
=
new
HashMap
<>();
p
ublic
static
final
Map
<
String
,
List
<
CrossPhaseDirTurnPojo
>>
crossInfoMap
=
new
HashMap
<>();
public
static
List
<
CrossPhaseDirTurnPojo
>
getCrossPhaseDirTurnCache
(
String
crossId
)
{
if
(!
crossInfoMap
.
isEmpty
())
{
...
...
signal-utc-service/src/main/java/net/wanji/utc/controller/SignalStatusController.java
View file @
a06a8b5c
...
...
@@ -13,13 +13,18 @@ import lombok.RequiredArgsConstructor;
import
net.wanji.common.annotation.aspect.AspectLog
;
import
net.wanji.common.enums.BaseEnum
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.databus.dao.entity.CrossLightsPO
;
import
net.wanji.databus.dto.CrossIdDateTimeDTO
;
import
net.wanji.databus.po.SignalStatusLogPO
;
import
net.wanji.databus.vo.LightsStatusVO
;
import
net.wanji.databus.vo.LightsStatusVO2
;
import
net.wanji.utc.cache.CrossPhaseDirTurnCache
;
import
net.wanji.utc.common.constant.Constants
;
import
net.wanji.utc.po.hk.CrossPhaseDirTurnPojo
;
import
net.wanji.utc.service.runninginfo.SignalStatusService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -31,6 +36,7 @@ import java.util.ArrayList;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
/**
* 运行状态、告警、灯态信息接口
...
...
@@ -79,6 +85,8 @@ public class SignalStatusController {
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
LightsStatusVO
.
class
)
})
public
JsonViewObject
lightStatusV2
()
throws
Exception
{
List
<
LightsStatusVO2
>
collect
=
null
;
try
{
//List<LightsStatusVO> lightsStatusVOList = signalStatusService.lightStatus4StaticScheme();
List
<
LightsStatusVO
>
lightsStatusVOList
=
signalStatusService
.
lightStatus
();
List
<
LightsStatusVO2
>
listResult
=
new
ArrayList
<>(
lightsStatusVOList
.
size
());
...
...
@@ -120,10 +128,118 @@ public class SignalStatusController {
dirList
.
add
(
dirInfo
);
}
lightsStatusVO2
.
setDirLampGroupMapList
(
dirList
);
/**
* 处理灯态,获取当前相位号灯态
*/
//if (StringUtils.equals("13N0C0B5P30", lightsStatusVO.getCrossId())) {
List
<
LightsStatusVO2
.
DirInfo
>
curPhaseDirList
=
getCurPhaseDirList
(
lightsStatusVO2
);
lightsStatusVO2
.
setCurPhaseLampGroupMapList
(
curPhaseDirList
);
//}
listResult
.
add
(
lightsStatusVO2
);
}
return
JsonViewObject
.
newInstance
().
success
(
listResult
);
collect
=
listResult
.
stream
().
filter
(
vo
->
StringUtils
.
equals
(
vo
.
getCrossId
(),
"13N0C0B5P30"
)).
collect
(
Collectors
.
toList
());
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
return
JsonViewObject
.
newInstance
().
success
(
collect
);
}
/**
* 通过当前灯态获取当前相位的灯态方向转向倒计时信息
* @param lightsStatusVO2
* @return
*/
private
static
List
<
LightsStatusVO2
.
DirInfo
>
getCurPhaseDirList
(
LightsStatusVO2
lightsStatusVO2
)
{
List
<
LightsStatusVO2
.
DirInfo
>
curPhaseList
=
new
ArrayList
<>();
try
{
String
crossId
=
lightsStatusVO2
.
getCrossId
();
String
schemeId
=
lightsStatusVO2
.
getSchemeId
();
String
phaseId
=
lightsStatusVO2
.
getPhaseId
();
List
<
LightsStatusVO2
.
DirInfo
>
dirLampGroupMapList
=
lightsStatusVO2
.
getDirLampGroupMapList
();
Map
<
String
,
List
<
CrossPhaseDirTurnPojo
>>
crossInfoMap
=
CrossPhaseDirTurnCache
.
crossInfoMap
;
if
(!
crossInfoMap
.
isEmpty
())
{
List
<
CrossPhaseDirTurnPojo
>
crossPhaseDirTurnPojos
=
crossInfoMap
.
get
(
crossId
);
if
(!
CollectionUtils
.
isEmpty
(
crossPhaseDirTurnPojos
))
{
for
(
CrossPhaseDirTurnPojo
crossPhaseDirTurnPojo
:
crossPhaseDirTurnPojos
)
{
String
curCrossId
=
crossPhaseDirTurnPojo
.
getCrossId
();
Integer
curSchemeNo
=
crossPhaseDirTurnPojo
.
getSchemeNo
();
Integer
curPhaseNo
=
crossPhaseDirTurnPojo
.
getPhaseNo
();
if
(
StringUtils
.
equals
(
crossId
,
curCrossId
)
&&
Objects
.
equals
(
Integer
.
valueOf
(
schemeId
),
curSchemeNo
)
&&
Objects
.
equals
(
Integer
.
valueOf
(
phaseId
),
curPhaseNo
))
{
Map
<
Integer
,
List
<
CrossLightsPO
>>
dirTurnMap
=
crossPhaseDirTurnPojo
.
getDirTurnMap
();
if
(!
dirTurnMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
Integer
,
List
<
CrossLightsPO
>>
item
:
dirTurnMap
.
entrySet
())
{
LightsStatusVO2
.
DirInfo
dirInfo
=
new
LightsStatusVO2
.
DirInfo
();
Integer
dir
=
item
.
getKey
();
List
<
LightsStatusVO2
.
TurnInfo
>
turnList
=
new
ArrayList
<>();
List
<
CrossLightsPO
>
value
=
item
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
value
))
{
for
(
CrossLightsPO
crossLightsPO
:
value
)
{
Integer
type
=
crossLightsPO
.
getType
();
Integer
curTurn
=
crossLightsPO
.
getTurn
();
String
color
=
""
;
for
(
LightsStatusVO2
.
DirInfo
info
:
dirLampGroupMapList
)
{
String
statusDir
=
info
.
getDir
();
if
(
StringUtils
.
equals
(
statusDir
,
String
.
valueOf
(
dir
)))
{
List
<
LightsStatusVO2
.
TurnInfo
>
statusTurnList
=
info
.
getTurnList
();
for
(
LightsStatusVO2
.
TurnInfo
turnInfo
:
statusTurnList
)
{
String
statusTurn
=
turnInfo
.
getTurn
();
if
(
StringUtils
.
equals
(
String
.
valueOf
(
curTurn
),
statusTurn
))
{
color
=
turnInfo
.
getColor
();
}
}
}
}
String
turn
=
""
;
// 过滤行人
if
(
Objects
.
equals
(
3
,
type
))
{
continue
;
}
if
(
Objects
.
equals
(
2
,
type
))
{
for
(
int
i
=
1
;
i
<=
2
;
i
++)
{
// 设置转向信息
LightsStatusVO2
.
TurnInfo
turnInfo
=
new
LightsStatusVO2
.
TurnInfo
();
turnInfo
.
setTurn
(
String
.
valueOf
(
i
));
turnInfo
.
setColor
(
color
);
turnInfo
.
setCountDown
(
0
);
turnList
.
add
(
turnInfo
);
}
}
else
if
(
Objects
.
equals
(
1
,
type
)){
turn
=
String
.
valueOf
(
curTurn
);
LightsStatusVO2
.
TurnInfo
turnInfo
=
new
LightsStatusVO2
.
TurnInfo
();
turnInfo
.
setTurn
(
turn
);
turnInfo
.
setColor
(
color
);
turnInfo
.
setCountDown
(
0
);
turnList
.
add
(
turnInfo
);
}
}
}
if
(!
CollectionUtils
.
isEmpty
(
turnList
))
{
dirInfo
.
setDir
(
String
.
valueOf
(
dir
));
dirInfo
.
setTurnList
(
turnList
);
curPhaseList
.
add
(
dirInfo
);
}
}
}
}
}
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
//log.error("获取当前相位灯态倒计时失败:", e);
}
return
curPhaseList
;
}
@AspectLog
(
description
=
"灯态数据历史数据列表"
,
operationType
=
BaseEnum
.
OperationTypeEnum
.
QUERY
)
@PostMapping
(
value
=
"/lightStatusHist"
,
produces
=
MediaType
.
APPLICATION_JSON
)
...
...
signal-utc-service/src/main/java/net/wanji/utc/task/CommandFaildTask.java
View file @
a06a8b5c
...
...
@@ -215,7 +215,8 @@ public class CommandFaildTask {
String
ip
=
"localhost"
;
signalCommandLogPO
.
setIp
(
ip
);
log
.
info
(
"定时任务返回 信息jsonViewObject:{}"
,
jsonViewObject
);
if
(
code
==
200
)
{
// 添加恢复逻辑,因为延迟问题,自动恢复四次后认为恢复成功
if
(
code
==
200
&&
updateCount
==
3
)
{
signalCommandLogPO
.
setCommandResult
(
1
);
signalCommandLogPO
.
setUpdateCount
(
0
);
}
else
{
...
...
signal-utc-service/src/main/java/net/wanji/utc/task/SignalStatusTask.java
View file @
a06a8b5c
...
...
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.common.utils.tool.JacksonUtils
;
import
net.wanji.databus.dao.entity.CrossLightsPO
;
import
net.wanji.databus.dao.entity.CrossLightsStatusHistPO
;
import
net.wanji.databus.dao.entity.SignalCommandLogPO
;
import
net.wanji.databus.dao.entity.SignalCommandPO
;
...
...
@@ -18,9 +19,11 @@ import net.wanji.databus.vo.LightsStatusVO2;
import
net.wanji.feign.service.EHualuFeignClients
;
import
net.wanji.feign.service.UtcDTFeignClients
;
import
net.wanji.feign.service.UtcHisenseFeignClients
;
import
net.wanji.utc.cache.CrossPhaseDirTurnCache
;
import
net.wanji.utc.common.constant.Constants
;
import
net.wanji.utc.common.typeenum.BasicEnum
;
import
net.wanji.utc.kafka.ProducerHandler
;
import
net.wanji.utc.po.hk.CrossPhaseDirTurnPojo
;
import
net.wanji.utc.service.runninginfo.HkLightsStatusService
;
import
net.wanji.utc.service.runninginfo.SignalStatusService
;
import
net.wanji.utc.util.RedisUtil
;
...
...
@@ -265,6 +268,13 @@ public class SignalStatusTask {
dirList
.
add
(
dirInfo
);
}
lightsStatusVO2
.
setDirLampGroupMapList
(
dirList
);
/**
* 处理灯态,获取当前相位号灯态
*/
List
<
LightsStatusVO2
.
DirInfo
>
curPhaseDirList
=
getCurPhaseDirList
(
lightsStatusVO2
);
lightsStatusVO2
.
setCurPhaseLampGroupMapList
(
curPhaseDirList
);
listResult
.
add
(
lightsStatusVO2
);
}
}
catch
(
Exception
e
)
{
...
...
@@ -274,6 +284,98 @@ public class SignalStatusTask {
return
listResult
;
}
/**
* 通过当前灯态获取当前相位的灯态方向转向倒计时信息
* @param lightsStatusVO2
* @return
*/
private
static
List
<
LightsStatusVO2
.
DirInfo
>
getCurPhaseDirList
(
LightsStatusVO2
lightsStatusVO2
)
{
List
<
LightsStatusVO2
.
DirInfo
>
curPhaseList
=
new
ArrayList
<>();
try
{
String
crossId
=
lightsStatusVO2
.
getCrossId
();
String
schemeId
=
lightsStatusVO2
.
getSchemeId
();
String
phaseId
=
lightsStatusVO2
.
getPhaseId
();
List
<
LightsStatusVO2
.
DirInfo
>
dirLampGroupMapList
=
lightsStatusVO2
.
getDirLampGroupMapList
();
Map
<
String
,
List
<
CrossPhaseDirTurnPojo
>>
crossInfoMap
=
CrossPhaseDirTurnCache
.
crossInfoMap
;
if
(!
crossInfoMap
.
isEmpty
())
{
List
<
CrossPhaseDirTurnPojo
>
crossPhaseDirTurnPojos
=
crossInfoMap
.
get
(
crossId
);
if
(!
CollectionUtils
.
isEmpty
(
crossPhaseDirTurnPojos
))
{
for
(
CrossPhaseDirTurnPojo
crossPhaseDirTurnPojo
:
crossPhaseDirTurnPojos
)
{
String
curCrossId
=
crossPhaseDirTurnPojo
.
getCrossId
();
Integer
curSchemeNo
=
crossPhaseDirTurnPojo
.
getSchemeNo
();
Integer
curPhaseNo
=
crossPhaseDirTurnPojo
.
getPhaseNo
();
if
(
StringUtils
.
equals
(
crossId
,
curCrossId
)
&&
Objects
.
equals
(
Integer
.
valueOf
(
schemeId
),
curSchemeNo
)
&&
Objects
.
equals
(
Integer
.
valueOf
(
phaseId
),
curPhaseNo
))
{
Map
<
Integer
,
List
<
CrossLightsPO
>>
dirTurnMap
=
crossPhaseDirTurnPojo
.
getDirTurnMap
();
if
(!
dirTurnMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
Integer
,
List
<
CrossLightsPO
>>
item
:
dirTurnMap
.
entrySet
())
{
LightsStatusVO2
.
DirInfo
dirInfo
=
new
LightsStatusVO2
.
DirInfo
();
Integer
dir
=
item
.
getKey
();
List
<
LightsStatusVO2
.
TurnInfo
>
turnList
=
new
ArrayList
<>();
List
<
CrossLightsPO
>
value
=
item
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
value
))
{
for
(
CrossLightsPO
crossLightsPO
:
value
)
{
Integer
type
=
crossLightsPO
.
getType
();
Integer
curTurn
=
crossLightsPO
.
getTurn
();
String
color
=
""
;
for
(
LightsStatusVO2
.
DirInfo
info
:
dirLampGroupMapList
)
{
String
statusDir
=
info
.
getDir
();
if
(
StringUtils
.
equals
(
statusDir
,
String
.
valueOf
(
dir
)))
{
List
<
LightsStatusVO2
.
TurnInfo
>
statusTurnList
=
info
.
getTurnList
();
for
(
LightsStatusVO2
.
TurnInfo
turnInfo
:
statusTurnList
)
{
String
statusTurn
=
turnInfo
.
getTurn
();
if
(
StringUtils
.
equals
(
String
.
valueOf
(
curTurn
),
statusTurn
))
{
color
=
turnInfo
.
getColor
();
}
}
}
}
String
turn
=
""
;
// 过滤行人
if
(
Objects
.
equals
(
3
,
type
))
{
continue
;
}
if
(
Objects
.
equals
(
2
,
type
))
{
for
(
int
i
=
1
;
i
<=
2
;
i
++)
{
// 设置转向信息
LightsStatusVO2
.
TurnInfo
turnInfo
=
new
LightsStatusVO2
.
TurnInfo
();
turnInfo
.
setTurn
(
String
.
valueOf
(
i
));
turnInfo
.
setColor
(
color
);
turnInfo
.
setCountDown
(
0
);
turnList
.
add
(
turnInfo
);
}
}
else
if
(
Objects
.
equals
(
1
,
type
)){
turn
=
String
.
valueOf
(
curTurn
);
LightsStatusVO2
.
TurnInfo
turnInfo
=
new
LightsStatusVO2
.
TurnInfo
();
turnInfo
.
setTurn
(
turn
);
turnInfo
.
setColor
(
color
);
turnInfo
.
setCountDown
(
0
);
turnList
.
add
(
turnInfo
);
}
}
}
if
(!
CollectionUtils
.
isEmpty
(
turnList
))
{
dirInfo
.
setDir
(
String
.
valueOf
(
dir
));
dirInfo
.
setTurnList
(
turnList
);
curPhaseList
.
add
(
dirInfo
);
}
}
}
}
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"获取当前相位灯态倒计时失败:"
,
e
);
}
return
curPhaseList
;
}
/**
* 设置方向转向信息实体
*
...
...
wj-databus/src/main/java/net/wanji/databus/dao/entity/CrossLightsStatusHistPO.java
View file @
a06a8b5c
package
net
.
wanji
.
databus
.
dao
.
entity
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.util.Date
;
...
...
@@ -13,6 +14,8 @@ public class CrossLightsStatusHistPO {
private
String
crossId
;
private
Integer
batchTime
;
private
String
lightsStatusJson
;
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
gmtCreate
;
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
gmtModified
;
}
wj-databus/src/main/java/net/wanji/databus/vo/LightsStatusVO2.java
View file @
a06a8b5c
...
...
@@ -38,6 +38,8 @@ public class LightsStatusVO2 extends BaseCrossInfo {
private
String
schemeId
;
@ApiModelProperty
(
value
=
"灯组状态"
)
private
List
<
DirInfo
>
dirLampGroupMapList
;
@ApiModelProperty
(
value
=
"当前相位灯组状态"
)
private
List
<
DirInfo
>
curPhaseLampGroupMapList
;
@ApiModelProperty
(
value
=
"数据上报时间戳"
)
@Field
(
type
=
FieldType
.
Keyword
,
name
=
"timeStamp"
)
private
String
timeStamp
;
...
...
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