Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Z
ZHHT-IRN-BD-ANALYSIS
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
李凯旋
ZHHT-IRN-BD-ANALYSIS
Commits
70ffd196
Commit
70ffd196
authored
Nov 10, 2022
by
黄准
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
车道指标相关计算逻辑
parent
6bb3ebdf
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
328 additions
and
181 deletions
+328
-181
pom.xml
realtime/hologram-streaming/pom.xml
+10
-0
Cycle.java
...am-streaming/src/main/java/com/zhht/irn/entity/Cycle.java
+10
-10
DirectionNorm.java
...ming/src/main/java/com/zhht/irn/entity/DirectionNorm.java
+0
-17
LaneNorm.java
...streaming/src/main/java/com/zhht/irn/entity/LaneNorm.java
+11
-5
Stage.java
...am-streaming/src/main/java/com/zhht/irn/entity/Stage.java
+18
-7
StageForDirection.java
.../src/main/java/com/zhht/irn/entity/StageForDirection.java
+15
-0
TravelEvent.java
...eaming/src/main/java/com/zhht/irn/entity/TravelEvent.java
+35
-15
LaneMetricJob.java
...eaming/src/main/java/com/zhht/irn/flow/LaneMetricJob.java
+2
-3
LaneNormJob.java
...treaming/src/main/java/com/zhht/irn/flow/LaneNormJob.java
+0
-0
LaneNormJob.java
...streaming/src/main/java/com/zhht/irn/job/LaneNormJob.java
+0
-0
LaneNormProcessFunction.java
...in/java/com/zhht/irn/process/LaneNormProcessFunction.java
+0
-0
GreenRadioSink.java
...aming/src/main/java/com/zhht/irn/sink/GreenRadioSink.java
+5
-5
LaneNormSink.java
...reaming/src/main/java/com/zhht/irn/sink/LaneNormSink.java
+19
-4
CarSource.java
...treaming/src/main/java/com/zhht/irn/source/CarSource.java
+23
-23
CirlceSource.java
...aming/src/main/java/com/zhht/irn/source/CirlceSource.java
+99
-85
DateUtils.java
...streaming/src/main/java/com/zhht/irn/utils/DateUtils.java
+77
-2
CycleWindowAssigner.java
...rc/main/java/com/zhht/irn/window/CycleWindowAssigner.java
+2
-2
mysql.properties
...me/hologram-streaming/src/main/resources/mysql.properties
+2
-3
No files found.
realtime/hologram-streaming/pom.xml
View file @
70ffd196
...
...
@@ -69,6 +69,16 @@
<artifactId>
lombok
</artifactId>
<version>
1.18.20
</version>
</dependency>
<dependency>
<groupId>
org.apache.flink
</groupId>
<artifactId>
flink-table-api-java
</artifactId>
<version>
1.12.1
</version>
</dependency>
<dependency>
<groupId>
org.apache.flink
</groupId>
<artifactId>
flink-table-api-java-bridge_2.11
</artifactId>
<version>
1.12.0
</version>
</dependency>
</dependencies>
</project>
realtime/hologram-streaming/src/main/java/com/zhht/irn/entity/Cycle.java
View file @
70ffd196
...
...
@@ -16,9 +16,9 @@ public class Cycle {
//信控机编号
private
String
signalCode
;
// 周期开始时间
private
Date
beginDateTime
;
private
String
beginDateTime
;
// 周期结束时间
private
Date
endDateTime
;
private
String
endDateTime
;
// 开始模式编码
private
String
beginControlModelCode
;
// 结束模式编码
...
...
@@ -30,11 +30,11 @@ public class Cycle {
// 周期时长,单位 秒
private
int
duration
;
// 周期序号
private
int
cycleOrder
;
private
Long
cycleOrder
;
//绿信比
private
Double
greenRatio
;
//损失时间
private
int
lossTime
;
private
int
lossTime
;
// 周期内相位列表(依次执行)
private
List
<
Stage
>
stageList
;
...
...
@@ -54,19 +54,19 @@ public class Cycle {
this
.
crossCode
=
crossCode
;
}
public
Date
getBeginDateTime
()
{
public
String
getBeginDateTime
()
{
return
beginDateTime
;
}
public
void
setBeginDateTime
(
Date
beginDateTime
)
{
public
void
setBeginDateTime
(
String
beginDateTime
)
{
this
.
beginDateTime
=
beginDateTime
;
}
public
Date
getEndDateTime
()
{
public
String
getEndDateTime
()
{
return
endDateTime
;
}
public
void
setEndDateTime
(
Date
endDateTime
)
{
public
void
setEndDateTime
(
String
endDateTime
)
{
this
.
endDateTime
=
endDateTime
;
}
...
...
@@ -78,11 +78,11 @@ public class Cycle {
this
.
duration
=
duration
;
}
public
int
getCycleOrder
()
{
public
Long
getCycleOrder
()
{
return
cycleOrder
;
}
public
void
setCycleOrder
(
int
cycleOrder
)
{
public
void
setCycleOrder
(
Long
cycleOrder
)
{
this
.
cycleOrder
=
cycleOrder
;
}
...
...
realtime/hologram-streaming/src/main/java/com/zhht/irn/entity/DirectionNorm.java
deleted
100644 → 0
View file @
6bb3ebdf
package
com
.
zhht
.
irn
.
entity
;
import
lombok.Data
;
import
java.util.List
;
/**
* @Description: 方向指标
* @Author :Marinh
* @Param:
* @retrun:
* @Creat :2022-10-29-20:47
**/
@Data
public
class
DirectionNorm
extends
LaneNorm
{
}
realtime/hologram-streaming/src/main/java/com/zhht/irn/entity/LaneNorm.java
View file @
70ffd196
...
...
@@ -11,22 +11,28 @@ public class LaneNorm extends Stage{
private
String
corssId
;
//车道编号
private
String
laneId
;
//车道名称
private
String
laneName
;
//车道可视长度
private
Integer
laneLength
;
//相位编号
private
String
phaseId
;
//方向
private
String
direction
;
//交通流量
private
String
trafficCapacity
;
private
Double
trafficCapacity
;
//最大排队长度
private
String
maxQueueLength
;
private
Integer
maxQueueLength
;
//有效绿灯时间
private
String
effectGreenTime
;
//通行能力
private
String
passCapacity
;
private
Double
passCapacity
;
//饱和度
private
String
saturation
;
private
Double
saturation
;
//剩余承载力
private
String
residualCapacity
;
private
Double
residualCapacity
;
//识别空间占有率
private
String
spotSpaceShare
;
//层级
private
Integer
order
;
}
realtime/hologram-streaming/src/main/java/com/zhht/irn/entity/Stage.java
View file @
70ffd196
package
com
.
zhht
.
irn
.
entity
;
import
java.util.Date
;
import
java.util.List
;
/**
* 相位实体类
...
...
@@ -14,9 +15,9 @@ public class Stage {
// 相位编号
private
String
phaseValue
;
// 相位开始时间
private
Date
beginDateTime
;
private
String
beginDateTime
;
// 相位结束时间
private
Date
endDateTime
;
private
String
endDateTime
;
// 开始模式编码
private
String
beginControlModelCode
;
// 结束模式编码
...
...
@@ -39,9 +40,19 @@ public class Stage {
private
Double
greenRatio
;
// 阶段有效绿灯时长
private
int
validGreen
;
//损失时间
private
int
lossTime
;
//相位允许通行的方向
private
List
<
StageForDirection
>
stageForDirectionList
;
public
List
<
StageForDirection
>
getStageForDirectionList
()
{
return
stageForDirectionList
;
}
public
void
setStageForDirectionList
(
List
<
StageForDirection
>
stageForDirectionList
)
{
this
.
stageForDirectionList
=
stageForDirectionList
;
}
public
String
getPhaseValue
()
{
return
phaseValue
;
...
...
@@ -131,19 +142,19 @@ public class Stage {
this
.
lossTime
=
lossTime
;
}
public
Date
getBeginDateTime
()
{
public
String
getBeginDateTime
()
{
return
beginDateTime
;
}
public
void
setBeginDateTime
(
Date
beginDateTime
)
{
public
void
setBeginDateTime
(
String
beginDateTime
)
{
this
.
beginDateTime
=
beginDateTime
;
}
public
Date
getEndDateTime
()
{
public
String
getEndDateTime
()
{
return
endDateTime
;
}
public
void
setEndDateTime
(
Date
endDateTime
)
{
public
void
setEndDateTime
(
String
endDateTime
)
{
this
.
endDateTime
=
endDateTime
;
}
...
...
realtime/hologram-streaming/src/main/java/com/zhht/irn/entity/StageForDirection.java
0 → 100644
View file @
70ffd196
package
com
.
zhht
.
irn
.
entity
;
import
lombok.Data
;
import
java.util.List
;
import
java.util.Map
;
/**
* 相位实体类
*/
@Data
public
class
StageForDirection
{
private
String
direction
;
private
String
traffic_flow_direction
;
}
realtime/hologram-streaming/src/main/java/com/zhht/irn/entity/TravelEvent.java
View file @
70ffd196
...
...
@@ -23,16 +23,16 @@ public class TravelEvent {
private
String
recordId
;
// 记录时间
private
Date
recordTime
;
private
String
recordTime
;
// 事件发生时车道ID
private
Lo
ng
eventLineId
;
private
Stri
ng
eventLineId
;
// 事件发生时速度
private
Double
eventSpeed
;
// 事件时间
private
Date
eventTime
;
private
String
eventTime
;
// 事件类型
private
EventType
eventType
;
...
...
@@ -40,6 +40,26 @@ public class TravelEvent {
// 备注
private
String
remark
;
private
String
arrayTime
;
private
String
inCorssTime
;
public
String
getArrayTime
()
{
return
arrayTime
;
}
public
void
setArrayTime
(
String
arrayTime
)
{
this
.
arrayTime
=
arrayTime
;
}
public
String
getInCorssTime
()
{
return
inCorssTime
;
}
public
void
setInCorssTime
(
String
inCorssTime
)
{
this
.
inCorssTime
=
inCorssTime
;
}
public
Integer
getId
()
{
return
id
;
}
...
...
@@ -64,19 +84,11 @@ public class TravelEvent {
this
.
recordId
=
recordId
;
}
public
Date
getRecordTime
()
{
return
recordTime
;
}
public
void
setRecordTime
(
Date
recordTime
)
{
this
.
recordTime
=
recordTime
;
}
public
Long
getEventLineId
()
{
public
String
getEventLineId
()
{
return
eventLineId
;
}
public
void
setEventLineId
(
Lo
ng
eventLineId
)
{
public
void
setEventLineId
(
Stri
ng
eventLineId
)
{
this
.
eventLineId
=
eventLineId
;
}
...
...
@@ -88,11 +100,19 @@ public class TravelEvent {
this
.
eventSpeed
=
eventSpeed
;
}
public
Date
getEventTime
()
{
public
String
getRecordTime
()
{
return
recordTime
;
}
public
void
setRecordTime
(
String
recordTime
)
{
this
.
recordTime
=
recordTime
;
}
public
String
getEventTime
()
{
return
eventTime
;
}
public
void
setEventTime
(
Date
eventTime
)
{
public
void
setEventTime
(
String
eventTime
)
{
this
.
eventTime
=
eventTime
;
}
...
...
realtime/hologram-streaming/src/main/java/com/zhht/irn/flow/LaneMetricJob.java
View file @
70ffd196
...
...
@@ -49,11 +49,11 @@ public class LaneMetricJob {
// 旅行事件数据流的 watermark 生成逻辑
WatermarkStrategy
<
TravelEvent
>
travelEventWatermarkStrategy
=
WatermarkStrategy
.<
TravelEvent
>
forBoundedOutOfOrderness
(
Duration
.
ofSeconds
(
30
))
.
withTimestampAssigner
((
travelEvent
,
timestamp
)
->
travelEvent
.
getEventTime
().
getTime
(
));
.
withTimestampAssigner
((
travelEvent
,
timestamp
)
->
DateUtils
.
dateToStamp
(
travelEvent
.
getEventTime
()
));
// 周期结束数据流的 cycle 生成逻辑
WatermarkStrategy
<
Cycle
>
cycleWatermarkStrategy
=
WatermarkStrategy
.<
Cycle
>
forBoundedOutOfOrderness
(
Duration
.
ofSeconds
(
10
))
.
withTimestampAssigner
((
cycle
,
timeStamp
)
->
cycle
.
getBeginDateTime
().
getTime
(
));
.
withTimestampAssigner
((
cycle
,
timeStamp
)
->
DateUtils
.
dateToStamp
(
cycle
.
getBeginDateTime
()
));
// 获取实时旅行事件数据流
// DataStream<TravelEvent> eventStream = FlinkUtils.createKafkaStream(args, env)
...
...
@@ -75,7 +75,6 @@ public class LaneMetricJob {
.
map
((
record
)
->
{
System
.
out
.
println
(
record
);
Cycle
cycle
=
JSON
.
parseObject
(
record
,
Cycle
.
class
);
System
.
out
.
println
(
cycle
);
return
cycle
;
})
// 给数据流添加水印
...
...
realtime/hologram-streaming/src/main/java/com/zhht/irn/flow/LaneNormJob.java
deleted
100644 → 0
View file @
6bb3ebdf
This diff is collapsed.
Click to expand it.
realtime/hologram-streaming/src/main/java/com/zhht/irn/job/LaneNormJob.java
0 → 100644
View file @
70ffd196
This diff is collapsed.
Click to expand it.
realtime/hologram-streaming/src/main/java/com/zhht/irn/process/LaneNormProcessFunction.java
0 → 100644
View file @
70ffd196
This diff is collapsed.
Click to expand it.
realtime/hologram-streaming/src/main/java/com/zhht/irn/sink/GreenRadioSink.java
View file @
70ffd196
...
...
@@ -52,10 +52,10 @@ public class GreenRadioSink extends RichSinkFunction<Cycle> {
insertCyclePstmt
.
setLong
(
1
,
cycle
.
getId
());
insertCyclePstmt
.
setString
(
2
,
cycle
.
getCrossCode
());
insertCyclePstmt
.
setString
(
3
,
cycle
.
getSignalCode
());
insertCyclePstmt
.
setString
(
4
,
DateUtils
.
dateToString
(
cycle
.
getBeginDateTime
(),
"yyyy-MM-DD HH:mm:ss"
));
insertCyclePstmt
.
setString
(
5
,
DateUtils
.
dateToString
(
cycle
.
getEndDateTime
(),
"yyyy-MM-DD HH:mm:ss"
));
insertCyclePstmt
.
setString
(
4
,
cycle
.
getBeginDateTime
(
));
insertCyclePstmt
.
setString
(
5
,
cycle
.
getEndDateTime
(
));
insertCyclePstmt
.
setInt
(
6
,
cycle
.
getDuration
());
insertCyclePstmt
.
set
Int
(
7
,
cycle
.
getCycleOrder
());
insertCyclePstmt
.
set
Long
(
7
,
cycle
.
getCycleOrder
());
insertCyclePstmt
.
setDouble
(
8
,
cycle
.
getGreenRatio
());
insertCyclePstmt
.
setInt
(
9
,
cycle
.
getLossTime
());
insertCyclePstmt
.
setString
(
10
,
DateUtils
.
getTodayTime
());
...
...
@@ -66,8 +66,8 @@ public class GreenRadioSink extends RichSinkFunction<Cycle> {
insertPhasePstmt
.
setLong
(
1
,
cycle
.
getCycleOrder
());
insertPhasePstmt
.
setString
(
2
,
phase
.
getCrossCode
());
insertPhasePstmt
.
setString
(
3
,
phase
.
getPhaseValue
());
insertCyclePstmt
.
setString
(
4
,
DateUtils
.
dateToString
(
cycle
.
getBeginDateTime
(),
"yyyy-MM-DD HH:mm:ss"
));
insertCyclePstmt
.
setString
(
5
,
DateUtils
.
dateToString
(
cycle
.
getEndDateTime
(),
"yyyy-MM-DD HH:mm:ss"
));
insertCyclePstmt
.
setString
(
4
,
cycle
.
getBeginDateTime
(
));
insertCyclePstmt
.
setString
(
5
,
cycle
.
getEndDateTime
(
));
insertPhasePstmt
.
setInt
(
6
,
cycle
.
getDuration
());
insertPhasePstmt
.
setInt
(
7
,
phase
.
getPhaseOrder
());
insertPhasePstmt
.
setDouble
(
8
,
phase
.
getGreenRatio
());
...
...
realtime/hologram-streaming/src/main/java/com/zhht/irn/sink/LaneNormSink.java
View file @
70ffd196
package
com
.
zhht
.
irn
.
sink
;
import
com.zhht.irn.entity.LaneNorm
;
import
com.zhht.irn.utils.DateUtils
;
import
com.zhht.irn.utils.MySQLUtils
;
import
org.apache.flink.api.java.tuple.Tuple2
;
import
org.apache.flink.configuration.Configuration
;
...
...
@@ -30,15 +31,15 @@ public class LaneNormSink extends RichSinkFunction<LaneNorm> {
// path暂定为固定值
String
path
=
"E:\\zhht\\ZHHT-IRN-BD-ANALYSIS\\realtime\\hologram-streaming\\src\\main\\resources\\mysql.properties"
;
connection
=
MySQLUtils
.
getConnection
(
path
);
insertPstmt
=
connection
.
prepareStatement
(
"insert into wyf_test(cross_code,lxb) values (?,?)"
);
updatePstmt
=
connection
.
prepareStatement
(
"update wyf_test set lxb=? where cross_code=?"
);
insertPstmt
=
connection
.
prepareStatement
(
"insert into "
+
"app_cross_lane_norm(cross_id,lane_id,direction,cycle_id,max_queue_length,effect_green_time,pass_capacity,traffic_capacity,saturation,residual_capacity,"
+
"spot_space_share,lane_name,`order`,update_time) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
);
}
@Override
public
void
close
()
throws
Exception
{
super
.
close
();
if
(
insertPstmt
!=
null
)
insertPstmt
.
close
();
if
(
updatePstmt
!=
null
)
updatePstmt
.
close
();
if
(
connection
!=
null
)
connection
.
close
();
}
...
...
@@ -49,6 +50,20 @@ public class LaneNormSink extends RichSinkFunction<LaneNorm> {
*/
@Override
public
void
invoke
(
LaneNorm
value
,
SinkFunction
.
Context
context
)
throws
Exception
{
insertPstmt
.
setString
(
1
,
value
.
getCorssId
());
insertPstmt
.
setString
(
2
,
value
.
getLaneId
());
insertPstmt
.
setString
(
3
,
value
.
getDirection
());
insertPstmt
.
setLong
(
4
,
value
.
getCycleOrder
());
insertPstmt
.
setDouble
(
5
,
value
.
getMaxQueueLength
());
insertPstmt
.
setString
(
6
,
value
.
getEffectGreenTime
());
insertPstmt
.
setDouble
(
7
,
value
.
getPassCapacity
());
insertPstmt
.
setDouble
(
8
,
value
.
getTrafficCapacity
());
insertPstmt
.
setDouble
(
9
,
value
.
getSaturation
());
insertPstmt
.
setDouble
(
10
,
value
.
getResidualCapacity
());
insertPstmt
.
setString
(
11
,
value
.
getSpotSpaceShare
());
insertPstmt
.
setString
(
12
,
value
.
getLaneName
());
insertPstmt
.
setInt
(
13
,
value
.
getOrder
());
insertPstmt
.
setString
(
14
,
DateUtils
.
getTodayTime
());
insertPstmt
.
execute
();
}
}
realtime/hologram-streaming/src/main/java/com/zhht/irn/source/CarSource.java
View file @
70ffd196
...
...
@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON;
import
com.zhht.irn.entity.Car
;
import
com.zhht.irn.entity.Cycle
;
import
com.zhht.irn.entity.Stage
;
import
com.zhht.irn.entity.TravelEvent
;
import
com.zhht.irn.enums.EventType
;
import
com.zhht.irn.utils.DateUtils
;
import
org.apache.flink.streaming.api.functions.source.SourceFunction
;
...
...
@@ -17,54 +19,52 @@ import java.util.*;
* @retrun:
* @Creat :2022-11-01-14:40
**/
public
class
CarSource
implements
SourceFunction
<
Car
>
{
public
class
CarSource
implements
SourceFunction
<
TravelEvent
>
{
private
static
boolean
isRunning
=
true
;
public
static
String
[]
lanePosition
=
new
String
[]{
"南左转"
,
"南直行"
,
"南右转"
,
"北左转"
,
"北直行"
,
"北右转"
,
"东左转"
,
"东直行"
,
"东右转"
,
"西左转"
,
"西直行"
,
"西右转"
};
public
static
String
[]
inlane
=
new
String
[]{
"
1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
,
"7"
,
"8"
,
"
9"
,
"10"
,
"11"
,
"12"
};
public
static
String
[]
inlane
=
new
String
[]{
"
01"
,
"02"
,
"03"
,
"04"
,
"05"
,
"06"
,
"07"
,
"08"
,
"0
9"
,
"10"
,
"11"
,
"12"
};
public
static
String
[]
status
=
new
String
[]{
"arrived"
,
"inCross"
,
"outCross"
,
"away"
};
@Override
public
void
run
(
SourceContext
<
Car
>
sourceContext
)
throws
Exception
{
public
void
run
(
SourceContext
<
TravelEvent
>
sourceContext
)
throws
Exception
{
while
(
isRunning
){
Calendar
beforeTime
=
Calendar
.
getInstance
();
Date
date
=
new
Date
();
List
<
Car
>
cars
=
getCar
(
beforeTime
,
date
);
for
(
Car
car:
cars
){
List
<
TravelEvent
>
cars
=
getCar
(
date
);
for
(
TravelEvent
car:
cars
){
sourceContext
.
collect
(
car
);
}
//每个3秒发送一条数据
Thread
.
sleep
(
1
0
);
Thread
.
sleep
(
200
0
);
}
}
public
static
List
<
Car
>
getCar
(
Calendar
beforeTime
,
Date
date
){
public
static
List
<
TravelEvent
>
getCar
(
Date
date
){
Calendar
aftertime
=
Calendar
.
getInstance
();
Date
date1
=
new
Date
();
//模拟到达事件
List
<
Car
>
cars
=
new
ArrayList
<>();
List
<
TravelEvent
>
cars
=
new
ArrayList
<>();
String
uuid
=
UUID
.
randomUUID
()+
""
;
String
carId
=
UUID
.
randomUUID
()+
""
;
String
inLaneId
=
inlane
[
new
Random
().
nextInt
(
12
)];
Car
arraycar
=
new
Car
();
TravelEvent
arraycar
=
new
TravelEvent
();
arraycar
.
setRecordId
(
uuid
);
arraycar
.
setCrossId
(
"1307020
1
"
);
arraycar
.
setEvenTime
(
DateUtils
.
formatTime
(
date1
));
arraycar
.
setCrossId
(
"1307020
2
"
);
arraycar
.
setEven
t
Time
(
DateUtils
.
formatTime
(
date1
));
arraycar
.
setEventLineId
(
inLaneId
);
arraycar
.
setEventSpeed
(
new
Random
().
nextInt
(
60
)+
""
);
arraycar
.
setEventType
(
"arrived"
);
arraycar
.
setId
(
carId
);
arraycar
.
setEventSpeed
(
55.5
);
arraycar
.
setEventType
(
EventType
.
ARRIVED
);
arraycar
.
setId
(
0
);
cars
.
add
(
arraycar
);
//模拟进入路口事件
String
afterTimeSecond
=
DateUtils
.
getAfterTimeSecond
(
aftertime
,
new
Random
().
nextInt
(
18
0
));
Car
incrosscar
=
new
Car
();
incrosscar
.
setCrossId
(
"1307020
1
"
);
incrosscar
.
setEvenTime
(
afterTimeSecond
);
String
afterTimeSecond
=
DateUtils
.
getAfterTimeSecond
(
new
Random
().
nextInt
(
14
0
));
TravelEvent
incrosscar
=
new
TravelEvent
();
incrosscar
.
setCrossId
(
"1307020
2
"
);
incrosscar
.
setEven
t
Time
(
afterTimeSecond
);
incrosscar
.
setEventLineId
(
inLaneId
);
incrosscar
.
setRecordId
(
uuid
);
incrosscar
.
setId
(
carId
);
incrosscar
.
setEventSpeed
(
new
Random
().
nextInt
(
60
)+
""
);
incrosscar
.
setEventType
(
"inCross"
);
incrosscar
.
setId
(
0
);
incrosscar
.
setEventSpeed
(
55.2
);
incrosscar
.
setEventType
(
EventType
.
INCROSS
);
cars
.
add
(
incrosscar
);
return
cars
;
}
...
...
realtime/hologram-streaming/src/main/java/com/zhht/irn/source/CirlceSource.java
View file @
70ffd196
//package com.zhht.irn.source;
//
//import com.alibaba.fastjson.JSON;
//import com.zhht.irn.entity.Cycle;
//import com.zhht.irn.entity.Stage;
//import com.zhht.irn.utils.DateUtils;
//import org.apache.flink.streaming.api.functions.source.SourceFunction;
//import org.apache.flink.util.TimeUtils;
//
//import java.sql.Timestamp;
//import java.util.*;
//
///**
// * @Description:
// * @Author :Marinh
// * @Param:
// * @retrun:
// * @Creat :2022-11-01-14:40
// **/
//public class CirlceSource implements SourceFunction<Cycle> {
// private static boolean isRunning = true;
// private static int i = 0;
//
// @Override
// public void run(SourceFunction.SourceContext<Cycle> sourceContext) throws Exception {
// while (isRunning){
// Calendar beforeTime = Calendar.getInstance();
// Date date = new Date();
// sourceContext.collect(getCycle(beforeTime,date));
// //每个3秒发送一条数据
// Thread.sleep(60000);
// }
// }
//
// public static Cycle getCycle(Calendar beforeTime,Date date){
// Cycle cycle = new Cycle();
// cycle.setId(new Timestamp(System.currentTimeMillis()).getTime());
// cycle.setCrossCode("13070201");
// cycle.setBeginDateTime(DateUtils.getBeforeTime(beforeTime,2));//2分钟一个周期
// cycle.setEndDateTime(DateUtils.formatTime(date));
// cycle.setDuration(120);
// cycle.setCycleOrder(1);
// ArrayList<Stage> phases = new ArrayList<>();
// for(int i=0;i<3;i++){
// Stage phase = new Stage();
// phase.setPhaseValue("10"+i);
// if(i==0){
// phase.setPhaseValue("1");
// phase.setBeginTime(DateUtils.getBeforeTimeSecond(beforeTime,120));
// phase.setEndTime(DateUtils.getBeforeTimeSecond(beforeTime,90));
// phase.setDuration(30);
// phase.setGreen(30);
// phase.setAllRed(87);
// phase.setGreen(3);
// }
// if(i==1){
// phase.setPhaseValue("2");
// phase.setBeginTime(DateUtils.getBeforeTimeSecond(beforeTime,90));
// phase.setEndTime(DateUtils.getBeforeTimeSecond(beforeTime,60));
// phase.setDuration(30);
// phase.setGreen(30);
// phase.setAllRed(87);
// phase.setGreen(3);
// }
// if(i==2){
// phase.setPhaseValue("3");
// phase.setBeginTime(DateUtils.getBeforeTimeSecond(beforeTime,60));
// phase.setEndTime(DateUtils.getBeforeTimeSecond(beforeTime,0));
// phase.setDuration(60);
// phase.setGreen(60);
// phase.setAllRed(57);
// phase.setGreen(3);
// }
// phases.add(phase);
// }
// cycle.setStageList(phases);
// return cycle;
// }
//
// @Override
// public void cancel() {
// isRunning=false;
// }
//
//}
package
com
.
zhht
.
irn
.
source
;
import
com.alibaba.fastjson.JSON
;
import
com.zhht.irn.entity.Cycle
;
import
com.zhht.irn.entity.Stage
;
import
com.zhht.irn.utils.DateUtils
;
import
org.apache.flink.streaming.api.functions.source.SourceFunction
;
import
org.apache.flink.util.TimeUtils
;
import
java.sql.Timestamp
;
import
java.util.*
;
/**
* @Description:
* @Author :Marinh
* @Param:
* @retrun:
* @Creat :2022-11-01-14:40
**/
public
class
CirlceSource
implements
SourceFunction
<
Cycle
>
{
private
static
boolean
isRunning
=
true
;
private
static
Long
cycleOrder
=
0L
;
@Override
public
void
run
(
SourceFunction
.
SourceContext
<
Cycle
>
sourceContext
)
throws
Exception
{
while
(
isRunning
){
//每个3秒发送一条数据
Thread
.
sleep
(
120000
);
Calendar
beforeTime
=
Calendar
.
getInstance
();
Date
date
=
new
Date
();
sourceContext
.
collect
(
getCycle
(
beforeTime
,
date
));
cycleOrder
++;
}
}
public
static
Cycle
getCycle
(
Calendar
beforeTime
,
Date
date
){
Cycle
cycle
=
new
Cycle
();
cycle
.
setId
(
new
Timestamp
(
System
.
currentTimeMillis
()).
getTime
());
cycle
.
setCrossCode
(
"13070202"
);
cycle
.
setBeginDateTime
(
DateUtils
.
getBeforeTime
(
beforeTime
,
2
));
//2分钟一个周期
cycle
.
setEndDateTime
(
DateUtils
.
formatTime
(
date
));
cycle
.
setDuration
(
120
);
cycle
.
setCycleOrder
(
cycleOrder
);
ArrayList
<
Stage
>
phases
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
4
;
i
++){
Stage
phase
=
new
Stage
();
phase
.
setPhaseValue
(
"10"
+
i
);
if
(
i
==
0
){
//南北直行
phase
.
setPhaseValue
(
"8"
);
phase
.
setBeginDateTime
(
DateUtils
.
getBeforeTimeSecond
(
120
));
phase
.
setEndDateTime
(
DateUtils
.
getBeforeTimeSecond
(
90
));
phase
.
setDuration
(
30
);
phase
.
setGreen
(
30
);
phase
.
setAllRed
(
87
);
phase
.
setYellow
(
3
);
phase
.
setCycleOrder
(
cycleOrder
);
}
if
(
i
==
1
){
//南北左转
phase
.
setPhaseValue
(
"0"
);
phase
.
setBeginDateTime
(
DateUtils
.
getBeforeTimeSecond
(
90
));
phase
.
setEndDateTime
(
DateUtils
.
getBeforeTimeSecond
(
60
));
phase
.
setDuration
(
30
);
phase
.
setGreen
(
30
);
phase
.
setAllRed
(
87
);
phase
.
setYellow
(
3
);
phase
.
setCycleOrder
(
cycleOrder
);
}
if
(
i
==
2
){
//东西直行
phase
.
setPhaseValue
(
"9"
);
phase
.
setBeginDateTime
(
DateUtils
.
getBeforeTimeSecond
(
60
));
phase
.
setEndDateTime
(
DateUtils
.
getBeforeTimeSecond
(
0
));
phase
.
setDuration
(
60
);
phase
.
setGreen
(
60
);
phase
.
setAllRed
(
57
);
phase
.
setYellow
(
3
);
phase
.
setCycleOrder
(
cycleOrder
);
}
if
(
i
==
3
){
//东西左转
phase
.
setPhaseValue
(
"4"
);
phase
.
setBeginDateTime
(
DateUtils
.
getBeforeTimeSecond
(
60
));
phase
.
setEndDateTime
(
DateUtils
.
getBeforeTimeSecond
(
0
));
phase
.
setDuration
(
60
);
phase
.
setGreen
(
60
);
phase
.
setAllRed
(
57
);
phase
.
setYellow
(
3
);
phase
.
setCycleOrder
(
cycleOrder
);
}
phases
.
add
(
phase
);
}
cycle
.
setStageList
(
phases
);
return
cycle
;
}
@Override
public
void
cancel
()
{
isRunning
=
false
;
}
}
realtime/hologram-streaming/src/main/java/com/zhht/irn/utils/DateUtils.java
View file @
70ffd196
...
...
@@ -39,6 +39,25 @@ public class DateUtils {
}
public
static
Long
dateDiff
(
String
startTime
,
String
endTime
)
{
// 按照传入的格式生成一个simpledateformate对象
SimpleDateFormat
sd
=
new
SimpleDateFormat
(
timeFormat
);
long
ns
=
1000
;
// 一秒钟的毫秒数
long
diff
;
long
sec
=
0
;
// 获得两个时间的毫秒时间差异
try
{
diff
=
sd
.
parse
(
endTime
).
getTime
()
-
sd
.
parse
(
startTime
).
getTime
();
sec
=
diff
/
ns
;
// 计算差多少秒
}
catch
(
ParseException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
return
sec
;
}
public
static
Map
getLM
()
{
String
currentDateTime
=
DateUtils
.
getCurrentDateTime
(
dateFormat
);
...
...
@@ -215,6 +234,26 @@ public class DateUtils {
}
}
/**
* 判断时间是否在当前时间十分钟之类
* @param s
* @return
*/
public
static
boolean
compareDataIsBefore10Min
(
String
s
){
try
{
String
res
;
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
Date
date
=
new
Date
();
Date
afterDate
=
new
Date
(
simpleDateFormat
.
parse
(
s
).
getTime
()
+
600000
);
return
date
.
compareTo
(
afterDate
)>
0
?
false
:
true
;
}
catch
(
Exception
e
){
return
false
;
}
}
/**
* 获取当前时间
* 字符串格式
...
...
@@ -321,7 +360,8 @@ public class DateUtils {
return
time
;
}
public
static
String
getBeforeTimeSecond
(
Calendar
beforeTime
,
int
before
){
public
static
String
getBeforeTimeSecond
(
int
before
){
Calendar
beforeTime
=
Calendar
.
getInstance
();
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
beforeTime
.
add
(
Calendar
.
SECOND
,
-
before
);
// 多少秒之前
Date
beforeD
=
beforeTime
.
getTime
();
...
...
@@ -329,7 +369,8 @@ public class DateUtils {
return
time
;
}
public
static
String
getAfterTimeSecond
(
Calendar
afterTime
,
int
before
){
public
static
String
getAfterTimeSecond
(
int
before
){
Calendar
afterTime
=
Calendar
.
getInstance
();
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
afterTime
.
add
(
Calendar
.
SECOND
,
before
);
// 多少秒之后
Date
beforeD
=
afterTime
.
getTime
();
...
...
@@ -1345,6 +1386,40 @@ public class DateUtils {
return
daysStrList
;
}
public
static
boolean
belongCalendar
(
String
dBegin
,
String
dEnd
,
String
dDate
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
timeFormat
);
Date
beginTime
=
null
;
Date
endTime
=
null
;
Date
nowTime
=
null
;
try
{
beginTime
=
sdf
.
parse
(
dBegin
);
endTime
=
sdf
.
parse
(
dEnd
);
nowTime
=
sdf
.
parse
(
dDate
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
if
(
nowTime
.
getTime
()
==
beginTime
.
getTime
()
||
nowTime
.
getTime
()
==
endTime
.
getTime
())
{
return
true
;
}
Calendar
date
=
Calendar
.
getInstance
();
date
.
setTime
(
nowTime
);
Calendar
begin
=
Calendar
.
getInstance
();
begin
.
setTime
(
beginTime
);
Calendar
end
=
Calendar
.
getInstance
();
end
.
setTime
(
endTime
);
if
(
date
.
after
(
begin
)
&&
date
.
before
(
end
))
{
return
true
;
}
else
{
return
false
;
}
}
...
...
realtime/hologram-streaming/src/main/java/com/zhht/irn/window/CycleWindowAssigner.java
View file @
70ffd196
...
...
@@ -18,8 +18,8 @@ import java.util.Collections;
public
class
CycleWindowAssigner
extends
WindowAssigner
<
CoGroupedStreams
.
TaggedUnion
<
Cycle
,
TravelEvent
>,
TimeWindow
>
{
@Override
public
Collection
<
TimeWindow
>
assignWindows
(
CoGroupedStreams
.
TaggedUnion
<
Cycle
,
TravelEvent
>
element
,
long
timestamp
,
WindowAssignerContext
context
)
{
long
start
=
element
.
getOne
().
getBeginDateTime
().
getTime
(
);
long
end
=
element
.
getOne
().
getEndDateTime
().
getTime
(
);
long
start
=
DateUtils
.
dateToStamp
(
element
.
getOne
().
getBeginDateTime
()
);
long
end
=
DateUtils
.
dateToStamp
(
element
.
getOne
().
getEndDateTime
()
);
return
Collections
.
singletonList
(
new
TimeWindow
(
start
,
end
));
}
...
...
realtime/hologram-streaming/src/main/resources/mysql.properties
View file @
70ffd196
driver
=
com.mysql.jdbc.Driver
host
=
127.0.0.1
port
=
1330
5
port
=
1330
6
username
=
root
password
=
mima
database
=
test
\ No newline at end of file
database
=
test
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