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
f74c43eb
Commit
f74c43eb
authored
Mar 20, 2025
by
杜伟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
路口级查询
parent
32a958d0
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
101 additions
and
42 deletions
+101
-42
TrendController.java
...c/main/java/net/wanji/opt/controller/TrendController.java
+6
-0
TrendServiceImpl.java
...ain/java/net/wanji/opt/service/impl/TrendServiceImpl.java
+40
-41
CrossDataHistMapper.java
...ava/net/wanji/databus/dao/mapper/CrossDataHistMapper.java
+3
-0
CrossDataHistVO.java
...s/src/main/java/net/wanji/databus/vo/CrossDataHistVO.java
+13
-0
CrossDataHistMapper.xml
wj-databus/src/main/resources/mapper/CrossDataHistMapper.xml
+38
-0
CrossDirDataHistMapper.xml
...abus/src/main/resources/mapper/CrossDirDataHistMapper.xml
+1
-1
No files found.
signal-optimize-service/src/main/java/net/wanji/opt/controller/TrendController.java
View file @
f74c43eb
...
@@ -344,6 +344,12 @@ public class TrendController {
...
@@ -344,6 +344,12 @@ public class TrendController {
/**
/**
* 车道交通指标 - 路口级
* 车道交通指标 - 路口级
* 条件:
* 条件:
* {
* "granularity": "5m",
* "crossId": "12345",
* "start": "2024-05-15 10:00:00",
* "end": "2025-05-15 11:00:00"
* }
* @param periodCrossingVO
* @param periodCrossingVO
* @return
* @return
* @throws Exception
* @throws Exception
...
...
signal-optimize-service/src/main/java/net/wanji/opt/service/impl/TrendServiceImpl.java
View file @
f74c43eb
...
@@ -19,6 +19,7 @@ import net.wanji.databus.dao.mapper.*;
...
@@ -19,6 +19,7 @@ import net.wanji.databus.dao.mapper.*;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.databus.po.*
;
import
net.wanji.databus.po.*
;
import
net.wanji.databus.vo.AbnormalCrossListVO
;
import
net.wanji.databus.vo.AbnormalCrossListVO
;
import
net.wanji.databus.vo.CrossDataHistVO
;
import
net.wanji.databus.vo.CrossDirDataHistVO
;
import
net.wanji.databus.vo.CrossDirDataHistVO
;
import
net.wanji.databus.vo.GreenwaveListVO
;
import
net.wanji.databus.vo.GreenwaveListVO
;
import
net.wanji.opt.bo.*
;
import
net.wanji.opt.bo.*
;
...
@@ -1641,31 +1642,40 @@ public class TrendServiceImpl implements TrendService {
...
@@ -1641,31 +1642,40 @@ public class TrendServiceImpl implements TrendService {
* @param poExtList
* @param poExtList
* @return
* @return
*/
*/
private
List
<
CrossingQueryVO
.
CycleDataElement
>
buildCrossingCycleData
(
String
crossId
,
List
<
Cross
LaneDataHistPOExt
>
poExtList
)
{
private
List
<
CrossingQueryVO
.
CycleDataElement
>
buildCrossingCycleData
(
String
crossId
,
List
<
Cross
DataHistVO
>
poExtList
)
{
List
<
CrossingQueryVO
.
CycleDataElement
>
res
=
new
ArrayList
<>();
List
<
CrossingQueryVO
.
CycleDataElement
>
res
=
new
ArrayList
<>();
int
pedFlow
=
0
;
int
pedFlow
=
0
;
for
(
Cross
LaneDataHistPOExt
po
:
poExtList
)
{
for
(
Cross
DataHistVO
po
:
poExtList
)
{
CrossingQueryVO
.
CycleDataElement
vo
=
new
CrossingQueryVO
.
CycleDataElement
();
CrossingQueryVO
.
CycleDataElement
vo
=
new
CrossingQueryVO
.
CycleDataElement
();
vo
.
setTime
(
po
.
getStartTime
());
if
(
po
.
getId
().
contains
(
crossId
.
concat
(
Constants
.
SystemParam
.
SEPARATOR_MINUS
)))
{
pedFlow
+=
po
.
getFlow
();
}
Integer
batchTime
=
po
.
getBatchTime
();
// 将10位时间戳转换为毫秒
long
millis
=
batchTime
*
1000L
;
// 使用毫秒值创建Date对象
Date
dateFromTimestamp
=
new
Date
(
millis
);
vo
.
setTime
(
dateFromTimestamp
);
// vo.setDir(po.getDir());
// vo.setDirName(BaseEnum.SignalDirectionEnum.getNameByCode(po.getDir()));
vo
.
setFlow
(
po
.
getFlow
());
vo
.
setFlow
(
po
.
getFlow
());
vo
.
setPedFlow
(
pedFlow
);
vo
.
setNonMotorFlow
(
0
);
//非机动车流量
vo
.
setTrafficFlowA
(
po
.
getTrafficFlowA
());
vo
.
setTrafficFlowB
(
po
.
getTrafficFlowB
());
vo
.
setTrafficFlowC
(
po
.
getTrafficFlowC
());
Double
speed
=
po
.
getSpeed
();
Double
speed
=
po
.
getSpeed
();
vo
.
setSpeed
((
int
)
Math
.
round
(
speed
));
vo
.
setSpeed
((
int
)
Math
.
round
(
speed
));
vo
.
setVehheadDist
(
0
d
);
//车头间距
Double
vehheadTime
=
0
d
;
vo
.
setVehheadTime
((
int
)
Math
.
round
(
vehheadTime
));
//车头时距
Double
queueLength
=
po
.
getQueueLength
();
Double
queueLength
=
po
.
getQueueLength
();
vo
.
setQueueLength
((
int
)
Math
.
round
(
queueLength
));
vo
.
setQueueLength
((
int
)
Math
.
round
(
queueLength
));
Double
stopTimes
=
po
.
getStopTimes
();
vo
.
setStopTimes
((
int
)
Math
.
round
(
stopTimes
));
//----------------------------------------------------------------------------------------------
// if (po.getId().contains(crossId.concat(Constants.SystemParam.SEPARATOR_MINUS))) {
// pedFlow += po.getFlow();
// }
// Integer batchTime = po.getBatchTime();
// 将10位时间戳转换为毫秒
// long millis = batchTime * 1000L;
// 使用毫秒值创建Date对象
// Date dateFromTimestamp = new Date(millis);
// vo.setTime(dateFromTimestamp);
Integer
delayTime
=
po
.
getDelayTime
();
Integer
delayTime
=
po
.
getDelayTime
();
vo
.
setDelayTime
(
delayTime
);
vo
.
setDelayTime
(
delayTime
);
...
@@ -1674,10 +1684,6 @@ public class TrendServiceImpl implements TrendService {
...
@@ -1674,10 +1684,6 @@ public class TrendServiceImpl implements TrendService {
//效率评价等级
//效率评价等级
vo
.
setEfficiencyEvaluateLevel
(
0.0
);
vo
.
setEfficiencyEvaluateLevel
(
0.0
);
Double
stopTimes
=
po
.
getStopTimes
();
vo
.
setStopTimes
((
int
)
Math
.
round
(
stopTimes
));
Double
vehheadTime
=
po
.
getVehheadTime
();
vo
.
setVehheadTime
((
int
)
Math
.
round
(
vehheadTime
));
//饱和度
//饱和度
vo
.
setSaturation
(
0.0
);
//po.getSaturation()
vo
.
setSaturation
(
0.0
);
//po.getSaturation()
//拥堵指数
//拥堵指数
...
@@ -1735,20 +1741,16 @@ public class TrendServiceImpl implements TrendService {
...
@@ -1735,20 +1741,16 @@ public class TrendServiceImpl implements TrendService {
//行人闯红灯率
//行人闯红灯率
vo
.
setPedCrossRedLightRate
(
0.0
);
vo
.
setPedCrossRedLightRate
(
0.0
);
vo
.
setVehheadDist
(
po
.
getVehheadDist
());
//
vo.setVehheadDist(po.getVehheadDist());
vo
.
setTrafficFlowA
(
po
.
getTrafficFlowA
());
//
vo.setTrafficFlowA(po.getTrafficFlowA());
vo
.
setTrafficFlowB
(
po
.
getTrafficFlowB
());
//
vo.setTrafficFlowB(po.getTrafficFlowB());
vo
.
setTrafficFlowC
(
po
.
getTrafficFlowC
());
//
vo.setTrafficFlowC(po.getTrafficFlowC());
vo
.
setNonMotorFlow
(
po
.
getNonMotorFlow
());
vo
.
setNonMotorFlow
(
po
.
getNonMotorFlow
());
vo
.
setV85
(
Math
.
round
(
po
.
getV85
()
*
100
)
/
100
);
vo
.
setV85
(
Math
.
round
(
po
.
getV85
()
*
100
)
/
100
);
vo
.
setPedFlow
(
pedFlow
);
vo
.
setPedFlow
(
pedFlow
);
vo
.
setAllFlow
(
pedFlow
+
po
.
getNonMotorFlow
()
+
po
.
getFlow
());
vo
.
setAllFlow
(
pedFlow
+
po
.
getNonMotorFlow
()
+
po
.
getFlow
());
vo
.
setAllVehiceleFlow
(
po
.
getFlow
()
+
po
.
getNonMotorFlow
());
vo
.
setAllVehiceleFlow
(
po
.
getFlow
()
+
po
.
getNonMotorFlow
());
vo
.
setTurn
(
po
.
getTurn
());
// vo.setTurn(po.getTurn());
String
dirName
=
BaseEnum
.
SignalDirectionEnum
.
getNameByCode
(
po
.
getDir
());
String
turnName
=
TurnConvertEnum
.
getDescByKey
(
po
.
getTurn
());
vo
.
setLaneSort
(
String
.
join
(
"-"
,
dirName
,
turnName
,
String
.
valueOf
(
po
.
getSort
())));
res
.
add
(
vo
);
res
.
add
(
vo
);
}
}
...
@@ -2317,10 +2319,11 @@ public class TrendServiceImpl implements TrendService {
...
@@ -2317,10 +2319,11 @@ public class TrendServiceImpl implements TrendService {
String
granularity
=
lanePeriodTurnVO
.
getGranularity
();
String
granularity
=
lanePeriodTurnVO
.
getGranularity
();
if
(
StringUtils
.
isBlank
(
granularity
))
{
if
(
StringUtils
.
isBlank
(
granularity
))
{
granularity
=
"5"
;
granularity
=
"5"
;
}
else
{
granularity
=
granularity
.
replace
(
"m"
,
""
);
}
}
// 查询周期数据
// 查询周期数据
// List<CrossLaneDataHistPOExt> poExtList = crossLaneDataHistMapper.selectByCrossIdAndTimeSpan(crossId, start, end);
List
<
CrossDirDataHistVO
>
vo
=
crossDirDataHistMapper
.
selectByCrossIdAndStartEndDir
(
crossId
,
start
,
end
,
dirType
,
granularity
);
List
<
CrossDirDataHistVO
>
vo
=
crossDirDataHistMapper
.
selectByCrossIdAndStartEndDir
(
crossId
,
start
,
end
,
dirType
,
granularity
);
return
buildCrossingDirectionCycleData
(
crossId
,
vo
);
return
buildCrossingDirectionCycleData
(
crossId
,
vo
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
@@ -2340,23 +2343,19 @@ public class TrendServiceImpl implements TrendService {
...
@@ -2340,23 +2343,19 @@ public class TrendServiceImpl implements TrendService {
try
{
try
{
//路口
//路口
String
crossId
=
lanePeriodTurnVO
.
getCrossId
();
String
crossId
=
lanePeriodTurnVO
.
getCrossId
();
// Date start = lanePeriodTurnVO.getStart();
// Date end = lanePeriodTurnVO.getEnd();
int
start
=
(
int
)
(
lanePeriodTurnVO
.
getStart
().
getTime
()
/
1000
);
int
start
=
(
int
)
(
lanePeriodTurnVO
.
getStart
().
getTime
()
/
1000
);
int
end
=
(
int
)
(
lanePeriodTurnVO
.
getEnd
().
getTime
()
/
1000
);
int
end
=
(
int
)
(
lanePeriodTurnVO
.
getEnd
().
getTime
()
/
1000
);
//分析粒度【5m:五分钟 10m:10分钟 30m:30分钟 1h:一小时】
String
granularity
=
lanePeriodTurnVO
.
getGranularity
();
String
granularity
=
lanePeriodTurnVO
.
getGranularity
();
if
(
StringUtils
.
isBlank
(
granularity
))
{
if
(
StringUtils
.
isBlank
(
granularity
))
{
granularity
=
"5m"
;
granularity
=
"5"
;
}
else
{
granularity
=
granularity
.
replace
(
"m"
,
""
);
}
}
// LambdaQueryWrapper<AnalysisRidTurnIndicators> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(AnalysisRidTurnIndicators::getCrossId, crossId);
// queryWrapper.eq(AnalysisRidTurnIndicators::getGranularity, granularity);
// queryWrapper.between(AnalysisRidTurnIndicators::getWindowStartTime, start, end);
// queryWrapper.orderByDesc(AnalysisRidTurnIndicators::getWindowStartTime);
// return ridTurnIndicatorsMapper.selectList(queryWrapper);
// 查询周期数据
// 查询周期数据
List
<
Cross
LaneDataHistPOExt
>
poExtList
=
crossLaneDataHistMapper
.
selectByCrossIdAndTimeSpan
(
crossId
,
start
,
end
);
List
<
Cross
DataHistVO
>
vo
=
crossDataHistMapper
.
selectByCrossIdAndStartEndStat
(
crossId
,
start
,
end
,
granularity
);
return
buildCrossingCycleData
(
crossId
,
poExtList
);
return
buildCrossingCycleData
(
crossId
,
vo
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"路口周期数据方向级查询异常:"
,
e
);
log
.
error
(
"路口周期数据方向级查询异常:"
,
e
);
throw
new
OptServiceException
(
e
);
throw
new
OptServiceException
(
e
);
...
...
wj-databus/src/main/java/net/wanji/databus/dao/mapper/CrossDataHistMapper.java
View file @
f74c43eb
...
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
...
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.databus.dto.MetricHistDTO
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.databus.po.CrossDataHistPO
;
import
net.wanji.databus.po.CrossDataHistPOExt
;
import
net.wanji.databus.po.CrossDataHistPOExt
;
import
net.wanji.databus.vo.CrossDataHistVO
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
org.apache.ibatis.annotations.Param
;
...
@@ -24,6 +25,8 @@ public interface CrossDataHistMapper extends BaseMapper<CrossDataHistPO> {
...
@@ -24,6 +25,8 @@ public interface CrossDataHistMapper extends BaseMapper<CrossDataHistPO> {
List
<
CrossDataHistPO
>
selectByCrossIdAndStartEnd
(
String
crossId
,
int
startStamp
,
int
endStamp
);
List
<
CrossDataHistPO
>
selectByCrossIdAndStartEnd
(
String
crossId
,
int
startStamp
,
int
endStamp
);
List
<
CrossDataHistVO
>
selectByCrossIdAndStartEndStat
(
String
crossId
,
int
startStamp
,
int
endStamp
,
String
granularity
);
List
<
MetricHistDTO
>
selectMetricHistDTO
(
String
crossId
,
int
startStamp
,
int
endStamp
);
List
<
MetricHistDTO
>
selectMetricHistDTO
(
String
crossId
,
int
startStamp
,
int
endStamp
);
Double
selectMaxSaturation
(
String
crossId
,
int
startStamp
,
int
endStamp
);
Double
selectMaxSaturation
(
String
crossId
,
int
startStamp
,
int
endStamp
);
...
...
wj-databus/src/main/java/net/wanji/databus/vo/CrossDataHistVO.java
0 → 100644
View file @
f74c43eb
package
net
.
wanji
.
databus
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Data
;
import
net.wanji.databus.po.CrossDataRealtimePO
;
/**
* 路口统统计VO
*/
@Data
@ApiModel
(
value
=
"CrossDataHistVO"
,
description
=
"路口实时数据历史"
)
public
class
CrossDataHistVO
extends
CrossDataRealtimePO
{
}
wj-databus/src/main/resources/mapper/CrossDataHistMapper.xml
View file @
f74c43eb
...
@@ -95,6 +95,44 @@
...
@@ -95,6 +95,44 @@
and batch_time
<![CDATA[ <= ]]>
#{endStamp}
and batch_time
<![CDATA[ <= ]]>
#{endStamp}
order by batch_time
order by batch_time
</select>
</select>
<!-- 交通指标-路口级统计 -->
<select
id=
"selectByCrossIdAndStartEndStat"
resultType=
"net.wanji.databus.vo.CrossDataHistVO"
>
SELECT
cross_id AS crossId,
<choose>
<!-- 小时 -->
<when
test=
"granularity==1"
>
DATE_FORMAT(start_time, '%Y-%m-%d %H:00:00') AS startTime,
</when>
<!-- 分钟 -->
<otherwise>
DATE_FORMAT(
CONCAT( DATE ( start_time ), ' ', HOUR ( start_time ), ':', FLOOR( MINUTE ( start_time ) / #{granularity} ) * #{granularity} ),
'%Y-%m-%d %H:%i:00'
) AS startTime,
</otherwise>
</choose>
SUM( flow ) AS flow,
avg( traffic_flow_C ) AS trafficFlowC,
avg( traffic_flow_B ) AS trafficFlowB,
avg( traffic_flow_A ) AS trafficFlowA,
avg( speed ) AS speed,
MAX( queue_length ) AS queueLength,
AVG( stop_times ) AS stopTimes
FROM
t_cross_data_hist
WHERE 1=1
<if
test=
"crossId != null"
>
AND cross_id = #{crossId}
</if>
and batch_time
<![CDATA[ >= ]]>
#{startStamp}
and batch_time
<![CDATA[ <= ]]>
#{endStamp}
GROUP BY
cross_id,
startTime
ORDER BY
startTime DESC
</select>
<select
id=
"selectMetricHistDTO"
resultType=
"net.wanji.databus.dto.MetricHistDTO"
>
<select
id=
"selectMetricHistDTO"
resultType=
"net.wanji.databus.dto.MetricHistDTO"
>
select status, start_time, duration, flow, speed, sturation, stop_times, delay_time, batch_time, one_stop_rate, queue_length, effusion_rate, no_stop_rate, green_light_efficiency, load_balance
select status, start_time, duration, flow, speed, sturation, stop_times, delay_time, batch_time, one_stop_rate, queue_length, effusion_rate, no_stop_rate, green_light_efficiency, load_balance
...
...
wj-databus/src/main/resources/mapper/CrossDirDataHistMapper.xml
View file @
f74c43eb
This diff is collapsed.
Click to expand it.
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