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
5f95ca25
Commit
5f95ca25
authored
Sep 14, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 新信号评价-方案评价-效率提升策略总体评价
parent
297c5f73
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
141 additions
and
37 deletions
+141
-37
SchemeEvaluateServiceImpl.java
...net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
+109
-1
SchemeEvaluateSchemeDetailOverallVO.java
...net/wanji/opt/vo/SchemeEvaluateSchemeDetailOverallVO.java
+1
-1
SchemeEvaluateStrategyMetricMenuVO.java
.../net/wanji/opt/vo/SchemeEvaluateStrategyMetricMenuVO.java
+2
-2
StrategyAndMetricsEnum.java
...n/java/net/wanji/common/enums/StrategyAndMetricsEnum.java
+19
-33
CrossDataHistMapper.java
...ava/net/wanji/databus/dao/mapper/CrossDataHistMapper.java
+2
-0
CrossDataHistMapper.xml
wj-databus/src/main/resources/mapper/CrossDataHistMapper.xml
+8
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
View file @
5f95ca25
...
@@ -263,12 +263,96 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
...
@@ -263,12 +263,96 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
}
else
if
(
Objects
.
equals
(
strategyCode
,
StrategyAndMetricsEnum
.
Strategy
.
BALANCE
.
getCode
()))
{
}
else
if
(
Objects
.
equals
(
strategyCode
,
StrategyAndMetricsEnum
.
Strategy
.
BALANCE
.
getCode
()))
{
buildBalanceVO
(
crossDataHistPOList
,
crossDirDataHistPOList
,
vo
,
crossId
,
startTimeStamp
,
endTimeStamp
);
buildBalanceVO
(
crossDataHistPOList
,
crossDirDataHistPOList
,
vo
,
crossId
,
startTimeStamp
,
endTimeStamp
);
}
else
if
(
Objects
.
equals
(
strategyCode
,
StrategyAndMetricsEnum
.
Strategy
.
SECURITY
.
getCode
()))
{
}
else
if
(
Objects
.
equals
(
strategyCode
,
StrategyAndMetricsEnum
.
Strategy
.
SECURITY
.
getCode
()))
{
buildSecurityVO
(
crossDataHistPOList
,
crossDirDataHistPOList
,
vo
,
crossId
,
startTimeStamp
,
endTimeStamp
);
}
}
return
vo
;
return
vo
;
}
}
private
void
buildSecurityVO
(
List
<
CrossDataHistPO
>
crossDataHistPOList
,
List
<
CrossDirDataHistPO
>
crossDirDataHistPOList
,
SchemeEvaluateSchemeDetailOverallVO
vo
,
String
crossId
,
int
startTimeStamp
,
int
endTimeStamp
)
{
List
<
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
>
overallMetricsList
=
new
ArrayList
<>();
// 溢流率时长取最大
OptionalDouble
effusionMax
=
crossDirDataHistPOList
.
stream
()
.
mapToDouble
(
CrossDirDataHistPO:
:
getEffusionTime
)
.
max
();
if
(
effusionMax
.
isPresent
())
{
int
minutes
=
(
endTimeStamp
-
startTimeStamp
)
/
60
;
// 观测时长
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
buildEffusionOverallMetrics
(
effusionMax
,
minutes
);
overallMetricsList
.
add
(
overallMetrics
);
}
else
{
throw
new
RuntimeException
(
"该时段无溢流时长数据"
);
}
// 绿灯间隔清空率取最大
OptionalDouble
clearRateMax
=
crossDataHistPOList
.
stream
()
.
mapToDouble
(
CrossDataHistPO:
:
getClearRate
)
.
max
();
if
(
clearRateMax
.
isPresent
())
{
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
buildClearRateOverallMetrics
(
clearRateMax
);
overallMetricsList
.
add
(
overallMetrics
);
}
else
{
throw
new
RuntimeException
(
"该时段无绿灯间隔清空率数据"
);
}
// 三急一速数量取最大
// todo 数据库中待添加字段
OptionalDouble
emergencyCountMax
=
OptionalDouble
.
of
(
12.56
);
// OptionalDouble emergencyCountMax = crossDataHistPOList.stream()
// .map(CrossDataHistPO::getEmergencyCount)
// .filter(Objects::nonNull)
// .mapToDouble(Double::doubleValue) // 将Double转换为double
// .max();
if
(
emergencyCountMax
.
isPresent
())
{
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
buildEmergencyCountOverallMetrics
(
emergencyCountMax
);
overallMetricsList
.
add
(
overallMetrics
);
}
else
{
throw
new
RuntimeException
(
"该时段无三急一速数量数据"
);
}
vo
.
setOverallMetricsList
(
overallMetricsList
);
// 查询路口指标数值(都取最大),并与评价标准比较:如果饱和度<0.8,则需绿灯间隔清空率大于70%;如果饱和度>0.8,则需绿灯间隔清空率大于60%
// 达到指标要求,显示路口满足安全保障策略需求;未达到指标,显示路口存在安全隐患
List
<
String
>
strategyEvaluateList
=
new
ArrayList
<>();
boolean
isQualified
=
false
;
Double
maxSaturation
=
crossDataHistMapper
.
selectMaxSaturation
(
crossId
,
startTimeStamp
,
endTimeStamp
);
if
(
clearRateMax
.
isPresent
())
{
isQualified
=
calcSecurity
(
maxSaturation
,
clearRateMax
);
}
if
(!
isQualified
)
{
strategyEvaluateList
.
add
(
"路口存在安全隐患"
);
}
if
(
CollectionUtil
.
isEmpty
(
strategyEvaluateList
))
{
strategyEvaluateList
.
add
(
"路口满足安全保障策略需求"
);
}
vo
.
setStrategyEvaluateList
(
strategyEvaluateList
);
}
private
boolean
calcSecurity
(
Double
maxSaturation
,
OptionalDouble
clearRateMax
)
{
double
clearRateMaxDouble
=
clearRateMax
.
getAsDouble
();
// 如果饱和度<0.8,则需绿灯间隔清空率大于70%;如果饱和度>0.8,则需绿灯间隔清空率大于60%
if
(
maxSaturation
<
0.8
&&
clearRateMaxDouble
>
0.7
)
{
return
true
;
}
else
if
(
maxSaturation
>=
0.8
&&
clearRateMaxDouble
>
0.6
)
{
return
true
;
}
return
false
;
}
private
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
buildEmergencyCountOverallMetrics
(
OptionalDouble
emergencyCountMax
)
{
int
intMax
=
(
int
)
Math
.
round
(
emergencyCountMax
.
getAsDouble
());
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
new
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
();
overallMetrics
.
setMetricCode
(
StrategyAndMetricsEnum
.
Metrics
.
EMERGENCY_COUNT
.
getCode
());
overallMetrics
.
setMetricName
(
StrategyAndMetricsEnum
.
Metrics
.
EMERGENCY_COUNT
.
getDescription
());
overallMetrics
.
setMetricValue
(
intMax
);
overallMetrics
.
setMetricUnit
(
StrategyAndMetricsEnum
.
Metrics
.
EMERGENCY_COUNT
.
getUnit
());
return
overallMetrics
;
}
private
void
buildBalanceVO
(
List
<
CrossDataHistPO
>
crossDataHistPOList
,
private
void
buildBalanceVO
(
List
<
CrossDataHistPO
>
crossDataHistPOList
,
List
<
CrossDirDataHistPO
>
crossDirDataHistPOList
,
List
<
CrossDirDataHistPO
>
crossDirDataHistPOList
,
SchemeEvaluateSchemeDetailOverallVO
vo
,
String
crossId
,
SchemeEvaluateSchemeDetailOverallVO
vo
,
String
crossId
,
...
@@ -333,6 +417,30 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
...
@@ -333,6 +417,30 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
vo
.
setStrategyEvaluateList
(
strategyEvaluateList
);
vo
.
setStrategyEvaluateList
(
strategyEvaluateList
);
}
}
private
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
buildClearRateOverallMetrics
(
OptionalDouble
clearRateMax
)
{
int
intMax
=
(
int
)
Math
.
round
(
clearRateMax
.
getAsDouble
());
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
new
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
();
overallMetrics
.
setMetricCode
(
StrategyAndMetricsEnum
.
Metrics
.
GREEN_INTERVAL_CLEAR
.
getCode
());
overallMetrics
.
setMetricName
(
StrategyAndMetricsEnum
.
Metrics
.
GREEN_INTERVAL_CLEAR
.
getDescription
());
overallMetrics
.
setMetricValue
(
intMax
);
overallMetrics
.
setMetricUnit
(
StrategyAndMetricsEnum
.
Metrics
.
GREEN_INTERVAL_CLEAR
.
getUnit
());
return
overallMetrics
;
}
private
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
buildEffusionOverallMetrics
(
OptionalDouble
effusionMax
,
int
minutes
)
{
int
intMax
=
(
int
)
Math
.
round
(
effusionMax
.
getAsDouble
());
int
effusionRateMax
=
intMax
/
minutes
;
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
new
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
();
overallMetrics
.
setMetricCode
(
StrategyAndMetricsEnum
.
Metrics
.
EFFUSION_RATE
.
getCode
());
overallMetrics
.
setMetricName
(
StrategyAndMetricsEnum
.
Metrics
.
EFFUSION_RATE
.
getDescription
());
overallMetrics
.
setMetricValue
(
effusionRateMax
);
overallMetrics
.
setMetricUnit
(
StrategyAndMetricsEnum
.
Metrics
.
EFFUSION_RATE
.
getUnit
());
return
overallMetrics
;
}
private
boolean
calcBalance
(
Double
maxSaturation
,
Double
maxGreenLightUse
)
{
private
boolean
calcBalance
(
Double
maxSaturation
,
Double
maxGreenLightUse
)
{
// 如果饱和度<0.8,则需绿灯利用率大于50%;如果饱和度>0.8,则需绿灯利用率大于80%
// 如果饱和度<0.8,则需绿灯利用率大于50%;如果饱和度>0.8,则需绿灯利用率大于80%
if
(
maxSaturation
<
0.8
&&
maxGreenLightUse
>
0.5
)
{
if
(
maxSaturation
<
0.8
&&
maxGreenLightUse
>
0.5
)
{
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/SchemeEvaluateSchemeDetailOverallVO.java
View file @
5f95ca25
...
@@ -28,7 +28,7 @@ public class SchemeEvaluateSchemeDetailOverallVO {
...
@@ -28,7 +28,7 @@ public class SchemeEvaluateSchemeDetailOverallVO {
@Data
@Data
public
static
class
OverallMetrics
{
public
static
class
OverallMetrics
{
@ApiModelProperty
(
value
=
"指标编号"
)
@ApiModelProperty
(
value
=
"指标编号"
)
Integer
metricCode
;
String
metricCode
;
@ApiModelProperty
(
value
=
"指标名称"
)
@ApiModelProperty
(
value
=
"指标名称"
)
String
metricName
;
String
metricName
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/SchemeEvaluateStrategyMetricMenuVO.java
View file @
5f95ca25
...
@@ -23,13 +23,13 @@ public class SchemeEvaluateStrategyMetricMenuVO {
...
@@ -23,13 +23,13 @@ public class SchemeEvaluateStrategyMetricMenuVO {
private
String
strategyCode
;
private
String
strategyCode
;
@ApiModelProperty
(
value
=
"评价指标列表"
)
@ApiModelProperty
(
value
=
"评价指标列表"
)
List
<
EvaluateMetric
>
metricList
;
private
List
<
EvaluateMetric
>
metricList
;
@NoArgsConstructor
@NoArgsConstructor
@Data
@Data
public
static
class
EvaluateMetric
{
public
static
class
EvaluateMetric
{
@ApiModelProperty
(
value
=
"指标编号"
)
@ApiModelProperty
(
value
=
"指标编号"
)
Integer
metricCode
;
private
String
metricCode
;
@ApiModelProperty
(
value
=
"指标名称"
)
@ApiModelProperty
(
value
=
"指标名称"
)
private
String
metricName
;
private
String
metricName
;
...
...
wj-common/src/main/java/net/wanji/common/enums/StrategyAndMetricsEnum.java
View file @
5f95ca25
package
net
.
wanji
.
common
.
enums
;
package
net
.
wanji
.
common
.
enums
;
import
lombok.Getter
;
import
java.util.*
;
import
java.util.*
;
public
class
StrategyAndMetricsEnum
{
public
class
StrategyAndMetricsEnum
{
@Getter
public
enum
Strategy
{
public
enum
Strategy
{
BALANCE
(
"100030"
,
"均衡调控"
),
BALANCE
(
"100030"
,
"均衡调控"
),
EFFICIENCY
(
"100152"
,
"效率提升"
),
EFFICIENCY
(
"100152"
,
"效率提升"
),
...
@@ -25,51 +28,34 @@ public class StrategyAndMetricsEnum {
...
@@ -25,51 +28,34 @@ public class StrategyAndMetricsEnum {
return
null
;
return
null
;
}
}
public
String
getMsg
()
{
return
msg
;
}
public
String
getCode
()
{
return
code
;
}
}
}
@Getter
public
enum
Metrics
{
public
enum
Metrics
{
NO_STOP_THROUGH_RATE
(
1
,
"不停车通过率"
,
"%"
),
NO_STOP_THROUGH_RATE
(
"1"
,
"不停车通过率"
,
"%"
),
STOP_THROUGH_RATE
(
2
,
"一/二/三次及以上停车通过率"
,
"%"
),
STOP_THROUGH_RATE
(
"2"
,
"一/二/三次及以上停车通过率"
,
"%"
),
AVERAGE_DELAY
(
3
,
"平均延误"
,
"s"
),
AVERAGE_DELAY
(
"3"
,
"平均延误"
,
"s"
),
MAX_QUEUE_LENGTH
(
4
,
"最大排队长度"
,
"m"
),
MAX_QUEUE_LENGTH
(
"4"
,
"最大排队长度"
,
"m"
),
STOP_COUNT
(
5
,
"停车次数"
,
"次"
),
STOP_COUNT
(
"5"
,
"停车次数"
,
"次"
),
AVERAGE_SPEED
(
6
,
"平均速度"
,
"km/h"
),
AVERAGE_SPEED
(
"6"
,
"平均速度"
,
"km/h"
),
GREEN_LIGHT_UTILIZATION
(
7
,
"绿灯有效利用率"
,
"%"
),
GREEN_LIGHT_UTILIZATION
(
"7"
,
"绿灯有效利用率"
,
"%"
),
SATURATION
(
8
,
"饱和度"
,
""
),
SATURATION
(
"8"
,
"饱和度"
,
""
),
LOAD_BALANCE
(
9
,
"负载均衡度"
,
""
),
LOAD_BALANCE
(
"9"
,
"负载均衡度"
,
""
),
OVERFLOW_RATE
(
10
,
"溢流率"
,
"%"
),
EFFUSION_RATE
(
"10"
,
"溢流率"
,
"%"
),
GREEN_INTERVAL_CLEAR
(
11
,
"绿灯间隔清空率"
,
"%"
),
GREEN_INTERVAL_CLEAR
(
"11"
,
"绿灯间隔清空率"
,
"%"
),
EMERGENCY_COUNT
(
12
,
"三急一速数量"
,
""
);
EMERGENCY_COUNT
(
"12"
,
"三急一速数量"
,
""
);
private
final
Integer
code
;
private
final
String
code
;
private
final
String
description
;
private
final
String
description
;
private
final
String
unit
;
private
final
String
unit
;
Metrics
(
Integer
code
,
String
description
,
String
unit
)
{
Metrics
(
String
code
,
String
description
,
String
unit
)
{
this
.
code
=
code
;
this
.
code
=
code
;
this
.
description
=
description
;
this
.
description
=
description
;
this
.
unit
=
unit
;
this
.
unit
=
unit
;
}
}
public
String
getDescription
()
{
return
description
;
}
public
Integer
getCode
()
{
return
code
;
}
public
String
getUnit
()
{
return
unit
;
}
}
}
public
static
final
Map
<
Strategy
,
List
<
Metrics
>>
STRATEGY_METRICS_MAP
;
public
static
final
Map
<
Strategy
,
List
<
Metrics
>>
STRATEGY_METRICS_MAP
;
...
@@ -90,7 +76,7 @@ public class StrategyAndMetricsEnum {
...
@@ -90,7 +76,7 @@ public class StrategyAndMetricsEnum {
Metrics
.
LOAD_BALANCE
Metrics
.
LOAD_BALANCE
));
));
map
.
put
(
Strategy
.
SECURITY
,
Arrays
.
asList
(
map
.
put
(
Strategy
.
SECURITY
,
Arrays
.
asList
(
Metrics
.
OVERFLOW
_RATE
,
Metrics
.
EFFUSION
_RATE
,
Metrics
.
GREEN_INTERVAL_CLEAR
,
Metrics
.
GREEN_INTERVAL_CLEAR
,
Metrics
.
EMERGENCY_COUNT
Metrics
.
EMERGENCY_COUNT
));
));
...
...
wj-databus/src/main/java/net/wanji/databus/dao/mapper/CrossDataHistMapper.java
View file @
5f95ca25
...
@@ -24,4 +24,6 @@ public interface CrossDataHistMapper extends BaseMapper<CrossDataHistPO> {
...
@@ -24,4 +24,6 @@ public interface CrossDataHistMapper extends BaseMapper<CrossDataHistPO> {
List
<
CrossDataHistPO
>
selectByCrossIdAndStartEnd
(
String
crossId
,
int
startStamp
,
int
endStamp
);
List
<
CrossDataHistPO
>
selectByCrossIdAndStartEnd
(
String
crossId
,
int
startStamp
,
int
endStamp
);
List
<
MetricHistDTO
>
selectMetricHistDTO
(
String
crossId
,
int
startStamp
,
int
endStamp
);
List
<
MetricHistDTO
>
selectMetricHistDTO
(
String
crossId
,
int
startStamp
,
int
endStamp
);
Double
selectMaxSaturation
(
String
crossId
,
int
startStamp
,
int
endStamp
);
}
}
wj-databus/src/main/resources/mapper/CrossDataHistMapper.xml
View file @
5f95ca25
...
@@ -86,4 +86,12 @@
...
@@ -86,4 +86,12 @@
order by batch_time
order by batch_time
</select>
</select>
<select
id=
"selectMaxSaturation"
resultType=
"java.lang.Double"
>
select max(sturation)
from t_cross_data_hist
where cross_id = #{crossId}
and batch_time
<![CDATA[ >= ]]>
#{startStamp}
and batch_time
<![CDATA[ <= ]]>
#{endStamp}
</select>
</mapper>
</mapper>
\ No newline at end of file
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