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
jinan
traffic-signal-platform
Commits
09caeedf
Commit
09caeedf
authored
Apr 10, 2025
by
黄伟铭
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增干线早晚高峰分析
parent
28ad6ef9
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
137 additions
and
0 deletions
+137
-0
AnalysisGreenCongestionPeriodService.java
...2/judgeanalysis/AnalysisGreenCongestionPeriodService.java
+1
-0
AnalysisGreenCongestionPeriodServiceImpl.java
...alysis/impl/AnalysisGreenCongestionPeriodServiceImpl.java
+136
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/judgeanalysis/AnalysisGreenCongestionPeriodService.java
View file @
09caeedf
...
...
@@ -8,6 +8,7 @@ import java.util.List;
public
interface
AnalysisGreenCongestionPeriodService
{
public
void
selectCountByCongestionPeriod
()
throws
ParseException
;
public
void
selectCountByLandData
()
throws
ParseException
;
GreenReportProblemOverallAnalysisResult
selectListByWeek
(
Integer
year
,
Integer
week
,
String
ids
);
...
...
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/judgeanalysis/impl/AnalysisGreenCongestionPeriodServiceImpl.java
View file @
09caeedf
package
net
.
wanji
.
opt
.
servicev2
.
judgeanalysis
.
impl
;
import
com.alibaba.cloud.commons.lang.StringUtils
;
import
com.github.pagehelper.util.StringUtil
;
import
net.wanji.databus.dao.entity.GreenwaveInfoPO
;
import
net.wanji.databus.dao.mapper.GreenwaveInfoMapper
;
import
net.wanji.opt.common.enums.*
;
...
...
@@ -8,6 +10,7 @@ import net.wanji.opt.controllerv2.report.vo.*;
import
net.wanji.opt.dao.mapper.judgeanalysis.AnalysisGreenCongestionPeriodMapper
;
import
net.wanji.opt.dao.mapper.report.GreenWaveCrossRidMapper
;
import
net.wanji.opt.entity.judgeanalysis.AnalysisGreenCongestionPeriod
;
import
net.wanji.opt.entity.judgeanalysis.laneDataHist
;
import
net.wanji.opt.entity.report.GreenWaveCrossRidInfo
;
import
net.wanji.opt.servicev2.judgeanalysis.AnalysisGreenCongestionPeriodService
;
import
org.apache.commons.collections.CollectionUtils
;
...
...
@@ -487,6 +490,13 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
queue
.
offer
(
temp
);
}
public
void
enqueue
(
LinkedList
<
laneDataHist
>
queue
,
laneDataHist
temp
)
{
if
(
queue
.
size
()
>=
2
)
{
queue
.
poll
();
}
queue
.
offer
(
temp
);
}
public
Integer
isMoning
(
String
date
)
throws
ParseException
{
DateFormat
fmt
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
Date
temp
=
fmt
.
parse
(
date
);
...
...
@@ -497,4 +507,130 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
return
2
;
}
}
public
void
selectCountByLandData
()
throws
ParseException
{
LocalDate
currentDate
=
LocalDate
.
now
();
// 获取本周一的日期
LocalDate
mondayOfThisWeek
=
currentDate
.
with
(
TemporalAdjusters
.
previousOrSame
(
DayOfWeek
.
MONDAY
));
// 获取上周一的日期
LocalDate
todayOfWeek
=
mondayOfThisWeek
.
plusDays
(-
7
);
//获取上周日的日期
LocalDate
endOfWeek
=
mondayOfThisWeek
.
plusDays
(-
1
);
WeekFields
weekFields
=
WeekFields
.
of
(
Locale
.
getDefault
());
//获取上周的周数
int
Number
=
todayOfWeek
.
get
(
weekFields
.
weekOfYear
());
int
year
=
currentDate
.
getYear
();
String
weekNumber
=
String
.
valueOf
(
year
)
+
String
.
valueOf
(
Number
);
//循环7天处理数据
for
(
int
i
=
0
;
i
<
7
;
i
++)
{
LocalDate
date
=
todayOfWeek
.
plusDays
(
i
);
//获取干线数据
List
<
laneDataHist
>
laneList
=
analysisGreenCongestionPeriodMapper
.
selectGreenTrafficHist
(
date
.
toString
().
replaceAll
(
"-"
,
""
));
LinkedList
<
laneDataHist
>
queue
=
new
LinkedList
<>();
LinkedList
<
laneDataHist
>
queueCorss
=
new
LinkedList
<>();
List
<
laneDataHist
>
list
=
new
ArrayList
<>();
String
greenId
=
""
;
String
roadDirection
=
""
;
String
startTime
=
""
;
String
endTime
=
""
;
Double
trafficThreshold
=
0.0
;
for
(
laneDataHist
temp
:
laneList
){
if
(
temp
.
getGreenId
().
equals
(
greenId
)){
if
(
queue
.
size
()
==
2
){
//判断流量是否大于阀值
if
(
trafficThreshold
<
temp
.
getTrafficIndex
()
&&
com
.
github
.
pagehelper
.
util
.
StringUtil
.
isEmpty
(
startTime
)){
startTime
=
temp
.
getStartTime
();
list
.
add
(
temp
);
}
else
if
(
temp
.
getTrafficIndex
()
<
trafficThreshold
&&
queue
.
getFirst
().
getTrafficIndex
()
<
trafficThreshold
&&
queue
.
getLast
().
getTrafficIndex
()
<
trafficThreshold
&&
!
com
.
github
.
pagehelper
.
util
.
StringUtil
.
isEmpty
(
startTime
)
){
if
(
list
.
size
()
<
10
){
startTime
=
""
;
list
.
clear
();
enqueue
(
queue
,
temp
);
continue
;
}
endTime
=
queue
.
getFirst
().
getStartTime
();
//查询流量数据,循环处理list中的数据找出最大值,并算出平均值
List
<
laneDataHist
>
crossFlowList
=
analysisGreenCongestionPeriodMapper
.
selectCrossFlow
(
date
.
toString
().
replaceAll
(
"-"
,
""
),
temp
.
getCrossId
(),
startTime
,
endTime
);
List
<
laneDataHist
>
list1
=
new
ArrayList
<>();
Integer
maxFlow
=
0
;
Integer
sumFlow
=
0
;
if
(
CollectionUtils
.
isNotEmpty
(
crossFlowList
))
{
for
(
laneDataHist
temp1
:
crossFlowList
)
{
if
(
queueCorss
.
size
()
<
2
)
{
enqueue
(
queueCorss
,
temp1
);
}
else
{
Integer
flow
=
(
temp1
.
getFlow
()
+
queueCorss
.
getFirst
().
getFlow
()
+
queueCorss
.
getLast
().
getFlow
())
*
4
;
temp1
.
setFlowHour
(
flow
);
list1
.
add
(
temp1
);
enqueue
(
queueCorss
,
temp1
);
}
}
maxFlow
=
list1
.
get
(
0
).
getFlowHour
();
sumFlow
=
list1
.
get
(
0
).
getFlowHour
();
}
Integer
avgFlow
=
0
;
for
(
int
a
=
0
;
a
<
list1
.
size
();
a
++){
if
(
a
==
list1
.
size
()
-
1
){
Double
avg
=
Math
.
ceil
((
double
)
sumFlow
/
list1
.
size
());
avgFlow
=
Integer
.
valueOf
(
avg
.
intValue
())
;
continue
;
}
if
(
list1
.
get
(
a
+
1
).
getFlowHour
()
>
maxFlow
){
maxFlow
=
list1
.
get
(
a
+
1
).
getFlowHour
();
}
sumFlow
=
sumFlow
+
list1
.
get
(
a
+
1
).
getFlowHour
();
}
//写入数据
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"startTime"
,
startTime
);
map
.
put
(
"endTime"
,
endTime
);
map
.
put
(
"weekNumber"
,
weekNumber
);
map
.
put
(
"weekDay"
,
i
+
1
);
map
.
put
(
"roadDirection"
,
roadDirection
);
map
.
put
(
"peakType"
,
isMoning
(
startTime
));
map
.
put
(
"weekStartTime"
,
todayOfWeek
);
map
.
put
(
"weekEndTime"
,
endOfWeek
);
map
.
put
(
"maxFlow"
,
maxFlow
);
map
.
put
(
"avgFlow"
,
avgFlow
);
map
.
put
(
"greenId"
,
temp
.
getGreenId
());
map
.
put
(
"trafficThreshold"
,
trafficThreshold
);
analysisGreenCongestionPeriodMapper
.
insertLaneDataHist
(
map
);
//清空数据
startTime
=
""
;
endTime
=
""
;
list
.
clear
();
}
else
{
if
(!
StringUtil
.
isEmpty
(
startTime
))
{
list
.
add
(
temp
);
}
}
}
enqueue
(
queue
,
temp
);
}
else
{
queue
.
clear
();
list
.
clear
();
greenId
=
temp
.
getGreenId
();
roadDirection
=
temp
.
getRoadDirection
();
//计算该干线交通指数阈值,取一天的9点至16点30之间交通指数倒序的90%的数值为动态阈值
List
<
laneDataHist
>
greenTrafficList
=
analysisGreenCongestionPeriodMapper
.
selectGreenTrafficThreshold
(
date
.
toString
().
replaceAll
(
"-"
,
""
),
greenId
,
roadDirection
);
if
(
greenTrafficList
.
get
(
9
).
getTrafficIndex
()
<=
1.5
)
{
trafficThreshold
=
1.5
;
}
else
{
trafficThreshold
=
greenTrafficList
.
get
(
9
).
getTrafficIndex
();
}
startTime
=
""
;
endTime
=
""
;
enqueue
(
queue
,
temp
);
}
}
//计算平峰
}
}
}
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