java 实现5分钟粒度的折线图还没数据??键盘给你,你来。
Posted NewWorldForU
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 实现5分钟粒度的折线图还没数据??键盘给你,你来。相关的知识,希望对你有一定的参考价值。
需求
老规矩先说需求:(本次偏业务)
监测某数据A、B,展现当前时间前24小时之内的折线图,5分钟粒度。
对于需求的思考
首先是数据长什么样。
存储的数据是1分钟粒度存的。
但并不是每分钟都有,所以如果直接用sql查出来5分钟粒度的会有时间段没有数据,导致时间不连贯。
实现
在网上找了很多资料,并且询问了大佬之后,有了思路。
第一步:初始化横坐标数据
第二步:将真实数据求出来
第三步:将真实数据中的数据替换初始化的数据
初始化横坐标:
static List<String> initializeList(Date date) {
Date start = dayStartDate(date);//转换为天的起始date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
List<String> result = new ArrayList<String>();
while (start.compareTo(date) < 0) {
String format = sdf.format(start);
result.add(format);
//日期加5分钟
start = addFiveMin(start, 5);
}
return result;
}
private static Date addFiveMin(Date start, int offset) {
Calendar c = Calendar.getInstance();
c.setTime(start);
c.add(Calendar.MINUTE, offset);
return c.getTime();
}
private static Date dayStartDate(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -1);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
int minute = c.get(Calendar.MINUTE);
while (minute % 5 != 0) {
minute++;
}
c.set(Calendar.MINUTE, minute);
return c.getTime();
}
}
查询真实数据
SELECT
max( device_uid ) deviceUid,
sum( traffic_flow ) trafficFlow,
avg( video_quality ) videoQuality,
sum( event_count ) eventCount,
max( analysis_state ) analysisState,
DATE_FORMAT( dataStartTime, '%Y-%m-%d %H:%i' ) countTime
FROM
(
SELECT
device_uid,
traffic_flow,
video_quality,
count_time,
event_count,
analysis_state,
DATE_FORMAT(
concat(
date( count_time ),
' ',
HOUR ( count_time ),
':',
floor( MINUTE ( count_time )/ 5 )* 5 ), '%Y-%m-%d %H:%i' ) AS dataStartTime
FROM converge_analysis WHERE device_id = "123123"
AND count_time > DATE_SUB( NOW(), INTERVAL + 1 DAY ) ) a
GROUP BY
DATE_FORMAT( dataStartTime, '%Y-%m-%d %H:%i' )
ORDER BY
countTime
替换数据
效果
花絮
当然其中不是一帆风顺的,有一个BUG,导致整个折线图蹦迪。
百思不得其解,最后发现是横坐标搞的鬼,初始化横坐标是以当前时间前5分钟为纬度的时间轴,而查出来的数据是以5的倍数的时间轴。
———— What is worth doing is worth doing well.
以上是关于java 实现5分钟粒度的折线图还没数据??键盘给你,你来。的主要内容,如果未能解决你的问题,请参考以下文章