Commit 50e23ca4 by 吴延飞

旅行信息添加字段

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