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
1946b6d7
Commit
1946b6d7
authored
Jan 09, 2025
by
zhoushiguang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
协调方向、非协调方向-5分钟指标
parent
f1c25dc0
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
147 additions
and
52 deletions
+147
-52
Knife4jConfiguration.java
.../main/java/net/wanji/opt/config/Knife4jConfiguration.java
+3
-3
Swagger2.java
...-service/src/main/java/net/wanji/opt/config/Swagger2.java
+1
-1
GreenwaveHistRestServer.java
...ava/net/wanji/opt/controller/GreenwaveHistRestServer.java
+3
-2
CrossIndexController.java
.../wanji/opt/controller/signalopt/CrossIndexController.java
+1
-1
GreenwaveHistoryMapper.java
...java/net/wanji/opt/dao/mapper/GreenwaveHistoryMapper.java
+2
-1
GreenwaveCrossTrendPo.java
...in/java/net/wanji/opt/po/trend/GreenwaveCrossTrendPo.java
+60
-0
EventServiceImpl.java
...ain/java/net/wanji/opt/service/impl/EventServiceImpl.java
+4
-3
GreenwaveHistProviderImpl.java
...net/wanji/opt/service/impl/GreenwaveHistProviderImpl.java
+44
-27
GreenwaveHistMapper.xml
...service/src/main/resources/mapper/GreenwaveHistMapper.xml
+29
-14
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/config/Knife4jConfiguration.java
View file @
1946b6d7
...
...
@@ -72,7 +72,7 @@ public class Knife4jConfiguration {
@Bean
(
value
=
"defaultApi2"
)
public
Docket
defaultApi2
()
{
String
groupName
=
"
v0.1版本
"
;
String
groupName
=
"
信控调优平台接口
"
;
Docket
docket
=
new
Docket
(
DocumentationType
.
SWAGGER_2
)
//.host(swaggerDocUrl)
.
apiInfo
(
apiInfo
())
...
...
@@ -89,8 +89,8 @@ public class Knife4jConfiguration {
private
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
.
title
(
"
全息路段接口文档
"
)
.
description
(
"
全息路口监测系统
RESTful APIs"
)
.
title
(
"
信控调优平台
"
)
.
description
(
"
信控调优平台
RESTful APIs"
)
//.termsOfServiceUrl(swaggerDocUrl)
.
contact
(
"wj@qq.com"
)
.
version
(
"0.1"
)
...
...
signal-optimize-service/src/main/java/net/wanji/opt/config/Swagger2.java
View file @
1946b6d7
...
...
@@ -32,7 +32,7 @@ public class Swagger2 {
private
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
//页面标题
.
title
(
"
万集科技-城市交通信号优化系统
"
)
.
title
(
"
信控调优平台
"
)
//创建人
.
contact
(
new
Contact
(
"test"
,
"#"
,
"signal-opt@wanji.net.cn"
))
//版本号
...
...
signal-optimize-service/src/main/java/net/wanji/opt/controller/GreenwaveHistRestServer.java
View file @
1946b6d7
...
...
@@ -16,6 +16,7 @@ import net.wanji.common.framework.rest.JsonViewObject;
import
net.wanji.common.framework.rest.impl.AbstractRestServerImpl
;
import
net.wanji.opt.entity.GreenwaveHist
;
import
net.wanji.opt.po.base.CrossLaneDataHistPoExtend
;
import
net.wanji.opt.po.trend.GreenwaveCrossTrendPo
;
import
net.wanji.opt.service.GreenwaveHistProvider
;
import
net.wanji.opt.vo.GreenWaveRunStateVO
;
import
net.wanji.opt.vo.GreenwaveCrossMetricsVO
;
...
...
@@ -130,7 +131,7 @@ public class GreenwaveHistRestServer {
}
@GetMapping
(
"/findUnCoordinateDirIndex"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"绿波非协调方向->指标趋势"
,
notes
=
""
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"绿波
协调方向、
非协调方向->指标趋势"
,
notes
=
""
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"crossId"
,
value
=
"路口ID"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"13MOD0B5SI0"
),
@ApiImplicitParam
(
name
=
"greenDir"
,
value
=
"绿波协调方向,多个逗号分隔"
,
required
=
true
,
dataType
=
"String"
,
defaultValue
=
"5,7"
),
...
...
@@ -138,7 +139,7 @@ public class GreenwaveHistRestServer {
@ApiImplicitParam
(
name
=
"endTime"
,
value
=
"截止时间,格式:yyyy-MM-dd HH:mm:ss"
,
required
=
false
,
dataType
=
"String"
,
defaultValue
=
"2024-12-04 23:59:59"
)
})
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"成功"
,
response
=
Greenwave
Hist
.
class
,
@ApiResponse
(
code
=
200
,
message
=
"成功"
,
response
=
Greenwave
CrossTrendPo
.
class
,
responseHeaders
=
{
@ResponseHeader
(
name
=
"Content-Type"
,
description
=
"application/json"
)})
})
public
JsonViewObject
findUnCoordinateDirIndex
(
String
crossId
,
String
greenDir
,
String
startTime
,
String
endTime
)
{
...
...
signal-optimize-service/src/main/java/net/wanji/opt/controller/signalopt/CrossIndexController.java
View file @
1946b6d7
...
...
@@ -109,7 +109,7 @@ public class CrossIndexController {
produces
=
MediaType
.
APPLICATION_JSON
,
consumes
=
MediaType
.
APPLICATION_JSON
)
@GetMapping
(
value
=
"/crossStatusCount"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
AddOrUpdateSceneDT
O
.
class
),
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
CrossStatusCountV
O
.
class
),
})
public
JsonViewObject
crossStatusCount
(
String
crossId
)
{
List
<
CrossStatusCountVO
>
results
=
new
ArrayList
<>();
...
...
signal-optimize-service/src/main/java/net/wanji/opt/dao/mapper/GreenwaveHistoryMapper.java
View file @
1946b6d7
...
...
@@ -7,6 +7,7 @@ import net.wanji.databus.po.CrossDirDataHistPO;
import
net.wanji.databus.po.CrossTurnDataHistPO
;
import
net.wanji.opt.entity.GreenwaveHist
;
import
net.wanji.opt.po.base.CrossLaneDataHistPoExtend
;
import
net.wanji.opt.po.trend.GreenwaveCrossTrendPo
;
import
net.wanji.opt.vo.GreenWaveRunStateVO
;
import
org.apache.ibatis.annotations.Param
;
...
...
@@ -41,7 +42,7 @@ public interface GreenwaveHistoryMapper extends BaseInterfaceMapper<GreenwaveHis
* 查看非协调方向路口指标
* @return
*/
List
<
GreenwaveHist
>
findUnCoordinateCrossIndex
(
Map
<
String
,
Object
>
params
);
List
<
Map
<
String
,
Object
>
>
findUnCoordinateCrossIndex
(
Map
<
String
,
Object
>
params
);
/**
* 绿波路口方向级指标查询
...
...
signal-optimize-service/src/main/java/net/wanji/opt/po/trend/GreenwaveCrossTrendPo.java
0 → 100644
View file @
1946b6d7
package
net
.
wanji
.
opt
.
po
.
trend
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
net.wanji.common.framework.domain.TrackableEntity
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* <p>
* 绿波历史数据
* </p>
*
* @Author fengyi
* @Date 2024-11-18
*/
@Data
@ApiModel
(
value
=
"GreenwaveCrossTrendPo"
,
description
=
"干线路口协调方向、非协调方向指标"
)
public
class
GreenwaveCrossTrendPo
extends
TrackableEntity
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"绿波车流方向"
)
private
String
roadDirection
;
@ApiModelProperty
(
value
=
"路口ID"
)
private
String
crossId
;
@ApiModelProperty
(
value
=
"绿波编号"
)
private
Integer
greenId
;
@ApiModelProperty
(
value
=
"协调方向停车次数"
)
private
BigDecimal
cordStopTimes
;
@ApiModelProperty
(
value
=
"协调方向排队(米)"
)
private
BigDecimal
cordQueueLength
;
@ApiModelProperty
(
value
=
"协调方向流量"
)
private
BigDecimal
cordFlow
;
@ApiModelProperty
(
value
=
"非协调方向停车次数"
)
private
BigDecimal
unCordStopTimes
;
@ApiModelProperty
(
value
=
"非协调方向排队(米)"
)
private
BigDecimal
unCordQueueLength
;
@ApiModelProperty
(
value
=
"非协调方向流量"
)
private
BigDecimal
unCordFlow
;
@ApiModelProperty
(
value
=
"开始时间:yyyy-MM-dd HH:mm:ss"
)
@JSONField
(
format
=
"yyyy-MM-dd HH:mm:ss"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
Date
startTime
;
}
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/EventServiceImpl.java
View file @
1946b6d7
...
...
@@ -219,12 +219,13 @@ public class EventServiceImpl implements EventService {
}
});
});
tmpList
.
forEach
(
po
->
{
String
axis
=
DateUtil
.
formatDate
(
po
.
getStartTime
(),
"M/d"
)
+
","
+
DateUtil
.
formatDate
(
po
.
getStartTime
(),
"HH:mm"
)
+
","
+
po
.
getEventType
();
List
<
EventInfoSimplePo
>
sortList
=
tmpList
.
stream
().
sorted
(
Comparator
.
comparing
(
o
->
o
.
getStartTime
())).
collect
(
Collectors
.
toList
());
sortList
.
forEach
(
po
->
{
String
axis
=
DateUtil
.
formatDate
(
po
.
getStartTime
(),
"M/d"
)
+
","
+
DateUtil
.
formatDate
(
po
.
getStartTime
(),
"HH:mm:ss"
)
+
","
+
po
.
getEventType
();
dataserList
.
add
(
axis
);
});
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"statusByDateList"
,
tmp
List
);
map
.
put
(
"statusByDateList"
,
sort
List
);
map
.
put
(
"dataser"
,
dataserList
);
retList
.
add
(
map
);
// Set<String> timeList = group.keySet();
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/GreenwaveHistProviderImpl.java
View file @
1946b6d7
...
...
@@ -24,6 +24,7 @@ import net.wanji.opt.constant.ServiceLevelEnum;
import
net.wanji.opt.dao.mapper.GreenwaveHistoryMapper
;
import
net.wanji.opt.entity.GreenwaveHist
;
import
net.wanji.opt.po.base.CrossLaneDataHistPoExtend
;
import
net.wanji.opt.po.trend.GreenwaveCrossTrendPo
;
import
net.wanji.opt.service.GreenwaveHistProvider
;
import
net.wanji.opt.service.MainlineEvaluateService
;
import
net.wanji.opt.vo.GreenWaveRunStateVO
;
...
...
@@ -36,6 +37,7 @@ import org.joda.time.format.DateTimeFormatter;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.text.ParseException
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
...
...
@@ -153,41 +155,56 @@ public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveH
params
.
put
(
"endDate"
,
endTime
);
params
.
put
(
"greenDir"
,
greenDir
);
List
<
GreenwaveHist
>
list
=
greenwaveHistoryMapper
.
findUnCoordinateCrossIndex
(
params
);
list
=
list
.
stream
().
sorted
(
Comparator
.
comparing
(
o
->
o
.
getStartTime
())).
collect
(
Collectors
.
toList
());
List
<
Map
<
String
,
Object
>>
getList
=
greenwaveHistoryMapper
.
findUnCoordinateCrossIndex
(
params
);
List
<
GreenwaveCrossTrendPo
>
list
=
new
ArrayList
<>();
//存放时段
Set
<
String
>
sortedSet
=
new
TreeSet
<>();
//存放所有数据
List
<
Map
<
String
,
Object
>>
allList
=
new
ArrayList
<>();
//按时间分组分组
Map
<
Integer
,
List
<
GreenwaveHist
>>
groupByDir
=
list
.
stream
().
collect
(
Collectors
.
groupingBy
(
o
->
o
.
getDirection
(),
TreeMap:
:
new
,
Collectors
.
toList
()));
List
<
Map
<
String
,
Object
>>
turnList
=
new
ArrayList
<>();
for
(
Map
<
String
,
Object
>
map
:
getList
)
{
GreenwaveCrossTrendPo
po
=
new
GreenwaveCrossTrendPo
();
String
crossNo
=
map
.
get
(
"cross_id"
).
toString
();
String
st
=
map
.
get
(
"start_time"
).
toString
();
po
.
setCrossId
(
crossNo
);
po
.
setStartTime
(
DateTime
.
parse
(
st
,
DateTimeFormat
.
forPattern
(
"yyyy-MM-dd HH:mm:ss"
)).
toDate
());
//提取时间
sortedSet
.
add
(
DateUtil
.
formatDate
(
po
.
getStartTime
(),
"HH:mm"
));
for
(
Map
.
Entry
<
Integer
,
List
<
GreenwaveHist
>>
entry
:
groupByDir
.
entrySet
())
{
Integer
key
=
entry
.
getKey
();
String
indexList
=
map
.
get
(
"index_list"
).
toString
();
List
<
GreenwaveCrossTrendPo
>
finalList
=
new
ArrayList
<>();
Arrays
.
stream
(
indexList
.
split
(
"@"
)).
forEach
(
o
->{
String
[]
sps
=
o
.
split
(
","
);
String
type
=
sps
[
0
];
String
queueLength
=
sps
[
1
];
String
stopTimes
=
sps
[
2
];
String
flow
=
sps
[
3
];
if
(
Objects
.
equals
(
"1"
,
type
))
{
//非协调方向
po
.
setUnCordFlow
(
new
BigDecimal
(
flow
));
po
.
setUnCordQueueLength
(
new
BigDecimal
(
queueLength
));
po
.
setUnCordStopTimes
(
new
BigDecimal
(
stopTimes
));
}
else
if
(
Objects
.
equals
(
"2"
,
type
)){
//协调方向
po
.
setCordFlow
(
new
BigDecimal
(
flow
));
po
.
setCordQueueLength
(
new
BigDecimal
(
queueLength
));
po
.
setCordStopTimes
(
new
BigDecimal
(
stopTimes
));
}
finalList
.
add
(
po
);
});
//按方向排序
List
<
GreenwaveHist
>
value
=
entry
.
getValue
().
stream
().
sorted
(
Comparator
.
comparing
(
o
->
o
.
getStartTime
())).
collect
(
Collectors
.
toList
());
list
.
addAll
(
finalList
);
Map
<
String
,
Object
>
mapList
=
new
HashMap
<>();
mapList
.
put
(
"direction"
,
key
);
mapList
.
put
(
"list"
,
value
);
allList
.
add
(
mapList
);
for
(
GreenwaveHist
po
:
value
)
{
Map
<
String
,
Object
>
turnMap
=
new
HashMap
<>();
turnMap
.
put
(
"direction"
,
po
.
getDirection
());
if
(!
turnList
.
contains
(
turnMap
))
{
turnList
.
add
(
turnMap
);
}
//提取时间
sortedSet
.
add
(
DateUtil
.
formatDate
(
po
.
getStartTime
(),
"HH:mm"
));
}
}
//排序
list
=
list
.
stream
().
sorted
(
Comparator
.
comparing
(
o
->
o
.
getStartTime
())).
collect
(
Collectors
.
toList
());
//存放所有数据
List
<
Map
<
String
,
Object
>>
allList
=
new
ArrayList
<>();
Map
<
String
,
Object
>
mapList
=
new
HashMap
<>();
//mapList.put("direction", key);
mapList
.
put
(
"list"
,
list
);
allList
.
add
(
mapList
);
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"timeList"
,
sortedSet
);
...
...
signal-optimize-service/src/main/resources/mapper/GreenwaveHistMapper.xml
View file @
1946b6d7
...
...
@@ -72,26 +72,41 @@
GROUP BY green_id,road_direction,DATE_FORMAT( start_time, '%Y-%m-%d %H:%i:00' );
</select>
<!-- 查看
非协调方向路口
指标 -->
<select
id=
"findUnCoordinateCrossIndex"
result
Map=
"BaseResultM
ap"
>
<!-- 查看
路口协调/非协调方向5分钟粒度平均
指标 -->
<select
id=
"findUnCoordinateCrossIndex"
result
Type=
"m
ap"
>
SELECT t.cross_id,
t.direction,
MAX(t.queue_length) queue_length,
round(avg(stop_times), 2) stop_times,
DATE_FORMAT(t.start_time, '%Y-%m-%d %H:%i:00') start_time
t.start_time,
group_concat(concat(t.type,',',t.queue_length,',',T.stop_times,',',T.flow) SEPARATOR '@') index_list
FROM (
SELECT cross_id,
dir_type direction,
queue_length,
stop_times,
start_time
avg(queue_length) queue_length,
round(avg(stop_times), 2) stop_times,
DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00') start_time,
round(avg(flow)) flow,
1 as type
FROM t_cross_dir_data_hist a
WHERE cross_id = #{crossId}
AND dir_type not in (#{greenDir})
AND start_time BETWEEN #{startDate}
AND #{endDate}
AND dir_type not in (SELECT in_dir from t_greenwave_cross where cross_id=#{crossId}
union SELECT out_dir from t_greenwave_cross where cross_id=#{crossId}
)
AND start_time BETWEEN #{startDate} AND #{endDate}
GROUP BY cross_id, start_time
UNION
SELECT cross_id,
avg(queue_length) queue_length,
round(avg(stop_times), 2) stop_times,
DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00') start_time,
round(avg(flow)) flow,
2 as type
FROM t_cross_dir_data_hist a
WHERE cross_id = #{crossId}
AND dir_type in (SELECT in_dir from t_greenwave_cross where cross_id=#{crossId}
union SELECT out_dir from t_greenwave_cross where cross_id=#{crossId}
)
AND start_time BETWEEN #{startDate} AND #{endDate}
GROUP BY cross_id, start_time
) t
GROUP BY t.cross_id,
DATE_FORMAT(start_time, '%Y-%m-%d %H:%i:00')
GROUP BY t.cross_id,
t.start_time
;
</select>
...
...
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