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
1e879825
Commit
1e879825
authored
Oct 13, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[update] 干线评价--修改干线方案获取方式
parent
64e0f480
Changes
21
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
498 additions
and
80 deletions
+498
-80
GreenwaveNameBO.java
...rvice/src/main/java/net/wanji/opt/bo/GreenwaveNameBO.java
+16
-0
MainlineSchemeEvaluateBO.java
.../main/java/net/wanji/opt/bo/MainlineSchemeEvaluateBO.java
+2
-2
MainlineEvaluateController.java
.../net/wanji/opt/controller/MainlineEvaluateController.java
+1
-1
TrendController.java
...c/main/java/net/wanji/opt/controller/TrendController.java
+3
-2
GreenwaveInSectionDTO.java
...rc/main/java/net/wanji/opt/dto/GreenwaveInSectionDTO.java
+16
-0
LineSchemeDTO.java
...ervice/src/main/java/net/wanji/opt/dto/LineSchemeDTO.java
+29
-0
MainlineEvaluateService.java
...n/java/net/wanji/opt/service/MainlineEvaluateService.java
+1
-1
TrendService.java
...ice/src/main/java/net/wanji/opt/service/TrendService.java
+2
-1
MainlineEvaluateServiceImpl.java
...t/wanji/opt/service/impl/MainlineEvaluateServiceImpl.java
+319
-59
TrendServiceImpl.java
...ain/java/net/wanji/opt/service/impl/TrendServiceImpl.java
+35
-10
GreenwaveHistPO.java
...in/java/net/wanji/databus/dao/entity/GreenwaveHistPO.java
+0
-3
BaseCrossPlanMapper.java
...ava/net/wanji/databus/dao/mapper/BaseCrossPlanMapper.java
+2
-0
BaseCrossSectionMapper.java
.../net/wanji/databus/dao/mapper/BaseCrossSectionMapper.java
+8
-0
CrossDataHistMapper.java
...ava/net/wanji/databus/dao/mapper/CrossDataHistMapper.java
+3
-0
CrossPlanMapper.java
...in/java/net/wanji/databus/dao/mapper/CrossPlanMapper.java
+1
-0
GreenwaveCrossMapper.java
...va/net/wanji/databus/dao/mapper/GreenwaveCrossMapper.java
+5
-1
BaseCrossPlanMapper.xml
wj-databus/src/main/resources/mapper/BaseCrossPlanMapper.xml
+6
-0
BaseCrossSectionMapper.xml
...abus/src/main/resources/mapper/BaseCrossSectionMapper.xml
+23
-0
CrossDataHistMapper.xml
wj-databus/src/main/resources/mapper/CrossDataHistMapper.xml
+8
-0
CrossPlanMapper.xml
wj-databus/src/main/resources/mapper/CrossPlanMapper.xml
+7
-0
GreenwaveCrossMapper.xml
...atabus/src/main/resources/mapper/GreenwaveCrossMapper.xml
+11
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/bo/GreenwaveNameBO.java
0 → 100644
View file @
1e879825
package
net
.
wanji
.
opt
.
bo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @author Kent HAN
* @date 2023/6/9 13:52
*/
@Data
@ApiModel
(
value
=
"GreenwaveNameBO"
,
description
=
"绿波名称"
)
public
class
GreenwaveNameBO
{
@ApiModelProperty
(
value
=
"绿波名称"
)
private
String
greenwaveName
;
}
signal-optimize-service/src/main/java/net/wanji/opt/bo/MainlineSchemeEvaluateBO.java
View file @
1e879825
...
...
@@ -14,8 +14,8 @@ import java.util.Date;
@Data
@ApiModel
(
value
=
"MainlineSchemeEvaluateBO"
,
description
=
"干线方案评价"
)
public
class
MainlineSchemeEvaluateBO
{
@ApiModelProperty
(
value
=
"
绿波ID
"
)
private
Integer
greenwaveId
;
@ApiModelProperty
(
value
=
"
方案名称
"
)
private
String
greenwaveName
;
@ApiModelProperty
(
value
=
"方向名称"
)
private
String
dirName
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/controller/MainlineEvaluateController.java
View file @
1e879825
...
...
@@ -66,7 +66,7 @@ public class MainlineEvaluateController {
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
MainlineSchemeAnalysisVO
.
class
),
})
public
JsonViewObject
mainlineSchemeAnalysis
(
@RequestBody
MainlineSchemeAnalysisBO
bo
)
{
public
JsonViewObject
mainlineSchemeAnalysis
(
@RequestBody
MainlineSchemeAnalysisBO
bo
)
throws
ParseException
{
MainlineSchemeAnalysisVO
res
=
mainlineEvaluateService
.
mainlineSchemeAnalysis
(
bo
);
return
JsonViewObject
.
newInstance
().
success
(
res
);
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/controller/TrendController.java
View file @
1e879825
...
...
@@ -8,6 +8,7 @@ import net.wanji.databus.bo.CrossIdBO;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.opt.bo.GreenwaveIdAndTimeStampBO
;
import
net.wanji.opt.bo.GreenwaveIdBO
;
import
net.wanji.opt.bo.GreenwaveNameBO
;
import
net.wanji.opt.bo.SaveGreenwaveStrategyBO
;
import
net.wanji.opt.dto.trend.AbnormalCrossListDTO
;
import
net.wanji.opt.dto.trend.EventAlarmDTO
;
...
...
@@ -73,8 +74,8 @@ public class TrendController {
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
GreenwaveDetailVO
.
class
),
})
public
JsonViewObject
greenwaveDetail
(
@RequestBody
Greenwave
IdBO
greenwaveIdBO
)
{
GreenwaveDetailVO
res
=
trendService
.
greenwaveDetail
(
greenwaveIdBO
);
public
JsonViewObject
greenwaveDetail
(
@RequestBody
Greenwave
NameBO
bo
)
{
GreenwaveDetailVO
res
=
trendService
.
greenwaveDetail
(
bo
);
return
JsonViewObject
.
newInstance
().
success
(
res
);
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/dto/GreenwaveInSectionDTO.java
0 → 100644
View file @
1e879825
package
net
.
wanji
.
opt
.
dto
;
import
lombok.Data
;
/**
* @author Kent HAN
* @date 2022/12/20 10:17
*/
@Data
public
class
GreenwaveInSectionDTO
{
private
boolean
greenwaveInSection
;
private
String
planName
;
private
Integer
planId
;
private
String
startTime
;
private
String
endTime
;
}
signal-optimize-service/src/main/java/net/wanji/opt/dto/LineSchemeDTO.java
0 → 100644
View file @
1e879825
package
net
.
wanji
.
opt
.
dto
;
import
lombok.Data
;
import
net.wanji.databus.dao.entity.GreenwaveHistPO
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 干线方案缓存
* @author Kent HAN
* @date 2022/12/20 10:17
*/
@Data
public
class
LineSchemeDTO
{
// 绿波历史列表
private
List
<
GreenwaveHistPO
>
greenwaveHistPOList
=
new
ArrayList
<>();
// 时段ID
private
Integer
sectionId
;
// 计划ID
private
Integer
planId
;
// 绿波ID
private
Integer
greenwaveId
;
}
signal-optimize-service/src/main/java/net/wanji/opt/service/MainlineEvaluateService.java
View file @
1e879825
...
...
@@ -14,7 +14,7 @@ public interface MainlineEvaluateService {
List
<
MainlineListVO
>
mainlineList
();
MainlineSchemeAnalysisVO
mainlineSchemeAnalysis
(
MainlineSchemeAnalysisBO
bo
);
MainlineSchemeAnalysisVO
mainlineSchemeAnalysis
(
MainlineSchemeAnalysisBO
bo
)
throws
ParseException
;
MainlineSchemeEvaluateVO
mainlineSchemeEvaluate
(
MainlineSchemeEvaluateBO
bo
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/TrendService.java
View file @
1e879825
...
...
@@ -3,6 +3,7 @@ package net.wanji.opt.service;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.opt.bo.GreenwaveIdAndTimeStampBO
;
import
net.wanji.opt.bo.GreenwaveIdBO
;
import
net.wanji.opt.bo.GreenwaveNameBO
;
import
net.wanji.opt.bo.SaveGreenwaveStrategyBO
;
import
net.wanji.opt.dto.trend.AbnormalCrossListDTO
;
import
net.wanji.opt.dto.trend.GreenwaveListDTO
;
...
...
@@ -32,7 +33,7 @@ public interface TrendService {
List
<
GreenwaveRunMonitorVO
>
greenwaveRunMonitor
(
GreenwaveIdBO
greenwaveIdBO
);
GreenwaveDetailVO
greenwaveDetail
(
Greenwave
IdBO
greenwaveId
BO
);
GreenwaveDetailVO
greenwaveDetail
(
Greenwave
NameBO
greenwaveName
BO
);
List
<
GreenwaveCrossMetricsVO
>
greenwaveCrossMetrics
(
GreenwaveIdAndTimeStampBO
greenwaveIdAndTimeStampBO
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/MainlineEvaluateServiceImpl.java
View file @
1e879825
...
...
@@ -16,6 +16,8 @@ import net.wanji.opt.bo.*;
import
net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper
;
import
net.wanji.opt.dao.mapper.strategy.StrategyMapper
;
import
net.wanji.opt.dao.mapper.trend.GreenwaveInfoMapper
;
import
net.wanji.opt.dto.GreenwaveInSectionDTO
;
import
net.wanji.opt.dto.LineSchemeDTO
;
import
net.wanji.opt.po.strategy.SceneStrategyPO
;
import
net.wanji.opt.po.strategy.StrategyPO
;
import
net.wanji.opt.service.MainlineEvaluateService
;
...
...
@@ -27,10 +29,10 @@ import org.springframework.stereotype.Service;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.function.Function
;
import
java.util.function.Predicate
;
import
java.util.function.ToDoubleFunction
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -56,17 +58,24 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
private
final
StrategyMapper
strategyMapper
;
private
final
BaseCrossSectionMapper
baseCrossSectionMapper
;
private
final
RidInfoMapper
ridInfoMapper
;
private
final
CrossPlanMapper
crossPlanMapper
;
private
final
BaseCrossPlanMapper
baseCrossPlanMapper
;
private
final
BaseCrossSchemeMapper
baseCrossSchemeMapper
;
SimpleDateFormat
hourMinuteFormat
=
new
SimpleDateFormat
(
"HH:mm"
);
SimpleDateFormat
dayFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
SimpleDateFormat
chineseDayFormat
=
new
SimpleDateFormat
(
"M月d日"
);
SimpleDateFormat
dateHourMinuteFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm"
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
// 干线方案缓存 <干线名:干线方案对象>
public
static
Map
<
String
,
LineSchemeDTO
>
lineSchemeBuffer
=
new
HashMap
<>();
public
MainlineEvaluateServiceImpl
(
@Qualifier
(
"baseCrossDirInfoMapper"
)
BaseCrossDirInfoMapper
baseCrossDirInfoMapper
,
@Qualifier
(
"baseCrossTurnInfoMapper"
)
BaseCrossTurnInfoMapper
baseCrossTurnInfoMapper
,
CrossBaseLaneInfoMapper
crossBaseLaneInfoMapper
,
@Qualifier
(
"laneInfoMapper"
)
LaneInfoMapper
laneInfoMapper
,
CrossDirDataHistMapper
crossDirDataHistMapper
,
CrossDataHistMapper
crossDataHistMapper
,
CrossTurnDataHistMapper
crossTurnDataHistMapper
,
CrossLaneDataHistMapper
crossLaneDataHistMapper
,
@Qualifier
(
"greenwaveInfoMapper"
)
GreenwaveInfoMapper
greenwaveInfoMapper
,
@Qualifier
(
"greenwaveHistMapper"
)
GreenwaveHistMapper
greenwaveHistMapper
,
@Qualifier
(
"greenwaveCrossMapper"
)
GreenwaveCrossMapper
greenwaveCrossMapper
,
@Qualifier
(
"baseCrossInfoMapper"
)
BaseCrossInfoMapper
baseCrossInfoMapper
,
@Qualifier
(
"greenwaveSceneMapper"
)
GreenwaveSceneMapper
greenwaveSceneMapper
,
@Qualifier
(
"sceneStrategyMapper"
)
SceneStrategyMapper
sceneStrategyMapper
,
@Qualifier
(
"strategyMapper"
)
StrategyMapper
strategyMapper
,
@Qualifier
(
"baseCrossSectionMapper"
)
BaseCrossSectionMapper
baseCrossSectionMapper
,
@Qualifier
(
"ridInfoMapper"
)
RidInfoMapper
ridInfoMapper
)
{
CrossDirDataHistMapper
crossDirDataHistMapper
,
CrossDataHistMapper
crossDataHistMapper
,
CrossTurnDataHistMapper
crossTurnDataHistMapper
,
CrossLaneDataHistMapper
crossLaneDataHistMapper
,
@Qualifier
(
"greenwaveInfoMapper"
)
GreenwaveInfoMapper
greenwaveInfoMapper
,
@Qualifier
(
"greenwaveHistMapper"
)
GreenwaveHistMapper
greenwaveHistMapper
,
@Qualifier
(
"greenwaveCrossMapper"
)
GreenwaveCrossMapper
greenwaveCrossMapper
,
@Qualifier
(
"baseCrossInfoMapper"
)
BaseCrossInfoMapper
baseCrossInfoMapper
,
@Qualifier
(
"greenwaveSceneMapper"
)
GreenwaveSceneMapper
greenwaveSceneMapper
,
@Qualifier
(
"sceneStrategyMapper"
)
SceneStrategyMapper
sceneStrategyMapper
,
@Qualifier
(
"strategyMapper"
)
StrategyMapper
strategyMapper
,
@Qualifier
(
"baseCrossSectionMapper"
)
BaseCrossSectionMapper
baseCrossSectionMapper
,
@Qualifier
(
"ridInfoMapper"
)
RidInfoMapper
ridInfoMapper
,
CrossPlanMapper
crossPlanMapper
,
@Qualifier
(
"baseCrossPlanMapper"
)
BaseCrossPlanMapper
baseCrossPlanMapper
,
@Qualifier
(
"baseCrossSchemeMapper"
)
BaseCrossSchemeMapper
baseCrossSchemeMapper
)
{
this
.
baseCrossDirInfoMapper
=
baseCrossDirInfoMapper
;
this
.
baseCrossTurnInfoMapper
=
baseCrossTurnInfoMapper
;
this
.
laneInfoMapper
=
laneInfoMapper
;
...
...
@@ -83,6 +92,9 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
this
.
strategyMapper
=
strategyMapper
;
this
.
baseCrossSectionMapper
=
baseCrossSectionMapper
;
this
.
ridInfoMapper
=
ridInfoMapper
;
this
.
crossPlanMapper
=
crossPlanMapper
;
this
.
baseCrossPlanMapper
=
baseCrossPlanMapper
;
this
.
baseCrossSchemeMapper
=
baseCrossSchemeMapper
;
}
@Override
...
...
@@ -579,12 +591,15 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
}
@Override
public
MainlineSchemeAnalysisVO
mainlineSchemeAnalysis
(
MainlineSchemeAnalysisBO
bo
)
{
public
MainlineSchemeAnalysisVO
mainlineSchemeAnalysis
(
MainlineSchemeAnalysisBO
bo
)
throws
ParseException
{
lineSchemeBuffer
.
clear
();
String
mainlineName
=
bo
.
getName
();
Date
poStartTime
=
bo
.
getStartTime
();
Date
poEndTime
=
bo
.
getEndTime
();
String
poStartTimeStr
=
sdf
.
format
(
poStartTime
);
String
poEndTimeStr
=
sdf
.
format
(
poEndTime
);
int
poStartTimeStamp
=
(
int
)
(
poStartTime
.
getTime
()
/
1000
);
int
poEndTimeStamp
=
(
int
)
(
poEndTime
.
getTime
()
/
1000
);
// 根据时段查询所有发生的绿波
List
<
GreenwaveHistPO
>
greenwaveHistPOList
=
greenwaveHistMapper
.
selectByTimeSection
(
poStartTimeStr
,
poEndTimeStr
);
...
...
@@ -603,16 +618,93 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
MainlineSchemeAnalysisVO
res
=
new
MainlineSchemeAnalysisVO
();
res
.
setSceneData
(
calcSceneData
(
filteredList
));
res
.
setCrossData
(
calcCrossData
(
filteredList
));
res
.
setEvaluateData
(
calcEvaluateData
(
filteredList
));
res
.
setGreenwaveData
(
buildGreenwaveData
(
filteredList
));
res
.
setCrossData
(
calcCrossData
(
filteredList
,
lineSchemeBuffer
));
res
.
setEvaluateData
(
calcEvaluateData
(
filteredList
,
lineSchemeBuffer
,
poStartTimeStamp
,
poEndTimeStamp
));
// 时段合并
mergeLineSchemeBuffer
(
lineSchemeBuffer
,
mainlineName
);
res
.
setGreenwaveData
(
buildGreenwaveData
(
lineSchemeBuffer
));
return
res
;
}
private
void
mergeLineSchemeBuffer
(
Map
<
String
,
LineSchemeDTO
>
lineSchemeBuffer
,
String
mainlineName
)
{
if
(
mainlineName
.
contains
(
"转山西路至霞景路"
))
{
// 工作日合并07:00-09:00,09:00-16:00,21:30-23:59
// 周末和节假日合并13:30-20:00,21:30-23:59
Map
<
String
,
LineSchemeDTO
>
mergedRecords
=
new
HashMap
<>();
Iterator
<
String
>
iterator
=
lineSchemeBuffer
.
keySet
().
iterator
();
while
(
iterator
.
hasNext
()){
String
key
=
iterator
.
next
();
String
[]
keyParts
=
key
.
split
(
" "
);
String
timeRange
=
keyParts
[
keyParts
.
length
-
1
];
String
[]
times
=
timeRange
.
split
(
"-"
);
int
startTime
=
timeToInt
(
times
[
0
]);
int
endTime
=
timeToInt
(
times
[
1
]);
boolean
isWeekday
=
key
.
contains
(
"工作日"
);
List
<
int
[]>
mergingPeriods
=
getMergingPeriods
(
isWeekday
);
for
(
int
[]
mergingPeriod
:
mergingPeriods
)
{
if
(
isOverlapping
(
startTime
,
endTime
,
mergingPeriod
[
0
],
mergingPeriod
[
1
]))
{
startTime
=
Math
.
min
(
startTime
,
mergingPeriod
[
0
]);
endTime
=
Math
.
max
(
endTime
,
mergingPeriod
[
1
]);
String
newKey
=
constructNewKey
(
key
,
intToTime
(
startTime
),
intToTime
(
endTime
));
if
(
mergedRecords
.
containsKey
(
newKey
))
{
LineSchemeDTO
existingDto
=
mergedRecords
.
get
(
newKey
);
existingDto
.
getGreenwaveHistPOList
().
addAll
(
lineSchemeBuffer
.
get
(
key
).
getGreenwaveHistPOList
());
iterator
.
remove
();
}
else
{
mergedRecords
.
put
(
newKey
,
lineSchemeBuffer
.
get
(
key
));
iterator
.
remove
();
}
}
}
}
lineSchemeBuffer
.
putAll
(
mergedRecords
);
}
}
private
int
timeToInt
(
String
time
)
{
String
[]
parts
=
time
.
split
(
":"
);
return
Integer
.
parseInt
(
parts
[
0
])
*
60
+
Integer
.
parseInt
(
parts
[
1
]);
}
private
List
<
int
[]>
getMergingPeriods
(
boolean
isWeekday
)
{
if
(
isWeekday
)
{
return
Arrays
.
asList
(
new
int
[]
{
timeToInt
(
"07:00"
),
timeToInt
(
"09:00"
)},
new
int
[]
{
timeToInt
(
"09:00"
),
timeToInt
(
"16:00"
)},
new
int
[]
{
timeToInt
(
"21:30"
),
timeToInt
(
"23:59"
)}
);
}
else
{
return
Arrays
.
asList
(
new
int
[]
{
timeToInt
(
"13:30"
),
timeToInt
(
"20:00"
)},
new
int
[]
{
timeToInt
(
"21:30"
),
timeToInt
(
"23:59"
)}
);
}
}
private
boolean
isOverlapping
(
int
start1
,
int
end1
,
int
start2
,
int
end2
)
{
return
(
start1
<
end2
&&
end1
>
start2
);
}
private
static
String
constructNewKey
(
String
oldKey
,
String
newStartTime
,
String
newEndTime
)
{
String
[]
keyParts
=
oldKey
.
split
(
" "
);
keyParts
[
keyParts
.
length
-
1
]
=
newStartTime
+
"-"
+
newEndTime
;
return
String
.
join
(
" "
,
keyParts
);
}
private
static
String
intToTime
(
int
time
)
{
return
String
.
format
(
"%02d:%02d"
,
time
/
60
,
time
%
60
);
}
@Override
public
MainlineSchemeEvaluateVO
mainlineSchemeEvaluate
(
MainlineSchemeEvaluateBO
bo
)
{
Integer
greenwaveId
=
bo
.
getGreenwaveId
();
String
greenwaveName
=
bo
.
getGreenwaveName
();
LineSchemeDTO
lineSchemeDTO
=
lineSchemeBuffer
.
get
(
greenwaveName
);
Integer
greenwaveId
=
lineSchemeDTO
.
getGreenwaveId
();
String
dirName
=
bo
.
getDirName
();
String
metricName
=
bo
.
getMetricName
();
Date
boStartTime
=
bo
.
getStartTime
();
...
...
@@ -620,11 +712,11 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
MainlineSchemeEvaluateVO
res
=
new
MainlineSchemeEvaluateVO
();
GreenwaveInfoPO
greenwaveInfoPO
=
greenwaveInfoMapper
.
selectById
(
greenwaveId
);
Integer
sectionId
=
greenwaveInfoPO
.
getSectionId
()
;
CrossSectionPO
crossSectionPO
=
baseCrossSectionMapper
.
selectById
(
sectionId
);
String
startHourMinuteStr
=
crossSectionPO
.
getStartTime
()
;
String
endHourMinuteStr
=
crossSectionPO
.
getEndTime
()
;
String
[]
split
=
greenwaveName
.
split
(
" "
);
// 旅游路 东向西 转山西路至霞景路路段:正向绿波 工作日 07:00-09:00
String
s
=
split
[
split
.
length
-
1
]
;
String
[]
split1
=
s
.
split
(
"-"
);
String
startHourMinuteStr
=
split1
[
0
]
;
String
endHourMinuteStr
=
split1
[
1
]
;
res
.
setTimeSection
(
startHourMinuteStr
+
"-"
+
endHourMinuteStr
);
// 确定控制策略
...
...
@@ -664,7 +756,8 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
String
[]
split
=
greenwaveName
.
split
(
" "
);
String
dirStr
=
split
[
1
];
String
[]
split1
=
dirStr
.
split
(
"向"
);
GreenwaveInfoPO
greenwaveInfoPO
=
greenwaveInfoMapper
.
selectByName
(
greenwaveName
);
String
lineName
=
split
[
0
]
+
" "
+
split
[
1
]
+
" "
+
split
[
2
];
GreenwaveInfoPO
greenwaveInfoPO
=
greenwaveInfoMapper
.
selectByName
(
lineName
);
Integer
dir
=
greenwaveInfoPO
.
getDir
();
List
<
Integer
>
coordDirCodeList
=
new
ArrayList
<>();
...
...
@@ -1216,9 +1309,19 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
private
List
<
GreenwaveDetailVO
.
GreenwaveCross
>
buildGreenwaveCrossList
(
Integer
greenwaveId
)
{
List
<
GreenwaveDetailVO
.
GreenwaveCross
>
res
=
new
ArrayList
<>();
List
<
GreenwaveCrossPO
>
greenwaveCrossList
=
greenwaveCrossMapper
.
selectByGreenwaveId
(
greenwaveId
);
int
size
=
greenwaveCrossList
.
size
();
// 按唯一路口ID过滤
Map
<
String
,
GreenwaveCrossPO
>
uniqueCrossIdMap
=
greenwaveCrossList
.
stream
()
.
collect
(
Collectors
.
toMap
(
GreenwaveCrossPO:
:
getCrossId
,
Function
.
identity
(),
(
existing
,
replacement
)
->
existing
));
List
<
GreenwaveCrossPO
>
filteredList
=
new
ArrayList
<>(
uniqueCrossIdMap
.
values
());
int
size
=
filteredList
.
size
();
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
GreenwaveCrossPO
greenwaveCrossPO
=
greenwaveCross
List
.
get
(
i
);
GreenwaveCrossPO
greenwaveCrossPO
=
filtered
List
.
get
(
i
);
GreenwaveDetailVO
.
GreenwaveCross
greenwaveCross
=
new
GreenwaveDetailVO
.
GreenwaveCross
();
String
crossId
=
greenwaveCrossPO
.
getCrossId
();
greenwaveCross
.
setCrossId
(
crossId
);
...
...
@@ -1244,19 +1347,19 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return
res
;
}
private
List
<
MainlineSchemeAnalysisVO
.
GreenwaveData
>
buildGreenwaveData
(
List
<
GreenwaveHistPO
>
filteredList
)
{
private
List
<
MainlineSchemeAnalysisVO
.
GreenwaveData
>
buildGreenwaveData
(
Map
<
String
,
LineSchemeDTO
>
lineSchemeBuffer
)
{
List
<
MainlineSchemeAnalysisVO
.
GreenwaveData
>
res
=
new
ArrayList
<>();
List
<
GreenwaveHistPO
>
distinctList
=
filteredList
.
stream
()
.
filter
(
distinctByKey
(
GreenwaveHistPO:
:
getGreenwaveName
))
.
collect
(
Collectors
.
toList
());
for
(
GreenwaveHistPO
greenwaveHistPO
:
distinctList
)
{
for
(
Map
.
Entry
<
String
,
LineSchemeDTO
>
entry
:
lineSchemeBuffer
.
entrySet
()
)
{
MainlineSchemeAnalysisVO
.
GreenwaveData
greenwaveData
=
new
MainlineSchemeAnalysisVO
.
GreenwaveData
();
greenwaveData
.
setName
(
greenwaveHistPO
.
getGreenwaveName
());
greenwaveData
.
setGreenwaveId
(
greenwaveHistPO
.
getId
());
Integer
greenwaveId
=
greenwaveHistPO
.
getId
();
greenwaveData
.
setDirList
(
buildDirList
(
greenwaveId
));
String
lineSchemeName
=
entry
.
getKey
();
greenwaveData
.
setName
(
lineSchemeName
);
LineSchemeDTO
value
=
entry
.
getValue
();
Integer
greenwaveId
=
value
.
getGreenwaveId
();
greenwaveData
.
setGreenwaveId
(
greenwaveId
);
greenwaveData
.
setDirList
(
buildDirList
(
lineSchemeName
));
res
.
add
(
greenwaveData
);
}
...
...
@@ -1264,12 +1367,14 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return
res
;
}
private
List
<
MainlineSchemeAnalysisVO
.
DirectionList
>
buildDirList
(
Integer
greenwaveId
)
{
GreenwaveInfoPO
greenwaveInfoPO
=
greenwaveInfoMapper
.
selectById
(
greenwaveId
);
private
List
<
MainlineSchemeAnalysisVO
.
DirectionList
>
buildDirList
(
String
lineSchemeName
)
{
String
[]
split
=
lineSchemeName
.
split
(
" "
);
// 旅游路 东向西 转山西路至霞景路路段:正向绿波 工作日 19:00-20:00
String
greenwaveName
=
split
[
0
]
+
" "
+
split
[
1
]
+
" "
+
split
[
2
];
GreenwaveInfoPO
greenwaveInfoPO
=
greenwaveInfoMapper
.
selectByName
(
greenwaveName
);
Integer
greenwaveId
=
greenwaveInfoPO
.
getId
();
List
<
MainlineSchemeAnalysisVO
.
DirectionList
>
res
=
new
ArrayList
<>();
String
greenwaveName
=
greenwaveInfoPO
.
getName
();
String
[]
split
=
greenwaveName
.
split
(
" "
);
String
dirName
=
split
[
1
];
Integer
coordinateDir
=
greenwaveInfoPO
.
getDir
();
...
...
@@ -1394,12 +1499,13 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return
input
;
}
private
<
T
>
Predicate
<
T
>
distinctByKey
(
Function
<?
super
T
,
?>
keyExtractor
)
{
Set
<
Object
>
seen
=
ConcurrentHashMap
.
newKeySet
();
return
t
->
seen
.
add
(
keyExtractor
.
apply
(
t
));
}
private
List
<
String
>
calcEvaluateData
(
List
<
GreenwaveHistPO
>
filteredList
,
Map
<
String
,
LineSchemeDTO
>
lineSchemeBuffer
,
int
poStartTimeStamp
,
int
poEndTimeStamp
)
{
List
<
CrossDataHistPO
>
baseCrossDataHistPOList
=
crossDataHistMapper
.
selectByStartEnd
(
poStartTimeStamp
,
poEndTimeStamp
);
List
<
GreenwaveCrossPO
>
baseGreenwaveCrossPOList
=
greenwaveCrossMapper
.
selectAll
();
List
<
BaseCrossInfoPO
>
baseCrossInfoPOList
=
baseCrossInfoMapper
.
selectAll
();
private
List
<
String
>
calcEvaluateData
(
List
<
GreenwaveHistPO
>
filteredList
)
{
int
qualified
=
0
;
int
notQualified
=
0
;
for
(
GreenwaveHistPO
greenwaveHistPO
:
filteredList
)
{
...
...
@@ -1414,25 +1520,32 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
// 确定评价
// 获取时段
Integer
sectionId
=
greenwaveHistPO
.
getSectionId
();
CrossSectionPO
crossSectionPO
=
baseCrossSectionMapper
.
selectById
(
sectionId
);
String
startHourMinuteStr
=
crossSectionPO
.
getStartTime
();
String
endHourMinuteStr
=
crossSectionPO
.
getEndTime
();
Date
gmtModified
=
greenwaveHistPO
.
getGmtModified
();
String
matchingKey
=
findKey
(
lineSchemeBuffer
,
greenwaveId
,
gmtModified
);
Pattern
pattern
=
Pattern
.
compile
(
"(\\d{2}:\\d{2})-(\\d{2}:\\d{2})"
);
Matcher
matcher
=
pattern
.
matcher
(
matchingKey
);
matcher
.
find
();
String
startHourMinuteStr
=
matcher
.
group
(
1
);
String
endHourMinuteStr
=
matcher
.
group
(
2
);
Date
day
=
greenwaveHistPO
.
getGmtModified
();
Date
startDate
=
combineDateAndTime
(
day
,
startHourMinuteStr
);
Date
endDate
=
combineDateAndTime
(
day
,
endHourMinuteStr
);
// 获取路口
List
<
BaseCrossInfoPO
>
crossInfoPOList
=
getGreenwaveCross
(
greenwaveId
);
List
<
BaseCrossInfoPO
>
crossInfoPOList
=
getGreenwaveCross
(
greenwaveId
,
baseGreenwaveCrossPOList
,
baseCrossInfoPOList
);
// 获取路口历史数据
List
<
String
>
crossIdList
=
crossInfoPOList
.
stream
()
.
map
(
BaseCrossInfoPO:
:
getId
)
.
collect
(
Collectors
.
toList
());
int
startTimeStamp
=
(
int
)
(
startDate
.
getTime
()
/
1000
);
int
endTimeStamp
=
(
int
)
(
endDate
.
getTime
()
/
1000
);
List
<
CrossDataHistPO
>
crossDataHistPOList
=
crossDataHistMapper
.
selectByCrossIdsAndTimestamp
(
crossIdList
,
startTimeStamp
,
endTimeStamp
);
List
<
CrossDataHistPO
>
crossDataHistPOList
=
baseCrossDataHistPOList
.
stream
()
.
filter
(
po
->
po
.
getBatchTime
()
>=
startTimeStamp
&&
po
.
getBatchTime
()
<=
endTimeStamp
)
.
filter
(
po
->
crossIdList
.
contains
(
po
.
getCrossId
()))
.
collect
(
Collectors
.
toList
());
// 判断时段内的饱和度
double
saturation
=
crossDataHistPOList
.
stream
()
.
mapToDouble
(
CrossDataHistPO:
:
getSturation
)
...
...
@@ -1498,6 +1611,27 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return
res
;
}
private
String
findKey
(
Map
<
String
,
LineSchemeDTO
>
lineSchemeBuffer
,
Integer
greenwaveId
,
Date
gmtModified
)
{
for
(
Map
.
Entry
<
String
,
LineSchemeDTO
>
entry
:
lineSchemeBuffer
.
entrySet
())
{
String
key
=
entry
.
getKey
();
LineSchemeDTO
lineSchemeDTO
=
entry
.
getValue
();
if
(
lineSchemeDTO
!=
null
)
{
List
<
GreenwaveHistPO
>
greenwaveHistPOList
=
lineSchemeDTO
.
getGreenwaveHistPOList
();
if
(
greenwaveHistPOList
!=
null
)
{
for
(
GreenwaveHistPO
greenwaveHistPO
:
greenwaveHistPOList
)
{
if
(
greenwaveHistPO
!=
null
&&
Objects
.
equals
(
greenwaveHistPO
.
getId
(),
greenwaveId
)
&&
Objects
.
equals
(
greenwaveHistPO
.
getGmtModified
(),
gmtModified
))
{
return
key
;
}
}
}
}
}
return
null
;
}
private
StrategyPO
getStrategyPO
(
Integer
greenwaveId
)
{
GreenwaveScenePO
greenwaveScenePO
=
greenwaveSceneMapper
.
selectByGreenwaveId
(
greenwaveId
);
Integer
sceneId
=
greenwaveScenePO
.
getSceneId
();
...
...
@@ -1510,12 +1644,20 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return
strategyPO
;
}
private
List
<
BaseCrossInfoPO
>
getGreenwaveCross
(
Integer
greenwaveId
)
{
private
List
<
BaseCrossInfoPO
>
getGreenwaveCross
(
Integer
greenwaveId
,
List
<
GreenwaveCrossPO
>
baseGreenwaveCrossPOList
,
List
<
BaseCrossInfoPO
>
baseCrossInfoPOList
)
{
List
<
BaseCrossInfoPO
>
res
=
new
ArrayList
<>();
List
<
GreenwaveCrossPO
>
greenwaveCrosses
=
greenwaveCrossMapper
.
selectByGreenwaveId
(
greenwaveId
);
List
<
GreenwaveCrossPO
>
greenwaveCrosses
=
baseGreenwaveCrossPOList
.
stream
()
.
filter
(
po
->
Objects
.
equals
(
po
.
getId
(),
greenwaveId
))
.
collect
(
Collectors
.
toList
());
for
(
GreenwaveCrossPO
greenwaveCross
:
greenwaveCrosses
)
{
String
crossId
=
greenwaveCross
.
getCrossId
();
BaseCrossInfoPO
baseCrossInfoPO
=
baseCrossInfoMapper
.
selectById
(
crossId
);
Optional
<
BaseCrossInfoPO
>
first
=
baseCrossInfoPOList
.
stream
()
.
filter
(
po
->
Objects
.
equals
(
po
.
getId
(),
crossId
))
.
findFirst
();
BaseCrossInfoPO
baseCrossInfoPO
=
first
.
get
();
res
.
add
(
baseCrossInfoPO
);
}
return
res
;
...
...
@@ -1537,27 +1679,55 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return
calendar
.
getTime
();
}
private
List
<
MainlineSchemeAnalysisVO
.
CrossData
>
calcCrossData
(
List
<
GreenwaveHistPO
>
filteredList
)
{
private
List
<
MainlineSchemeAnalysisVO
.
CrossData
>
calcCrossData
(
List
<
GreenwaveHistPO
>
filteredList
,
Map
<
String
,
LineSchemeDTO
>
lineSchemeBuffer
)
throws
ParseException
{
List
<
MainlineSchemeAnalysisVO
.
CrossData
>
res
=
new
ArrayList
<>();
Map
<
String
,
Integer
>
crossTimesMap
=
new
HashMap
<>();
// 找出绿波对应的关键路口
Map
<
Integer
,
String
>
greenwaveCrossMap
=
new
HashMap
<>();
for
(
GreenwaveHistPO
greenwaveHistPO
:
filteredList
)
{
Integer
greenwaveId
=
greenwaveHistPO
.
getId
();
GreenwaveCrossPO
greenwaveCrossPO
=
greenwaveCrossMapper
.
selectByGreenwaveIdAndKeyRoute
(
greenwaveId
);
Integer
greenId
=
greenwaveCrossPO
.
getGreenId
();
String
crossId
=
greenwaveCrossPO
.
getCrossId
();
greenwaveCrossMap
.
put
(
greenId
,
crossId
);
}
List
<
GreenwaveCrossPO
>
baseGreenwaveCrossPOList
=
greenwaveCrossMapper
.
selectByKeyRoute
();
List
<
CrossSectionPO
>
baseCrossSectionPOList
=
baseCrossSectionMapper
.
selectAll
();
List
<
BaseCrossPlanPO
>
baseCrossPlanPOList
=
baseCrossPlanMapper
.
selectAll
();
// 统计关键路口次数
Map
<
String
,
Integer
>
crossTimesMap
=
new
HashMap
<>();
for
(
GreenwaveHistPO
greenwaveHistPO
:
filteredList
)
{
Integer
greenwaveHistPOId
=
greenwaveHistPO
.
getId
();
String
crossId
=
greenwaveCrossMap
.
get
(
greenwaveHistPOId
);
Integer
histGreenwaveId
=
greenwaveHistPO
.
getId
();
Date
histGreenwaveGmtModified
=
greenwaveHistPO
.
getGmtModified
();
// 所有的关键路口
List
<
GreenwaveCrossPO
>
greenwaveCrossPOList
=
baseGreenwaveCrossPOList
.
stream
()
.
filter
(
po
->
Objects
.
equals
(
po
.
getGreenId
(),
histGreenwaveId
))
.
collect
(
Collectors
.
toList
());
for
(
GreenwaveCrossPO
greenwaveCrossPO
:
greenwaveCrossPOList
)
{
Integer
sectionId
=
greenwaveCrossPO
.
getSectionId
();
String
crossId
=
greenwaveCrossPO
.
getCrossId
();
// 判断绿波历史发生时间是否在时段内
GreenwaveInSectionDTO
greenwaveInSectionDTO
=
isGreenwaveInSection
(
histGreenwaveGmtModified
,
sectionId
,
baseCrossSectionPOList
,
baseCrossPlanPOList
);
if
(
greenwaveInSectionDTO
.
isGreenwaveInSection
())
{
crossTimesMap
.
put
(
crossId
,
crossTimesMap
.
getOrDefault
(
crossId
,
0
)
+
1
);
String
greenwaveName
=
greenwaveHistPO
.
getGreenwaveName
();
Integer
greenwaveId
=
greenwaveHistPO
.
getId
();
String
planName
=
greenwaveInSectionDTO
.
getPlanName
();
Integer
planId
=
greenwaveInSectionDTO
.
getPlanId
();
String
startTime
=
greenwaveInSectionDTO
.
getStartTime
();
String
endTime
=
greenwaveInSectionDTO
.
getEndTime
();
String
lineSchemeName
=
greenwaveName
+
" "
+
planName
+
" "
+
startTime
+
"-"
+
endTime
;
LineSchemeDTO
lineSchemeDTO
=
lineSchemeBuffer
.
getOrDefault
(
lineSchemeName
,
new
LineSchemeDTO
());
List
<
GreenwaveHistPO
>
greenwaveHistPOList
=
lineSchemeDTO
.
getGreenwaveHistPOList
();
greenwaveHistPOList
.
add
(
greenwaveHistPO
);
lineSchemeDTO
.
setSectionId
(
sectionId
);
lineSchemeDTO
.
setPlanId
(
planId
);
lineSchemeDTO
.
setGreenwaveId
(
greenwaveId
);
lineSchemeBuffer
.
put
(
lineSchemeName
,
lineSchemeDTO
);
}
}
}
// 统计关键路口次数
for
(
Map
.
Entry
<
String
,
Integer
>
entry
:
crossTimesMap
.
entrySet
())
{
MainlineSchemeAnalysisVO
.
CrossData
crossData
=
new
MainlineSchemeAnalysisVO
.
CrossData
();
String
crossId
=
entry
.
getKey
();
...
...
@@ -1571,6 +1741,96 @@ public class MainlineEvaluateServiceImpl implements MainlineEvaluateService {
return
res
;
}
private
GreenwaveInSectionDTO
isGreenwaveInSection
(
Date
histGreenwaveGmtModified
,
Integer
sectionId
,
List
<
CrossSectionPO
>
baseCrossSectionPOList
,
List
<
BaseCrossPlanPO
>
baseCrossPlanPOList
)
throws
ParseException
{
GreenwaveInSectionDTO
res
=
new
GreenwaveInSectionDTO
();
Optional
<
CrossSectionPO
>
optCrossSectionPO
=
baseCrossSectionPOList
.
stream
()
.
filter
(
po
->
Objects
.
equals
(
po
.
getId
(),
sectionId
))
.
findFirst
();
CrossSectionPO
crossSectionPO
=
optCrossSectionPO
.
get
();
Integer
planId
=
crossSectionPO
.
getPlanId
();
Optional
<
BaseCrossPlanPO
>
optBaseCrossPlanPO
=
baseCrossPlanPOList
.
stream
()
.
filter
(
po
->
Objects
.
equals
(
po
.
getId
(),
planId
))
.
findFirst
();
BaseCrossPlanPO
baseCrossPlanPO
=
optBaseCrossPlanPO
.
get
();
String
name
=
baseCrossPlanPO
.
getName
();
if
(!
name
.
contains
(
"工作日"
)
&&
!
name
.
contains
(
"周末"
))
{
// 特殊日期
Date
nameDate
=
chineseDayFormat
.
parse
(
name
);
Calendar
calendar1
=
Calendar
.
getInstance
();
calendar1
.
setTime
(
histGreenwaveGmtModified
);
int
month1
=
calendar1
.
get
(
Calendar
.
MONTH
)
+
1
;
// Calendar.MONTH is 0-based
int
day1
=
calendar1
.
get
(
Calendar
.
DAY_OF_MONTH
);
Calendar
calendar2
=
Calendar
.
getInstance
();
calendar2
.
setTime
(
nameDate
);
int
month2
=
calendar2
.
get
(
Calendar
.
MONTH
)
+
1
;
// Calendar.MONTH is 0-based
int
day2
=
calendar2
.
get
(
Calendar
.
DAY_OF_MONTH
);
if
(
month1
==
month2
&&
day1
==
day2
)
{
res
.
setGreenwaveInSection
(
isGreenwaveHourMinuteInSection
(
histGreenwaveGmtModified
,
crossSectionPO
,
res
));
res
.
setPlanName
(
name
);
res
.
setPlanId
(
planId
);
}
else
{
res
.
setGreenwaveInSection
(
false
);
}
}
else
if
(
name
.
contains
(
"工作日"
))
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
histGreenwaveGmtModified
);
int
dayOfWeek
=
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
);
if
(
dayOfWeek
>=
Calendar
.
MONDAY
&&
dayOfWeek
<=
Calendar
.
FRIDAY
)
{
// 判断小时分钟是否交叉
res
.
setGreenwaveInSection
(
isGreenwaveHourMinuteInSection
(
histGreenwaveGmtModified
,
crossSectionPO
,
res
));
res
.
setPlanName
(
name
);
res
.
setPlanId
(
planId
);
}
else
{
res
.
setGreenwaveInSection
(
false
);
}
}
else
if
(
name
.
contains
(
"周末"
))
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
histGreenwaveGmtModified
);
int
dayOfWeek
=
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
);
if
(
dayOfWeek
==
Calendar
.
SATURDAY
||
dayOfWeek
==
Calendar
.
SUNDAY
)
{
// 判断小时分钟是否交叉
res
.
setGreenwaveInSection
(
isGreenwaveHourMinuteInSection
(
histGreenwaveGmtModified
,
crossSectionPO
,
res
));
res
.
setPlanName
(
name
);
res
.
setPlanId
(
planId
);
}
else
{
res
.
setGreenwaveInSection
(
false
);
}
}
return
res
;
}
private
boolean
isGreenwaveHourMinuteInSection
(
Date
histGreenwaveGmtModified
,
CrossSectionPO
crossSectionPO
,
GreenwaveInSectionDTO
res
)
throws
ParseException
{
String
startTime
=
crossSectionPO
.
getStartTime
();
String
endTime
=
crossSectionPO
.
getEndTime
();
Date
startDate
=
hourMinuteFormat
.
parse
(
startTime
);
Date
endDate
=
hourMinuteFormat
.
parse
(
endTime
);
String
histTimeStr
=
hourMinuteFormat
.
format
(
histGreenwaveGmtModified
);
Date
histTime
=
hourMinuteFormat
.
parse
(
histTimeStr
);
res
.
setStartTime
(
startTime
);
res
.
setEndTime
(
endTime
);
return
(
histTime
.
equals
(
startDate
)
||
histTime
.
after
(
startDate
))
&&
histTime
.
before
(
endDate
);
}
private
List
<
MainlineSchemeAnalysisVO
.
DirectionData
>
calcSceneData
(
List
<
GreenwaveHistPO
>
filteredList
)
{
List
<
MainlineSchemeAnalysisVO
.
DirectionData
>
res
=
new
ArrayList
<>();
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/TrendServiceImpl.java
View file @
1e879825
...
...
@@ -13,6 +13,7 @@ import net.wanji.databus.po.*;
import
net.wanji.databus.vo.AbnormalCrossListVO
;
import
net.wanji.opt.bo.GreenwaveIdAndTimeStampBO
;
import
net.wanji.opt.bo.GreenwaveIdBO
;
import
net.wanji.opt.bo.GreenwaveNameBO
;
import
net.wanji.opt.bo.SaveGreenwaveStrategyBO
;
import
net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper
;
import
net.wanji.opt.dao.mapper.strategy.SceneMapper
;
...
...
@@ -21,6 +22,7 @@ import net.wanji.opt.dao.mapper.strategy.SceneStrategyMapper;
import
net.wanji.opt.dao.mapper.strategy.StrategyMapper
;
import
net.wanji.opt.dao.mapper.trend.EventAlarmMapper
;
import
net.wanji.opt.dao.mapper.trend.GreenwaveInfoMapper
;
import
net.wanji.opt.dto.LineSchemeDTO
;
import
net.wanji.opt.dto.trend.AbnormalCrossListDTO
;
import
net.wanji.opt.dto.trend.GreenwaveListDTO
;
import
net.wanji.opt.po.base.CrossSchemeOptLogPO
;
...
...
@@ -36,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -70,6 +73,7 @@ public class TrendServiceImpl implements TrendService {
private
final
GreenwaveSceneMapper
greenwaveSceneMapper
;
private
final
SceneStrategyMapper
sceneStrategyMapper
;
private
final
SceneMapper
sceneMapper
;
private
final
BaseCrossPlanMapper
baseCrossPlanMapper
;
// 用于计算路口状态,key为方向,value为状态
private
Map
<
Integer
,
Integer
>
preStatus
=
new
HashMap
<
Integer
,
Integer
>()
{{
...
...
@@ -90,7 +94,7 @@ public class TrendServiceImpl implements TrendService {
CrossTurnDataRealtimeMapper
crossTurnDataRealtimeMapper
,
CrossDirDataHistMapper
crossDirDataHistMapper
,
EventAlarmMapper
eventAlarmMapper
,
RidInfoMapper
ridInfoMapper
,
BaseCrossDirInfoMapper
baseCrossDirInfoMapper
,
CrossSchemeOptLogMapper
crossSchemeOptLogMapper
,
GreenwaveCrossMapper
greenwaveCrossMapper
,
CrossDirDataRealtimeMapper
crossDirDataRealtimeMapper
,
GreenwaveHistMapper
greenwaveHistMapper
,
GreenwaveRealtimeMapper
greenwaveRealtimeMapper
,
SceneStrategyIdeaMapper
strategyIdeaMapper
,
StrategyMapper
strategyMapper
,
BaseCrossSchedulesMapper
baseCrossSchedulesMapper
,
BaseCrossSchedulesPlanMapper
baseCrossSchedulesPlanMapper
,
BaseCrossSectionMapper
baseCrossSectionMapper
,
BaseCrossSchemeMapper
crossSchemeMapper
,
BaseCrossSchemeMapper
baseCrossSchemeMapper
,
BaseCrossPhaseMapper
baseCrossPhaseMapper
,
BaseCrossPhaseLightsMapper
crossPhaseLightsMapper
,
BaseCrossLaneLightsMapper
baseCrossLaneLightsMapper
,
CrossBaseLaneInfoMapper
crossBaseLaneInfoMapper
,
CrossTurnDataHistMapper
crossTurnDataHistMapper
,
@Qualifier
(
"greenwaveSceneMapper"
)
GreenwaveSceneMapper
greenwaveSceneMapper
,
@Qualifier
(
"sceneStrategyMapper"
)
SceneStrategyMapper
sceneStrategyMapper
,
@Qualifier
(
"sceneMapper"
)
SceneMapper
sceneMapper
)
{
CrossSchemeOptLogMapper
crossSchemeOptLogMapper
,
GreenwaveCrossMapper
greenwaveCrossMapper
,
CrossDirDataRealtimeMapper
crossDirDataRealtimeMapper
,
GreenwaveHistMapper
greenwaveHistMapper
,
GreenwaveRealtimeMapper
greenwaveRealtimeMapper
,
SceneStrategyIdeaMapper
strategyIdeaMapper
,
StrategyMapper
strategyMapper
,
BaseCrossSchedulesMapper
baseCrossSchedulesMapper
,
BaseCrossSchedulesPlanMapper
baseCrossSchedulesPlanMapper
,
BaseCrossSectionMapper
baseCrossSectionMapper
,
BaseCrossSchemeMapper
crossSchemeMapper
,
BaseCrossSchemeMapper
baseCrossSchemeMapper
,
BaseCrossPhaseMapper
baseCrossPhaseMapper
,
BaseCrossPhaseLightsMapper
crossPhaseLightsMapper
,
BaseCrossLaneLightsMapper
baseCrossLaneLightsMapper
,
CrossBaseLaneInfoMapper
crossBaseLaneInfoMapper
,
CrossTurnDataHistMapper
crossTurnDataHistMapper
,
@Qualifier
(
"greenwaveSceneMapper"
)
GreenwaveSceneMapper
greenwaveSceneMapper
,
@Qualifier
(
"sceneStrategyMapper"
)
SceneStrategyMapper
sceneStrategyMapper
,
@Qualifier
(
"sceneMapper"
)
SceneMapper
sceneMapper
,
@Qualifier
(
"baseCrossPlanMapper"
)
BaseCrossPlanMapper
baseCrossPlanMapper
)
{
this
.
greenwaveInfoMapper
=
greenwaveInfoMapper
;
this
.
baseCrossInfoMapper
=
baseCrossInfoMapper
;
this
.
crossDataRealtimeMapper
=
crossDataRealtimeMapper
;
...
...
@@ -117,6 +121,7 @@ public class TrendServiceImpl implements TrendService {
this
.
greenwaveSceneMapper
=
greenwaveSceneMapper
;
this
.
sceneStrategyMapper
=
sceneStrategyMapper
;
this
.
sceneMapper
=
sceneMapper
;
this
.
baseCrossPlanMapper
=
baseCrossPlanMapper
;
}
@Override
...
...
@@ -371,8 +376,11 @@ public class TrendServiceImpl implements TrendService {
}
@Override
public
GreenwaveDetailVO
greenwaveDetail
(
GreenwaveIdBO
greenwaveIdBO
)
{
Integer
greenwaveId
=
greenwaveIdBO
.
getGreenwaveId
();
public
GreenwaveDetailVO
greenwaveDetail
(
GreenwaveNameBO
greenwaveNameBO
)
{
String
greenwaveName
=
greenwaveNameBO
.
getGreenwaveName
();
LineSchemeDTO
lineSchemeDTO
=
MainlineEvaluateServiceImpl
.
lineSchemeBuffer
.
get
(
greenwaveName
);
Integer
greenwaveId
=
lineSchemeDTO
.
getGreenwaveId
();
GreenwaveDetailVO
res
=
new
GreenwaveDetailVO
();
GreenwaveRealtimePO
greenwaveRealtimePO
=
greenwaveRealtimeMapper
.
selectById
(
greenwaveId
);
GreenwaveInfoPO
greenwaveInfoPO
=
greenwaveInfoMapper
.
selectById
(
greenwaveId
);
...
...
@@ -408,7 +416,7 @@ public class TrendServiceImpl implements TrendService {
.
collect
(
Collectors
.
toList
());
res
.
setStrategySelected
(
collect
);
// 绿波路口信息
List
<
GreenwaveDetailVO
.
GreenwaveCross
>
greenwaveCrossList
=
buildGreenwaveCrossList
(
greenwaveId
);
List
<
GreenwaveDetailVO
.
GreenwaveCross
>
greenwaveCrossList
=
buildGreenwaveCrossList
(
greenwaveId
,
greenwaveName
);
res
.
setGreenwaveCrossList
(
greenwaveCrossList
);
// 绿波带
if
(
dir
==
0
)
{
// 正向
...
...
@@ -573,19 +581,29 @@ public class TrendServiceImpl implements TrendService {
return
greenwavePoint
;
}
private
List
<
GreenwaveDetailVO
.
GreenwaveCross
>
buildGreenwaveCrossList
(
Integer
greenwaveId
)
{
private
List
<
GreenwaveDetailVO
.
GreenwaveCross
>
buildGreenwaveCrossList
(
Integer
greenwaveId
,
String
greenwaveName
)
{
List
<
GreenwaveDetailVO
.
GreenwaveCross
>
res
=
new
ArrayList
<>();
List
<
GreenwaveCrossPO
>
greenwaveCrossList
=
greenwaveCrossMapper
.
selectByGreenwaveId
(
greenwaveId
);
Map
<
String
,
GreenwaveCrossPO
>
uniqueCrossIdMap
=
greenwaveCrossList
.
stream
()
.
collect
(
Collectors
.
toMap
(
GreenwaveCrossPO:
:
getCrossId
,
Function
.
identity
(),
(
existing
,
replacement
)
->
existing
));
List
<
GreenwaveCrossPO
>
filteredList
=
new
ArrayList
<>(
uniqueCrossIdMap
.
values
());
filteredList
.
sort
(
Comparator
.
comparing
(
GreenwaveCrossPO:
:
getSort
));
// 相对相位差列表
List
<
Integer
>
relativeOffsets
=
greenwaveCross
List
.
stream
()
List
<
Integer
>
relativeOffsets
=
filtered
List
.
stream
()
.
map
(
GreenwaveCrossPO:
:
getOffset
)
.
collect
(
Collectors
.
toList
());
// 绝对相位差列表
List
<
Integer
>
absoluteOffsets
=
buildAbsoluteOffsets
(
relativeOffsets
);
int
size
=
greenwaveCross
List
.
size
();
int
size
=
filtered
List
.
size
();
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
GreenwaveCrossPO
greenwaveCrossPO
=
greenwaveCross
List
.
get
(
i
);
GreenwaveCrossPO
greenwaveCrossPO
=
filtered
List
.
get
(
i
);
GreenwaveDetailVO
.
GreenwaveCross
greenwaveCross
=
new
GreenwaveDetailVO
.
GreenwaveCross
();
String
crossId
=
greenwaveCrossPO
.
getCrossId
();
greenwaveCross
.
setCrossId
(
crossId
);
...
...
@@ -610,8 +628,15 @@ public class TrendServiceImpl implements TrendService {
greenwaveCross
.
setOffset
(
greenwaveCrossPO
.
getOffset
());
// 获取当前方案
Integer
sectionId
=
greenwaveCrossPO
.
getSectionId
();
CrossSectionPO
crossSectionPO
=
baseCrossSectionMapper
.
selectById
(
sectionId
);
String
[]
split
=
greenwaveName
.
split
(
" "
);
// 旅游路 东向西 转山西路至霞景路路段:正向绿波 工作日 19:00-20:00
String
s
=
split
[
4
];
String
[]
split1
=
s
.
split
(
"-"
);
String
startTime
=
split1
[
0
];
// 获取 planId
String
planName
=
split
[
3
];
BaseCrossPlanPO
baseCrossPlanPO
=
baseCrossPlanMapper
.
selectByCrossIdAndName
(
crossId
,
planName
);
Integer
planId
=
baseCrossPlanPO
.
getId
();
CrossSectionPO
crossSectionPO
=
baseCrossSectionMapper
.
selectbyStartTimeCrossIdPlanId
(
startTime
,
crossId
,
planId
);
if
(
crossSectionPO
==
null
)
{
throw
new
RuntimeException
(
"无当前时段方案信息"
);
}
...
...
wj-databus/src/main/java/net/wanji/databus/dao/entity/GreenwaveHistPO.java
View file @
1e879825
...
...
@@ -15,7 +15,4 @@ public class GreenwaveHistPO extends GreenwaveRealtimePO{
@ApiModelProperty
(
value
=
"协调方向:0正向;1反向;2双向"
)
private
Integer
dir
;
@ApiModelProperty
(
value
=
"时段ID"
)
private
Integer
sectionId
;
}
wj-databus/src/main/java/net/wanji/databus/dao/mapper/BaseCrossPlanMapper.java
View file @
1e879825
...
...
@@ -30,4 +30,6 @@ public interface BaseCrossPlanMapper {
List
<
BaseCrossPlanPO
>
selectByCrossId
(
String
crossId
);
BaseCrossPlanPO
selectByCrossIdAndPlanNo
(
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"planNo"
)
String
planNo
);
List
<
BaseCrossPlanPO
>
selectAll
();
}
wj-databus/src/main/java/net/wanji/databus/dao/mapper/BaseCrossSectionMapper.java
View file @
1e879825
...
...
@@ -30,4 +30,12 @@ public interface BaseCrossSectionMapper {
List
<
CrossSectionPO
>
selectByCrossId
(
String
crossId
);
List
<
CrossSectionPO
>
selectByCrossIdPlanIdAndSchemeId
(
String
crossId
,
Integer
planId
,
Integer
schemeId
);
CrossSectionPO
selectByEndTimePlanId
(
String
endTime
,
Integer
planId
);
CrossSectionPO
selectByStartTimePlanId
(
String
startTime
,
Integer
planId
);
List
<
CrossSectionPO
>
selectAll
();
CrossSectionPO
selectbyStartTimeCrossIdPlanId
(
String
startTime
,
String
crossId
,
Integer
planId
);
}
wj-databus/src/main/java/net/wanji/databus/dao/mapper/CrossDataHistMapper.java
View file @
1e879825
...
...
@@ -30,4 +30,7 @@ public interface CrossDataHistMapper extends BaseMapper<CrossDataHistPO> {
Integer
selectCrossEmergencyCount
(
String
crossId
,
int
startStamp
,
int
endStamp
);
List
<
CrossDataHistPO
>
selectByCrossIdsAndTimestamp
(
List
<
String
>
crossIdList
,
int
startTimeStamp
,
int
endTimeStamp
);
List
<
CrossDataHistPO
>
selectByStartEnd
(
int
startStamp
,
int
endStamp
);
}
wj-databus/src/main/java/net/wanji/databus/dao/mapper/CrossPlanMapper.java
View file @
1e879825
...
...
@@ -22,4 +22,5 @@ public interface CrossPlanMapper {
List
<
CrossPlanPO
>
selectByCrossIdAndPlanNo
(
@Param
(
"crossId"
)
String
crossId
,
@Param
(
"planNo"
)
Integer
planNo
);
CrossPlanPO
selectById
(
Integer
planId
);
}
wj-databus/src/main/java/net/wanji/databus/dao/mapper/GreenwaveCrossMapper.java
View file @
1e879825
...
...
@@ -13,5 +13,9 @@ import java.util.List;
public
interface
GreenwaveCrossMapper
{
List
<
GreenwaveCrossPO
>
selectByGreenwaveId
(
Integer
id
);
GreenwaveCrossPO
selectByGreenwaveIdAndKeyRoute
(
Integer
greenwaveId
);
List
<
GreenwaveCrossPO
>
selectByGreenwaveIdAndKeyRoute
(
Integer
greenwaveId
);
List
<
GreenwaveCrossPO
>
selectByKeyRoute
();
List
<
GreenwaveCrossPO
>
selectAll
();
}
wj-databus/src/main/resources/mapper/BaseCrossPlanMapper.xml
View file @
1e879825
...
...
@@ -77,5 +77,11 @@
where cross_id = #{crossId} and plan_no = #{planNo}
</select>
<select
id=
"selectAll"
resultType=
"net.wanji.databus.dao.entity.BaseCrossPlanPO"
>
select
id,plan_no,name,cross_id,gmt_create,gmt_modified
from t_base_cross_plan
</select>
</mapper>
wj-databus/src/main/resources/mapper/BaseCrossSectionMapper.xml
View file @
1e879825
...
...
@@ -81,5 +81,28 @@
where cross_id = #{crossId} and plan_id = #{planId} and scheme_id = #{schemeId}
</select>
<select
id=
"selectByEndTimePlanId"
resultType=
"net.wanji.databus.dao.entity.CrossSectionPO"
>
select
<include
refid=
"Base_Column_list"
/>
from t_base_cross_section
where end_time = #{endTime} and plan_id = #{planId}
</select>
<select
id=
"selectByStartTimePlanId"
resultType=
"net.wanji.databus.dao.entity.CrossSectionPO"
>
select
<include
refid=
"Base_Column_list"
/>
from t_base_cross_section
where start_time = #{startTime} and plan_id = #{planId}
</select>
<select
id=
"selectAll"
resultType=
"net.wanji.databus.dao.entity.CrossSectionPO"
>
select
<include
refid=
"Base_Column_list"
/>
from t_base_cross_section
</select>
<select
id=
"selectbyStartTimeCrossIdPlanId"
resultType=
"net.wanji.databus.dao.entity.CrossSectionPO"
>
select
<include
refid=
"Base_Column_list"
/>
from t_base_cross_section
where start_time = #{startTime} and cross_id = #{crossId} and plan_id = #{planId}
</select>
</mapper>
wj-databus/src/main/resources/mapper/CrossDataHistMapper.xml
View file @
1e879825
...
...
@@ -124,4 +124,12 @@
order by batch_time
</select>
<select
id=
"selectByStartEnd"
resultType=
"net.wanji.databus.po.CrossDataHistPO"
>
select
<include
refid=
"Base_Column_List"
></include>
from t_cross_data_hist
where batch_time
<![CDATA[ >= ]]>
#{startStamp}
and batch_time
<![CDATA[ <= ]]>
#{endStamp}
order by batch_time
</select>
</mapper>
\ No newline at end of file
wj-databus/src/main/resources/mapper/CrossPlanMapper.xml
View file @
1e879825
...
...
@@ -48,5 +48,12 @@
from t_cross_plan
where cross_id = #{crossId} and plan_no = #{planNo}
</select>
<select
id=
"selectById"
resultType=
"net.wanji.databus.dao.entity.CrossPlanPO"
>
select
id,plan_no,name,cross_id,gmt_create,gmt_modified
from t_cross_plan
where id = #{planId}
</select>
</mapper>
wj-databus/src/main/resources/mapper/GreenwaveCrossMapper.xml
View file @
1e879825
...
...
@@ -19,5 +19,16 @@
where green_id = #{id} and is_key_route = 1
</select>
<select
id=
"selectByKeyRoute"
resultType=
"net.wanji.databus.dao.entity.GreenwaveCrossPO"
>
select
<include
refid=
"Base_Column_List"
/>
from t_greenwave_cross
where is_key_route = 1
</select>
<select
id=
"selectAll"
resultType=
"net.wanji.databus.dao.entity.GreenwaveCrossPO"
>
select
<include
refid=
"Base_Column_List"
/>
from t_greenwave_cross
</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