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
06c99fb0
Commit
06c99fb0
authored
Sep 14, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 新信号评价-方案评价-安全保障策略详细问题
parent
d1214f75
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
126 additions
and
17 deletions
+126
-17
SchemeEvaluateServiceImpl.java
...net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
+80
-6
BaseEnum.java
wj-common/src/main/java/net/wanji/common/enums/BaseEnum.java
+23
-11
BaseCrossTurnInfoMapper.java
...net/wanji/databus/dao/mapper/BaseCrossTurnInfoMapper.java
+4
-0
BaseCrossTurnInfoMapper.xml
...bus/src/main/resources/mapper/BaseCrossTurnInfoMapper.xml
+19
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
View file @
06c99fb0
...
@@ -361,11 +361,12 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
...
@@ -361,11 +361,12 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
emergencyCount
+
StrategyAndMetricsEnum
.
Metrics
.
EMERGENCY_COUNT
.
getUnit
());
emergencyCount
+
StrategyAndMetricsEnum
.
Metrics
.
EMERGENCY_COUNT
.
getUnit
());
// 筛选当前方向的转向数据
// 筛选当前方向的转向数据
// List<CrossTurnDataHistPO> dirTurnPOList = crossTurnDataHistPOList.stream()
List
<
CrossTurnDataHistPO
>
dirTurnPOList
=
crossTurnDataHistPOList
.
stream
()
// .filter(item -> Objects.equals(item.getInDir(), dirCode))
.
filter
(
item
->
Objects
.
equals
(
item
.
getInDir
(),
dirCode
))
// .collect(Collectors.toList());
.
collect
(
Collectors
.
toList
());
// tableContent.setSubList(buildBalanceSublist(problemList, dirTurnPOList, dirCode));
tableContent
.
setSubList
(
buildSecuritySublist
(
problemList
,
dirTurnPOList
,
dirCode
,
crossId
,
// tableContent.setMetricsMap(metricsMap);
startTimeStamp
,
endTimeStamp
));
tableContent
.
setMetricsMap
(
metricsMap
);
for
(
SchemeEvaluateSchemeDetailedProblemVO
.
TableContent
content
:
tableContent
.
getSubList
())
{
for
(
SchemeEvaluateSchemeDetailedProblemVO
.
TableContent
content
:
tableContent
.
getSubList
())
{
if
(
content
.
getHasProblem
()
==
1
)
{
if
(
content
.
getHasProblem
()
==
1
)
{
...
@@ -378,12 +379,85 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
...
@@ -378,12 +379,85 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
vo
.
setTableContentList
(
tableContentList
);
vo
.
setTableContentList
(
tableContentList
);
if
(
CollectionUtil
.
isNotEmpty
(
problemList
))
{
if
(
CollectionUtil
.
isNotEmpty
(
problemList
))
{
problemList
.
add
(
"其他方向
均衡状况良好
"
);
problemList
.
add
(
"其他方向
满足安全保障需求
"
);
}
}
vo
.
setProblems
(
problemList
);
vo
.
setProblems
(
problemList
);
}
}
private
List
<
SchemeEvaluateSchemeDetailedProblemVO
.
TableContent
>
buildSecuritySublist
(
List
<
String
>
problemList
,
List
<
CrossTurnDataHistPO
>
currentDirTurnPOList
,
Integer
dirCode
,
String
crossId
,
int
startTimeStamp
,
int
endTimeStamp
)
{
List
<
SchemeEvaluateSchemeDetailedProblemVO
.
TableContent
>
tableContentList
=
new
ArrayList
<>();
// 获取该方向的每个转向
List
<
String
>
turnTypes
=
currentDirTurnPOList
.
stream
()
.
map
(
CrossTurnDataHistPO:
:
getTurnType
)
.
distinct
()
.
collect
(
Collectors
.
toList
());
for
(
String
turnType
:
turnTypes
)
{
SchemeEvaluateSchemeDetailedProblemVO
.
TableContent
tableContent
=
new
SchemeEvaluateSchemeDetailedProblemVO
.
TableContent
();
tableContent
.
setPosition
(
TurnConvertEnum
.
getDescByCode
(
turnType
));
Map
<
String
,
String
>
metricsMap
=
new
HashMap
<>();
// 流量加总
int
flow
=
currentDirTurnPOList
.
stream
()
.
filter
(
item
->
Objects
.
equals
(
item
.
getTurnType
(),
turnType
))
.
mapToInt
(
CrossTurnDataHistPO:
:
getFlow
)
.
sum
();
tableContent
.
setFlow
(
flow
);
// 溢流率取最大
double
effusionRateMax
=
currentDirTurnPOList
.
stream
()
.
filter
(
item
->
Objects
.
equals
(
item
.
getTurnType
(),
turnType
))
.
mapToDouble
(
CrossTurnDataHistPO:
:
getEffusionRate
)
.
max
()
.
orElse
(
0.0
);
metricsMap
.
put
(
StrategyAndMetricsEnum
.
Metrics
.
EFFUSION_RATE
.
getCode
(),
effusionRateMax
*
100
+
StrategyAndMetricsEnum
.
Metrics
.
EFFUSION_RATE
.
getUnit
());
// 绿灯间隔清空率取最大
double
clearRateMax
=
currentDirTurnPOList
.
stream
()
.
filter
(
item
->
Objects
.
equals
(
item
.
getTurnType
(),
turnType
))
.
mapToDouble
(
CrossTurnDataHistPO:
:
getClearRate
)
.
max
()
.
orElse
(
0.0
);
metricsMap
.
put
(
StrategyAndMetricsEnum
.
Metrics
.
CLEAR_RATE
.
getCode
(),
clearRateMax
+
StrategyAndMetricsEnum
.
Metrics
.
CLEAR_RATE
.
getUnit
());
// 转向级别三急一速数量
// 查询该转向所有的车道ID
Integer
intTurnCode
=
BaseEnum
.
TurnTypeEnum
.
getIntCodeByStrCode
(
turnType
);
List
<
String
>
laneIds
=
baseCrossTurnInfoMapper
.
selectLaneIds
(
crossId
,
dirCode
,
intTurnCode
);
// 加总该转向的三急一速
Integer
emergencyCount
=
baseCrossTurnInfoMapper
.
selectTurnEmergencyCount
(
crossId
,
laneIds
,
startTimeStamp
,
endTimeStamp
);
metricsMap
.
put
(
StrategyAndMetricsEnum
.
Metrics
.
EMERGENCY_COUNT
.
getCode
(),
emergencyCount
+
StrategyAndMetricsEnum
.
Metrics
.
EMERGENCY_COUNT
.
getUnit
());
// 饱和度取最大
double
maxSaturation
=
currentDirTurnPOList
.
stream
()
.
filter
(
item
->
Objects
.
equals
(
item
.
getTurnType
(),
turnType
))
.
mapToDouble
(
CrossTurnDataHistPO:
:
getSturation
)
.
max
()
.
orElse
(
0
);
metricsMap
.
put
(
StrategyAndMetricsEnum
.
Metrics
.
SATURATION
.
getCode
(),
maxSaturation
+
StrategyAndMetricsEnum
.
Metrics
.
SATURATION
.
getUnit
());
// 计算指标是否合格
boolean
isQualified
=
calcSecurity
(
maxSaturation
,
OptionalDouble
.
of
(
clearRateMax
));
if
(!
isQualified
)
{
tableContent
.
setHasProblem
(
1
);
problemList
.
add
(
BaseEnum
.
SignalDirectionEnum
.
getNameByCode
(
dirCode
)
+
"进口"
+
TurnConvertEnum
.
getDescByCode
(
turnType
)
+
"存在安全隐患"
);
}
tableContent
.
setMetricsMap
(
metricsMap
);
tableContentList
.
add
(
tableContent
);
}
return
tableContentList
;
}
private
void
buildBalanceDetailVO
(
List
<
CrossDirDataHistPO
>
crossDirDataHistPOList
,
private
void
buildBalanceDetailVO
(
List
<
CrossDirDataHistPO
>
crossDirDataHistPOList
,
List
<
CrossTurnDataHistPO
>
crossTurnDataHistPOList
,
List
<
CrossTurnDataHistPO
>
crossTurnDataHistPOList
,
SchemeEvaluateSchemeDetailedProblemVO
vo
,
String
crossId
)
{
SchemeEvaluateSchemeDetailedProblemVO
vo
,
String
crossId
)
{
...
...
wj-common/src/main/java/net/wanji/common/enums/BaseEnum.java
View file @
06c99fb0
...
@@ -3,6 +3,8 @@ package net.wanji.common.enums;
...
@@ -3,6 +3,8 @@ package net.wanji.common.enums;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
lombok.Getter
;
import
java.util.Objects
;
/**
/**
* @author wanji
* @author wanji
* @version 1.0
* @version 1.0
...
@@ -200,25 +202,25 @@ public class BaseEnum {
...
@@ -200,25 +202,25 @@ public class BaseEnum {
public
enum
TurnTypeEnum
{
public
enum
TurnTypeEnum
{
//步类型:1-左转 2-直行 3-右转 4-调头
//步类型:1-左转 2-直行 3-右转 4-调头
LEFT
(
1
,
"左转"
),
LEFT
(
1
,
"l"
,
"左转"
),
STRAIGHT
(
2
,
"直行"
),
RIGHT
(
3
,
"右转
"
),
STRAIGHT
(
2
,
"s"
,
"直行
"
),
TURN
(
4
,
"调头
"
),
RIGHT
(
3
,
"r"
,
"右转
"
),
ALL
(
5
,
"圆饼灯
"
),
TURN
(
4
,
"u"
,
"调头
"
),
PEDESTRIAN
(
6
,
"行人
"
),
ALL
(
5
,
"all"
,
"圆饼灯
"
),
ONCE_PEDESTRIAN
(
7
,
"一次
行人"
),
PEDESTRIAN
(
6
,
"pedestrian"
,
"
行人"
),
TWO_PEDESTRIAN
(
8
,
"二次行人"
);
ONCE_PEDESTRIAN
(
7
,
"once_pedestrian"
,
"一次行人"
),
TWO_PEDESTRIAN
(
8
,
"two_pedestrian"
,
"二次行人"
);
private
Integer
type
;
private
Integer
intCode
;
private
String
strCode
;
private
String
name
;
private
String
name
;
/**
/**
...
@@ -229,12 +231,22 @@ public class BaseEnum {
...
@@ -229,12 +231,22 @@ public class BaseEnum {
*/
*/
public
static
TurnTypeEnum
getEnumByType
(
int
type
)
{
public
static
TurnTypeEnum
getEnumByType
(
int
type
)
{
for
(
TurnTypeEnum
testEnums
:
TurnTypeEnum
.
values
())
{
for
(
TurnTypeEnum
testEnums
:
TurnTypeEnum
.
values
())
{
if
(
testEnums
.
get
Typ
e
()
==
type
)
{
if
(
testEnums
.
get
IntCod
e
()
==
type
)
{
return
testEnums
;
return
testEnums
;
}
}
}
}
return
null
;
return
null
;
}
}
public
static
Integer
getIntCodeByStrCode
(
String
strCode
)
{
for
(
TurnTypeEnum
testEnums
:
TurnTypeEnum
.
values
())
{
if
(
Objects
.
equals
(
testEnums
.
getStrCode
(),
strCode
))
{
return
testEnums
.
getIntCode
();
}
}
return
null
;
}
}
}
/**
/**
...
...
wj-databus/src/main/java/net/wanji/databus/dao/mapper/BaseCrossTurnInfoMapper.java
View file @
06c99fb0
...
@@ -9,4 +9,8 @@ import java.util.List;
...
@@ -9,4 +9,8 @@ import java.util.List;
public
interface
BaseCrossTurnInfoMapper
{
public
interface
BaseCrossTurnInfoMapper
{
List
<
CrossTurnInfoPO
>
selectByCrossIdAndDir
(
String
crossId
,
Integer
dir
);
List
<
CrossTurnInfoPO
>
selectByCrossIdAndDir
(
String
crossId
,
Integer
dir
);
List
<
String
>
selectLaneIds
(
String
crossId
,
Integer
dirCode
,
Integer
intTurnCode
);
Integer
selectTurnEmergencyCount
(
String
crossId
,
List
<
String
>
laneIds
,
int
startTimeStamp
,
int
endTimeStamp
);
}
}
wj-databus/src/main/resources/mapper/BaseCrossTurnInfoMapper.xml
View file @
06c99fb0
...
@@ -12,5 +12,24 @@
...
@@ -12,5 +12,24 @@
where cross_id = #{crossId} and in_dir = #{dir}
where cross_id = #{crossId} and in_dir = #{dir}
</select>
</select>
<select
id=
"selectLaneIds"
resultType=
"java.lang.String"
>
select id
from t_base_lane_info
where cross_id = #{crossId} and dir = #{dirCode} and turn = #{intTurnCode}
</select>
<select
id=
"selectTurnEmergencyCount"
resultType=
"java.lang.Integer"
>
SELECT COUNT(*)
FROM holo_roadnet_jinan.t_event_info
WHERE type IN ('33', '34', '35', '6')
AND UNIX_TIMESTAMP(start_time)
<![CDATA[ >= ]]>
#{startStamp}
AND UNIX_TIMESTAMP(start_time)
<![CDATA[ <= ]]>
#{endStamp}
AND cross_id = #{crossId}
AND lane_id in
<foreach
collection=
"laneIds"
item=
"id"
separator=
","
open=
"("
close=
")"
>
#{id}
</foreach>
</select>
</mapper>
</mapper>
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