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
0ccb6829
Commit
0ccb6829
authored
Sep 13, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 新信号评价-方案评价-效率提升策略总体评价
parent
88b04a94
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
288 additions
and
34 deletions
+288
-34
SchemeDetailOverallBO.java
...src/main/java/net/wanji/opt/bo/SchemeDetailOverallBO.java
+4
-1
SchemeEvaluateController.java
...va/net/wanji/opt/controller/SchemeEvaluateController.java
+15
-11
SchemeEvaluateService.java
...ain/java/net/wanji/opt/service/SchemeEvaluateService.java
+5
-0
SchemeEvaluateServiceImpl.java
...net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
+202
-6
SchemeEvaluateSchemeDetailOverallVO.java
...net/wanji/opt/vo/SchemeEvaluateSchemeDetailOverallVO.java
+2
-2
BaseEnum.java
wj-common/src/main/java/net/wanji/common/enums/BaseEnum.java
+10
-1
StrategyAndMetricsEnum.java
...n/java/net/wanji/common/enums/StrategyAndMetricsEnum.java
+20
-13
CrossDirDataHistMapper.java
.../net/wanji/databus/dao/mapper/CrossDirDataHistMapper.java
+6
-0
CrossDirDataHistMapper.xml
...abus/src/main/resources/mapper/CrossDirDataHistMapper.xml
+24
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/bo/SchemeDetailOverallBO.java
View file @
0ccb6829
...
...
@@ -14,6 +14,9 @@ import java.util.Date;
@Data
@ApiModel
(
value
=
"SchemeDetailOverallBO"
,
description
=
"方案详情-总体评价入参"
)
public
class
SchemeDetailOverallBO
{
@ApiModelProperty
(
value
=
"路口ID"
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"年月日,格式 2023/7/9"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy/M/d"
,
timezone
=
"GMT+8"
)
private
Date
problemDate
;
...
...
@@ -24,6 +27,6 @@ public class SchemeDetailOverallBO {
@ApiModelProperty
(
value
=
"结束时间 HH:mm"
)
String
endTime
;
@ApiModelProperty
(
value
=
"策略编号"
)
@ApiModelProperty
(
value
=
"策略编号
100030均衡调控 100152效率提升 100010安全保障
"
)
String
strategyCode
;
}
signal-optimize-service/src/main/java/net/wanji/opt/controller/SchemeEvaluateController.java
View file @
0ccb6829
...
...
@@ -8,9 +8,11 @@ import net.wanji.common.framework.rest.JsonViewObject;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.opt.bo.CrossSchemeListBO
;
import
net.wanji.opt.bo.ProblemSchemeBO
;
import
net.wanji.opt.bo.SchemeDetailOverallBO
;
import
net.wanji.opt.service.impl.SchemeEvaluateServiceImpl
;
import
net.wanji.opt.vo.SchemeEvaluateCrossSchemeListVO
;
import
net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO
;
import
net.wanji.opt.vo.SchemeEvaluateSchemeDetailOverallVO
;
import
net.wanji.opt.vo.SchemeEvaluateStrategyMetricMenuVO
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.ws.rs.core.MediaType
;
import
java.text.ParseException
;
import
java.util.List
;
/**
...
...
@@ -71,16 +74,17 @@ public class SchemeEvaluateController {
return
JsonViewObject
.
newInstance
().
success
(
res
);
}
// @ApiOperation(value = "方案详情-总体评价", notes = "方案详情-总体评价", response = JsonViewObject.class,
// produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
// @PostMapping(value = "/schemeDetailOverall",
// produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
// @ApiResponses({
// @ApiResponse(code = 200, message = "OK", response = SchemeEvaluateSchemeDetailOverallVO.class),
// })
// public JsonViewObject schemeDetailOverall(@RequestBody SchemeDetailOverallBO schemeDetailOverallBO) {
// SchemeEvaluateSchemeDetailOverallVO res = schemeEvaluateService.schemeDetailOverall(schemeDetailOverallBO);
// return JsonViewObject.newInstance().success(res);
// }
@ApiOperation
(
value
=
"方案详情-总体评价"
,
notes
=
"方案详情-总体评价"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/schemeDetailOverall"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
SchemeEvaluateSchemeDetailOverallVO
.
class
),
})
public
JsonViewObject
schemeDetailOverall
(
@RequestBody
SchemeDetailOverallBO
schemeDetailOverallBO
)
throws
ParseException
{
SchemeEvaluateSchemeDetailOverallVO
res
=
schemeEvaluateService
.
schemeDetailOverall
(
schemeDetailOverallBO
);
return
JsonViewObject
.
newInstance
().
success
(
res
);
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/service/SchemeEvaluateService.java
View file @
0ccb6829
...
...
@@ -3,10 +3,13 @@ package net.wanji.opt.service;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.opt.bo.CrossSchemeListBO
;
import
net.wanji.opt.bo.ProblemSchemeBO
;
import
net.wanji.opt.bo.SchemeDetailOverallBO
;
import
net.wanji.opt.vo.SchemeEvaluateCrossSchemeListVO
;
import
net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO
;
import
net.wanji.opt.vo.SchemeEvaluateSchemeDetailOverallVO
;
import
net.wanji.opt.vo.SchemeEvaluateStrategyMetricMenuVO
;
import
java.text.ParseException
;
import
java.util.List
;
public
interface
SchemeEvaluateService
{
...
...
@@ -15,4 +18,6 @@ public interface SchemeEvaluateService {
List
<
SchemeEvaluateStrategyMetricMenuVO
>
strategyMetricMenu
(
CrossIdBO
crossIdBO
);
List
<
SchemeEvaluateCrossSchemeListVO
>
crossSchemeList
(
CrossSchemeListBO
crossSchemeListBO
);
SchemeEvaluateSchemeDetailOverallVO
schemeDetailOverall
(
SchemeDetailOverallBO
schemeDetailOverallBO
)
throws
ParseException
;
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
View file @
0ccb6829
...
...
@@ -4,13 +4,22 @@ import cn.hutool.core.collection.CollectionUtil;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.enums.BaseEnum
;
import
net.wanji.common.enums.CrossInOutEnum
;
import
net.wanji.common.enums.StrategyAndMetricsEnum
;
import
net.wanji.common.utils.tool.CrossUtil
;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.databus.dao.entity.*
;
import
net.wanji.databus.dao.entity.BaseCrossSchedulesPO
;
import
net.wanji.databus.dao.entity.BaseCrossSchedulesPlanPO
;
import
net.wanji.databus.dao.entity.BaseCrossSchemePO
;
import
net.wanji.databus.dao.entity.CrossSectionPO
;
import
net.wanji.databus.dao.mapper.*
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.databus.po.CrossDataRealtimePO
;
import
net.wanji.databus.po.CrossDirDataHistPO
;
import
net.wanji.opt.bo.CrossSchemeListBO
;
import
net.wanji.opt.bo.ProblemSchemeBO
;
import
net.wanji.opt.bo.SchemeDetailOverallBO
;
import
net.wanji.opt.dao.mapper.strategy.SceneMapper
;
import
net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper
;
import
net.wanji.opt.dao.mapper.strategy.StrategyMapper
;
...
...
@@ -18,14 +27,12 @@ import net.wanji.opt.po.strategy.ScenePO;
import
net.wanji.opt.po.strategy.SceneStrategyPO
;
import
net.wanji.opt.po.strategy.StrategyPO
;
import
net.wanji.opt.service.SchemeEvaluateService
;
import
net.wanji.opt.vo.RunningEvaluateMetricsDetailVO
;
import
net.wanji.opt.vo.SchemeEvaluateCrossSchemeListVO
;
import
net.wanji.opt.vo.SchemeEvaluateProblemSchemeVO
;
import
net.wanji.opt.vo.SchemeEvaluateStrategyMetricMenuVO
;
import
net.wanji.opt.vo.*
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.stereotype.Service
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.function.Function
;
...
...
@@ -47,6 +54,9 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
private
final
StrategyMapper
strategyMapper
;
private
final
BaseCrossSchedulesMapper
baseCrossSchedulesMapper
;
private
final
BaseCrossSchedulesPlanMapper
baseCrossSchedulesPlanMapper
;
private
final
CrossDataRealtimeMapper
crossDataRealtimeMapper
;
private
final
CrossDirDataHistMapper
crossDirDataHistMapper
;
private
final
BaseCrossDirInfoMapper
baseCrossDirInfoMapper
;
public
SchemeEvaluateServiceImpl
(
CrossDataHistMapper
crossDataHistMapper
,
RunningEvaluateServiceImpl
runningEvaluateService
,
...
...
@@ -56,7 +66,9 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
@Qualifier
(
"sceneStrategyMapper"
)
SceneStrategyMapper
sceneStrategyMapper
,
@Qualifier
(
"strategyMapper"
)
StrategyMapper
strategyMapper
,
@Qualifier
(
"baseCrossSchedulesMapper"
)
BaseCrossSchedulesMapper
baseCrossSchedulesMapper
,
@Qualifier
(
"baseCrossSchedulesPlanMapper"
)
BaseCrossSchedulesPlanMapper
baseCrossSchedulesPlanMapper
)
{
@Qualifier
(
"baseCrossSchedulesPlanMapper"
)
BaseCrossSchedulesPlanMapper
baseCrossSchedulesPlanMapper
,
CrossDataRealtimeMapper
crossDataRealtimeMapper
,
CrossDirDataHistMapper
crossDirDataHistMapper
,
@Qualifier
(
"baseCrossDirInfoMapper"
)
BaseCrossDirInfoMapper
baseCrossDirInfoMapper
)
{
this
.
crossDataHistMapper
=
crossDataHistMapper
;
this
.
runningEvaluateService
=
runningEvaluateService
;
this
.
baseCrossSectionMapper
=
baseCrossSectionMapper
;
...
...
@@ -66,6 +78,9 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
this
.
strategyMapper
=
strategyMapper
;
this
.
baseCrossSchedulesMapper
=
baseCrossSchedulesMapper
;
this
.
baseCrossSchedulesPlanMapper
=
baseCrossSchedulesPlanMapper
;
this
.
crossDataRealtimeMapper
=
crossDataRealtimeMapper
;
this
.
crossDirDataHistMapper
=
crossDirDataHistMapper
;
this
.
baseCrossDirInfoMapper
=
baseCrossDirInfoMapper
;
}
@Override
...
...
@@ -215,6 +230,187 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
return
sortedList
;
}
@Override
public
SchemeEvaluateSchemeDetailOverallVO
schemeDetailOverall
(
SchemeDetailOverallBO
schemeDetailOverallBO
)
throws
ParseException
{
String
crossId
=
schemeDetailOverallBO
.
getCrossId
();
String
strategyCode
=
schemeDetailOverallBO
.
getStrategyCode
();
Date
problemDate
=
schemeDetailOverallBO
.
getProblemDate
();
String
startTime
=
schemeDetailOverallBO
.
getStartTime
();
String
endTime
=
schemeDetailOverallBO
.
getEndTime
();
SchemeEvaluateSchemeDetailOverallVO
vo
=
new
SchemeEvaluateSchemeDetailOverallVO
();
// 服务水平
CrossDataRealtimePO
crossDataRealtimePO
=
crossDataRealtimeMapper
.
selectByCrossId
(
crossId
);
Double
sturation
=
crossDataRealtimePO
.
getSturation
();
String
serviceLevel
=
CrossUtil
.
getServiceLevel
(
sturation
);
vo
.
setServiceLevel
(
serviceLevel
);
if
(
Objects
.
equals
(
strategyCode
,
StrategyAndMetricsEnum
.
Strategy
.
EFFICIENCY
.
getCode
()))
{
// 查询路口指标数值
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
SimpleDateFormat
timeFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
String
dateStr
=
dateFormat
.
format
(
problemDate
);
String
concatenatedStartTime
=
dateStr
+
" "
+
startTime
;
String
concatenatedEndTime
=
dateStr
+
" "
+
endTime
;
int
startTimeStamp
=
(
int
)
(
timeFormat
.
parse
(
concatenatedStartTime
).
getTime
()
/
1000
);
int
endTimeStamp
=
(
int
)
(
timeFormat
.
parse
(
concatenatedEndTime
).
getTime
()
/
1000
);
List
<
CrossDataHistPO
>
crossDataHistPOList
=
crossDataHistMapper
.
selectByCrossIdAndStartEnd
(
crossId
,
startTimeStamp
,
endTimeStamp
);
List
<
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
>
overallMetricsList
=
new
ArrayList
<>();
// 排队长度
OptionalDouble
queueLengthAverage
=
crossDataHistPOList
.
stream
()
.
mapToDouble
(
CrossDataHistPO:
:
getQueueLength
)
.
average
();
if
(
queueLengthAverage
.
isPresent
())
{
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
buildQueueLengthOverallMetrics
(
queueLengthAverage
);
overallMetricsList
.
add
(
overallMetrics
);
}
else
{
throw
new
RuntimeException
(
"该时段无最大排队数据"
);
}
// 平均延误
OptionalDouble
delayTimeAverage
=
crossDataHistPOList
.
stream
()
.
mapToDouble
(
CrossDataHistPO:
:
getDelayTime
)
.
average
();
if
(
delayTimeAverage
.
isPresent
())
{
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
buildDelayTimeOverallMetrics
(
delayTimeAverage
);
overallMetricsList
.
add
(
overallMetrics
);
}
else
{
throw
new
RuntimeException
(
"该时段无延误数据"
);
}
// 停车次数
OptionalDouble
stopTimesAverage
=
crossDataHistPOList
.
stream
()
.
mapToDouble
(
CrossDataHistPO:
:
getStopTimes
)
.
average
();
if
(
stopTimesAverage
.
isPresent
())
{
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
buildStopTimesOverallMetrics
(
stopTimesAverage
);
overallMetricsList
.
add
(
overallMetrics
);
}
else
{
throw
new
RuntimeException
(
"该时段无停车次数数据"
);
}
// 不停车通过率
List
<
CrossDirDataHistPO
>
crossDirDataHistPOList
=
crossDirDataHistMapper
.
selectByCrossIdAndStartEnd
(
crossId
,
startTimeStamp
,
endTimeStamp
);
OptionalDouble
noStopRateAverage
=
crossDirDataHistPOList
.
stream
()
.
mapToDouble
(
CrossDirDataHistPO:
:
getNoStopRate
)
.
average
();
if
(
noStopRateAverage
.
isPresent
())
{
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
buildNoStopRateOverallMetrics
(
noStopRateAverage
);
overallMetricsList
.
add
(
overallMetrics
);
}
else
{
throw
new
RuntimeException
(
"该时段无不停车通过率数据"
);
}
vo
.
setOverallMetricsList
(
overallMetricsList
);
// 查询方向指标数值并与评价标准比较
// 获取路口方向
List
<
Integer
>
dirCodes
=
baseCrossDirInfoMapper
.
selectInDirsByCrossId
(
crossId
);
List
<
String
>
strategyEvaluateList
=
new
ArrayList
<>();
for
(
Integer
dirCode
:
dirCodes
)
{
Double
avgDelayTime
=
crossDirDataHistMapper
.
selectAvgDelayTime
(
crossId
,
dirCode
,
CrossInOutEnum
.
IN
.
getCode
(),
startTimeStamp
,
endTimeStamp
);
Double
avgQueueLength
=
crossDirDataHistMapper
.
selectAvgQueueLength
(
crossId
,
dirCode
,
CrossInOutEnum
.
IN
.
getCode
(),
startTimeStamp
,
endTimeStamp
);
int
level
=
calcLevel
(
avgDelayTime
,
avgQueueLength
);
if
(
level
==
3
)
{
strategyEvaluateList
.
add
(
BaseEnum
.
SignalDirectionEnum
.
getNameByCode
(
dirCode
)
+
"进口延误较高效率较低"
);
}
else
if
(
level
==
4
)
{
strategyEvaluateList
.
add
(
BaseEnum
.
SignalDirectionEnum
.
getNameByCode
(
dirCode
)
+
"进口延误高效率低"
);
}
}
if
(
CollectionUtil
.
isEmpty
(
strategyEvaluateList
))
{
strategyEvaluateList
.
add
(
"路口满足效率提升策略需求"
);
}
vo
.
setStrategyEvaluateList
(
strategyEvaluateList
);
}
else
if
(
Objects
.
equals
(
strategyCode
,
StrategyAndMetricsEnum
.
Strategy
.
BALANCE
.
getCode
()))
{
}
else
if
(
Objects
.
equals
(
strategyCode
,
StrategyAndMetricsEnum
.
Strategy
.
SECURITY
.
getCode
()))
{
}
return
vo
;
}
private
int
calcLevel
(
Double
avgDelayTime
,
Double
avgQueueLength
)
{
int
level
=
0
;
if
(
avgDelayTime
!=
null
)
{
int
intAvgDelayTime
=
(
int
)
Math
.
round
(
avgDelayTime
);
if
(
intAvgDelayTime
>=
40
&&
intAvgDelayTime
<=
49
)
{
level
=
3
;
}
else
if
(
intAvgDelayTime
>=
50
)
{
level
=
4
;
}
}
if
(
avgQueueLength
!=
null
)
{
int
intAvgQueueLength
=
(
int
)
Math
.
round
(
avgQueueLength
);
if
(
intAvgQueueLength
>=
60
&&
intAvgQueueLength
<=
79
&&
level
<
3
)
{
level
=
3
;
}
else
if
(
intAvgQueueLength
>=
80
)
{
level
=
4
;
}
}
return
level
;
}
private
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
buildNoStopRateOverallMetrics
(
OptionalDouble
noStopRateAverage
)
{
// 先乘以100,再四舍五入并转换为 int 类型
int
intStopTimesAverage
=
(
int
)
Math
.
round
(
noStopRateAverage
.
getAsDouble
()
*
100
);
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
new
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
();
overallMetrics
.
setMetricCode
(
StrategyAndMetricsEnum
.
Metrics
.
NO_STOP_THROUGH_RATE
.
getCode
());
overallMetrics
.
setMetricName
(
StrategyAndMetricsEnum
.
Metrics
.
NO_STOP_THROUGH_RATE
.
getDescription
());
overallMetrics
.
setMetricValue
(
intStopTimesAverage
);
overallMetrics
.
setMetricUnit
(
StrategyAndMetricsEnum
.
Metrics
.
NO_STOP_THROUGH_RATE
.
getUnit
());
return
overallMetrics
;
}
private
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
buildStopTimesOverallMetrics
(
OptionalDouble
stopTimesAverage
)
{
// 四舍五入并转换为 int 类型
int
intStopTimesAverage
=
(
int
)
Math
.
round
(
stopTimesAverage
.
getAsDouble
());
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
new
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
();
overallMetrics
.
setMetricCode
(
StrategyAndMetricsEnum
.
Metrics
.
STOP_COUNT
.
getCode
());
overallMetrics
.
setMetricName
(
StrategyAndMetricsEnum
.
Metrics
.
STOP_COUNT
.
getDescription
());
overallMetrics
.
setMetricValue
(
intStopTimesAverage
);
overallMetrics
.
setMetricUnit
(
StrategyAndMetricsEnum
.
Metrics
.
STOP_COUNT
.
getUnit
());
return
overallMetrics
;
}
private
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
buildDelayTimeOverallMetrics
(
OptionalDouble
delayTimeAverage
)
{
// 四舍五入并转换为 int 类型
int
intDelayTimeAverage
=
(
int
)
Math
.
round
(
delayTimeAverage
.
getAsDouble
());
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
new
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
();
overallMetrics
.
setMetricCode
(
StrategyAndMetricsEnum
.
Metrics
.
AVERAGE_DELAY
.
getCode
());
overallMetrics
.
setMetricName
(
StrategyAndMetricsEnum
.
Metrics
.
AVERAGE_DELAY
.
getDescription
());
overallMetrics
.
setMetricValue
(
intDelayTimeAverage
);
overallMetrics
.
setMetricUnit
(
StrategyAndMetricsEnum
.
Metrics
.
AVERAGE_DELAY
.
getUnit
());
return
overallMetrics
;
}
@NotNull
private
static
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
buildQueueLengthOverallMetrics
(
OptionalDouble
queueLengthAverage
)
{
// 四舍五入并转换为 int 类型
int
intQueueLengthAverage
=
(
int
)
Math
.
round
(
queueLengthAverage
.
getAsDouble
());
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
overallMetrics
=
new
SchemeEvaluateSchemeDetailOverallVO
.
OverallMetrics
();
overallMetrics
.
setMetricCode
(
StrategyAndMetricsEnum
.
Metrics
.
MAX_QUEUE_LENGTH
.
getCode
());
overallMetrics
.
setMetricName
(
StrategyAndMetricsEnum
.
Metrics
.
MAX_QUEUE_LENGTH
.
getDescription
());
overallMetrics
.
setMetricValue
(
intQueueLengthAverage
);
overallMetrics
.
setMetricUnit
(
StrategyAndMetricsEnum
.
Metrics
.
MAX_QUEUE_LENGTH
.
getUnit
());
return
overallMetrics
;
}
@NotNull
private
static
SchemeEvaluateCrossSchemeListVO
buildSchemeEvaluateCrossSchemeListVO
(
BaseCrossSchemePO
baseCrossSchemePO
,
CrossSectionPO
crossSectionPO
)
{
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/SchemeEvaluateSchemeDetailOverallVO.java
View file @
0ccb6829
...
...
@@ -19,7 +19,7 @@ public class SchemeEvaluateSchemeDetailOverallVO {
String
serviceLevel
;
@ApiModelProperty
(
value
=
"策略评价"
)
List
<
String
>
strategyEvaluate
;
List
<
String
>
strategyEvaluate
List
;
@ApiModelProperty
(
value
=
"指标数据"
)
List
<
OverallMetrics
>
overallMetricsList
;
...
...
@@ -34,7 +34,7 @@ public class SchemeEvaluateSchemeDetailOverallVO {
String
metricName
;
@ApiModelProperty
(
value
=
"指标数值"
)
String
metricValue
;
Integer
metricValue
;
@ApiModelProperty
(
value
=
"指标数值单位"
)
String
metricUnit
;
...
...
wj-common/src/main/java/net/wanji/common/enums/BaseEnum.java
View file @
0ccb6829
...
...
@@ -124,7 +124,7 @@ public class BaseEnum {
private
String
nick
;
public
static
SignalDirectionEnum
getN
ame
ByCode
(
int
code
)
{
public
static
SignalDirectionEnum
getN
ick
ByCode
(
int
code
)
{
for
(
SignalDirectionEnum
signalDirectionEnum
:
SignalDirectionEnum
.
values
())
{
if
(
signalDirectionEnum
.
getCode
()
==
code
)
{
return
signalDirectionEnum
;
...
...
@@ -133,6 +133,15 @@ public class BaseEnum {
return
null
;
}
public
static
String
getNameByCode
(
int
code
)
{
for
(
SignalDirectionEnum
signalDirectionEnum
:
SignalDirectionEnum
.
values
())
{
if
(
signalDirectionEnum
.
getCode
()
==
code
)
{
return
signalDirectionEnum
.
getName
();
}
}
return
null
;
}
public
static
SignalDirectionEnum
getNameByNick
(
String
nick
)
{
for
(
SignalDirectionEnum
signalDirectionEnum
:
SignalDirectionEnum
.
values
())
{
if
(
signalDirectionEnum
.
getNick
().
equals
(
nick
))
{
...
...
wj-common/src/main/java/net/wanji/common/enums/StrategyAndMetricsEnum.java
View file @
0ccb6829
...
...
@@ -35,25 +35,28 @@ public class StrategyAndMetricsEnum {
}
public
enum
Metrics
{
NO_STOP_THROUGH_RATE
(
1
,
"不停车通过率"
),
STOP_THROUGH_RATE
(
2
,
"一/二/三次及以上停车通过率"
),
AVERAGE_DELAY
(
3
,
"平均延误"
),
MAX_QUEUE_LENGTH
(
4
,
"最大排队长度"
),
STOP_COUNT
(
5
,
"停车次数"
),
AVERAGE_SPEED
(
6
,
"平均速度"
),
GREEN_LIGHT_UTILIZATION
(
7
,
"绿灯有效利用率"
),
SATURATION
(
8
,
"饱和度"
),
LOAD_BALANCE
(
9
,
"负载均衡度"
),
OVERFLOW_RATE
(
10
,
"溢流率"
),
GREEN_INTERVAL_CLEAR
(
11
,
"绿灯间隔清空率"
),
EMERGENCY_COUNT
(
12
,
"三急一速数量"
);
NO_STOP_THROUGH_RATE
(
1
,
"不停车通过率"
,
"%"
),
STOP_THROUGH_RATE
(
2
,
"一/二/三次及以上停车通过率"
,
"%"
),
AVERAGE_DELAY
(
3
,
"平均延误"
,
"s"
),
MAX_QUEUE_LENGTH
(
4
,
"最大排队长度"
,
"m"
),
STOP_COUNT
(
5
,
"停车次数"
,
"次"
),
AVERAGE_SPEED
(
6
,
"平均速度"
,
"km/h"
),
GREEN_LIGHT_UTILIZATION
(
7
,
"绿灯有效利用率"
,
"%"
),
SATURATION
(
8
,
"饱和度"
,
""
),
LOAD_BALANCE
(
9
,
"负载均衡度"
,
""
),
OVERFLOW_RATE
(
10
,
"溢流率"
,
"%"
),
GREEN_INTERVAL_CLEAR
(
11
,
"绿灯间隔清空率"
,
"%"
),
EMERGENCY_COUNT
(
12
,
"三急一速数量"
,
""
);
private
final
Integer
code
;
private
final
String
description
;
private
final
String
unit
;
Metrics
(
Integer
code
,
String
description
)
{
Metrics
(
Integer
code
,
String
description
,
String
unit
)
{
this
.
code
=
code
;
this
.
description
=
description
;
this
.
unit
=
unit
;
}
public
String
getDescription
()
{
...
...
@@ -63,6 +66,10 @@ public class StrategyAndMetricsEnum {
public
Integer
getCode
()
{
return
code
;
}
public
String
getUnit
()
{
return
unit
;
}
}
public
static
final
Map
<
Strategy
,
List
<
Metrics
>>
STRATEGY_METRICS_MAP
;
...
...
wj-databus/src/main/java/net/wanji/databus/dao/mapper/CrossDirDataHistMapper.java
View file @
0ccb6829
...
...
@@ -34,4 +34,10 @@ public interface CrossDirDataHistMapper extends BaseMapper<CrossDirDataHistPO> {
List
<
CrossDirDataHistPO
>
selectPhaseQueueEnd
(
String
crossId
,
Integer
dir
,
long
currentSeconds
,
long
preSeconds
);
List
<
MetricHistDTO
>
selectMetricHistDTO
(
String
crossId
,
int
startStamp
,
int
endStamp
);
List
<
CrossDirDataHistPO
>
selectByCrossIdAndStartEnd
(
String
crossId
,
int
startStamp
,
int
endStamp
);
Double
selectAvgDelayTime
(
String
crossId
,
Integer
dirType
,
Integer
inOutType
,
int
startStamp
,
int
endStamp
);
Double
selectAvgQueueLength
(
String
crossId
,
Integer
dirType
,
Integer
inOutType
,
int
startStamp
,
int
endStamp
);
}
wj-databus/src/main/resources/mapper/CrossDirDataHistMapper.xml
View file @
0ccb6829
...
...
@@ -119,4 +119,28 @@
order by batch_time
</select>
<select
id=
"selectByCrossIdAndStartEnd"
resultType=
"net.wanji.databus.po.CrossDirDataHistPO"
>
select
<include
refid=
"Base_Column_List"
/>
from t_cross_dir_data_hist
where cross_id = #{crossId}
and batch_time
<![CDATA[ >= ]]>
#{startStamp}
and batch_time
<![CDATA[ <= ]]>
#{endStamp}
</select>
<select
id=
"selectAvgDelayTime"
resultType=
"java.lang.Double"
>
select avg(delay_time)
from t_cross_dir_data_hist
where cross_id = #{crossId} and dir_type = #{dirType} and in_out_type = #{inOutType}
and batch_time
<![CDATA[ >= ]]>
#{startStamp}
and batch_time
<![CDATA[ <= ]]>
#{endStamp}
</select>
<select
id=
"selectAvgQueueLength"
resultType=
"java.lang.Double"
>
select avg(queue_length)
from t_cross_dir_data_hist
where cross_id = #{crossId} and dir_type = #{dirType} and in_out_type = #{inOutType}
and batch_time
<![CDATA[ >= ]]>
#{startStamp}
and batch_time
<![CDATA[ <= ]]>
#{endStamp}
</select>
</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