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
8ec64581
Commit
8ec64581
authored
Apr 25, 2025
by
wangyecheng
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
064b336a
c85b4a40
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
171 additions
and
78 deletions
+171
-78
HisenseGreenChartTask.java
...c/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
+50
-28
HisenseSchemeRingPhaseInfoTask.java
...va/net/wanji/opt/task/HisenseSchemeRingPhaseInfoTask.java
+6
-1
CommonUtils.java
...rvice/src/main/java/net/wanji/opt/common/CommonUtils.java
+26
-3
GreenReportProblemOverallAnalysis.java
...erv2/report/design/GreenReportProblemOverallAnalysis.java
+2
-1
TrendServiceV2Impl.java
...va/net/wanji/opt/servicev2/implv2/TrendServiceV2Impl.java
+16
-5
AnalysisGreenCongestionPeriodServiceImpl.java
...alysis/impl/AnalysisGreenCongestionPeriodServiceImpl.java
+11
-3
AnalysisGreenWaveOptimizeWeekServiceImpl.java
...report/impl/AnalysisGreenWaveOptimizeWeekServiceImpl.java
+18
-21
AnalysisGreenWavePeakDetailServiceImpl.java
...2/report/impl/AnalysisGreenWavePeakDetailServiceImpl.java
+42
-16
No files found.
signal-optimize-data-compute/src/main/java/net/wanji/opt/task/HisenseGreenChartTask.java
View file @
8ec64581
...
...
@@ -100,17 +100,17 @@ public class HisenseGreenChartTask {
Integer
greenId
=
entry
.
getKey
();
List
<
GreenCrossDirDTO
>
value
=
entry
.
getValue
();
// 1.获取行程时间
GreenCrossDirDTO
indexDTO
=
value
.
get
(
0
);
GreenCrossDirDTO
indexDTO
=
null
;
if
(
Objects
.
equals
(
3
,
greenId
))
{
indexDTO
=
value
.
get
(
2
);
}
else
{
indexDTO
=
value
.
get
(
0
);
}
Integer
sort
=
indexDTO
.
getSort
();
Integer
indexDir
=
indexDTO
.
getInDir
();
Integer
totalDistance
=
indexDTO
.
getTotalDistance
();
String
greenKey
=
null
;
if
(
Objects
.
equals
(
3
,
greenId
))
{
greenKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
greenId
),
String
.
valueOf
(
indexDir
+
2
));
}
else
{
greenKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
greenId
),
String
.
valueOf
(
indexDir
));
}
String
greenKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
greenId
),
String
.
valueOf
(
indexDir
));
GreenwaveRealtimePO
greenwaveRealtimePO
=
realTimeMap
.
get
(
greenKey
);
Double
speed
=
Objects
.
isNull
(
greenwaveRealtimePO
.
getSpeed
())
?
0
:
greenwaveRealtimePO
.
getSpeed
();
// km/h速度换成m/s
...
...
@@ -128,12 +128,7 @@ public class HisenseGreenChartTask {
List
<
Double
>
backOffsets
=
new
ArrayList
<>();
List
<
Double
>
backDistances
=
new
ArrayList
<>();
String
backGreenKey
=
null
;
if
(
Objects
.
equals
(
3
,
greenId
))
{
backGreenKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
greenId
),
String
.
valueOf
(
indexOutDir
+
2
));
}
else
{
backGreenKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
greenId
),
String
.
valueOf
(
indexOutDir
));
}
String
backGreenKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
greenId
),
String
.
valueOf
(
indexOutDir
));
GreenwaveRealtimePO
backGreenwaveRealtimePO
=
realTimeMap
.
get
(
backGreenKey
);
// km/h速度换成m/s
Double
backSpeed
=
Objects
.
isNull
(
backGreenwaveRealtimePO
.
getSpeed
())
?
0
:
backGreenwaveRealtimePO
.
getSpeed
();
...
...
@@ -227,12 +222,12 @@ public class HisenseGreenChartTask {
GreenCrossDirDTO
firstDto
=
value
.
get
(
i
);
String
firstCrossId
=
firstDto
.
getCrossId
();
Integer
inDir
=
null
;
Integer
in
Cross
Dir
=
null
;
if
(
1
==
type
)
{
inDir
=
firstDto
.
getInDir
();
in
Cross
Dir
=
firstDto
.
getInDir
();
}
if
(
2
==
type
)
{
inDir
=
firstDto
.
getOutDir
();
in
Cross
Dir
=
firstDto
.
getOutDir
();
}
if
(
i
+
1
<
value
.
size
())
{
GreenCrossDirDTO
secondDto
=
value
.
get
(
i
+
1
);
...
...
@@ -240,13 +235,21 @@ public class HisenseGreenChartTask {
for
(
GreenBeltChartDTO
greenBeltChartDTO
:
greenBeltChartDTOS
)
{
Integer
beltGreenId
=
greenBeltChartDTO
.
getGreenId
();
Integer
beltDir
=
null
;
if
(
1
==
type
)
{
beltDir
=
greenBeltChartDTO
.
getDir
();
}
if
(
2
==
type
)
{
beltDir
=
greenBeltChartDTO
.
getBackDir
();
}
if
(
Objects
.
equals
(
greenId
,
beltGreenId
)
&&
Objects
.
equals
(
inDir
,
beltDir
))
{
if
(
Objects
.
equals
(
3
,
greenId
))
{
if
(
1
==
type
)
{
beltDir
=
greenBeltChartDTO
.
getDir
()
-
2
;
}
if
(
2
==
type
)
{
beltDir
=
greenBeltChartDTO
.
getBackDir
()
-
2
;
}
}
else
{
if
(
1
==
type
)
{
beltDir
=
greenBeltChartDTO
.
getDir
();
}
if
(
2
==
type
)
{
beltDir
=
greenBeltChartDTO
.
getBackDir
();
}
}
if
(
Objects
.
equals
(
greenId
,
beltGreenId
)
&&
Objects
.
equals
(
inCrossDir
,
beltDir
))
{
Double
travelTime
=
getTravelTime
(
i
,
greenBeltChartDTO
,
type
);
Map
<
String
,
List
<
List
<
Double
>>>
crossGreenTimesMap
=
null
;
if
(
1
==
type
)
{
...
...
@@ -334,7 +337,12 @@ public class HisenseGreenChartTask {
String
crossId
=
greenCrossDirDTO
.
getCrossId
();
Integer
distance
=
greenCrossDirDTO
.
getDistance
();
distances
.
add
(
distance
*
1.0
);
String
crossKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
crossId
),
String
.
valueOf
(
indexDir
));
String
crossKey
=
null
;
if
(
StringUtils
.
equalsIgnoreCase
(
"13MQV0B5KE0"
,
crossId
)
||
StringUtils
.
equalsIgnoreCase
(
"13MRN0B5MV0"
,
crossId
))
{
crossKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
crossId
),
String
.
valueOf
(
indexDir
-
2
));
}
else
{
crossKey
=
CommonUtils
.
getStrJoin
(
String
.
valueOf
(
crossId
),
String
.
valueOf
(
indexDir
));
}
// 获取海信环相位信息
SchemeGreenDirGreenTimeDTO
firstGreenTimeDTO
=
greenDirGreenTimeMap
.
get
(
crossKey
);
if
(
Objects
.
isNull
(
firstGreenTimeDTO
))
{
...
...
@@ -439,8 +447,13 @@ public class HisenseGreenChartTask {
for
(
GreenCrossDirDTO
greenCrossDirDTO
:
greenCrossDirCache
)
{
Integer
greenId
=
greenCrossDirDTO
.
getGreenId
();
String
greenCrossId
=
greenCrossDirDTO
.
getCrossId
();
String
greenDirStr
=
greenCrossDirDTO
.
getGreenDir
();
String
greenDirStr
=
null
;
if
(
Objects
.
equals
(
3
,
greenId
))
{
greenDirStr
=
"1,3,5,7"
;
}
else
{
greenDirStr
=
greenCrossDirDTO
.
getGreenDir
();
}
// 查询神思绿波优化下发
if
(
isGreenOptSend
(
greenId
))
{
List
<
SchemeGreenDirGreenTimeDTO
>
greenOptList
=
getGreenOptList
(
mapper
,
greenId
);
...
...
@@ -536,7 +549,8 @@ public class HisenseGreenChartTask {
int
index
=
100
;
for
(
GreenBeltInfoVO
.
CrossGreenDetail
greenDetail
:
crossGreenDetailList
)
{
SchemeGreenDirGreenTimeDTO
dto
=
new
SchemeGreenDirGreenTimeDTO
();
dto
.
setCrossId
(
greenDetail
.
getCrossId
());
String
crossId
=
greenDetail
.
getCrossId
();
dto
.
setCrossId
(
crossId
);
dto
.
setSchemeNo
(
100
);
dto
.
setOffset
(
greenDetail
.
getOffset
().
intValue
());
dto
.
setCycleLen
(
cycle
);
...
...
@@ -547,7 +561,15 @@ public class HisenseGreenChartTask {
dto
.
setStart
(
greenStart
.
intValue
());
Double
greenEnd
=
greenDetail
.
getPhaseEndTime
();
dto
.
setEnd
(
greenEnd
.
intValue
());
dto
.
setDir
(
inDir
);
if
(
StringUtils
.
equalsIgnoreCase
(
"13MQV0B5KE0"
,
crossId
)
||
StringUtils
.
equalsIgnoreCase
(
"13MRN0B5MV0"
,
crossId
))
{
if
(
Objects
.
equals
(
3
,
inDir
))
{
dto
.
setDir
(
1
);
}
else
{
dto
.
setDir
(
7
);
}
}
else
{
dto
.
setDir
(
inDir
);
}
dto
.
setDate
(
new
Date
());
dto
.
setFromScheme
(
2
);
schemeGreenDirGreenTimeDTOS
.
add
(
dto
);
...
...
signal-optimize-data-compute/src/main/java/net/wanji/opt/task/HisenseSchemeRingPhaseInfoTask.java
View file @
8ec64581
...
...
@@ -50,7 +50,12 @@ public class HisenseSchemeRingPhaseInfoTask {
for
(
GreenCrossDirDTO
greenCrossDirDTO
:
greenCrossDirCache
)
{
Integer
greenId
=
greenCrossDirDTO
.
getGreenId
();
String
greenCrossId
=
greenCrossDirDTO
.
getCrossId
();
String
greenDirStr
=
greenCrossDirDTO
.
getGreenDir
();
String
greenDirStr
=
null
;
if
(
Objects
.
equals
(
3
,
greenId
))
{
greenDirStr
=
"1,3,5,7"
;
}
else
{
greenDirStr
=
greenCrossDirDTO
.
getGreenDir
();
}
// 神思下发绿波时不需要优化
if
(
isGreenOptSend
(
greenId
))
{
continue
;
...
...
signal-optimize-service/src/main/java/net/wanji/opt/common/CommonUtils.java
View file @
8ec64581
...
...
@@ -4,6 +4,10 @@ import com.alibaba.fastjson.JSONArray;
import
net.wanji.opt.constant.DirEnum
;
import
org.apache.commons.lang3.StringUtils
;
import
java.time.LocalTime
;
import
java.time.format.DateTimeFormatter
;
import
java.time.temporal.ChronoUnit
;
/**
* @author duanruiming
* @date 2025/04/02 15:44
...
...
@@ -15,17 +19,18 @@ public class CommonUtils {
**/
public
static
final
String
SEPARATOR_UNDER_LINE
=
"_"
;
public
static
String
getStrJoin
(
String
...
str
)
{
public
static
String
getStrJoin
(
String
...
str
)
{
String
join
=
String
.
join
(
SEPARATOR_UNDER_LINE
,
str
);
return
join
;
}
/**
* 事件发生方向转换为描述
*
* @param dir
* @return
*/
public
static
String
getEventHappenDirName
(
String
dir
)
{
public
static
String
getEventHappenDirName
(
String
dir
)
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
if
(
StringUtils
.
isNotEmpty
(
dir
))
{
JSONArray
dirArr
=
JSONArray
.
parseArray
(
dir
);
...
...
@@ -35,10 +40,28 @@ public class CommonUtils {
stringBuilder
.
append
(
dirName
);
}
}
if
(
stringBuilder
.
length
()
>
1
)
{
if
(
stringBuilder
.
length
()
>
1
)
{
return
stringBuilder
.
substring
(
1
);
}
return
null
;
}
/**
* 获取两个时间之间相差多少分钟
* @param startTime
* @param endTime
* @param format
* @return
*/
public
static
int
getTimeBetweenMinutes
(
String
startTime
,
String
endTime
,
String
format
)
{
// 定义时间格式
DateTimeFormatter
formatter
=
DateTimeFormatter
.
ofPattern
(
format
);
// 解析时间字符串为LocalTime对象
LocalTime
time1
=
LocalTime
.
parse
(
startTime
,
formatter
);
LocalTime
time2
=
LocalTime
.
parse
(
endTime
,
formatter
);
// 计算时间差(以分钟为单位)
int
minutes
=
(
int
)
ChronoUnit
.
MINUTES
.
between
(
time1
,
time2
);
return
minutes
;
}
}
signal-optimize-service/src/main/java/net/wanji/opt/controllerv2/report/design/GreenReportProblemOverallAnalysis.java
View file @
8ec64581
...
...
@@ -39,9 +39,10 @@ class GreenReportProblemOverallAnalysisResponse {
@ApiModelProperty
(
value
=
"区域干线总拥堵时长"
,
example
=
"11小时"
)
private
String
totalCongestDuration
;
@ApiModelProperty
(
value
=
"拥堵严重干线"
,
example
=
"经十路(舜耕路-山大路)
、经十路(洪山路-舜华路)
"
)
@ApiModelProperty
(
value
=
"拥堵严重干线"
,
example
=
"经十路(舜耕路-山大路)
东向西、经十路(洪山路-舜华路)西向东"
,
notes
=
"20250425修改为前端根据dataList数据中按方向交通指数取最大的两条
"
)
private
String
congestHeavyGreenWave
;
@ApiModelProperty
(
value
=
"区域干线方向拥堵排名情况"
)
private
List
<
GreenReportProblemOverallData
>
dataList
=
new
ArrayList
<>();
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/implv2/TrendServiceV2Impl.java
View file @
8ec64581
...
...
@@ -139,13 +139,18 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
if
(
StringUtils
.
endsWithIgnoreCase
(
crossId
,
lastWeekCrossId
))
{
if
(
trafficIndex
>
lastWeekTrafficIndex
)
{
result
.
setTrafficIndexUpDown
(
1
);
}
else
{
}
else
if
(
trafficIndex
<
lastWeekTrafficIndex
)
{
result
.
setTrafficIndexUpDown
(
0
);
}
else
{
result
.
setTrafficIndexUpDown
(
2
);
}
if
(
queueLength
>
lastWeekQueueLength
)
{
result
.
setQueueLengthUpDown
(
1
);
}
else
{
}
else
if
(
queueLength
<
lastWeekQueueLength
)
{
result
.
setQueueLengthUpDown
(
0
);
}
else
{
result
.
setQueueLengthUpDown
(
2
);
}
}
}
...
...
@@ -187,18 +192,24 @@ public class TrendServiceV2Impl implements TrendServiceV2 {
if
(
trafficIndex
>
curTrafficIndex
)
{
greenOptDTO
.
setTrafficIndexUpDown
(
1
);
}
else
{
}
else
if
(
trafficIndex
<
curTrafficIndex
)
{
greenOptDTO
.
setTrafficIndexUpDown
(
0
);
}
else
{
greenOptDTO
.
setTrafficIndexUpDown
(
2
);
}
if
(
speed
>
curSpeed
.
intValue
())
{
greenOptDTO
.
setSpeedUpDown
(
1
);
}
else
{
}
else
if
(
speed
<
curSpeed
.
intValue
())
{
greenOptDTO
.
setSpeedUpDown
(
0
);
}
else
{
greenOptDTO
.
setSpeedUpDown
(
2
);
}
if
(
travelTime
>
curTravelTime
)
{
greenOptDTO
.
setTravelUpDown
(
1
);
}
else
{
}
else
if
(
travelTime
<
curTravelTime
)
{
greenOptDTO
.
setTravelUpDown
(
0
);
}
else
{
greenOptDTO
.
setTravelUpDown
(
2
);
}
}
...
...
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/judgeanalysis/impl/AnalysisGreenCongestionPeriodServiceImpl.java
View file @
8ec64581
...
...
@@ -263,12 +263,20 @@ public class AnalysisGreenCongestionPeriodServiceImpl implements AnalysisGreenCo
//按拥堵指数降序排序
// List<AnalysisGreenCongestionPeriodVO> periodVOS = voList.stream().sorted(Comparator.comparing(AnalysisGreenCongestionPeriodVO::getCongestIndex).reversed())
// .collect(Collectors.toList());
// List<GreenReportProblemOverallDataVO> overallDataVOS = greenList.stream().sorted(Comparator.comparing(x -> {
// double congestIndexAll = 0;
// for (GreenWaveDirProblemDataVO dataVO : x.getList()) {
// congestIndexAll += dataVO.getCongestIndex();
// }
// return - congestIndexAll/x.getList().size();
// })).collect(Collectors.toList());
//按拥堵次数降序排序
List
<
GreenReportProblemOverallDataVO
>
overallDataVOS
=
greenList
.
stream
().
sorted
(
Comparator
.
comparing
(
x
->
{
double
congest
Index
All
=
0
;
double
congest
Count
All
=
0
;
for
(
GreenWaveDirProblemDataVO
dataVO
:
x
.
getList
())
{
congest
IndexAll
+=
dataVO
.
getCongestIndex
();
congest
CountAll
+=
dataVO
.
getCongestCount
();
}
return
-
congest
IndexAll
/
x
.
getList
().
size
()
;
return
-
congest
CountAll
;
})).
collect
(
Collectors
.
toList
());
List
<
Integer
>
greenIds
=
new
ArrayList
<>();
for
(
GreenReportProblemOverallDataVO
periodVO
:
overallDataVOS
)
{
...
...
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/report/impl/AnalysisGreenWaveOptimizeWeekServiceImpl.java
View file @
8ec64581
...
...
@@ -104,7 +104,6 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
@Override
public
GreenWaveOptimizeAnalysisResultResponseDTO
getTotalityData
(
Integer
year
,
Integer
week
,
String
ids
)
{
Integer
yearWeek
=
Integer
.
valueOf
(
year
+
""
+
week
);
Integer
yearWeekLast
=
Integer
.
valueOf
(
year
+
""
+
(
week
-
1
));
List
<
Integer
>
greenIdList
=
new
ArrayList
<>();
if
(
ObjectUtils
.
isEmpty
(
ids
))
{
List
<
GreenwaveInfoPO
>
greenwaveInfoPOList
=
greenwaveInfoMapper
.
selectAll
();
...
...
@@ -124,12 +123,12 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
if
(
ObjectUtils
.
isEmpty
(
greenWaveOptimizeAnalysisDataDTO
))
{
optimizeAnalysisResultResponseDTO
.
setWeekOptimizeCount
(
"0次"
);
optimizeAnalysisResultResponseDTO
.
setWeekOptimizeDuration
(
"0小时"
);
optimizeAnalysisResultResponseDTO
.
setWeekCapacitySituation
(
"
无变化
"
);
optimizeAnalysisResultResponseDTO
.
setWeekStopTimesSituation
(
"
无变化
"
);
optimizeAnalysisResultResponseDTO
.
setWeekTravelTimeSituation
(
"
无变化
"
);
optimizeAnalysisResultResponseDTO
.
setWeekDelayTimeSituation
(
"
无变化
"
);
optimizeAnalysisResultResponseDTO
.
setWeekAvgSpeedSituation
(
"
无变化
"
);
optimizeAnalysisResultResponseDTO
.
setWeekTotalitySituation
(
"
无变化
"
);
optimizeAnalysisResultResponseDTO
.
setWeekCapacitySituation
(
"
持平
"
);
optimizeAnalysisResultResponseDTO
.
setWeekStopTimesSituation
(
"
持平
"
);
optimizeAnalysisResultResponseDTO
.
setWeekTravelTimeSituation
(
"
持平
"
);
optimizeAnalysisResultResponseDTO
.
setWeekDelayTimeSituation
(
"
持平
"
);
optimizeAnalysisResultResponseDTO
.
setWeekAvgSpeedSituation
(
"
持平
"
);
optimizeAnalysisResultResponseDTO
.
setWeekTotalitySituation
(
"
持平
"
);
}
else
{
optimizeAnalysisResultResponseDTO
.
setWeekOptimizeCount
(
String
.
valueOf
(
greenWaveOptimizeAnalysisDataDTO
.
getOptimizeCount
())
+
"次"
);
optimizeAnalysisResultResponseDTO
.
setWeekOptimizeDuration
(
String
.
valueOf
(
greenWaveOptimizeAnalysisDataDTO
.
getOptimizeDuration
()
/
60
/
60
)
+
"小时"
);
...
...
@@ -160,6 +159,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekCapacitySituation
=
(
analysisDataDTO
.
getCapacity
()
-
analysisDataDTO
.
getLastCapacity
())
*
100
/
analysisDataDTO
.
getLastCapacity
();
if
(
weekCapacitySituation
>
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekCapacitySituation
(
"提升"
+
weekCapacitySituation
+
"%"
);
}
else
if
(
weekCapacitySituation
==
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekCapacitySituation
(
"持平"
);
}
else
{
optimizeAnalysisResultResponseDTO
.
setWeekCapacitySituation
(
"降低"
+
Math
.
abs
(
weekCapacitySituation
)
+
"%"
);
}
...
...
@@ -171,6 +172,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekStopTimesSituation
=
Math
.
round
((
analysisDataDTO
.
getStopTimes
()
-
analysisDataDTO
.
getLastStopTimes
())
*
100
/
analysisDataDTO
.
getLastStopTimes
());
if
(
weekStopTimesSituation
>
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekStopTimesSituation
(
"增加"
+
weekStopTimesSituation
+
"%"
);
}
else
if
(
weekStopTimesSituation
==
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekStopTimesSituation
(
"持平"
);
}
else
{
optimizeAnalysisResultResponseDTO
.
setWeekStopTimesSituation
(
"减少"
+
Math
.
abs
(
weekStopTimesSituation
)
+
"%"
);
}
...
...
@@ -180,6 +183,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekTravelTimeSituation
=
(
analysisDataDTO
.
getTravelTime
()
-
analysisDataDTO
.
getLastTravelTime
())
*
100
/
analysisDataDTO
.
getLastTravelTime
();
if
(
weekTravelTimeSituation
>
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekTravelTimeSituation
(
"增加"
+
weekTravelTimeSituation
+
"%"
);
}
else
if
(
weekTravelTimeSituation
==
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekTravelTimeSituation
(
"持平"
);
}
else
{
optimizeAnalysisResultResponseDTO
.
setWeekTravelTimeSituation
(
"减少"
+
Math
.
abs
(
weekTravelTimeSituation
)
+
"%"
);
}
...
...
@@ -189,6 +194,8 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekDelayTimeSituation
=
Math
.
round
((
analysisDataDTO
.
getDelayTime
()
-
analysisDataDTO
.
getLastDelayTime
())
*
100
/
analysisDataDTO
.
getLastDelayTime
());
if
(
weekDelayTimeSituation
>
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekDelayTimeSituation
(
"增加"
+
weekDelayTimeSituation
+
"%"
);
}
else
if
(
weekDelayTimeSituation
==
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekDelayTimeSituation
(
"持平"
);
}
else
{
optimizeAnalysisResultResponseDTO
.
setWeekDelayTimeSituation
(
"减少"
+
Math
.
abs
(
weekDelayTimeSituation
)
+
"%"
);
}
...
...
@@ -198,30 +205,20 @@ public class AnalysisGreenWaveOptimizeWeekServiceImpl extends ServiceImpl<Analys
weekAvgSpeedSituation
=
Math
.
round
((
analysisDataDTO
.
getAvgSpeed
()
-
analysisDataDTO
.
getLastAvgSpeed
())
*
100
/
analysisDataDTO
.
getLastAvgSpeed
());
if
(
weekAvgSpeedSituation
>
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekAvgSpeedSituation
(
"提升"
+
weekAvgSpeedSituation
+
"%"
);
}
else
if
(
weekAvgSpeedSituation
==
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekAvgSpeedSituation
(
"持平"
);
}
else
{
optimizeAnalysisResultResponseDTO
.
setWeekAvgSpeedSituation
(
"降低"
+
Math
.
abs
(
weekAvgSpeedSituation
)
+
"%"
);
}
}
//本周总体情况
if
(
weekCapacitySituation
>=
0
&&
weekTravelTimeSituation
<=
0
)
{
if
(
weekCapacitySituation
>=
0
)
{
if
(
weekCapacitySituation
>=
5
)
{
optimizeAnalysisResultResponseDTO
.
setWeekTotalitySituation
(
"明显提升"
);
}
else
{
optimizeAnalysisResultResponseDTO
.
setWeekTotalitySituation
(
"略有提升"
);
}
}
else
if
(
weekCapacitySituation
>=
0
&&
weekTravelTimeSituation
>
0
)
{
if
(
weekCapacitySituation
-
weekTravelTimeSituation
>
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekTotalitySituation
(
"略有提升"
);
}
else
{
optimizeAnalysisResultResponseDTO
.
setWeekTotalitySituation
(
"略有下降"
);
}
}
else
if
(
weekCapacitySituation
<
0
&&
weekTravelTimeSituation
<=
0
)
{
if
(
weekCapacitySituation
-
weekTravelTimeSituation
>
0
)
{
optimizeAnalysisResultResponseDTO
.
setWeekTotalitySituation
(
"略有提升"
);
}
else
{
optimizeAnalysisResultResponseDTO
.
setWeekTotalitySituation
(
"略有下降"
);
}
}
else
if
(
weekCapacitySituation
<
0
&&
weekTravelTimeSituation
>
0
)
{
}
else
{
if
(
Math
.
abs
(
weekCapacitySituation
)
>=
5
)
{
optimizeAnalysisResultResponseDTO
.
setWeekTotalitySituation
(
"明显下降"
);
}
else
{
...
...
signal-optimize-service/src/main/java/net/wanji/opt/servicev2/report/impl/AnalysisGreenWavePeakDetailServiceImpl.java
View file @
8ec64581
...
...
@@ -10,6 +10,7 @@ import net.wanji.common.utils.tool.DateUtil;
import
net.wanji.databus.dao.entity.GreenwaveInfoPO
;
import
net.wanji.databus.dao.mapper.GreenwaveInfoMapper
;
import
net.wanji.opt.common.ArithOfBigDecmial
;
import
net.wanji.opt.common.CommonUtils
;
import
net.wanji.opt.common.enums.PeakNameEnum
;
import
net.wanji.opt.constant.PeakEnum
;
import
net.wanji.opt.constant.WeekDayEnum
;
...
...
@@ -29,6 +30,9 @@ import org.springframework.stereotype.Component;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.time.LocalTime
;
import
java.time.format.DateTimeFormatter
;
import
java.time.temporal.ChronoUnit
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Comparator
;
...
...
@@ -121,7 +125,7 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm
if
(
vo1
.
getCongestStartTime
()
!=
null
&&
vo2
.
getCongestEndTime
()
!=
null
)
{
weekData
.
setThisWeekCongestSpan
(
DateUtil
.
formatDate
(
vo1
.
getCongestStartTime
(),
"HH:mm"
)
+
"~"
+
DateUtil
.
formatDate
(
vo2
.
getCongestEndTime
(),
"HH:mm"
));
}
if
(
Objects
.
nonNull
(
lastWeekDataList
)){
if
(
Objects
.
nonNull
(
lastWeekDataList
))
{
//上周高峰指标数据
Optional
<
AnalysisGreenWavePeakDetail
>
optional
=
lastWeekDataList
.
stream
().
filter
(
o
->
Objects
.
equals
(
o
.
getWeekDay
(),
detail
.
getWeekDay
())
&&
Objects
.
equals
(
o
.
getPeakType
(),
detail
.
getPeakType
())).
findFirst
();
if
(
optional
.
isPresent
())
{
...
...
@@ -209,48 +213,62 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm
Double
lastAvgCongestIndex
=
0
D
;
//====================================================================================================================================================//
if
(
Objects
.
nonNull
(
earliestStartTimePo
)
&&
Objects
.
nonNull
(
lastWeekEarliestStartTimePo
))
{
minutesStart
=
Minutes
.
minutesBetween
(
new
DateTime
(
earliestStartTimePo
.
getPeakStartTime
().
getTime
()),
new
DateTime
(
lastWeekEarliestStartTimePo
.
getPeakStartTime
().
getTime
())).
getMinutes
();
minutesEnd
=
Minutes
.
minutesBetween
(
new
DateTime
(
earliestStartTimePo
.
getPeakEndTime
().
getTime
()),
new
DateTime
(
lastWeekEarliestStartTimePo
.
getPeakEndTime
().
getTime
())).
getMinutes
();
String
thisHM
=
DateUtil
.
formatDate
(
earliestStartTimePo
.
getPeakStartTime
(),
"HH:mm"
);
String
lastHM
=
DateUtil
.
formatDate
(
lastWeekEarliestStartTimePo
.
getPeakStartTime
(),
"HH:mm"
);
// 计算时间差(以分钟为单位)
minutesStart
=
CommonUtils
.
getTimeBetweenMinutes
(
thisHM
,
lastHM
,
"HH:mm"
);
thisHM
=
DateUtil
.
formatDate
(
earliestStartTimePo
.
getPeakEndTime
(),
"HH:mm"
);
lastHM
=
DateUtil
.
formatDate
(
lastWeekEarliestStartTimePo
.
getPeakEndTime
(),
"HH:mm"
);
// 计算时间差(以分钟为单位)
minutesEnd
=
CommonUtils
.
getTimeBetweenMinutes
(
thisHM
,
lastHM
,
"HH:mm"
);
}
//====================================================================================================================================================//
//早高峰集中时段
if
(
Objects
.
nonNull
(
earliestStartTimePo
)
&&
Objects
.
nonNull
(
lastEndTimePo
))
{
amPeakScope
=
DateUtil
.
formatDate
(
earliestStartTimePo
.
getPeakStartTime
(),
"HH:mm"
)
+
"~"
+
DateUtil
.
formatDate
(
lastEndTimePo
.
getPeakEndTime
(),
"HH:mm"
);
//持续时长
amDuration1
=
Minutes
.
minutesBetween
(
new
DateTime
(
earliestStartTimePo
.
getPeakStartTime
().
getTime
()),
new
DateTime
(
lastEndTimePo
.
getPeakEndTime
().
getTime
())).
getMinutes
();
String
amPeakStart
=
DateUtil
.
formatDate
(
earliestStartTimePo
.
getPeakStartTime
(),
"HH:mm"
);
String
amPeakEnd
=
DateUtil
.
formatDate
(
lastEndTimePo
.
getPeakEndTime
(),
"HH:mm"
);
amPeakScope
=
amPeakStart
+
"~"
+
amPeakEnd
;
// 计算时间差(以分钟为单位)
amDuration1
=
CommonUtils
.
getTimeBetweenMinutes
(
amPeakStart
,
amPeakEnd
,
"HH:mm"
);
}
//====================================================================================================================================================//
//开始时间比上周
String
amPeakStartSituation
=
""
;
if
(
minutesStart
>
0
)
{
amPeakStartSituation
=
"提前"
+
minutesStart
+
"分钟"
;
amPeakStartSituation
=
"提前"
+
Math
.
abs
(
minutesStart
)
+
"分钟"
;
}
else
{
amPeakStartSituation
=
"延后"
+
minutesStart
+
"分钟"
;
amPeakStartSituation
=
"延后"
+
Math
.
abs
(
minutesStart
)
+
"分钟"
;
}
//====================================================================================================================================================//
//结束时间比上周
String
amPeakEndSituation
=
""
;
if
(
minutesEnd
>
0
)
{
amPeakEndSituation
=
"提前"
+
minutesEnd
+
"分钟"
;
amPeakEndSituation
=
"提前"
+
Math
.
abs
(
minutesEnd
)
+
"分钟"
;
}
else
{
amPeakEndSituation
=
"延后"
+
minutesEnd
+
"分钟"
;
amPeakEndSituation
=
"延后"
+
Math
.
abs
(
minutesEnd
)
+
"分钟"
;
}
//====================================================================================================================================================//
//持续时长
if
(
Objects
.
nonNull
(
lastWeekEarliestStartTimePo
)
&&
Objects
.
nonNull
(
lastWeekLastEndTimePo
))
{
amDuration2
=
Minutes
.
minutesBetween
(
new
DateTime
(
lastWeekEarliestStartTimePo
.
getPeakStartTime
().
getTime
()),
new
DateTime
(
lastWeekLastEndTimePo
.
getPeakEndTime
().
getTime
())).
getMinutes
();
String
amPeakStart
=
DateUtil
.
formatDate
(
lastWeekEarliestStartTimePo
.
getPeakStartTime
(),
"HH:mm"
);
String
amPeakEnd
=
DateUtil
.
formatDate
(
lastWeekLastEndTimePo
.
getPeakEndTime
(),
"HH:mm"
);
amDuration2
=
CommonUtils
.
getTimeBetweenMinutes
(
amPeakStart
,
amPeakEnd
,
"HH:mm"
);
}
//本周高峰持续时长
String
amPeakDuration
=
amDuration1
+
"分钟"
;
String
amDurationSameRatioSituation
=
""
;
if
(
amDuration1
>
amDuration2
)
{
amDurationSameRatioSituation
=
"增加"
+
(
amDuration1
-
amDuration2
)
+
"分钟"
;
amDurationSameRatioSituation
=
"增加"
+
Math
.
abs
((
amDuration1
-
amDuration2
)
)
+
"分钟"
;
}
else
{
amDurationSameRatioSituation
=
"减少"
+
(
amDuration2
-
amDuration1
)
+
"分钟"
;
amDurationSameRatioSituation
=
"减少"
+
Math
.
abs
((
amDuration2
-
amDuration1
)
)
+
"分钟"
;
}
//====================================================================================================================================================//
thisMaxTravelTime
=
thisWeekList
.
stream
().
map
(
AnalysisGreenWavePeakDetail:
:
getTravelTime
).
max
(
Comparator
.
comparing
(
Integer:
:
intValue
)).
orElse
(
0
);
thisMaxTravelTime
=
(
int
)
ArithOfBigDecmial
.
div
(
thisMaxTravelTime
,
60
);
//转为分钟
lastMaxTravelTime
=
lastWeekDataList
.
stream
().
map
(
AnalysisGreenWavePeakDetail:
:
getTravelTime
).
max
(
Comparator
.
comparing
(
Integer:
:
intValue
)).
orElse
(
0
);
lastMaxTravelTime
=
(
int
)
ArithOfBigDecmial
.
div
(
lastMaxTravelTime
,
60
);
//转为分钟
//最大行程时间状况
String
maxTravelTimeSituation
=
""
;
if
(
thisMaxTravelTime
>
lastMaxTravelTime
)
{
...
...
@@ -266,9 +284,9 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm
//平均拥堵指数状况
String
amAvgCongestIndex
=
""
;
if
(
thisAvgCongestIndex
>
lastAvgCongestIndex
)
{
amAvgCongestIndex
=
"增加"
+
(
Math
.
abs
(
thisAvgCongestIndex
-
lastAvgCongestIndex
)
)
+
""
;
amAvgCongestIndex
=
"增加"
+
ArithOfBigDecmial
.
round
(
Math
.
abs
(
thisAvgCongestIndex
-
lastAvgCongestIndex
),
2
)
+
""
;
}
else
{
amAvgCongestIndex
=
"减少"
+
(
Math
.
abs
(
thisAvgCongestIndex
-
lastAvgCongestIndex
))
+
""
;
amAvgCongestIndex
=
"减少"
+
ArithOfBigDecmial
.
round
(
Math
.
abs
(
thisAvgCongestIndex
-
lastAvgCongestIndex
),
2
)
+
""
;
}
//====================================================================================================================================================//
if
(
Objects
.
equals
(
peakType
,
1
))
{
...
...
@@ -304,6 +322,14 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm
return
vo
;
}
public
static
void
main
(
String
[]
args
)
{
DateTimeFormatter
formatter
=
DateTimeFormatter
.
ofPattern
(
"HH:mm"
);
LocalTime
time1
=
LocalTime
.
parse
(
"0800"
,
formatter
);
LocalTime
time2
=
LocalTime
.
parse
(
"0745"
,
formatter
);
// 计算时间差(以分钟为单位)
int
minutesStart
=
(
int
)
ChronoUnit
.
MINUTES
.
between
(
time1
,
time2
);
System
.
out
.
println
(
minutesStart
);
}
/**
* 获取峰值时间边界
...
...
@@ -315,7 +341,7 @@ public class AnalysisGreenWavePeakDetailServiceImpl extends BaseDubboInterfaceIm
*/
private
AnalysisGreenWavePeakDetail
getPeakTimeBoundary
(
List
<
AnalysisGreenWavePeakDetail
>
list
,
Integer
type
,
Integer
peakType
)
{
if
(
Objects
.
isNull
(
list
))
{
return
null
;
return
null
;
}
AnalysisGreenWavePeakDetail
ret
=
null
;
//修改为取交通指数最大的一条记录
...
...
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