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
dd756b7b
Commit
dd756b7b
authored
Oct 18, 2023
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 海信代码优化
parent
176a1891
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
61 additions
and
42 deletions
+61
-42
CrossSchemePhaseTimeCountCache.java
...nji/utc/hisense/cache/CrossSchemePhaseTimeCountCache.java
+7
-2
SignalDataCache.java
...ain/java/net/wanji/utc/hisense/cache/SignalDataCache.java
+3
-1
SignalStatusController.java
.../wanji/utc/hisense/controller/SignalStatusController.java
+9
-3
SignalStatusServiceImpl.java
...nji/utc/hisense/service/impl/SignalStatusServiceImpl.java
+1
-1
HisensePhaseCountDownTask.java
...net/wanji/utc/hisense/task/HisensePhaseCountDownTask.java
+41
-35
No files found.
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/cache/CrossSchemePhaseTimeCountCache.java
View file @
dd756b7b
...
...
@@ -38,10 +38,15 @@ public class CrossSchemePhaseTimeCountCache implements CommandLineRunner {
@Override
public
void
run
(
String
...
args
)
throws
Exception
{
init
();
try
{
init
();
}
catch
(
Exception
e
)
{
log
.
error
(
"路口方案相位倒计时缓存加载失败"
,
e
);
throw
new
Exception
(
e
);
}
}
public
void
init
()
{
public
void
init
()
throws
Exception
{
List
<
CrossInfoPO
>
crossInfoPOList
=
crossInfoMapper
.
selectAll
();
if
(!
CollectionUtils
.
isEmpty
(
crossInfoPOList
))
{
for
(
CrossInfoPO
crossInfoPO
:
crossInfoPOList
)
{
...
...
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/cache/SignalDataCache.java
View file @
dd756b7b
...
...
@@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* @author duanruiming
...
...
@@ -22,6 +23,7 @@ public class SignalDataCache {
public
static
final
Map
<
String
,
List
<
PhaseInfoPojo
>>
phaseInfoCache
=
new
HashMap
<>();
// 海信推送灯态数据
public
static
final
Map
<
String
,
RunningLightsStatusPojo
>
runningStateInfoCacheUdp
=
new
HashMap
<>();
public
static
final
Map
<
String
,
LightsStatusVO
>
runningStateInfoCache
=
new
HashMap
<>();
public
static
final
Map
<
String
,
LightsStatusVO
>
runningStateInfoCache
=
new
ConcurrentHashMap
<>();
public
static
final
Map
<
String
,
LightsStatusVO
>
runningStateInfoCacheNoLamp
=
new
ConcurrentHashMap
<>();
public
static
final
Map
<
String
,
Long
>
runningStatusStampMap
=
new
HashMap
<>();
}
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/controller/SignalStatusController.java
View file @
dd756b7b
...
...
@@ -5,11 +5,13 @@ package net.wanji.utc.hisense.controller;
* @date 2022/12/1 15:07
*/
import
com.fasterxml.jackson.core.JsonParseException
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiResponse
;
import
io.swagger.annotations.ApiResponses
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.annotation.aspect.AspectLog
;
import
net.wanji.common.enums.BaseEnum
;
import
net.wanji.common.framework.rest.JsonViewObject
;
...
...
@@ -34,6 +36,7 @@ import java.util.List;
@RequestMapping
(
"/signalStatus"
)
@RestController
@RequiredArgsConstructor
@Slf4j
public
class
SignalStatusController
{
private
final
SignalStatusService
signalStatusService
;
...
...
@@ -65,10 +68,13 @@ public class SignalStatusController {
@AspectLog
(
description
=
"接收海信灯态"
,
operationType
=
BaseEnum
.
OperationTypeEnum
.
QUERY
)
@PostMapping
(
value
=
"/receiveLightStatus"
,
produces
=
MediaType
.
APPLICATION_JSON
)
@ApiOperation
(
value
=
"接收海信灯态"
,
notes
=
"接收海信灯态"
,
response
=
LightsStatusVO
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
)
public
JsonViewObject
receiveLightStatus
(
@RequestBody
List
<
HisenseLightStatusPojo
>
hisenseLightStatusPojos
)
throws
Exception
{
signalStatusService
.
receiveLightStatus
(
hisenseLightStatusPojos
);
@ApiOperation
(
value
=
"接收海信灯态"
,
notes
=
"接收海信灯态"
,
response
=
LightsStatusVO
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
)
public
JsonViewObject
receiveLightStatus
(
@RequestBody
List
<
HisenseLightStatusPojo
>
hisenseLightStatusPojos
)
throws
Exception
{
JsonViewObject
jsonViewObject
=
JsonViewObject
.
newInstance
();
try
{
signalStatusService
.
receiveLightStatus
(
hisenseLightStatusPojos
);
}
catch
(
JsonParseException
e
)
{
}
return
jsonViewObject
.
success
(
"海信灯态接收成功"
);
}
}
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/service/impl/SignalStatusServiceImpl.java
View file @
dd756b7b
...
...
@@ -174,7 +174,7 @@ public class SignalStatusServiceImpl implements SignalStatusService {
List
<
CrossSchemePhaseCountDownDTO
>
crossSchemePhaseCountDownList
=
CrossSchemePhaseTimeCountCache
.
crossSchemePhaseCountDownList
;
setLightsStatusVOPhaseNoAndCountDown
(
lightsStatusVO
,
crossId
,
runTime
,
planId
,
crossSchemePhaseCountDownList
);
SignalDataCache
.
runningStateInfoCache
.
put
(
crossId
,
lightsStatusVO
);
SignalDataCache
.
runningStateInfoCache
NoLamp
.
put
(
crossId
,
lightsStatusVO
);
}
}
}
...
...
signal-utc-hisense-service/src/main/java/net/wanji/utc/hisense/task/HisensePhaseCountDownTask.java
View file @
dd756b7b
...
...
@@ -36,36 +36,38 @@ public class HisensePhaseCountDownTask {
private
CrossSchemeMapper
crossSchemeMapper
;
@Scheduled
(
fixedRate
=
1000
,
initialDelay
=
1000
)
public
void
phaseTimeCountDown
()
{
Map
<
String
,
LightsStatusVO
>
runningStateInfoCache
=
SignalDataCache
.
runningStateInfoCache
;
if
(!
runningStateInfoCache
.
isEmpty
())
{
for
(
Map
.
Entry
<
String
,
LightsStatusVO
>
entry
:
runningStateInfoCache
.
entrySet
())
{
String
crossId
=
entry
.
getKey
();
LightsStatusVO
lightsStatusVO
=
entry
.
getValue
();
String
schemeStartTime
=
lightsStatusVO
.
getSchemeStartTim
e
();
String
phaseId
=
lightsStatusVO
.
getPhaseId
();
String
schemeId
=
lightsStatusVO
.
getSchem
eId
();
Integer
cyclePhaseCountDown
=
lightsStatusVO
.
getCyclePhaseCountDown
();
CrossSchemePO
crossSchemePO
=
crossSchemeMapper
.
selectByCrossIdAndSchemeNo
(
crossId
,
Integer
.
valueOf
(
schemeId
));
public
void
phaseTimeCountDown
()
throws
Exception
{
try
{
Map
<
String
,
LightsStatusVO
>
runningStateInfoCacheNoLamp
=
SignalDataCache
.
runningStateInfoCacheNoLamp
;
if
(!
runningStateInfoCacheNoLamp
.
isEmpty
())
{
for
(
Map
.
Entry
<
String
,
LightsStatusVO
>
entry
:
runningStateInfoCacheNoLamp
.
entrySet
())
{
String
crossId
=
entry
.
getKey
();
LightsStatusVO
lightsStatusVO
=
entry
.
getValu
e
();
String
schemeStartTime
=
lightsStatusVO
.
getSchemeStartTime
();
String
phaseId
=
lightsStatusVO
.
getPhas
eId
();
String
schemeId
=
lightsStatusVO
.
getSchemeId
();
CrossSchemePO
crossSchemePO
=
crossSchemeMapper
.
selectByCrossIdAndSchemeNo
(
crossId
,
Integer
.
valueOf
(
schemeId
));
// 通过时段表,切换方案 凌晨00:00 如果切换下一个日期方案,可能RefreshCacheTask还没执行
String
nextSectionSchemeNo
=
CrossRunSchemeCache
.
currentRunSchemeNoCache
.
get
(
crossId
);
String
currentTime
=
String
.
valueOf
(
new
Date
().
getTime
());
if
(
StringUtils
.
equalsIgnoreCase
(
schemeStartTime
,
currentTime
))
{
crossSchemePO
=
crossSchemeMapper
.
selectByCrossIdAndSchemeNo
(
crossId
,
Integer
.
valueOf
(
nextSectionSchemeNo
));
executeNextSectionScheme
(
crossId
,
lightsStatusVO
,
crossSchemePO
);
lightsStatusVO
.
setCycleLen
(
crossSchemePO
.
getCycle
());
}
else
{
executeNextPeriod
(
crossId
,
lightsStatusVO
,
phaseId
,
crossSchemePO
);
}
// 当前方案下一周期
setDirLampGroupMap
(
lightsStatusVO
);
if
(
Objects
.
nonNull
(
lightsStatusVO
.
getDirLampGroupMap
()))
{
runningStateInfoCache
.
put
(
crossId
,
lightsStatusVO
);
}
else
{
log
.
error
(
"当前灯态为空,为啥呢:{}"
,
lightsStatusVO
);
// 通过时段表,切换方案 凌晨00:00 如果切换下一个日期方案,可能RefreshCacheTask还没执行
String
nextSectionSchemeNo
=
CrossRunSchemeCache
.
currentRunSchemeNoCache
.
get
(
crossId
);
String
currentTime
=
String
.
valueOf
(
new
Date
().
getTime
());
if
(
StringUtils
.
equalsIgnoreCase
(
schemeStartTime
,
currentTime
))
{
crossSchemePO
=
crossSchemeMapper
.
selectByCrossIdAndSchemeNo
(
crossId
,
Integer
.
valueOf
(
nextSectionSchemeNo
));
executeNextSectionScheme
(
crossId
,
lightsStatusVO
,
crossSchemePO
);
lightsStatusVO
.
setCycleLen
(
crossSchemePO
.
getCycle
());
}
else
{
executeNextPeriod
(
crossId
,
lightsStatusVO
,
phaseId
,
crossSchemePO
);
}
// 当前方案下一周期
setDirLampGroupMap
(
lightsStatusVO
);
if
(
Objects
.
nonNull
(
lightsStatusVO
.
getDirLampGroupMap
()))
{
SignalDataCache
.
runningStateInfoCache
.
put
(
crossId
,
lightsStatusVO
);
}
}
}
}
catch
(
Exception
e
)
{
log
.
error
(
"定时任务计算路口相位灯态倒计时异常"
,
e
);
throw
new
Exception
(
e
);
}
}
...
...
@@ -75,7 +77,7 @@ public class HisensePhaseCountDownTask {
* @param crossSchemePO
* @description 通过日计划缓存,切换下一个时段方案
*/
private
void
executeNextSectionScheme
(
String
crossId
,
LightsStatusVO
lightsStatusVO
,
CrossSchemePO
crossSchemePO
)
{
private
void
executeNextSectionScheme
(
String
crossId
,
LightsStatusVO
lightsStatusVO
,
CrossSchemePO
crossSchemePO
)
throws
Exception
{
if
(
Objects
.
nonNull
(
crossSchemePO
))
{
List
<
CrossPhasePO
>
nextSchemePhaseList
=
crossPhaseMapper
.
selectByCrossIdAndPlanId
(
crossId
,
String
.
valueOf
(
crossSchemePO
.
getId
()));
Integer
phaseTime
=
0
;
...
...
@@ -100,7 +102,7 @@ public class HisensePhaseCountDownTask {
* @param crossSchemePO
* @description 切换下一方案周期
*/
private
void
executeNextPeriod
(
String
crossId
,
LightsStatusVO
lightsStatusVO
,
String
phaseId
,
CrossSchemePO
crossSchemePO
)
{
private
void
executeNextPeriod
(
String
crossId
,
LightsStatusVO
lightsStatusVO
,
String
phaseId
,
CrossSchemePO
crossSchemePO
)
throws
Exception
{
if
(
lightsStatusVO
.
getCyclePhaseCountDown
()
<=
1
&&
Objects
.
nonNull
(
crossSchemePO
))
{
List
<
CrossPhasePO
>
crossPhasePOS
=
crossPhaseMapper
.
selectByCrossIdAndPlanId
(
crossId
,
String
.
valueOf
(
crossSchemePO
.
getId
()));
Integer
nextPhaseTime
=
0
;
...
...
@@ -129,7 +131,7 @@ public class HisensePhaseCountDownTask {
* @param lightsStatusVO
* @description 通过当前周期倒计时方案相位灯态
*/
public
void
setDirLampGroupMap
(
LightsStatusVO
lightsStatusVO
)
{
public
void
setDirLampGroupMap
(
LightsStatusVO
lightsStatusVO
)
throws
Exception
{
String
crossId
=
lightsStatusVO
.
getCrossId
();
String
currentSchemeNo
=
lightsStatusVO
.
getSchemeId
();
String
currentPhaseNo
=
lightsStatusVO
.
getPhaseId
();
...
...
@@ -157,7 +159,9 @@ public class HisensePhaseCountDownTask {
}
}
private
static
void
setDirTurnColor
(
Integer
cyclePhaseCountDown
,
Map
<
String
,
Object
>
dirLampGroupMap
,
Integer
yellowTime
,
Integer
redTime
,
Map
<
Integer
,
List
<
CrossLightsPO
>>
dirTurnMap
)
{
private
static
void
setDirTurnColor
(
Integer
cyclePhaseCountDown
,
Map
<
String
,
Object
>
dirLampGroupMap
,
Integer
yellowTime
,
Integer
redTime
,
Map
<
Integer
,
List
<
CrossLightsPO
>>
dirTurnMap
)
throws
Exception
{
for
(
Map
.
Entry
<
Integer
,
List
<
CrossLightsPO
>>
dirEntry
:
dirTurnMap
.
entrySet
())
{
Integer
dir
=
dirEntry
.
getKey
();
List
<
CrossLightsPO
>
lightsList
=
dirEntry
.
getValue
();
...
...
@@ -174,7 +178,7 @@ public class HisensePhaseCountDownTask {
color
=
setTurnColor
(
cyclePhaseCountDown
,
yellowTime
,
redTime
,
turnColor
,
color
,
turn
,
turnStr
);
turnColor
.
put
(
turnStr
,
color
);
}
if
(
cyclePhaseCountDown
<=
2
)
{
if
(
cyclePhaseCountDown
<=
redTime
)
{
setAllTurnColorRed
(
turnColor
,
type
,
color
);
}
else
{
setAllTurnColor
(
turnColor
,
type
,
color
);
...
...
@@ -183,7 +187,9 @@ public class HisensePhaseCountDownTask {
}
}
private
static
String
setTurnColor
(
Integer
cyclePhaseCountDown
,
Integer
yellowTime
,
Integer
redTime
,
Map
<
String
,
String
>
turnColor
,
String
color
,
Integer
turn
,
String
turnStr
)
{
private
static
String
setTurnColor
(
Integer
cyclePhaseCountDown
,
Integer
yellowTime
,
Integer
redTime
,
Map
<
String
,
String
>
turnColor
,
String
color
,
Integer
turn
,
String
turnStr
)
throws
Exception
{
if
(
cyclePhaseCountDown
>
yellowTime
+
redTime
)
{
color
=
"green"
;
if
(
turn
==
20
)
{
...
...
@@ -211,7 +217,7 @@ public class HisensePhaseCountDownTask {
* @param type
* @param color
*/
private
static
void
setAllTurnColorRed
(
Map
<
String
,
String
>
turnColor
,
Integer
type
,
String
color
)
{
private
static
void
setAllTurnColorRed
(
Map
<
String
,
String
>
turnColor
,
Integer
type
,
String
color
)
throws
Exception
{
List
<
String
>
allTurn
=
Arrays
.
asList
(
"1"
,
"2"
,
"3"
);
for
(
String
turnStr
:
allTurn
)
{
if
(!
turnColor
.
containsKey
(
turnStr
))
{
...
...
@@ -229,7 +235,7 @@ public class HisensePhaseCountDownTask {
* @param type
* @param color
*/
private
static
void
setAllTurnColor
(
Map
<
String
,
String
>
turnColor
,
Integer
type
,
String
color
)
{
private
static
void
setAllTurnColor
(
Map
<
String
,
String
>
turnColor
,
Integer
type
,
String
color
)
throws
Exception
{
List
<
String
>
allTurn
=
Arrays
.
asList
(
"1"
,
"2"
,
"3"
);
for
(
String
turn
:
allTurn
)
{
if
(!
turnColor
.
containsKey
(
turn
))
{
...
...
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