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
1460282d
Commit
1460282d
authored
Aug 25, 2023
by
hanbing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[add] 新信号评价-运行评价-热力图
parent
42043a14
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
117 additions
and
0 deletions
+117
-0
RunningEvaluateController.java
...a/net/wanji/opt/controller/RunningEvaluateController.java
+13
-0
RunningEvaluateService.java
...in/java/net/wanji/opt/service/RunningEvaluateService.java
+3
-0
RunningEvaluateServiceImpl.java
...et/wanji/opt/service/impl/RunningEvaluateServiceImpl.java
+57
-0
RunningEvaluateHeatMapVO.java
.../main/java/net/wanji/opt/vo/RunningEvaluateHeatMapVO.java
+20
-0
HeatMapBO.java
wj-databus/src/main/java/net/wanji/databus/bo/HeatMapBO.java
+24
-0
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/controller/RunningEvaluateController.java
View file @
1460282d
...
...
@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiResponses;
import
net.wanji.common.framework.rest.JsonViewObject
;
import
net.wanji.databus.bo.CrossIdAndStartEndDateBO
;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.databus.bo.HeatMapBO
;
import
net.wanji.databus.vo.RunningEvaluateCrossListVO
;
import
net.wanji.opt.bo.CrossNameBO
;
import
net.wanji.opt.bo.MetricsDetailBO
;
...
...
@@ -132,4 +133,16 @@ public class RunningEvaluateController {
return
JsonViewObject
.
newInstance
().
success
(
res
);
}
@ApiOperation
(
value
=
"运行评价热力图"
,
notes
=
"运行评价热力图"
,
response
=
JsonViewObject
.
class
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@PostMapping
(
value
=
"/heatMap"
,
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
RunningEvaluateHeatMapVO
.
class
),
})
public
JsonViewObject
heatMap
(
@RequestBody
HeatMapBO
bo
)
{
List
<
RunningEvaluateHeatMapVO
>
res
=
runningEvaluateService
.
heatMap
(
bo
);
return
JsonViewObject
.
newInstance
().
success
(
res
);
}
}
\ No newline at end of file
signal-optimize-service/src/main/java/net/wanji/opt/service/RunningEvaluateService.java
View file @
1460282d
...
...
@@ -2,6 +2,7 @@ package net.wanji.opt.service;
import
net.wanji.databus.bo.CrossIdAndStartEndDateBO
;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.databus.bo.HeatMapBO
;
import
net.wanji.databus.vo.RunningEvaluateCrossListVO
;
import
net.wanji.opt.bo.CrossNameBO
;
import
net.wanji.opt.bo.MetricsDetailBO
;
...
...
@@ -25,4 +26,6 @@ public interface RunningEvaluateService {
RunningEvaluateMetricsDetailVO
metricsDetail
(
MetricsDetailBO
bo
);
RunningEvaluateScopeTreeVO
scopeTree
(
CrossIdBO
bo
);
List
<
RunningEvaluateHeatMapVO
>
heatMap
(
HeatMapBO
bo
);
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/RunningEvaluateServiceImpl.java
View file @
1460282d
...
...
@@ -11,6 +11,7 @@ import net.wanji.common.utils.tool.CrossUtil;
import
net.wanji.common.utils.tool.TimeArrayUtil
;
import
net.wanji.databus.bo.CrossIdAndStartEndDateBO
;
import
net.wanji.databus.bo.CrossIdBO
;
import
net.wanji.databus.bo.HeatMapBO
;
import
net.wanji.databus.dao.entity.*
;
import
net.wanji.databus.dao.mapper.*
;
import
net.wanji.databus.dto.MetricHistDTO
;
...
...
@@ -31,6 +32,7 @@ import java.time.Instant;
import
java.time.LocalDate
;
import
java.time.ZoneId
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
...
...
@@ -471,6 +473,61 @@ public class RunningEvaluateServiceImpl implements RunningEvaluateService {
return
runningEvaluateScopeTreeVO
;
}
@Override
public
List
<
RunningEvaluateHeatMapVO
>
heatMap
(
HeatMapBO
bo
)
{
String
crossId
=
bo
.
getCrossId
();
Date
startDate
=
bo
.
getStartDate
();
Date
endDate
=
bo
.
getEndDate
();
endDate
=
DateUtil
.
offsetDay
(
endDate
,
1
);
// 包含最后一天
int
startStamp
=
(
int
)
(
startDate
.
getTime
()
/
1000
);
// 10位时间戳
int
endStamp
=
(
int
)
(
endDate
.
getTime
()
/
1000
);
Integer
status
=
bo
.
getStatus
();
List
<
RunningEvaluateHeatMapVO
>
res
=
new
ArrayList
<>();
List
<
CrossDataHistPO
>
crossDataHistPOList
=
crossDataHistMapper
.
selectByCrossIdAndStartEnd
(
crossId
,
startStamp
,
endStamp
);
// 根据 status 值选择分组字段
Function
<
CrossDataHistPO
,
String
>
groupByField
;
switch
(
status
)
{
case
1
:
groupByField
=
CrossDataHistPO:
:
getUnbalanceDirs
;
break
;
case
2
:
groupByField
=
CrossDataHistPO:
:
getCongestionDirs
;
break
;
case
3
:
groupByField
=
CrossDataHistPO:
:
getSpilloverDirs
;
break
;
default
:
throw
new
IllegalArgumentException
(
"状态值非法"
);
}
// 过滤 status 字段值为 status 变量的对象,并按照选择的字段分组
Map
<
String
,
List
<
CrossDataHistPO
>>
grouped
=
crossDataHistPOList
.
stream
()
.
filter
(
po
->
status
.
equals
(
po
.
getStatus
()))
.
collect
(
Collectors
.
groupingBy
(
groupByField
));
// 对每个组进行处理,仅保留 start_time 相同的记录中 duration 最大的一条
Map
<
String
,
List
<
CrossDataHistPO
>>
filteredGrouped
=
grouped
.
entrySet
().
stream
()
.
collect
(
Collectors
.
toMap
(
Map
.
Entry
::
getKey
,
entry
->
entry
.
getValue
().
stream
()
.
collect
(
Collectors
.
groupingBy
(
CrossDataHistPO:
:
getStartTime
))
.
values
().
stream
()
.
map
(
list
->
list
.
stream
().
max
(
Comparator
.
comparingInt
(
CrossDataHistPO:
:
getDuration
))
.
orElse
(
null
))
.
collect
(
Collectors
.
toList
())
));
// 遍历 filteredGrouped,提取每个 key 和与该 key 关联的列表的元素个数
filteredGrouped
.
forEach
((
key
,
list
)
->
{
RunningEvaluateHeatMapVO
runningEvaluateHeatMapVO
=
new
RunningEvaluateHeatMapVO
();
runningEvaluateHeatMapVO
.
setDir
(
Integer
.
parseInt
(
key
));
runningEvaluateHeatMapVO
.
setCounts
(
list
.
size
());
res
.
add
(
runningEvaluateHeatMapVO
);
});
return
res
;
}
private
List
<
RunningEvaluateScopeTreeVO
.
DirVO
>
buildDirVOList
(
String
crossId
)
{
List
<
RunningEvaluateScopeTreeVO
.
DirVO
>
res
=
new
ArrayList
<>();
Integer
type
=
1
;
// 进口
...
...
signal-optimize-service/src/main/java/net/wanji/opt/vo/RunningEvaluateHeatMapVO.java
0 → 100644
View file @
1460282d
package
net
.
wanji
.
opt
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @author Kent HAN
* @date 2023/2/9 8:38
*/
@Data
@NoArgsConstructor
@ApiModel
(
value
=
"RunningEvaluateHeatMapVO"
,
description
=
"运行评价热力图"
)
public
class
RunningEvaluateHeatMapVO
{
@ApiModelProperty
(
value
=
"方向:1北;2东北;3东;4东南;5南;6西南;7西;8西北"
)
private
Integer
dir
;
@ApiModelProperty
(
value
=
"发生次数"
)
private
Integer
counts
;
}
wj-databus/src/main/java/net/wanji/databus/bo/HeatMapBO.java
0 → 100644
View file @
1460282d
package
net
.
wanji
.
databus
.
bo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
HeatMapBO
{
@ApiModelProperty
(
value
=
"路口ID"
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"开始日期 yyyy-MM-dd"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
startDate
;
@ApiModelProperty
(
value
=
"结束日期 yyyy-MM-dd"
)
@JsonFormat
(
shape
=
JsonFormat
.
Shape
.
STRING
,
pattern
=
"yyyy-MM-dd"
,
timezone
=
"GMT+8"
)
private
Date
endDate
;
@ApiModelProperty
(
value
=
"路口状态 0正常 1 失衡 2 拥堵 3 溢出"
)
private
Integer
status
;
}
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