Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wj-datacenter-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
jinan
wj-datacenter-platform
Commits
a1b239e8
Commit
a1b239e8
authored
Jul 15, 2024
by
zhoushiguang
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
12f6403b
d31db0d5
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
247 additions
and
194 deletions
+247
-194
CrossGreenWaveInfoCache.java
...a/net/wanji/datacenter/cache/CrossGreenWaveInfoCache.java
+3
-5
CrossSchemePhaseLightsCache.java
...t/wanji/datacenter/cache/CrossSchemePhaseLightsCache.java
+39
-29
CrossTurnWeekMaxFlowCache.java
...net/wanji/datacenter/cache/CrossTurnWeekMaxFlowCache.java
+25
-16
WeekDirFreeFlowSpeedCache.java
...net/wanji/datacenter/cache/WeekDirFreeFlowSpeedCache.java
+30
-20
WeekTurnFreeFlowSpeedCache.java
...et/wanji/datacenter/cache/WeekTurnFreeFlowSpeedCache.java
+31
-23
RedisConfig.java
...rc/main/java/net/wanji/datacenter/config/RedisConfig.java
+2
-6
Constant.java
...src/main/java/net/wanji/datacenter/constant/Constant.java
+2
-0
LanePeriodicDataProcessServiceImpl.java
...nter/service/impl/LanePeriodicDataProcessServiceImpl.java
+20
-12
DataCenterTask.java
...c/main/java/net/wanji/datacenter/task/DataCenterTask.java
+42
-37
DataProcessTask.java
.../main/java/net/wanji/datacenter/task/DataProcessTask.java
+53
-46
No files found.
wj-datacenter-service/src/main/java/net/wanji/datacenter/cache/CrossGreenWaveInfoCache.java
View file @
a1b239e8
...
...
@@ -11,10 +11,7 @@ import org.springframework.util.CollectionUtils;
import
javax.annotation.Resource
;
import
java.time.LocalTime
;
import
java.util.Comparator
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -51,7 +48,8 @@ public class CrossGreenWaveInfoCache implements InitializingBean {
List
<
GreenwaveCrossPO
>
greenWaveCrossPOS
=
greenwaveCrossMapper
.
selectByGreenwaveId
(
greenWaveId
);
if
(!
CollectionUtils
.
isEmpty
(
greenWaveCrossPOS
))
{
List
<
GreenwaveCrossPO
>
greenWaveCrossIds
=
greenWaveCrossPOS
.
stream
()
.
filter
(
po
->
LocalTime
.
parse
(
po
.
getStartTime
()).
isBefore
(
now
)
&&
LocalTime
.
parse
(
po
.
getEndTime
()).
isAfter
(
now
))
.
filter
(
po
->
LocalTime
.
parse
(
po
.
getStartTime
()).
isBefore
(
now
)
&&
LocalTime
.
parse
(
po
.
getEndTime
()).
isAfter
(
now
)
&&
Objects
.
equals
(
0
,
po
.
getWeek
()))
.
sorted
(
Comparator
.
comparingInt
(
GreenwaveCrossPO:
:
getSort
))
.
collect
(
Collectors
.
toList
());
greenWaveInfoMap
.
put
(
greenWaveId
,
greenWaveCrossIds
);
...
...
wj-datacenter-service/src/main/java/net/wanji/datacenter/cache/CrossSchemePhaseLightsCache.java
View file @
a1b239e8
...
...
@@ -48,35 +48,7 @@ public class CrossSchemePhaseLightsCache implements CommandLineRunner {
Integer
schemeId
=
baseCrossSchemePO
.
getId
();
List
<
CrossPhasePO
>
crossPhasePOList
=
baseCrossPhaseMapper
.
selectByCrossIdAndSchemeId
(
crossId
,
schemeId
);
if
(!
CollectionUtils
.
isEmpty
(
crossPhasePOList
))
{
for
(
CrossPhasePO
crossPhasePO
:
crossPhasePOList
)
{
Integer
phaseId
=
crossPhasePO
.
getId
();
String
phaseNo
=
crossPhasePO
.
getPhaseNo
();
Integer
redTime
=
crossPhasePO
.
getRedTime
();
Integer
phaseTime
=
crossPhasePO
.
getPhaseTime
();
Integer
greenTime
=
crossPhasePO
.
getGreenTime
();
List
<
CrossPhaseLightsPO
>
crossPhaseLightsPOList
=
baseCrossPhaseLightsMapper
.
selectByPhaseId
(
phaseId
);
if
(!
CollectionUtils
.
isEmpty
(
crossPhaseLightsPOList
))
{
for
(
CrossPhaseLightsPO
crossPhaseLightsPO
:
crossPhaseLightsPOList
)
{
CrossSchemePhaseDirTurnDTO
crossSchemePhaseDirTurnDTO
=
new
CrossSchemePhaseDirTurnDTO
();
crossSchemePhaseDirTurnDTO
.
setCrossId
(
crossId
);
crossSchemePhaseDirTurnDTO
.
setSchemeNo
(
schemeNo
);
crossSchemePhaseDirTurnDTO
.
setPhaseNo
(
phaseNo
);
Integer
lightsId
=
crossPhaseLightsPO
.
getLightsId
();
BaseCrossLightsPO
baseCrossLightsPO
=
baseCrossLightsMapper
.
selectById
(
lightsId
);
Integer
dir
=
baseCrossLightsPO
.
getDir
();
crossSchemePhaseDirTurnDTO
.
setLightsDir
(
dir
);
Integer
turn
=
baseCrossLightsPO
.
getType
();
if
(
turn
==
20
)
{
continue
;
}
crossSchemePhaseDirTurnDTO
.
setPhaseTime
(
phaseTime
);
crossSchemePhaseDirTurnDTO
.
setGreenTime
(
greenTime
);
crossSchemePhaseDirTurnDTO
.
setRedTime
(
redTime
);
crossSchemePhaseDirTurnDTO
.
setLightsTurn
(
turn
);
crossSchemePhaseDirTurnDTOList
.
add
(
crossSchemePhaseDirTurnDTO
);
}
}
}
buildData
(
crossId
,
schemeNo
,
crossPhasePOList
);
}
}
}
...
...
@@ -87,6 +59,44 @@ public class CrossSchemePhaseLightsCache implements CommandLineRunner {
}
}
/**
* 构建路口方案相位方向转向实体
* @param crossId 路口编号
* @param schemeNo
* @param crossPhasePOList
*/
private
void
buildData
(
String
crossId
,
String
schemeNo
,
List
<
CrossPhasePO
>
crossPhasePOList
)
{
for
(
CrossPhasePO
crossPhasePO
:
crossPhasePOList
)
{
Integer
phaseId
=
crossPhasePO
.
getId
();
String
phaseNo
=
crossPhasePO
.
getPhaseNo
();
Integer
redTime
=
crossPhasePO
.
getRedTime
();
Integer
phaseTime
=
crossPhasePO
.
getPhaseTime
();
Integer
greenTime
=
crossPhasePO
.
getGreenTime
();
List
<
CrossPhaseLightsPO
>
crossPhaseLightsPOList
=
baseCrossPhaseLightsMapper
.
selectByPhaseId
(
phaseId
);
if
(!
CollectionUtils
.
isEmpty
(
crossPhaseLightsPOList
))
{
for
(
CrossPhaseLightsPO
crossPhaseLightsPO
:
crossPhaseLightsPOList
)
{
CrossSchemePhaseDirTurnDTO
crossSchemePhaseDirTurnDTO
=
new
CrossSchemePhaseDirTurnDTO
();
crossSchemePhaseDirTurnDTO
.
setCrossId
(
crossId
);
crossSchemePhaseDirTurnDTO
.
setSchemeNo
(
schemeNo
);
crossSchemePhaseDirTurnDTO
.
setPhaseNo
(
phaseNo
);
Integer
lightsId
=
crossPhaseLightsPO
.
getLightsId
();
BaseCrossLightsPO
baseCrossLightsPO
=
baseCrossLightsMapper
.
selectById
(
lightsId
);
Integer
dir
=
baseCrossLightsPO
.
getDir
();
crossSchemePhaseDirTurnDTO
.
setLightsDir
(
dir
);
Integer
turn
=
baseCrossLightsPO
.
getType
();
if
(
turn
==
20
)
{
continue
;
}
crossSchemePhaseDirTurnDTO
.
setPhaseTime
(
phaseTime
);
crossSchemePhaseDirTurnDTO
.
setGreenTime
(
greenTime
);
crossSchemePhaseDirTurnDTO
.
setRedTime
(
redTime
);
crossSchemePhaseDirTurnDTO
.
setLightsTurn
(
turn
);
crossSchemePhaseDirTurnDTOList
.
add
(
crossSchemePhaseDirTurnDTO
);
}
}
}
}
@Override
public
void
run
(
String
...
args
)
throws
Exception
{
try
{
...
...
wj-datacenter-service/src/main/java/net/wanji/datacenter/cache/CrossTurnWeekMaxFlowCache.java
View file @
a1b239e8
...
...
@@ -43,22 +43,31 @@ public class CrossTurnWeekMaxFlowCache implements CommandLineRunner {
queryWrapper
.
between
(
CrossTurnDataHistPO:
:
getStartTime
,
lastWeek
,
lastDay
);
List
<
CrossTurnDataHistPO
>
crossTurnDataHistPOS
=
crossTurnDataHistMapper
.
selectList
(
queryWrapper
);
if
(!
CollectionUtils
.
isEmpty
(
crossTurnDataHistPOS
))
{
Map
<
Integer
,
List
<
CrossTurnDataHistPO
>>
dirDataPOsMap
=
crossTurnDataHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossTurnDataHistPO:
:
getInDir
));
for
(
Map
.
Entry
<
Integer
,
List
<
CrossTurnDataHistPO
>>
entry
:
dirDataPOsMap
.
entrySet
())
{
Integer
dir
=
entry
.
getKey
();
List
<
CrossTurnDataHistPO
>
dirHistPOS
=
entry
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
dirHistPOS
))
{
Map
<
String
,
List
<
CrossTurnDataHistPO
>>
turnDataPOMap
=
dirHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossTurnDataHistPO:
:
getTurnType
));
for
(
Map
.
Entry
<
String
,
List
<
CrossTurnDataHistPO
>>
turnEntry
:
turnDataPOMap
.
entrySet
())
{
String
turn
=
turnEntry
.
getKey
();
List
<
CrossTurnDataHistPO
>
turnDataHistPOList
=
turnEntry
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
turnDataHistPOList
))
{
OptionalInt
max
=
turnDataHistPOList
.
stream
().
map
(
CrossTurnDataHistPO:
:
getFlow
).
mapToInt
(
Integer:
:
intValue
).
max
();
if
(
max
.
isPresent
())
{
String
key
=
crossId
.
concat
(
Constants
.
UNDERLINE
).
concat
(
String
.
valueOf
(
dir
)).
concat
(
Constants
.
UNDERLINE
).
concat
(
turn
);
crossTurnWeekMaxFlowMap
.
put
(
key
,
max
.
getAsInt
());
}
}
calculateData
(
crossId
,
crossTurnDataHistPOS
);
}
}
}
/**
* 计算转向一周最大流量
* @param crossId
* @param crossTurnDataHistPOS
*/
private
static
void
calculateData
(
String
crossId
,
List
<
CrossTurnDataHistPO
>
crossTurnDataHistPOS
)
{
Map
<
Integer
,
List
<
CrossTurnDataHistPO
>>
dirDataPOsMap
=
crossTurnDataHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossTurnDataHistPO:
:
getInDir
));
for
(
Map
.
Entry
<
Integer
,
List
<
CrossTurnDataHistPO
>>
entry
:
dirDataPOsMap
.
entrySet
())
{
Integer
dir
=
entry
.
getKey
();
List
<
CrossTurnDataHistPO
>
dirHistPOS
=
entry
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
dirHistPOS
))
{
Map
<
String
,
List
<
CrossTurnDataHistPO
>>
turnDataPOMap
=
dirHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossTurnDataHistPO:
:
getTurnType
));
for
(
Map
.
Entry
<
String
,
List
<
CrossTurnDataHistPO
>>
turnEntry
:
turnDataPOMap
.
entrySet
())
{
String
turn
=
turnEntry
.
getKey
();
List
<
CrossTurnDataHistPO
>
turnDataHistPOList
=
turnEntry
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
turnDataHistPOList
))
{
OptionalInt
max
=
turnDataHistPOList
.
stream
().
map
(
CrossTurnDataHistPO:
:
getFlow
).
mapToInt
(
Integer:
:
intValue
).
max
();
if
(
max
.
isPresent
())
{
String
key
=
crossId
.
concat
(
Constants
.
UNDERLINE
).
concat
(
String
.
valueOf
(
dir
)).
concat
(
Constants
.
UNDERLINE
).
concat
(
turn
);
crossTurnWeekMaxFlowMap
.
put
(
key
,
max
.
getAsInt
());
}
}
}
...
...
wj-datacenter-service/src/main/java/net/wanji/datacenter/cache/WeekDirFreeFlowSpeedCache.java
View file @
a1b239e8
...
...
@@ -48,26 +48,7 @@ public class WeekDirFreeFlowSpeedCache implements CommandLineRunner {
queryWrapper
.
between
(
CrossDirDataHistPO:
:
getStartTime
,
lastWeek
,
lastDay
);
List
<
CrossDirDataHistPO
>
crossDirDataHistPOS
=
crossDirDataHistMapper
.
selectList
(
queryWrapper
);
if
(!
CollectionUtils
.
isEmpty
(
crossDirDataHistPOS
))
{
Map
<
Integer
,
List
<
CrossDirDataHistPO
>>
dirDataMap
=
crossDirDataHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossDirDataHistPO:
:
getDirType
));
if
(!
dirDataMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
Integer
,
List
<
CrossDirDataHistPO
>>
entry
:
dirDataMap
.
entrySet
())
{
Integer
dir
=
entry
.
getKey
();
List
<
CrossDirDataHistPO
>
dirDataHistPOS
=
entry
.
getValue
();
List
<
Double
>
weekSpeeds
=
dirDataHistPOS
.
stream
().
map
(
CrossDirDataHistPO:
:
getSpeed
).
sorted
().
collect
(
Collectors
.
toList
());
int
startIndex
=
(
int
)
(
0.85
*
weekSpeeds
.
size
());
int
endIndex
=
(
int
)
(
0.95
*
weekSpeeds
.
size
());
Double
freeFlowSpeed
=
weekSpeeds
.
subList
(
startIndex
,
endIndex
).
stream
().
mapToDouble
(
Double:
:
doubleValue
).
average
().
getAsDouble
();
if
(
freeFlowSpeed
==
0.0
)
{
freeFlowSpeed
=
60.0
;
}
crossDirFreeFlowSpeedMap
.
put
(
crossId
.
concat
(
Constants
.
UNDERLINE
).
concat
(
String
.
valueOf
(
dir
)),
freeFlowSpeed
);
CrossDirFreeFlowSpeedDTO
crossDirFreeFlowSpeedDTO
=
new
CrossDirFreeFlowSpeedDTO
();
crossDirFreeFlowSpeedDTO
.
setCrossId
(
crossId
);
crossDirFreeFlowSpeedDTO
.
setDir
(
dir
);
crossDirFreeFlowSpeedDTO
.
setFreeFlowSpeed
(
freeFlowSpeed
);
crossDirFreeFlowSpeedDTOS
.
add
(
crossDirFreeFlowSpeedDTO
);
}
}
calculateData
(
crossDirFreeFlowSpeedDTOS
,
crossId
,
crossDirDataHistPOS
);
}
}
Map
<
String
,
List
<
CrossDirFreeFlowSpeedDTO
>>
map
=
new
HashMap
<>(
1
);
...
...
@@ -75,6 +56,35 @@ public class WeekDirFreeFlowSpeedCache implements CommandLineRunner {
producerHandler
.
send2FirstKafka
(
Constants
.
CROSS_FREE_FLOW_SPEED_TOPIC
,
map
);
}
/**
* 计算前一周方向自由流速度85~95分位速度
* @param crossDirFreeFlowSpeedDTOS
* @param crossId
* @param crossDirDataHistPOS
*/
private
static
void
calculateData
(
List
<
CrossDirFreeFlowSpeedDTO
>
crossDirFreeFlowSpeedDTOS
,
String
crossId
,
List
<
CrossDirDataHistPO
>
crossDirDataHistPOS
)
{
Map
<
Integer
,
List
<
CrossDirDataHistPO
>>
dirDataMap
=
crossDirDataHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossDirDataHistPO:
:
getDirType
));
if
(!
dirDataMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
Integer
,
List
<
CrossDirDataHistPO
>>
entry
:
dirDataMap
.
entrySet
())
{
Integer
dir
=
entry
.
getKey
();
List
<
CrossDirDataHistPO
>
dirDataHistPOS
=
entry
.
getValue
();
List
<
Double
>
weekSpeeds
=
dirDataHistPOS
.
stream
().
map
(
CrossDirDataHistPO:
:
getSpeed
).
sorted
().
collect
(
Collectors
.
toList
());
int
startIndex
=
(
int
)
(
0.85
*
weekSpeeds
.
size
());
int
endIndex
=
(
int
)
(
0.95
*
weekSpeeds
.
size
());
Double
freeFlowSpeed
=
weekSpeeds
.
subList
(
startIndex
,
endIndex
).
stream
().
mapToDouble
(
Double:
:
doubleValue
).
average
().
getAsDouble
();
if
(
freeFlowSpeed
==
0.0
)
{
freeFlowSpeed
=
60.0
;
}
crossDirFreeFlowSpeedMap
.
put
(
crossId
.
concat
(
Constants
.
UNDERLINE
).
concat
(
String
.
valueOf
(
dir
)),
freeFlowSpeed
);
CrossDirFreeFlowSpeedDTO
crossDirFreeFlowSpeedDTO
=
new
CrossDirFreeFlowSpeedDTO
();
crossDirFreeFlowSpeedDTO
.
setCrossId
(
crossId
);
crossDirFreeFlowSpeedDTO
.
setDir
(
dir
);
crossDirFreeFlowSpeedDTO
.
setFreeFlowSpeed
(
freeFlowSpeed
);
crossDirFreeFlowSpeedDTOS
.
add
(
crossDirFreeFlowSpeedDTO
);
}
}
}
@Override
public
void
run
(
String
...
args
)
throws
Exception
{
try
{
...
...
wj-datacenter-service/src/main/java/net/wanji/datacenter/cache/WeekTurnFreeFlowSpeedCache.java
View file @
a1b239e8
...
...
@@ -43,29 +43,37 @@ public class WeekTurnFreeFlowSpeedCache implements CommandLineRunner {
queryWrapper
.
between
(
CrossTurnDataHistPO:
:
getStartTime
,
lastWeek
,
lastDay
);
List
<
CrossTurnDataHistPO
>
crossTurnDataHistPOS
=
crossTurnDataHistMapper
.
selectList
(
queryWrapper
);
if
(!
CollectionUtils
.
isEmpty
(
crossTurnDataHistPOS
))
{
Map
<
Integer
,
List
<
CrossTurnDataHistPO
>>
dirDataMap
=
crossTurnDataHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossTurnDataHistPO:
:
getInDir
));
for
(
Map
.
Entry
<
Integer
,
List
<
CrossTurnDataHistPO
>>
dirEntry
:
dirDataMap
.
entrySet
())
{
Integer
dir
=
dirEntry
.
getKey
();
List
<
CrossTurnDataHistPO
>
dirTurnDataHistPOS
=
dirEntry
.
getValue
();
Map
<
String
,
List
<
CrossTurnDataHistPO
>>
turnDataMap
=
dirTurnDataHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossTurnDataHistPO:
:
getTurnType
));
if
(!
turnDataMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
String
,
List
<
CrossTurnDataHistPO
>>
entry
:
turnDataMap
.
entrySet
())
{
String
turn
=
entry
.
getKey
();
List
<
CrossTurnDataHistPO
>
turnDataHistPOS
=
entry
.
getValue
();
String
currentCrossId
=
turnDataHistPOS
.
get
(
0
).
getCrossId
();
List
<
Double
>
weekTurnSpeeds
=
turnDataHistPOS
.
stream
().
map
(
CrossTurnDataHistPO:
:
getSpeed
).
sorted
().
collect
(
Collectors
.
toList
());
int
startIndex
=
(
int
)
(
0.85
*
weekTurnSpeeds
.
size
());
int
endIndex
=
(
int
)
(
0.95
*
weekTurnSpeeds
.
size
());
if
(
startIndex
==
endIndex
)
{
startIndex
=
startIndex
-
1
;
}
OptionalDouble
average
=
weekTurnSpeeds
.
subList
(
startIndex
,
endIndex
).
stream
().
mapToDouble
(
Double:
:
doubleValue
).
average
();
if
(
average
.
isPresent
())
{
double
turnFreeFlowSpeed
=
average
.
getAsDouble
();
String
key
=
currentCrossId
.
concat
(
Constants
.
UNDERLINE
).
concat
(
String
.
valueOf
(
dir
)).
concat
(
Constants
.
UNDERLINE
).
concat
(
turn
);
crossTurnFreeFlowSpeedMap
.
put
(
key
,
turnFreeFlowSpeed
);
}
}
calculateData
(
crossTurnDataHistPOS
);
}
}
}
/**
* 计算前一周自由流速度85~95分位速度
* @param crossTurnDataHistPOS
*/
private
static
void
calculateData
(
List
<
CrossTurnDataHistPO
>
crossTurnDataHistPOS
)
{
Map
<
Integer
,
List
<
CrossTurnDataHistPO
>>
dirDataMap
=
crossTurnDataHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossTurnDataHistPO:
:
getInDir
));
for
(
Map
.
Entry
<
Integer
,
List
<
CrossTurnDataHistPO
>>
dirEntry
:
dirDataMap
.
entrySet
())
{
Integer
dir
=
dirEntry
.
getKey
();
List
<
CrossTurnDataHistPO
>
dirTurnDataHistPOS
=
dirEntry
.
getValue
();
Map
<
String
,
List
<
CrossTurnDataHistPO
>>
turnDataMap
=
dirTurnDataHistPOS
.
stream
().
collect
(
Collectors
.
groupingBy
(
CrossTurnDataHistPO:
:
getTurnType
));
if
(!
turnDataMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
String
,
List
<
CrossTurnDataHistPO
>>
entry
:
turnDataMap
.
entrySet
())
{
String
turn
=
entry
.
getKey
();
List
<
CrossTurnDataHistPO
>
turnDataHistPOS
=
entry
.
getValue
();
String
currentCrossId
=
turnDataHistPOS
.
get
(
0
).
getCrossId
();
List
<
Double
>
weekTurnSpeeds
=
turnDataHistPOS
.
stream
().
map
(
CrossTurnDataHistPO:
:
getSpeed
).
sorted
().
collect
(
Collectors
.
toList
());
int
startIndex
=
(
int
)
(
0.85
*
weekTurnSpeeds
.
size
());
int
endIndex
=
(
int
)
(
0.95
*
weekTurnSpeeds
.
size
());
if
(
startIndex
==
endIndex
)
{
startIndex
=
startIndex
-
1
;
}
OptionalDouble
average
=
weekTurnSpeeds
.
subList
(
startIndex
,
endIndex
).
stream
().
mapToDouble
(
Double:
:
doubleValue
).
average
();
if
(
average
.
isPresent
())
{
double
turnFreeFlowSpeed
=
average
.
getAsDouble
();
String
key
=
currentCrossId
.
concat
(
Constants
.
UNDERLINE
).
concat
(
String
.
valueOf
(
dir
)).
concat
(
Constants
.
UNDERLINE
).
concat
(
turn
);
crossTurnFreeFlowSpeedMap
.
put
(
key
,
turnFreeFlowSpeed
);
}
}
}
...
...
wj-datacenter-service/src/main/java/net/wanji/datacenter/config/RedisConfig.java
View file @
a1b239e8
...
...
@@ -112,14 +112,10 @@ public class RedisConfig extends CachingConfigurerSupport {
return
new
FastJson2JsonRedisSerializer
(
Object
.
class
);
}
@Value
(
"${spring.redis.host}"
)
private
String
redisHost
;
@Value
(
"${spring.redis.port}"
)
private
Integer
redisPort
;
@Bean
public
Jedis
jedis
()
{
Jedis
jedis
=
new
Jedis
(
redisHost
,
redisP
ort
);
jedis
.
auth
(
"Wanji300552"
);
Jedis
jedis
=
new
Jedis
(
host
,
p
ort
);
jedis
.
auth
(
password
);
return
jedis
;
}
...
...
wj-datacenter-service/src/main/java/net/wanji/datacenter/constant/Constant.java
View file @
a1b239e8
...
...
@@ -32,4 +32,6 @@ public class Constant {
public
static
final
String
REAL_TIME_TURN_DATA_TOPIC
=
"cross_real_time_turn_data"
;
public
static
final
String
REAL_TIME_CROSS_DATA_KEY
=
"crossRealTimeData"
;
public
static
final
String
REAL_TIME_CROSS_DATA_TOPIC
=
"cross_real_time_data"
;
private
Constant
()
{}
}
wj-datacenter-service/src/main/java/net/wanji/datacenter/service/impl/LanePeriodicDataProcessServiceImpl.java
View file @
a1b239e8
...
...
@@ -524,7 +524,7 @@ public class LanePeriodicDataProcessServiceImpl implements DataProcessService {
crossDataIndexDTO
.
setLoadBalance
(
Double
.
valueOf
(
decimalFormat
.
format
(
loadBalance
)));
CrossRealTimeCache
.
crossDataIndexMap
.
put
(
crossId
,
crossDataIndexDTO
);
}
saveGreenWaveRealTime
(
insertCrossDirDataRealtimePOS
,
decimalFormat
);
saveGreenWaveRealTime
(
insertCrossDirDataRealtimePOS
,
decimalFormat
,
startDate
);
return
insertCrossDirDataRealtimePOS
;
}
...
...
@@ -690,7 +690,7 @@ public class LanePeriodicDataProcessServiceImpl implements DataProcessService {
}
}
private
void
saveGreenWaveRealTime
(
List
<
CrossDirDataRealtimePO
>
crossDirDataRealtimePOS
,
DecimalFormat
decimalFormat
)
throws
Exception
{
private
void
saveGreenWaveRealTime
(
List
<
CrossDirDataRealtimePO
>
crossDirDataRealtimePOS
,
DecimalFormat
decimalFormat
,
Date
date
)
throws
Exception
{
try
{
Map
<
Integer
,
List
<
GreenwaveCrossPO
>>
greenWaveInfoMap
=
CrossGreenWaveInfoCache
.
greenWaveInfoMap
;
if
(!
greenWaveInfoMap
.
isEmpty
())
{
...
...
@@ -699,7 +699,6 @@ public class LanePeriodicDataProcessServiceImpl implements DataProcessService {
for
(
Map
.
Entry
<
Integer
,
List
<
GreenwaveCrossPO
>>
entry
:
greenWaveInfoMap
.
entrySet
())
{
List
<
GreenwaveCrossPO
>
greenWaveCrossIds
=
entry
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
greenWaveCrossIds
))
{
int
status
=
1
;
double
trafficIndex
=
1.0
;
Double
speedSum
=
0.0
;
Double
stopTimes
=
0.0
;
...
...
@@ -734,10 +733,7 @@ public class LanePeriodicDataProcessServiceImpl implements DataProcessService {
for
(
CrossDirDataRealtimePO
dirDataRealtimePO
:
crossDirDataRealtimePOS
)
{
String
crossIdDir
=
dirDataRealtimePO
.
getCrossId
();
Integer
dirType
=
dirDataRealtimePO
.
getDirType
();
startTime
=
crossDirDataRealtimePOS
.
get
(
0
).
getStartTime
();
if
(
StringUtils
.
equals
(
crossIdDir
,
crossId
)
&&
Objects
.
equals
(
inDir
,
dirType
))
{
status
=
status
>
dirDataRealtimePO
.
getStatus
()
?
status
:
dirDataRealtimePO
.
getStatus
();
trafficIndex
=
trafficIndex
>
dirDataRealtimePO
.
getTrafficIndex
()
?
trafficIndex
:
dirDataRealtimePO
.
getTrafficIndex
();
speedSum
+=
dirDataRealtimePO
.
getSpeed
();
stopTimes
+=
dirDataRealtimePO
.
getStopTimes
();
...
...
@@ -757,10 +753,10 @@ public class LanePeriodicDataProcessServiceImpl implements DataProcessService {
noparkPassRateAvg
=
noparkPassRate
/
(
greenwaveCount
);
congRate
=
congCount
/
greenwaveCount
;
}
setTraffixIndex
(
decimalFormat
,
speedAvg
,
freeFlowSpeedAvg
,
greenwaveRealtimePO
);
// 计算交通指数,并设置status
setTraffixIndexAndStatus
(
decimalFormat
,
speedAvg
,
freeFlowSpeedAvg
,
greenwaveRealtimePO
);
greenwaveRealtimePO
.
setGreenId
(
greenWaveId
);
greenwaveRealtimePO
.
setStartTime
(
startTime
);
greenwaveRealtimePO
.
setStatus
(
status
);
greenwaveRealtimePO
.
setStartTime
(
date
);
greenwaveRealtimePO
.
setType
(
1
);
greenwaveRealtimePO
.
setSpeed
(
speedAvg
);
if
(
speedAvg
!=
0
)
{
...
...
@@ -797,7 +793,7 @@ public class LanePeriodicDataProcessServiceImpl implements DataProcessService {
}
}
private
static
void
setTraffixIndex
(
DecimalFormat
decimalFormat
,
double
speedAvg
,
Double
freeFlowSpeedAvg
,
GreenwaveRealtimePO
greenwaveRealtimePO
)
{
private
static
void
setTraffixIndex
AndStatus
(
DecimalFormat
decimalFormat
,
double
speedAvg
,
Double
freeFlowSpeedAvg
,
GreenwaveRealtimePO
greenwaveRealtimePO
)
{
Double
greenwaveIndex
=
Double
.
valueOf
(
decimalFormat
.
format
(
freeFlowSpeedAvg
/
speedAvg
));
if
(
greenwaveIndex
>=
10
)
{
greenwaveRealtimePO
.
setTrafficIndex
(
10.0
);
...
...
@@ -806,6 +802,18 @@ public class LanePeriodicDataProcessServiceImpl implements DataProcessService {
}
else
{
greenwaveRealtimePO
.
setTrafficIndex
(
1.0
);
}
// 根据指数设置status
int
status
=
1
;
if
(
greenwaveIndex
<=
1.8
)
{
status
=
1
;
}
else
if
(
greenwaveIndex
>
1.8
&&
greenwaveIndex
<=
2.5
)
{
status
=
2
;
}
else
if
(
greenwaveIndex
>
2.5
&&
greenwaveIndex
<=
3.5
)
{
status
=
3
;
}
else
if
(
greenwaveIndex
>
3.5
)
{
status
=
4
;
}
greenwaveRealtimePO
.
setStatus
(
status
);
}
private
static
Double
getFreeFlowSpeed
(
Double
freeFlowSpeed
,
String
crossId
,
Map
<
String
,
Double
>
crossFreeFlowSpeedMap
,
Integer
dirType
)
{
...
...
@@ -860,8 +868,8 @@ public class LanePeriodicDataProcessServiceImpl implements DataProcessService {
// 替换干线旅行速度
po
.
setSpeed
(
lineCongestion
.
getSpeed
());
// 替换状态
String
congestion
Code
=
lineCongestion
.
getCongestionCod
e
();
if
(
EventAbnormalEnum
.
NO_CONGEST
.
getType
().
equals
(
congestion
Cod
e
))
{
String
congestion
Type
=
lineCongestion
.
getCongestionTyp
e
();
if
(
EventAbnormalEnum
.
NO_CONGEST
.
getType
().
equals
(
congestion
Typ
e
))
{
po
.
setStatus
(
1
);
}
else
{
po
.
setStatus
(
3
);
...
...
wj-datacenter-service/src/main/java/net/wanji/datacenter/task/DataCenterTask.java
View file @
a1b239e8
...
...
@@ -62,51 +62,56 @@ public class DataCenterTask {
int
greenDelayTime
=
0
;
// 每个路口绿波开始时间
List
<
GreenwaveCrossPO
>
greenwaveCrossPOList
=
entry
.
getValue
();
if
(!
CollectionUtils
.
isEmpty
(
greenwaveCrossPOList
))
{
for
(
GreenwaveCrossPO
greenwaveCrossPO
:
greenwaveCrossPOList
)
{
String
crossId
=
greenwaveCrossPO
.
getCrossId
();
Integer
sectionId
=
greenwaveCrossPO
.
getSectionId
();
Integer
inDir
=
greenwaveCrossPO
.
getInDir
();
Integer
offset
=
greenwaveCrossPO
.
getOffset
();
crossTimeOffset
+=
(
int
)
(
lastCrossDistance
/
(
100
/
6
));
// 自由流速度60
if
(
sectionId
!=
null
)
{
CrossSectionPO
crossSectionPO
=
baseCrossSectionMapper
.
selectById
(
sectionId
);
if
(
Objects
.
nonNull
(
crossSectionPO
))
{
Integer
schemeId
=
crossSectionPO
.
getSchemeId
();
BaseCrossSchemePO
baseCrossSchemePO
=
baseCrossSchemeMapper
.
selectById
(
schemeId
);
if
(
Objects
.
nonNull
(
baseCrossSchemePO
))
{
String
schemeNo
=
baseCrossSchemePO
.
getSchemeNo
();
List
<
CrossSchemePhaseDirTurnDTO
>
crossSchemePhaseDirTurnDTOList
=
CrossSchemePhaseLightsCache
.
crossSchemePhaseDirTurnDTOList
;
if
(!
CollectionUtils
.
isEmpty
(
crossSchemePhaseDirTurnDTOList
))
{
greenwaveWidth
=
calculate
(
greenwaveWidth
,
lastCrossDistance
,
crossTimeOffset
,
greenDelayTime
,
greenwaveCrossPOList
);
}
log
.
info
(
"当前绿波编号:{}, 绿波带宽:{}"
,
greenId
,
greenwaveWidth
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"获取绿波带宽异常"
,
e
);
throw
new
Exception
(
"获取绿波带宽异常"
,
e
);
}
}
private
int
calculate
(
int
greenwaveWidth
,
Double
lastCrossDistance
,
int
crossTimeOffset
,
int
greenDelayTime
,
List
<
GreenwaveCrossPO
>
greenwaveCrossPOList
)
{
for
(
GreenwaveCrossPO
greenwaveCrossPO
:
greenwaveCrossPOList
)
{
String
crossId
=
greenwaveCrossPO
.
getCrossId
();
Integer
sectionId
=
greenwaveCrossPO
.
getSectionId
();
Integer
inDir
=
greenwaveCrossPO
.
getInDir
();
Integer
offset
=
greenwaveCrossPO
.
getOffset
();
crossTimeOffset
+=
(
int
)
(
lastCrossDistance
/
(
100
/
6
));
// 自由流速度60
if
(
sectionId
!=
null
)
{
CrossSectionPO
crossSectionPO
=
baseCrossSectionMapper
.
selectById
(
sectionId
);
if
(
Objects
.
nonNull
(
crossSectionPO
))
{
Integer
schemeId
=
crossSectionPO
.
getSchemeId
();
BaseCrossSchemePO
baseCrossSchemePO
=
baseCrossSchemeMapper
.
selectById
(
schemeId
);
if
(
Objects
.
nonNull
(
baseCrossSchemePO
))
{
String
schemeNo
=
baseCrossSchemePO
.
getSchemeNo
();
List
<
CrossSchemePhaseDirTurnDTO
>
crossSchemePhaseDirTurnDTOList
=
CrossSchemePhaseLightsCache
.
crossSchemePhaseDirTurnDTOList
;
if
(!
CollectionUtils
.
isEmpty
(
crossSchemePhaseDirTurnDTOList
))
{
// 过滤路口编号,方案号,直行或者圆饼灯,
List
<
CrossSchemePhaseDirTurnDTO
>
currenSchemeList
=
crossSchemePhaseDirTurnDTOList
.
stream
().
filter
(
po
->
StringUtils
.
equals
(
crossId
,
po
.
getCrossId
())
&&
StringUtils
.
equals
(
po
.
getSchemeNo
(),
schemeNo
)
&&
(
Objects
.
equals
(
po
.
getLightsTurn
(),
3
)
||
Objects
.
equals
(
po
.
getLightsTurn
(),
1
))).
collect
(
Collectors
.
toList
());
// 过滤路口编号,方案号,直行或者圆饼灯,
List
<
CrossSchemePhaseDirTurnDTO
>
currenSchemeList
=
crossSchemePhaseDirTurnDTOList
.
stream
().
filter
(
po
->
StringUtils
.
equals
(
crossId
,
po
.
getCrossId
())
&&
StringUtils
.
equals
(
po
.
getSchemeNo
(),
schemeNo
)
&&
(
Objects
.
equals
(
po
.
getLightsTurn
(),
3
)
||
Objects
.
equals
(
po
.
getLightsTurn
(),
1
))).
collect
(
Collectors
.
toList
());
Integer
lastPhaseTime
=
0
;
// 上一个相位的时间
for
(
CrossSchemePhaseDirTurnDTO
dto
:
currenSchemeList
)
{
// 当前路口方案绿波方向的绿灯时间
lastPhaseTime
+=
dto
.
getPhaseTime
();
if
(
Objects
.
equals
(
inDir
,
dto
.
getLightsDir
()))
{
lastPhaseTime
-=
dto
.
getPhaseTime
();
greenDelayTime
=
lastPhaseTime
>
greenDelayTime
?
lastPhaseTime
:
greenDelayTime
;
Integer
greenWaveStartIndex
=
offset
+
greenDelayTime
+
crossTimeOffset
;
Integer
greenWaveEndIndex
=
offset
+
dto
.
getPhaseTime
();
greenwaveWidth
=
Math
.
min
(
greenwaveWidth
,
greenWaveEndIndex
-
greenWaveStartIndex
);
}
}
}
Integer
lastPhaseTime
=
0
;
// 上一个相位的时间
for
(
CrossSchemePhaseDirTurnDTO
dto
:
currenSchemeList
)
{
// 当前路口方案绿波方向的绿灯时间
lastPhaseTime
+=
dto
.
getPhaseTime
();
if
(
Objects
.
equals
(
inDir
,
dto
.
getLightsDir
()))
{
lastPhaseTime
-=
dto
.
getPhaseTime
();
greenDelayTime
=
lastPhaseTime
>
greenDelayTime
?
lastPhaseTime
:
greenDelayTime
;
Integer
greenWaveStartIndex
=
offset
+
greenDelayTime
+
crossTimeOffset
;
Integer
greenWaveEndIndex
=
offset
+
dto
.
getPhaseTime
();
greenwaveWidth
=
Math
.
min
(
greenwaveWidth
,
greenWaveEndIndex
-
greenWaveStartIndex
);
}
}
}
lastCrossDistance
=
greenwaveCrossPO
.
getNextCrossLen
();
}
}
log
.
info
(
"当前绿波编号:{}, 绿波带宽:{}"
,
greenId
,
greenwaveWidth
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"获取绿波带宽异常"
,
e
);
throw
new
Exception
(
"获取绿波带宽异常"
,
e
);
lastCrossDistance
=
greenwaveCrossPO
.
getNextCrossLen
();
}
return
greenwaveWidth
;
}
}
wj-datacenter-service/src/main/java/net/wanji/datacenter/task/DataProcessTask.java
View file @
a1b239e8
...
...
@@ -12,7 +12,6 @@ import net.wanji.datacenter.cache.CrossSchemePhaseLightsCache;
import
net.wanji.datacenter.kafka.ConsumerHandler
;
import
net.wanji.datacenter.pojo.dto.CrossSchemePhaseDirTurnDTO
;
import
net.wanji.datacenter.pojo.dto.CrossSnapshotDataDTO
;
import
net.wanji.datacenter.pojo.dto.LanePeriodicDataDTO
;
import
net.wanji.datacenter.service.impl.LanePeriodicDataProcessServiceImpl
;
import
net.wanji.feign.service.UtcFeignClients
;
import
org.apache.commons.lang.StringUtils
;
...
...
@@ -52,59 +51,67 @@ public class DataProcessTask {
return
;
}
List
<
LightsStatusVO
>
lightsStatusVOS
=
JacksonUtils
.
getInstance
().
convertValue
(
jsonViewObject
.
getContent
(),
new
TypeReference
<
List
<
LightsStatusVO
>>()
{
});
for
(
LightsStatusVO
lightsStatusVO
:
lightsStatusVOS
)
{
String
crossId
=
lightsStatusVO
.
getCrossId
();
String
schemeNo
=
lightsStatusVO
.
getSchemeId
();
String
currentPhaseId
=
lightsStatusVO
.
getPhaseId
();
// 当前相位红灯说明都是红灯,全场红
long
currenSignalTime
=
Long
.
parseLong
(
lightsStatusVO
.
getSchemeStartTime
());
ConcurrentHashMap
<
String
,
Integer
>
crossIdPhaseIdClearGreenMap
=
CrossRealTimeCache
.
crossPhaseCarNumsMap
;
getClearRateCache
(
crossId
,
currentPhaseId
,
crossIdPhaseIdClearGreenMap
);
Map
<
String
,
Object
>
dirLampGroupMap
=
lightsStatusVO
.
getDirLampGroupMap
();
boolean
isAllRed
=
true
;
if
(!
dirLampGroupMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
dirLampGroupMap
.
entrySet
())
{
Map
<
String
,
String
>
turnLightColorMap
=
(
Map
<
String
,
String
>)
entry
.
getValue
();
for
(
Map
.
Entry
<
String
,
String
>
colorEntry
:
turnLightColorMap
.
entrySet
())
{
String
lightColor
=
colorEntry
.
getValue
();
// 全场红,如果有一个绿灯就不计算 20行人跳过
String
key
=
colorEntry
.
getKey
();
if
(
Objects
.
equals
(
lightColor
,
"green"
)
&&
!
StringUtils
.
equals
(
key
,
"20"
))
{
isAllRed
=
false
;
}
List
<
LightsStatusVO
>
lightsStatusVOS
=
JacksonUtils
.
getInstance
().
convertValue
(
jsonViewObject
.
getContent
(),
new
TypeReference
<
List
<
LightsStatusVO
>>()
{});
calculateData
(
lightsStatusVOS
);
}
catch
(
Exception
e
)
{
// log.error("",e);
}
}
private
void
calculateData
(
List
<
LightsStatusVO
>
lightsStatusVOS
)
throws
Exception
{
for
(
LightsStatusVO
lightsStatusVO
:
lightsStatusVOS
)
{
String
crossId
=
lightsStatusVO
.
getCrossId
();
String
schemeNo
=
lightsStatusVO
.
getSchemeId
();
String
currentPhaseId
=
lightsStatusVO
.
getPhaseId
();
// 当前相位红灯说明都是红灯,全场红
long
currenSignalTime
=
Long
.
parseLong
(
lightsStatusVO
.
getSchemeStartTime
());
ConcurrentHashMap
<
String
,
Integer
>
crossIdPhaseIdClearGreenMap
=
CrossRealTimeCache
.
crossPhaseCarNumsMap
;
getClearRateCache
(
crossId
,
currentPhaseId
,
crossIdPhaseIdClearGreenMap
);
Map
<
String
,
Object
>
dirLampGroupMap
=
lightsStatusVO
.
getDirLampGroupMap
();
// 是否是全场红
boolean
isAllRed
=
getAllRed
(
dirLampGroupMap
);
// 如果全场红
if
(
isAllRed
)
{
List
<
CrossSchemePhaseDirTurnDTO
>
crossSchemePhaseDirTurnDTOList
=
CrossSchemePhaseLightsCache
.
crossSchemePhaseDirTurnDTOList
;
int
redTime
=
2
;
if
(!
CollectionUtils
.
isEmpty
(
crossSchemePhaseDirTurnDTOList
))
{
for
(
CrossSchemePhaseDirTurnDTO
dto
:
crossSchemePhaseDirTurnDTOList
)
{
String
crossIdCache
=
dto
.
getCrossId
();
String
schemeNoCache
=
dto
.
getSchemeNo
();
String
phaseNoCache
=
dto
.
getPhaseNo
();
if
(
StringUtils
.
equals
(
crossIdCache
,
crossId
)
&&
StringUtils
.
equals
(
schemeNoCache
,
schemeNo
)
&&
StringUtils
.
equals
(
currentPhaseId
,
phaseNoCache
))
{
redTime
=
dto
.
getRedTime
();
}
}
// 剩余红灯时间
if
(
redTime
>=
1
)
{
--
redTime
;
}
Integer
carNums
=
getCarNums
(
crossId
,
currenSignalTime
+
redTime
*
1000L
);
startPhaseIdMap
.
putIfAbsent
(
crossId
,
currentPhaseId
);
crossIdPhaseIdClearGreenMap
.
put
(
crossId
.
concat
(
currentPhaseId
),
carNums
);
}
LanePeriodicDataProcessServiceImpl
.
periodHaveAllRedMap
.
put
(
crossId
,
1
);
}
}
}
// 如果全场红
if
(
isAllRed
)
{
List
<
CrossSchemePhaseDirTurnDTO
>
crossSchemePhaseDirTurnDTOList
=
CrossSchemePhaseLightsCache
.
crossSchemePhaseDirTurnDTOList
;
int
redTime
=
2
;
if
(!
CollectionUtils
.
isEmpty
(
crossSchemePhaseDirTurnDTOList
))
{
for
(
CrossSchemePhaseDirTurnDTO
dto
:
crossSchemePhaseDirTurnDTOList
)
{
String
crossIdCache
=
dto
.
getCrossId
();
String
schemeNoCache
=
dto
.
getSchemeNo
();
String
phaseNoCache
=
dto
.
getPhaseNo
();
if
(
StringUtils
.
equals
(
crossIdCache
,
crossId
)
&&
StringUtils
.
equals
(
schemeNoCache
,
schemeNo
)
&&
StringUtils
.
equals
(
currentPhaseId
,
phaseNoCache
))
{
redTime
=
dto
.
getRedTime
();
}
}
// 剩余红灯时间
if
(
redTime
>=
1
)
{
--
redTime
;
}
Integer
carNums
=
getCarNums
(
crossId
,
currenSignalTime
+
redTime
*
1000L
);
startPhaseIdMap
.
putIfAbsent
(
crossId
,
currentPhaseId
);
crossIdPhaseIdClearGreenMap
.
put
(
crossId
.
concat
(
currentPhaseId
),
carNums
);
private
static
boolean
getAllRed
(
Map
<
String
,
Object
>
dirLampGroupMap
)
{
boolean
isAllRed
=
true
;
if
(!
dirLampGroupMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
String
,
Object
>
entry
:
dirLampGroupMap
.
entrySet
())
{
Map
<
String
,
String
>
turnLightColorMap
=
(
Map
<
String
,
String
>)
entry
.
getValue
();
for
(
Map
.
Entry
<
String
,
String
>
colorEntry
:
turnLightColorMap
.
entrySet
())
{
String
lightColor
=
colorEntry
.
getValue
();
// 全场红,如果有一个绿灯就不计算 20行人跳过
String
key
=
colorEntry
.
getKey
();
if
(
Objects
.
equals
(
lightColor
,
"green"
)
&&
!
StringUtils
.
equals
(
key
,
"20"
))
{
isAllRed
=
false
;
}
LanePeriodicDataProcessServiceImpl
.
periodHaveAllRedMap
.
put
(
crossId
,
1
);
}
}
}
catch
(
Exception
e
)
{
// log.error("",e);
}
return
isAllRed
;
}
private
void
getClearRateCache
(
String
crossId
,
String
currentPhaseId
,
Map
<
String
,
Integer
>
crossIdPhaseIdClearGreenMap
)
throws
JsonProcessingException
{
...
...
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