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
592b33ff
Commit
592b33ff
authored
Oct 19, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 信号优化,方案评价-查询速度优化
parent
9c35f355
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
94 additions
and
27 deletions
+94
-27
SceneMapper.java
...n/java/net/wanji/opt/dao/mapper/strategy/SceneMapper.java
+2
-0
SceneStrategyMapper.java
...et/wanji/opt/dao/mapper/strategy/SceneStrategyMapper.java
+2
-0
StrategyMapper.java
...ava/net/wanji/opt/dao/mapper/strategy/StrategyMapper.java
+2
-0
RunningEvaluateServiceImpl.java
...et/wanji/opt/service/impl/RunningEvaluateServiceImpl.java
+17
-8
SchemeEvaluateServiceImpl.java
...net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
+43
-18
SceneMapper.xml
...ervice/src/main/resources/mapper/strategy/SceneMapper.xml
+8
-1
SceneStrategyMapper.xml
...rc/main/resources/mapper/strategy/SceneStrategyMapper.xml
+6
-0
StrategyMapper.xml
...ice/src/main/resources/mapper/strategy/StrategyMapper.xml
+6
-0
BaseCrossSchemeMapper.java
...a/net/wanji/databus/dao/mapper/BaseCrossSchemeMapper.java
+2
-0
BaseCrossSchemeMapper.xml
...tabus/src/main/resources/mapper/BaseCrossSchemeMapper.xml
+6
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/strategy/SceneMapper.java
View file @
592b33ff
...
...
@@ -23,4 +23,6 @@ public interface SceneMapper {
ScenePO
selectBySceneNum
(
Integer
status
);
ScenePO
selectById
(
Integer
sceneId
);
List
<
ScenePO
>
selectAll
();
}
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/strategy/SceneStrategyMapper.java
View file @
592b33ff
...
...
@@ -21,4 +21,6 @@ public interface SceneStrategyMapper {
void
deleteByStrategyIds
(
List
<
Integer
>
ids
);
List
<
Integer
>
selectSceneIdsByStrategyId
(
Integer
strategyId
);
List
<
SceneStrategyPO
>
selectAll
();
}
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/strategy/StrategyMapper.java
View file @
592b33ff
...
...
@@ -33,4 +33,6 @@ public interface StrategyMapper {
void
insertGreenwave
(
Integer
greenwaveId
,
Integer
strategyId
);
List
<
String
>
selectGreenwaveAllNames
();
List
<
StrategyPO
>
selectAll
();
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/RunningEvaluateServiceImpl.java
View file @
592b33ff
...
...
@@ -16,7 +16,10 @@ import net.wanji.databus.dao.entity.*;
import
net.wanji.databus.dao.mapper.*
;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.databus.dto.RunningPlanDTO
;
import
net.wanji.databus.po.*
;
import
net.wanji.databus.po.BaseCrossInfoPO
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.databus.po.CrossTurnInfoPO
;
import
net.wanji.databus.po.LaneInfoPO
;
import
net.wanji.databus.vo.RunningEvaluateCrossListVO
;
import
net.wanji.opt.bo.CrossNameBO
;
import
net.wanji.opt.bo.MetricsDetailBO
;
...
...
@@ -227,7 +230,8 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.
filter
(
po
->
!
Objects
.
equals
(
po
.
getStatus
(),
CrossStatusEnum
.
NORMAL
.
getCode
()))
.
collect
(
Collectors
.
toList
());
// 按采集时间小时进行聚合
Map
<
String
,
List
<
CrossDataHistPO
>>
timePOMap
=
buildTimePOMap
(
collect
);;
Map
<
String
,
List
<
CrossDataHistPO
>>
timePOMap
=
buildTimePOMap
(
collect
);
;
// 找出当前小时的记录
List
<
CrossDataHistPO
>
currentHourList
=
timePOMap
.
get
(
time
.
substring
(
0
,
2
));
// 保留小时字符串
if
(
currentHourList
!=
null
)
{
...
...
@@ -376,6 +380,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
private
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>
buildSchemeList
(
List
<
MetricHistDTO
>
metricHistDTOList
,
String
crossId
)
{
List
<
BaseCrossSchemePO
>
baseCrossSchemePOList
=
baseCrossSchemeMapper
.
selectAll
();
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>
res
=
new
ArrayList
<>();
// 验证数据是否正确
if
(!
isDataValid
(
metricHistDTOList
))
{
...
...
@@ -412,7 +417,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
boolean
isIntersecting
=
isTimeIntersecting
(
eventStartTime
,
eventEndTime
,
sectionStartTime
,
sectionEndTime
);
buildResIfIntersecting
(
res
,
crossSectionPO
,
sectionStartTime
,
sectionEndTime
,
isIntersecting
,
baseCrossScheme
Mapper
);
baseCrossScheme
POList
);
}
}
// 去除相同方案
...
...
@@ -423,11 +428,15 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
}
void
buildResIfIntersecting
(
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>
res
,
CrossSectionPO
crossSectionPO
,
String
sectionStartTime
,
String
sectionEndTime
,
boolean
isIntersecting
,
BaseCrossSchemeMapper
baseCrossSchemeMapper
)
{
String
sectionStartTime
,
String
sectionEndTime
,
boolean
isIntersecting
,
List
<
BaseCrossSchemePO
>
crossSchemePOList
)
{
if
(
isIntersecting
)
{
Integer
schemeId
=
crossSectionPO
.
getSchemeId
();
BaseCrossSchemePO
baseCrossSchemePO
=
baseCrossSchemeMapper
.
selectById
(
schemeId
);
Optional
<
BaseCrossSchemePO
>
result
=
crossSchemePOList
.
stream
()
.
filter
(
crossScheme
->
schemeId
.
equals
(
crossScheme
.
getId
()))
.
findFirst
();
BaseCrossSchemePO
baseCrossSchemePO
=
result
.
get
();
String
schemeName
=
baseCrossSchemePO
.
getName
();
RunningEvaluateMetricsDetailVO
.
ProblemScheme
problemScheme
=
...
...
@@ -521,7 +530,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
String
crossId
=
bo
.
getCrossId
();
RunningEvaluateScopeTreeVO
runningEvaluateScopeTreeVO
=
new
RunningEvaluateScopeTreeVO
();
runningEvaluateScopeTreeVO
.
setCrossId
(
crossId
);
List
<
RunningEvaluateScopeTreeVO
.
DirVO
>
dirVOList
=
buildDirVOList
(
crossId
);
List
<
RunningEvaluateScopeTreeVO
.
DirVO
>
dirVOList
=
buildDirVOList
(
crossId
);
runningEvaluateScopeTreeVO
.
setChild
(
dirVOList
);
return
runningEvaluateScopeTreeVO
;
}
...
...
@@ -580,7 +589,7 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
.
collect
(
Collectors
.
groupingBy
(
CrossDataHistPO:
:
getStartTime
))
.
values
().
stream
()
.
map
(
list
->
list
.
stream
().
max
(
Comparator
.
comparingInt
(
CrossDataHistPO:
:
getDuration
))
.
orElse
(
null
))
.
orElse
(
null
))
.
collect
(
Collectors
.
toList
())
));
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/SchemeEvaluateServiceImpl.java
View file @
592b33ff
...
...
@@ -11,10 +11,7 @@ import net.wanji.common.enums.TurnConvertEnum;
import
net.wanji.common.utils.tool.CrossUtil
;
import
net.wanji.common.utils.tool.TimeArrayUtil
;
import
net.wanji.databus.bo.CrossIdBO
;
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.entity.*
;
import
net.wanji.databus.dao.mapper.*
;
import
net.wanji.databus.po.*
;
import
net.wanji.opt.bo.CrossSchemeListBO
;
...
...
@@ -121,11 +118,15 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
res
.
setProblemCounts
(
problemCounts
);
// 问题方案数量
// 构造问题方案列表(根据日期)
Map
<
Date
,
List
<
CrossDataHistPO
>>
dateProblemsMap
=
buildDateProblemsMap
(
timeProblemMap
);
// 构造日期-问题结果集
List
<
CrossSectionPO
>
crossSectionPOList
=
baseCrossSectionMapper
.
selectAll
();
List
<
BaseCrossSchemePO
>
crossSchemePOList
=
baseCrossSchemeMapper
.
selectAll
();
Map
<
Date
,
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
dateSchemesMap
=
buildDateSchemesMap
(
dateProblemsMap
,
crossId
);
// 构造日期-问题方案结果集
buildDateSchemesMap
(
dateProblemsMap
,
crossId
,
crossSectionPOList
,
crossSchemePOList
);
// 构造日期-问题方案结果集
List
<
ScenePO
>
scenePOList
=
sceneMapper
.
selectAll
();
List
<
SchemeEvaluateProblemSchemeVO
.
ByDateVO
>
byDateVOList
=
buildProblemSchemeListByDate
(
dateProblemsMap
,
dateSchemesMap
);
dateProblemsMap
,
dateSchemesMap
,
scenePOList
);
res
.
setProblemSchemeListByDate
(
byDateVOList
);
// 构造计数
int
schemeCounts
=
calcSchemeCounts
(
dateSchemesMap
);
...
...
@@ -1370,18 +1371,26 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
}
private
int
calcSchemeCounts
(
Map
<
Date
,
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
dateSchemesMap
)
{
int
schemeCounts
=
0
;
for
(
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>
list
:
dateSchemesMap
.
values
())
{
schemeCounts
+=
list
.
size
();
Set
<
Integer
>
problemIdSet
=
new
HashSet
<>();
Collection
<
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
values
=
dateSchemesMap
.
values
();
for
(
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>
list
:
values
)
{
for
(
RunningEvaluateMetricsDetailVO
.
ProblemScheme
problemScheme
:
list
)
{
Integer
schemeId
=
problemScheme
.
getSchemeId
();
problemIdSet
.
add
(
schemeId
);
}
}
return
schemeCounts
;
return
problemIdSet
.
size
()
;
}
@NotNull
private
List
<
SchemeEvaluateProblemSchemeVO
.
ByDateVO
>
buildProblemSchemeListByDate
(
Map
<
Date
,
List
<
CrossDataHistPO
>>
dateProblemsMap
,
Map
<
Date
,
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
dateSchemesMap
)
{
Map
<
Date
,
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
dateSchemesMap
,
List
<
ScenePO
>
scenePOList
)
{
List
<
SchemeEvaluateProblemSchemeVO
.
ByDateVO
>
byDateVOList
=
new
ArrayList
<>();
List
<
SceneStrategyPO
>
sceneStrategyPOList
=
sceneStrategyMapper
.
selectAll
();
List
<
StrategyPO
>
strategyPOList
=
strategyMapper
.
selectAll
();
for
(
Map
.
Entry
<
Date
,
List
<
CrossDataHistPO
>>
entry
:
dateProblemsMap
.
entrySet
())
{
Date
key
=
entry
.
getKey
();
...
...
@@ -1397,12 +1406,22 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
for
(
CrossDataHistPO
crossDataHistPO
:
value
)
{
Integer
status
=
crossDataHistPO
.
getStatus
();
// 根据场景查询策略
ScenePO
scenePO
=
sceneMapper
.
selectBySceneNum
(
status
);
Optional
<
ScenePO
>
first
=
scenePOList
.
stream
()
.
filter
(
po
->
status
.
equals
(
po
.
getSceneNum
()))
.
findFirst
();
ScenePO
scenePO
=
first
.
get
();
Integer
sceneId
=
scenePO
.
getId
();
List
<
SceneStrategyPO
>
sceneStrategyList
=
sceneStrategyMapper
.
selectBySceneId
(
sceneId
);
List
<
SceneStrategyPO
>
sceneStrategyList
=
sceneStrategyPOList
.
stream
()
.
filter
(
po
->
sceneId
.
equals
(
po
.
getSceneId
()))
.
collect
(
Collectors
.
toList
());
for
(
SceneStrategyPO
sceneStrategyPO
:
sceneStrategyList
)
{
Integer
strategyId
=
sceneStrategyPO
.
getStrategyId
();
StrategyPO
strategyPO
=
strategyMapper
.
selectById
(
strategyId
);
Optional
<
StrategyPO
>
first1
=
strategyPOList
.
stream
()
.
filter
(
po
->
strategyId
.
equals
(
po
.
getId
()))
.
findFirst
();
StrategyPO
strategyPO
=
first1
.
get
();
String
strategyCode
=
strategyPO
.
getStrategyCode
();
if
(
strategyCode
.
equals
(
StrategyAndMetricsEnum
.
Strategy
.
EFFICIENCY
.
getCode
()))
{
efficiencyProblemCounts
+=
1
;
...
...
@@ -1423,7 +1442,8 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
}
private
Map
<
Date
,
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
buildDateSchemesMap
(
Map
<
Date
,
List
<
CrossDataHistPO
>>
dateProblemsMap
,
String
crossId
)
{
Map
<
Date
,
List
<
CrossDataHistPO
>>
dateProblemsMap
,
String
crossId
,
List
<
CrossSectionPO
>
crossSectionPOList
,
List
<
BaseCrossSchemePO
>
crossSchemePOList
)
{
Map
<
Date
,
List
<
RunningEvaluateMetricsDetailVO
.
ProblemScheme
>>
dateSchemesMap
=
new
HashMap
<>();
// 获取当前计划ID
...
...
@@ -1433,8 +1453,13 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
String
dateStr
=
sdf
.
format
(
datetime
);
Integer
planId
=
runningEvaluateService
.
findPlanId
(
datetime
,
dateStr
,
crossId
);
List
<
CrossSectionPO
>
crossSectionPOList
=
baseCrossSectionMapper
.
selectByCrossAndPlan
(
crossId
,
planId
);
for
(
CrossSectionPO
crossSectionPO
:
crossSectionPOList
)
{
List
<
CrossSectionPO
>
filteredList
=
crossSectionPOList
.
stream
()
.
filter
(
crossSection
->
crossId
.
equals
(
crossSection
.
getCrossId
())
&&
planId
.
equals
(
crossSection
.
getPlanId
()))
.
collect
(
Collectors
.
toList
());
for
(
CrossSectionPO
crossSectionPO
:
filteredList
)
{
String
sectionStartTime
=
crossSectionPO
.
getStartTime
();
String
sectionEndTime
=
crossSectionPO
.
getEndTime
();
List
<
CrossDataHistPO
>
value
=
dateListEntry
.
getValue
();
...
...
@@ -1449,7 +1474,7 @@ public class SchemeEvaluateServiceImpl implements SchemeEvaluateService {
boolean
isIntersecting
=
runningEvaluateService
.
isTimeIntersecting
(
eventStartTime
,
eventEndTime
,
sectionStartTime
,
sectionEndTime
);
runningEvaluateService
.
buildResIfIntersecting
(
problemSchemeList
,
crossSectionPO
,
sectionStartTime
,
sectionEndTime
,
isIntersecting
,
baseCrossSchemeMapper
);
sectionEndTime
,
isIntersecting
,
crossSchemePOList
);
}
}
// 去除相同方案
...
...
signal-optimize-service/src/main/resources/mapper/strategy/SceneMapper.xml
View file @
592b33ff
...
...
@@ -57,9 +57,16 @@
</select>
<select
id=
"selectById"
resultType=
"net.wanji.opt.po.strategy.ScenePO"
>
id,scene_code,scene_num,scene_name,scene_target,gmt_create,gmt_modified
select
id,scene_code,scene_num,scene_name,scene_target,gmt_create,gmt_modified
from t_strategy_scene
where id = ${sceneId}
</select>
<select
id=
"selectAll"
resultType=
"net.wanji.opt.po.strategy.ScenePO"
>
select
id,scene_code,scene_num,scene_name,scene_target,gmt_create,gmt_modified
from t_strategy_scene
</select>
</mapper>
signal-optimize-service/src/main/resources/mapper/strategy/SceneStrategyMapper.xml
View file @
592b33ff
...
...
@@ -35,4 +35,10 @@
where strategy_id = #{strategyId}
</select>
<select
id=
"selectAll"
resultType=
"net.wanji.opt.po.strategy.SceneStrategyPO"
>
select
id,scene_id,strategy_id,scene_strategy_priority,gmt_create,gmt_modified
from t_strategy_scene_strategy
</select>
</mapper>
signal-optimize-service/src/main/resources/mapper/strategy/StrategyMapper.xml
View file @
592b33ff
...
...
@@ -95,4 +95,10 @@
WHERE strategy_target = 2
</select>
<select
id=
"selectAll"
resultType=
"net.wanji.opt.po.strategy.StrategyPO"
>
select
id,strategy_code,strategy_name,strategy_target,strategy_detail,gmt_create,gmt_modified
from t_strategy_strategy
</select>
</mapper>
wj-databus/src/main/java/net/wanji/databus/dao/mapper/BaseCrossSchemeMapper.java
View file @
592b33ff
...
...
@@ -54,4 +54,6 @@ public interface BaseCrossSchemeMapper {
@Param
(
"schemeNo"
)
Integer
schemeNo
);
List
<
BaseCrossSchemePO
>
selectByCrossIdAndPartialSchemeName
(
String
crossId
,
String
schemeName
);
List
<
BaseCrossSchemePO
>
selectAll
();
}
wj-databus/src/main/resources/mapper/BaseCrossSchemeMapper.xml
View file @
592b33ff
...
...
@@ -172,4 +172,10 @@
</if>
</select>
<select
id=
"selectAll"
resultType=
"net.wanji.databus.dao.entity.BaseCrossSchemePO"
>
select
id,scheme_no,name,cross_id,cycle,coord_phase,offset,source,is_deleted,status,gmt_create,gmt_modified
from t_base_cross_scheme
</select>
</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