Commit 50e23ca4 by 吴延飞

旅行信息添加字段

parent b4d12376
...@@ -32,6 +32,9 @@ public class Travel { ...@@ -32,6 +32,9 @@ public class Travel {
// 旅行结束时间 // 旅行结束时间
private String travelEndTime; private String travelEndTime;
// 旅行时长= 旅行结束 - 旅行开始 (毫秒)
private long travelDuration;
// 车辆ID // 车辆ID
private Long carId; private Long carId;
...@@ -421,6 +424,14 @@ public class Travel { ...@@ -421,6 +424,14 @@ public class Travel {
this.maxSpeed = maxSpeed; this.maxSpeed = maxSpeed;
} }
public long getTravelDuration() {
return travelDuration;
}
public void setTravelDuration(long travelDuration) {
this.travelDuration = travelDuration;
}
@Override @Override
public String toString() { public String toString() {
return "Travel{" + return "Travel{" +
...@@ -430,6 +441,7 @@ public class Travel { ...@@ -430,6 +441,7 @@ public class Travel {
", recordTime='" + recordTime + '\'' + ", recordTime='" + recordTime + '\'' +
", travelBeginTime='" + travelBeginTime + '\'' + ", travelBeginTime='" + travelBeginTime + '\'' +
", travelEndTime='" + travelEndTime + '\'' + ", travelEndTime='" + travelEndTime + '\'' +
", travelDuration='" + travelDuration + '\'' +
", carId=" + carId + ", carId=" + carId +
", carColor='" + carColor + '\'' + ", carColor='" + carColor + '\'' +
", plate='" + plate + '\'' + ", plate='" + plate + '\'' +
......
...@@ -46,6 +46,7 @@ public class TravelInfoJob { ...@@ -46,6 +46,7 @@ public class TravelInfoJob {
String travelStart = travel.getTravelBeginTime(); String travelStart = travel.getTravelBeginTime();
String travelEnd = travel.getTravelEndTime(); String travelEnd = travel.getTravelEndTime();
long duration = -1L;
// 如果旅行记录没有完整的开始、结束时刻,则无法计算最高、最低、平均速度 // 如果旅行记录没有完整的开始、结束时刻,则无法计算最高、最低、平均速度
if(isNotEmpty(travelStart) && isNotEmpty(travelEnd)) { if(isNotEmpty(travelStart) && isNotEmpty(travelEnd)) {
...@@ -53,6 +54,7 @@ public class TravelInfoJob { ...@@ -53,6 +54,7 @@ public class TravelInfoJob {
long longTravelStart = Long.parseLong(travelStart); long longTravelStart = Long.parseLong(travelStart);
long longTravelEnd = Long.parseLong(travelEnd); long longTravelEnd = Long.parseLong(travelEnd);
duration = longTravelEnd - longTravelStart;
List<Location> locations = travel.getLocations(); List<Location> locations = travel.getLocations();
for (int i = 0; i < locations.size(); i++) { for (int i = 0; i < locations.size(); i++) {
...@@ -119,6 +121,7 @@ public class TravelInfoJob { ...@@ -119,6 +121,7 @@ public class TravelInfoJob {
} }
travel.setMaxSpeed(maxSpeed); travel.setMaxSpeed(maxSpeed);
travel.setMinSpeed(minSpeed); travel.setMinSpeed(minSpeed);
travel.setTravelDuration(duration);
logger.info("完成旅行信息的指标计算,当前旅行车辆旅行ID{}的实时指标为, 最高速度:{}, 最低速度:{}, 平均速度:{}, 停车次数: {}," + logger.info("完成旅行信息的指标计算,当前旅行车辆旅行ID{}的实时指标为, 最高速度:{}, 最低速度:{}, 平均速度:{}, 停车次数: {}," +
"停车总时长:{}", travel.getRecordId(), maxSpeed, minSpeed, travel.getAvgSpeed(), stopCount, stopTime); "停车总时长:{}", travel.getRecordId(), maxSpeed, minSpeed, travel.getAvgSpeed(), stopCount, stopTime);
......
...@@ -7,8 +7,9 @@ import org.apache.flink.configuration.Configuration; ...@@ -7,8 +7,9 @@ import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction; import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.util.Date;
import static com.zhht.irn.utils.DateUtils.longToString;
import static com.zhht.irn.utils.DateUtils.dateFormat;
/** /**
* 旅行信息指标计算 * 旅行信息指标计算
* *
...@@ -27,8 +28,9 @@ public class TravelMetricSink extends RichSinkFunction<Travel> { ...@@ -27,8 +28,9 @@ public class TravelMetricSink extends RichSinkFunction<Travel> {
String insertSql="" + String insertSql="" +
"insert into app_travel_metric" + "insert into app_travel_metric" +
"(incross_line_id, car_id, cross_id, plate, record_id, capture_time, lost_time, arrived_time, incross_time, " + "(incross_line_id, car_id, cross_id, plate, record_id, capture_time, lost_time, arrived_time, incross_time, " +
"outcross_time, away_time, stop_count, stop_time, avg_speed, min_speed, max_speed, update_time)" + "outcross_time, away_time, stop_count, stop_time, avg_speed, min_speed, max_speed, update_time, travel_begin_time," +
"values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; " travel_end_time, arrived_line_id, outcross_line_id, away_line_id, duration)" +
"values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
insertPstmt = connection.prepareStatement(insertSql); insertPstmt = connection.prepareStatement(insertSql);
} }
@Override @Override
...@@ -44,20 +46,27 @@ public class TravelMetricSink extends RichSinkFunction<Travel> { ...@@ -44,20 +46,27 @@ public class TravelMetricSink extends RichSinkFunction<Travel> {
insertPstmt.setString(1, travel.getInCrossLineId()); insertPstmt.setString(1, travel.getInCrossLineId());
insertPstmt.setLong(2, travel.getCarId()); insertPstmt.setLong(2, travel.getCarId());
insertPstmt.setString(3, travel.getCrossId()); insertPstmt.setString(3, travel.getCrossId());
insertPstmt.setString(4,travel.getPlate()); insertPstmt.setString(4, travel.getPlate());
insertPstmt.setString(5,travel.getRecordId()); insertPstmt.setString(5, travel.getRecordId());
insertPstmt.setString(6, DateUtils.dateToString(new Date(Long.parseLong(travel.getFirstTime())), "yyyy-MM-dd HH:mm:ss")); insertPstmt.setString(6, longToString(travel.getFirstTime(), dateFormat));
insertPstmt.setString(7,DateUtils.dateToString(new Date(Long.parseLong(travel.getLastTime())), "yyyy-MM-dd HH:mm:ss")); insertPstmt.setString(7, longToString(travel.getLastTime(), dateFormat));
insertPstmt.setString(8,DateUtils.dateToString(new Date(Long.parseLong(travel.getArrivedTime())), "yyyy-MM-dd HH:mm:ss")); insertPstmt.setString(8, longToString(travel.getArrivedTime(), dateFormat));
insertPstmt.setString(9,DateUtils.dateToString(new Date(Long.parseLong(travel.getInCrossTime())), "yyyy-MM-dd HH:mm:ss")); insertPstmt.setString(9, longToString(travel.getInCrossTime(), dateFormat));
insertPstmt.setString(10,DateUtils.dateToString(new Date(Long.parseLong(travel.getOutCrossTime())), "yyyy-MM-dd HH:mm:ss")); insertPstmt.setString(10, longToString(travel.getOutCrossTime(), dateFormat));
insertPstmt.setString(11,DateUtils.dateToString(new Date(Long.parseLong(travel.getAwayTime())), "yyyy-MM-dd HH:mm:ss")); insertPstmt.setString(11, longToString(travel.getAwayTime(), dateFormat));
insertPstmt.setInt(12,travel.getStopCount()); insertPstmt.setInt(12, travel.getStopCount());
insertPstmt.setDouble(13,travel.getStopTime()); insertPstmt.setDouble(13, travel.getStopTime());
insertPstmt.setDouble(14,travel.getAvgSpeed()); insertPstmt.setDouble(14, travel.getAvgSpeed());
insertPstmt.setDouble(15,travel.getMinSpeed()); insertPstmt.setDouble(15, travel.getMinSpeed());
insertPstmt.setDouble(16,travel.getMaxSpeed()); insertPstmt.setDouble(16, travel.getMaxSpeed());
insertPstmt.setString(17, DateUtils.getTodayTime()); insertPstmt.setString(17, DateUtils.getTodayTime());
insertPstmt.setString(18, longToString(travel.getTravelBeginTime(), dateFormat));
insertPstmt.setString(19, longToString(travel.getTravelEndTime(), dateFormat));
insertPstmt.setString(20, travel.getArrivedLineId());
insertPstmt.setString(21, travel.getOutCrossLineId());
insertPstmt.setString(22, travel.getAwayLineId());
insertPstmt.setLong(23, travel.getTravelDuration());
insertPstmt.execute(); insertPstmt.execute();
} }
} }
...@@ -985,12 +985,24 @@ public class DateUtils { ...@@ -985,12 +985,24 @@ public class DateUtils {
* @return * @return
*/ */
public static String dateToString(Date date, String dateformat) { public static String dateToString(Date date, String dateformat) {
String datestr = null; String dateStr;
SimpleDateFormat df = new SimpleDateFormat(dateformat); SimpleDateFormat df = new SimpleDateFormat(dateformat);
datestr = df.format(date); dateStr = df.format(date);
return datestr; return dateStr;
} }
public static String longToString(Long timestamp, String dateFormat) {
Date date = new Date(timestamp);
return dateToString(date, dateFormat);
}
public static String longToString(String timestamp, String dateFormat) {
long time = 0L;
try{
time = Long.parseLong(timestamp);
} catch(Exception e) { e.printStackTrace();}
return longToString(time, dateFormat);
}
/** /**
* 将字符串日期转换为日期格式 * 将字符串日期转换为日期格式
* 自定義格式 * 自定義格式
......
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