Commit 70ffd196 by 黄准

车道指标相关计算逻辑

parent 6bb3ebdf
...@@ -69,6 +69,16 @@ ...@@ -69,6 +69,16 @@
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.20</version> <version>1.18.20</version>
</dependency> </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> </dependencies>
</project> </project>
...@@ -16,9 +16,9 @@ public class Cycle { ...@@ -16,9 +16,9 @@ public class Cycle {
//信控机编号 //信控机编号
private String signalCode; private String signalCode;
// 周期开始时间 // 周期开始时间
private Date beginDateTime; private String beginDateTime;
// 周期结束时间 // 周期结束时间
private Date endDateTime; private String endDateTime;
// 开始模式编码 // 开始模式编码
private String beginControlModelCode; private String beginControlModelCode;
// 结束模式编码 // 结束模式编码
...@@ -30,7 +30,7 @@ public class Cycle { ...@@ -30,7 +30,7 @@ public class Cycle {
// 周期时长,单位 秒 // 周期时长,单位 秒
private int duration; private int duration;
// 周期序号 // 周期序号
private int cycleOrder; private Long cycleOrder;
//绿信比 //绿信比
private Double greenRatio; private Double greenRatio;
//损失时间 //损失时间
...@@ -54,19 +54,19 @@ public class Cycle { ...@@ -54,19 +54,19 @@ public class Cycle {
this.crossCode = crossCode; this.crossCode = crossCode;
} }
public Date getBeginDateTime() { public String getBeginDateTime() {
return beginDateTime; return beginDateTime;
} }
public void setBeginDateTime(Date beginDateTime) { public void setBeginDateTime(String beginDateTime) {
this.beginDateTime = beginDateTime; this.beginDateTime = beginDateTime;
} }
public Date getEndDateTime() { public String getEndDateTime() {
return endDateTime; return endDateTime;
} }
public void setEndDateTime(Date endDateTime) { public void setEndDateTime(String endDateTime) {
this.endDateTime = endDateTime; this.endDateTime = endDateTime;
} }
...@@ -78,11 +78,11 @@ public class Cycle { ...@@ -78,11 +78,11 @@ public class Cycle {
this.duration = duration; this.duration = duration;
} }
public int getCycleOrder() { public Long getCycleOrder() {
return cycleOrder; return cycleOrder;
} }
public void setCycleOrder(int cycleOrder) { public void setCycleOrder(Long cycleOrder) {
this.cycleOrder = cycleOrder; this.cycleOrder = cycleOrder;
} }
......
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{
}
...@@ -11,22 +11,28 @@ public class LaneNorm extends Stage{ ...@@ -11,22 +11,28 @@ public class LaneNorm extends Stage{
private String corssId; private String corssId;
//车道编号 //车道编号
private String laneId; private String laneId;
//车道名称
private String laneName;
//车道可视长度
private Integer laneLength;
//相位编号 //相位编号
private String phaseId; private String phaseId;
//方向 //方向
private String direction; private String direction;
//交通流量 //交通流量
private String trafficCapacity; private Double trafficCapacity;
//最大排队长度 //最大排队长度
private String maxQueueLength; private Integer maxQueueLength;
//有效绿灯时间 //有效绿灯时间
private String effectGreenTime; 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 String spotSpaceShare;
//层级
private Integer order;
} }
package com.zhht.irn.entity; package com.zhht.irn.entity;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 相位实体类 * 相位实体类
...@@ -14,9 +15,9 @@ public class Stage { ...@@ -14,9 +15,9 @@ public class Stage {
// 相位编号 // 相位编号
private String phaseValue; private String phaseValue;
// 相位开始时间 // 相位开始时间
private Date beginDateTime; private String beginDateTime;
// 相位结束时间 // 相位结束时间
private Date endDateTime; private String endDateTime;
// 开始模式编码 // 开始模式编码
private String beginControlModelCode; private String beginControlModelCode;
// 结束模式编码 // 结束模式编码
...@@ -39,9 +40,19 @@ public class Stage { ...@@ -39,9 +40,19 @@ public class Stage {
private Double greenRatio; private Double greenRatio;
// 阶段有效绿灯时长 // 阶段有效绿灯时长
private int validGreen; private int validGreen;
//损失时间 //损失时间
private int lossTime; 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() { public String getPhaseValue() {
return phaseValue; return phaseValue;
...@@ -131,19 +142,19 @@ public class Stage { ...@@ -131,19 +142,19 @@ public class Stage {
this.lossTime = lossTime; this.lossTime = lossTime;
} }
public Date getBeginDateTime() { public String getBeginDateTime() {
return beginDateTime; return beginDateTime;
} }
public void setBeginDateTime(Date beginDateTime) { public void setBeginDateTime(String beginDateTime) {
this.beginDateTime = beginDateTime; this.beginDateTime = beginDateTime;
} }
public Date getEndDateTime() { public String getEndDateTime() {
return endDateTime; return endDateTime;
} }
public void setEndDateTime(Date endDateTime) { public void setEndDateTime(String endDateTime) {
this.endDateTime = endDateTime; this.endDateTime = endDateTime;
} }
......
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;
}
...@@ -23,16 +23,16 @@ public class TravelEvent { ...@@ -23,16 +23,16 @@ public class TravelEvent {
private String recordId; private String recordId;
// 记录时间 // 记录时间
private Date recordTime; private String recordTime;
// 事件发生时车道ID // 事件发生时车道ID
private Long eventLineId; private String eventLineId;
// 事件发生时速度 // 事件发生时速度
private Double eventSpeed; private Double eventSpeed;
// 事件时间 // 事件时间
private Date eventTime; private String eventTime;
// 事件类型 // 事件类型
private EventType eventType; private EventType eventType;
...@@ -40,6 +40,26 @@ public class TravelEvent { ...@@ -40,6 +40,26 @@ public class TravelEvent {
// 备注 // 备注
private String remark; 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() { public Integer getId() {
return id; return id;
} }
...@@ -64,19 +84,11 @@ public class TravelEvent { ...@@ -64,19 +84,11 @@ public class TravelEvent {
this.recordId = recordId; this.recordId = recordId;
} }
public Date getRecordTime() { public String getEventLineId() {
return recordTime;
}
public void setRecordTime(Date recordTime) {
this.recordTime = recordTime;
}
public Long getEventLineId() {
return eventLineId; return eventLineId;
} }
public void setEventLineId(Long eventLineId) { public void setEventLineId(String eventLineId) {
this.eventLineId = eventLineId; this.eventLineId = eventLineId;
} }
...@@ -88,11 +100,19 @@ public class TravelEvent { ...@@ -88,11 +100,19 @@ public class TravelEvent {
this.eventSpeed = eventSpeed; this.eventSpeed = eventSpeed;
} }
public Date getEventTime() { public String getRecordTime() {
return recordTime;
}
public void setRecordTime(String recordTime) {
this.recordTime = recordTime;
}
public String getEventTime() {
return eventTime; return eventTime;
} }
public void setEventTime(Date eventTime) { public void setEventTime(String eventTime) {
this.eventTime = eventTime; this.eventTime = eventTime;
} }
......
...@@ -49,11 +49,11 @@ public class LaneMetricJob { ...@@ -49,11 +49,11 @@ public class LaneMetricJob {
// 旅行事件数据流的 watermark 生成逻辑 // 旅行事件数据流的 watermark 生成逻辑
WatermarkStrategy<TravelEvent> travelEventWatermarkStrategy = WatermarkStrategy.<TravelEvent>forBoundedOutOfOrderness(Duration.ofSeconds(30)) WatermarkStrategy<TravelEvent> travelEventWatermarkStrategy = WatermarkStrategy.<TravelEvent>forBoundedOutOfOrderness(Duration.ofSeconds(30))
.withTimestampAssigner((travelEvent, timestamp) -> travelEvent.getEventTime().getTime()); .withTimestampAssigner((travelEvent, timestamp) -> DateUtils.dateToStamp(travelEvent.getEventTime()));
// 周期结束数据流的 cycle 生成逻辑 // 周期结束数据流的 cycle 生成逻辑
WatermarkStrategy<Cycle> cycleWatermarkStrategy = WatermarkStrategy.<Cycle>forBoundedOutOfOrderness(Duration.ofSeconds(10)) 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) // DataStream<TravelEvent> eventStream = FlinkUtils.createKafkaStream(args, env)
...@@ -75,7 +75,6 @@ public class LaneMetricJob { ...@@ -75,7 +75,6 @@ public class LaneMetricJob {
.map((record) -> { .map((record) -> {
System.out.println(record); System.out.println(record);
Cycle cycle = JSON.parseObject(record, Cycle.class); Cycle cycle = JSON.parseObject(record, Cycle.class);
System.out.println(cycle);
return cycle; return cycle;
}) })
// 给数据流添加水印 // 给数据流添加水印
......
...@@ -52,10 +52,10 @@ public class GreenRadioSink extends RichSinkFunction<Cycle> { ...@@ -52,10 +52,10 @@ public class GreenRadioSink extends RichSinkFunction<Cycle> {
insertCyclePstmt.setLong(1, cycle.getId()); insertCyclePstmt.setLong(1, cycle.getId());
insertCyclePstmt.setString(2, cycle.getCrossCode()); insertCyclePstmt.setString(2, cycle.getCrossCode());
insertCyclePstmt.setString(3, cycle.getSignalCode()); insertCyclePstmt.setString(3, cycle.getSignalCode());
insertCyclePstmt.setString(4, DateUtils.dateToString(cycle.getBeginDateTime(), "yyyy-MM-DD HH:mm:ss")); insertCyclePstmt.setString(4, cycle.getBeginDateTime());
insertCyclePstmt.setString(5, DateUtils.dateToString(cycle.getEndDateTime(), "yyyy-MM-DD HH:mm:ss")); insertCyclePstmt.setString(5, cycle.getEndDateTime());
insertCyclePstmt.setInt(6,cycle.getDuration()); insertCyclePstmt.setInt(6,cycle.getDuration());
insertCyclePstmt.setInt(7,cycle.getCycleOrder()); insertCyclePstmt.setLong(7,cycle.getCycleOrder());
insertCyclePstmt.setDouble(8,cycle.getGreenRatio()); insertCyclePstmt.setDouble(8,cycle.getGreenRatio());
insertCyclePstmt.setInt(9,cycle.getLossTime()); insertCyclePstmt.setInt(9,cycle.getLossTime());
insertCyclePstmt.setString(10, DateUtils.getTodayTime()); insertCyclePstmt.setString(10, DateUtils.getTodayTime());
...@@ -66,8 +66,8 @@ public class GreenRadioSink extends RichSinkFunction<Cycle> { ...@@ -66,8 +66,8 @@ public class GreenRadioSink extends RichSinkFunction<Cycle> {
insertPhasePstmt.setLong(1,cycle.getCycleOrder()); insertPhasePstmt.setLong(1,cycle.getCycleOrder());
insertPhasePstmt.setString(2,phase.getCrossCode()); insertPhasePstmt.setString(2,phase.getCrossCode());
insertPhasePstmt.setString(3,phase.getPhaseValue()); insertPhasePstmt.setString(3,phase.getPhaseValue());
insertCyclePstmt.setString(4, DateUtils.dateToString(cycle.getBeginDateTime(), "yyyy-MM-DD HH:mm:ss")); insertCyclePstmt.setString(4, cycle.getBeginDateTime());
insertCyclePstmt.setString(5, DateUtils.dateToString(cycle.getEndDateTime(), "yyyy-MM-DD HH:mm:ss")); insertCyclePstmt.setString(5, cycle.getEndDateTime());
insertPhasePstmt.setInt(6,cycle.getDuration()); insertPhasePstmt.setInt(6,cycle.getDuration());
insertPhasePstmt.setInt(7,phase.getPhaseOrder()); insertPhasePstmt.setInt(7,phase.getPhaseOrder());
insertPhasePstmt.setDouble(8,phase.getGreenRatio()); insertPhasePstmt.setDouble(8,phase.getGreenRatio());
......
package com.zhht.irn.sink; package com.zhht.irn.sink;
import com.zhht.irn.entity.LaneNorm; import com.zhht.irn.entity.LaneNorm;
import com.zhht.irn.utils.DateUtils;
import com.zhht.irn.utils.MySQLUtils; import com.zhht.irn.utils.MySQLUtils;
import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.configuration.Configuration; import org.apache.flink.configuration.Configuration;
...@@ -30,15 +31,15 @@ public class LaneNormSink extends RichSinkFunction<LaneNorm> { ...@@ -30,15 +31,15 @@ public class LaneNormSink extends RichSinkFunction<LaneNorm> {
// path暂定为固定值 // path暂定为固定值
String path = "E:\\zhht\\ZHHT-IRN-BD-ANALYSIS\\realtime\\hologram-streaming\\src\\main\\resources\\mysql.properties"; String path = "E:\\zhht\\ZHHT-IRN-BD-ANALYSIS\\realtime\\hologram-streaming\\src\\main\\resources\\mysql.properties";
connection = MySQLUtils.getConnection(path); connection = MySQLUtils.getConnection(path);
insertPstmt = connection.prepareStatement("insert into wyf_test(cross_code,lxb) values (?,?)"); insertPstmt = connection.prepareStatement("insert into " +
updatePstmt = connection.prepareStatement("update wyf_test set lxb=? where cross_code=?"); "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 @Override
public void close() throws Exception { public void close() throws Exception {
super.close(); super.close();
if(insertPstmt != null) insertPstmt.close(); if(insertPstmt != null) insertPstmt.close();
if(updatePstmt != null) updatePstmt.close();
if(connection != null) connection.close(); if(connection != null) connection.close();
} }
...@@ -49,6 +50,20 @@ public class LaneNormSink extends RichSinkFunction<LaneNorm> { ...@@ -49,6 +50,20 @@ public class LaneNormSink extends RichSinkFunction<LaneNorm> {
*/ */
@Override @Override
public void invoke(LaneNorm value, SinkFunction.Context context) throws Exception { 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();
} }
} }
...@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON; ...@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON;
import com.zhht.irn.entity.Car; import com.zhht.irn.entity.Car;
import com.zhht.irn.entity.Cycle; import com.zhht.irn.entity.Cycle;
import com.zhht.irn.entity.Stage; 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 com.zhht.irn.utils.DateUtils;
import org.apache.flink.streaming.api.functions.source.SourceFunction; import org.apache.flink.streaming.api.functions.source.SourceFunction;
...@@ -17,54 +19,52 @@ import java.util.*; ...@@ -17,54 +19,52 @@ import java.util.*;
* @retrun: * @retrun:
* @Creat :2022-11-01-14:40 * @Creat :2022-11-01-14:40
**/ **/
public class CarSource implements SourceFunction<Car> { public class CarSource implements SourceFunction<TravelEvent> {
private static boolean isRunning = true; private static boolean isRunning = true;
public static String[] lanePosition= new String[]{"南左转","南直行","南右转","北左转","北直行","北右转","东左转","东直行","东右转","西左转","西直行","西右转"}; 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","09","10","11","12"};
public static String[] status= new String[]{"arrived","inCross","outCross","away"}; public static String[] status= new String[]{"arrived","inCross","outCross","away"};
@Override @Override
public void run(SourceContext<Car> sourceContext) throws Exception { public void run(SourceContext<TravelEvent> sourceContext) throws Exception {
while (isRunning){ while (isRunning){
Calendar beforeTime = Calendar.getInstance();
Date date = new Date(); Date date = new Date();
List<Car> cars = getCar(beforeTime, date); List<TravelEvent> cars = getCar(date);
for (Car car:cars){ for (TravelEvent car:cars){
sourceContext.collect(car); sourceContext.collect(car);
} }
//每个3秒发送一条数据 //每个3秒发送一条数据
Thread.sleep(10); Thread.sleep(2000);
} }
} }
public static List<Car> getCar(Calendar beforeTime,Date date){ public static List<TravelEvent> getCar(Date date){
Calendar aftertime = Calendar.getInstance(); Calendar aftertime = Calendar.getInstance();
Date date1 = new Date(); Date date1 = new Date();
//模拟到达事件 //模拟到达事件
List<Car> cars = new ArrayList<>(); List<TravelEvent> cars = new ArrayList<>();
String uuid = UUID.randomUUID()+""; String uuid = UUID.randomUUID()+"";
String carId = UUID.randomUUID()+"";
String inLaneId = inlane[new Random().nextInt(12)]; String inLaneId = inlane[new Random().nextInt(12)];
Car arraycar = new Car(); TravelEvent arraycar = new TravelEvent();
arraycar.setRecordId(uuid); arraycar.setRecordId(uuid);
arraycar.setCrossId("13070201"); arraycar.setCrossId("13070202");
arraycar.setEvenTime(DateUtils.formatTime(date1)); arraycar.setEventTime(DateUtils.formatTime(date1));
arraycar.setEventLineId(inLaneId); arraycar.setEventLineId(inLaneId);
arraycar.setEventSpeed(new Random().nextInt(60)+""); arraycar.setEventSpeed(55.5);
arraycar.setEventType("arrived"); arraycar.setEventType(EventType.ARRIVED);
arraycar.setId(carId); arraycar.setId(0);
cars.add(arraycar); cars.add(arraycar);
//模拟进入路口事件 //模拟进入路口事件
String afterTimeSecond = DateUtils.getAfterTimeSecond(aftertime, new Random().nextInt(180)); String afterTimeSecond = DateUtils.getAfterTimeSecond(new Random().nextInt(140));
Car incrosscar = new Car(); TravelEvent incrosscar = new TravelEvent();
incrosscar.setCrossId("13070201"); incrosscar.setCrossId("13070202");
incrosscar.setEvenTime(afterTimeSecond); incrosscar.setEventTime(afterTimeSecond);
incrosscar.setEventLineId(inLaneId); incrosscar.setEventLineId(inLaneId);
incrosscar.setRecordId(uuid); incrosscar.setRecordId(uuid);
incrosscar.setId(carId); incrosscar.setId(0);
incrosscar.setEventSpeed(new Random().nextInt(60)+""); incrosscar.setEventSpeed(55.2);
incrosscar.setEventType("inCross"); incrosscar.setEventType(EventType.INCROSS);
cars.add(incrosscar); cars.add(incrosscar);
return cars; return cars;
} }
......
//package com.zhht.irn.source; package com.zhht.irn.source;
//
//import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
//import com.zhht.irn.entity.Cycle; import com.zhht.irn.entity.Cycle;
//import com.zhht.irn.entity.Stage; import com.zhht.irn.entity.Stage;
//import com.zhht.irn.utils.DateUtils; import com.zhht.irn.utils.DateUtils;
//import org.apache.flink.streaming.api.functions.source.SourceFunction; import org.apache.flink.streaming.api.functions.source.SourceFunction;
//import org.apache.flink.util.TimeUtils; import org.apache.flink.util.TimeUtils;
//
//import java.sql.Timestamp; import java.sql.Timestamp;
//import java.util.*; import java.util.*;
//
///** /**
// * @Description: * @Description:
// * @Author :Marinh * @Author :Marinh
// * @Param: * @Param:
// * @retrun: * @retrun:
// * @Creat :2022-11-01-14:40 * @Creat :2022-11-01-14:40
// **/ **/
//public class CirlceSource implements SourceFunction<Cycle> { public class CirlceSource implements SourceFunction<Cycle> {
// private static boolean isRunning = true; private static boolean isRunning = true;
// private static int i = 0; private static Long cycleOrder = 0L;
//
// @Override @Override
// public void run(SourceFunction.SourceContext<Cycle> sourceContext) throws Exception { public void run(SourceFunction.SourceContext<Cycle> sourceContext) throws Exception {
// while (isRunning){ while (isRunning){
// Calendar beforeTime = Calendar.getInstance(); //每个3秒发送一条数据
// Date date = new Date(); Thread.sleep(120000);
// sourceContext.collect(getCycle(beforeTime,date)); Calendar beforeTime = Calendar.getInstance();
// //每个3秒发送一条数据 Date date = new Date();
// Thread.sleep(60000); sourceContext.collect(getCycle(beforeTime,date));
// } cycleOrder++;
// } }
// }
// public static Cycle getCycle(Calendar beforeTime,Date date){
// Cycle cycle = new Cycle(); public static Cycle getCycle(Calendar beforeTime,Date date){
// cycle.setId(new Timestamp(System.currentTimeMillis()).getTime()); Cycle cycle = new Cycle();
// cycle.setCrossCode("13070201"); cycle.setId(new Timestamp(System.currentTimeMillis()).getTime());
// cycle.setBeginDateTime(DateUtils.getBeforeTime(beforeTime,2));//2分钟一个周期 cycle.setCrossCode("13070202");
// cycle.setEndDateTime(DateUtils.formatTime(date)); cycle.setBeginDateTime(DateUtils.getBeforeTime(beforeTime,2));//2分钟一个周期
// cycle.setDuration(120); cycle.setEndDateTime(DateUtils.formatTime(date));
// cycle.setCycleOrder(1); cycle.setDuration(120);
// ArrayList<Stage> phases = new ArrayList<>(); cycle.setCycleOrder(cycleOrder);
// for(int i=0;i<3;i++){ ArrayList<Stage> phases = new ArrayList<>();
// Stage phase = new Stage(); for(int i=0;i<4;i++){
// phase.setPhaseValue("10"+i); Stage phase = new Stage();
// if(i==0){ phase.setPhaseValue("10"+i);
// phase.setPhaseValue("1"); if(i==0){//南北直行
// phase.setBeginTime(DateUtils.getBeforeTimeSecond(beforeTime,120)); phase.setPhaseValue("8");
// phase.setEndTime(DateUtils.getBeforeTimeSecond(beforeTime,90)); phase.setBeginDateTime(DateUtils.getBeforeTimeSecond(120));
// phase.setDuration(30); phase.setEndDateTime(DateUtils.getBeforeTimeSecond(90));
// phase.setGreen(30); phase.setDuration(30);
// phase.setAllRed(87); phase.setGreen(30);
// phase.setGreen(3); phase.setAllRed(87);
// } phase.setYellow(3);
// if(i==1){ phase.setCycleOrder(cycleOrder);
// phase.setPhaseValue("2"); }
// phase.setBeginTime(DateUtils.getBeforeTimeSecond(beforeTime,90)); if(i==1){//南北左转
// phase.setEndTime(DateUtils.getBeforeTimeSecond(beforeTime,60)); phase.setPhaseValue("0");
// phase.setDuration(30); phase.setBeginDateTime(DateUtils.getBeforeTimeSecond(90));
// phase.setGreen(30); phase.setEndDateTime(DateUtils.getBeforeTimeSecond(60));
// phase.setAllRed(87); phase.setDuration(30);
// phase.setGreen(3); phase.setGreen(30);
// } phase.setAllRed(87);
// if(i==2){ phase.setYellow(3);
// phase.setPhaseValue("3"); phase.setCycleOrder(cycleOrder);
// phase.setBeginTime(DateUtils.getBeforeTimeSecond(beforeTime,60)); }
// phase.setEndTime(DateUtils.getBeforeTimeSecond(beforeTime,0)); if(i==2){//东西直行
// phase.setDuration(60); phase.setPhaseValue("9");
// phase.setGreen(60); phase.setBeginDateTime(DateUtils.getBeforeTimeSecond(60));
// phase.setAllRed(57); phase.setEndDateTime(DateUtils.getBeforeTimeSecond(0));
// phase.setGreen(3); phase.setDuration(60);
// } phase.setGreen(60);
// phases.add(phase); phase.setAllRed(57);
// } phase.setYellow(3);
// cycle.setStageList(phases); phase.setCycleOrder(cycleOrder);
// return cycle; }
// } if(i==3){//东西左转
// phase.setPhaseValue("4");
// @Override phase.setBeginDateTime(DateUtils.getBeforeTimeSecond(60));
// public void cancel() { phase.setEndDateTime(DateUtils.getBeforeTimeSecond(0));
// isRunning=false; 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;
}
}
...@@ -39,6 +39,25 @@ public class DateUtils { ...@@ -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() { public static Map getLM() {
String currentDateTime = DateUtils.getCurrentDateTime(dateFormat); String currentDateTime = DateUtils.getCurrentDateTime(dateFormat);
...@@ -215,6 +234,26 @@ public class DateUtils { ...@@ -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 { ...@@ -321,7 +360,8 @@ public class DateUtils {
return time; 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"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
beforeTime.add(Calendar.SECOND, -before);// 多少秒之前 beforeTime.add(Calendar.SECOND, -before);// 多少秒之前
Date beforeD = beforeTime.getTime(); Date beforeD = beforeTime.getTime();
...@@ -329,7 +369,8 @@ public class DateUtils { ...@@ -329,7 +369,8 @@ public class DateUtils {
return time; 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"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
afterTime.add(Calendar.SECOND, before);// 多少秒之后 afterTime.add(Calendar.SECOND, before);// 多少秒之后
Date beforeD = afterTime.getTime(); Date beforeD = afterTime.getTime();
...@@ -1345,6 +1386,40 @@ public class DateUtils { ...@@ -1345,6 +1386,40 @@ public class DateUtils {
return daysStrList; 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;
}
}
......
...@@ -18,8 +18,8 @@ import java.util.Collections; ...@@ -18,8 +18,8 @@ import java.util.Collections;
public class CycleWindowAssigner extends WindowAssigner<CoGroupedStreams.TaggedUnion<Cycle, TravelEvent>, TimeWindow> { public class CycleWindowAssigner extends WindowAssigner<CoGroupedStreams.TaggedUnion<Cycle, TravelEvent>, TimeWindow> {
@Override @Override
public Collection<TimeWindow> assignWindows(CoGroupedStreams.TaggedUnion<Cycle, TravelEvent> element, long timestamp, WindowAssignerContext context) { public Collection<TimeWindow> assignWindows(CoGroupedStreams.TaggedUnion<Cycle, TravelEvent> element, long timestamp, WindowAssignerContext context) {
long start = element.getOne().getBeginDateTime().getTime(); long start = DateUtils.dateToStamp(element.getOne().getBeginDateTime());
long end = element.getOne().getEndDateTime().getTime(); long end = DateUtils.dateToStamp(element.getOne().getEndDateTime());
return Collections.singletonList(new TimeWindow(start, end)); return Collections.singletonList(new TimeWindow(start, end));
} }
......
driver=com.mysql.jdbc.Driver driver=com.mysql.jdbc.Driver
host=127.0.0.1 host=127.0.0.1
port=13305 port=13306
username=root username=root
password=mima password=mima
database=test database=test
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment