echarts官网上面的模板讲的非常详细,但都只是给定的数据出来的效果,而在实际的开发中当然需要获取后台真正的数据,这是一个统计一天中每个小时的在线人数的折线统计图:
(图来自测试阶段数据不是很全,横轴应该是0-24点)
下面上代码:
jsp页面:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/5/17
Time: 15:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ include file="/js/comom.jsp" %>
<html>
<head>
<meta charset="utf-8">
<title>在线人数统计图</title>
<!-- 引入 echarts.js -->
<script type="text/javascript" src="<%=path%>/static/js/echarts.js"></script>
<script type="text/javascript" src="<%=path%>/static/js/datePicker/WdatePicker.js"></script>
<script type="text/javascript" src="<%=path%>/static/js/jquery-1.11.1.js"></script>
<script type="text/javascript">
//文档就绪函数
$(function(){
//发起ajax请求
$("#but").click(function(){
var day = $("#day").val();
$.ajax(
{
url:'<%=path%>/Online.do',
type:'post',
data:{intimeString:day},//{"day":day.val()},
dataType:'json',
success:function(result){
var hour = result.hour;
var hourCount = result.hourCount;
var option = {
title: {
text: '在线人数统计图'
},
tooltip: {
trigger: 'axis'
},
legend: {
data:['在线人数']
},
grid: {
left: '0.3%',
right: '0.2%',
bottom: '0.5%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: hour
},
yAxis: {
type: 'value'
},
series: [
{
name: '在线人数',
type:'line',
stack: '总量',
data:hourCount
},
]
};
myChart.hideLoading();
myChart.setOption(option);
myChart.hideLoading();
},
error:function(){
alert("图表请求数据失败!");
}
}
);
});
});
</script>
</head>
<body>
<% request.setCharacterEncoding("UTF-8");%>
<div align="center">
指定查询日期:
<input readonly="true" name="day" id="day" class="Wdate" type="text" onClick="WdatePicker()">
<input type="button" value="提交" id="but"/>
</div>
<%-- 指定查询日期:<input type="text" name="day" id="day"/>
<label id="dayInfo"></label><p>--%>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 1000px;height:600px;"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
/*var option = {
title: {
text: '在线人数统计图'
},
tooltip: {
trigger: 'axis'
},
legend: {
data:['在线人数']
},
grid: {
left: '0.3%',
right: '0.2%',
bottom: '0.5%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: hour
},
yAxis: {
type: 'value'
},
series: [
{
name: '在线人数',
type:'line',
stack: '总量',
data:hourCount
},
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);*/
</script>
</body>
</html>
controller:
package com.ccdt.bds.controller;
import com.ccdt.bds.service.OnlineService;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @Author:
* @Date:2018/5/18 14:03
*/
@Controller
public class OnlineController {
@Autowired
private OnlineService onlineService;
private Gson gson = new Gson();
@RequestMapping(value="/Online",method = RequestMethod.POST)
@ResponseBody
public String getData(String intimeString, HttpServletResponse response) throws Exception {
// String intimeString = request.getParameter("day");
try{
// ObjectMapper result = new ObjectMapper();
List<Map<String, Integer>> ss = onlineService.selectCount(intimeString);
Map<String,List<Object>> resultMap = new HashMap<>();
List<Object> hourList = new ArrayList<>();
List<Object> countList = new ArrayList<>();
for (int i=0;i < ss.size(); i++){
Map<String, Integer> map = ss.get(i);
String hour = map.get("hour")+":00";
String countStr = map.get("count")+"";
if(countStr.indexOf(".") != -1){
countStr = countStr.substring(0,countStr.indexOf("."));
}
Integer count = Integer.parseInt(countStr);
hourList.add(hour);
countList.add(count);
}
resultMap.put("hour",hourList);
resultMap.put("hourCount",countList);
return gson.toJson(resultMap);
}catch (Exception e){
e.printStackTrace();
return "err";
}
}
@RequestMapping(value="/online")
public String onlineChart(){
return "online";
}
/*public void checkInput(@RequestParam("day") String day, HttpServletResponse response){
String result = "success";
try {
response.getWriter().write(result);
} catch (IOException e) {
e.printStackTrace();
}
}
@RequestMapping(value="Online")
public String Online (){
return "views/online";
}
@RequestMapping(value = "/getData")
@ResponseBody
public String getData(){
int count = 0;
try {
count = onlineService.selectCount();
} catch (Exception e) {
e.printStackTrace();
}
try {
onlineService.getData();
} catch (Exception e) {
e.printStackTrace();
}
return getData();
}
*/
}
service:
package com.ccdt.bds.service.impl;
import com.ccdt.bds.dao.OnlineMapper;
import com.ccdt.bds.service.OnlineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @Author:
* @Date:2018/5/17 13:49
*/
@Service
public class OnlineServiceImpl implements OnlineService {
@Autowired
private OnlineMapper onlineMapper;
@Override
public List<Map<String, Integer>> selectCount(String dayStr) throws ParseException {
String dayStrMin = dayStr+" 00:00:00";
String endDayStr = dayStr + " 23:59:59";
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date day = sd.parse(dayStrMin);
Date dayEnd = sd.parse(endDayStr);
return this.onlineMapper.selectCount(day,dayEnd);
}
/*public Online getData() throws Exception {
List<Online> countList = new ArrayList<Online>();
Online online = new Online();
if (rs != null){
List<String> hour = new ArrayList<>();
List<Integer> hourCount = new ArrayList<>();
while (rs.next()){
hourCount.add(rs.getInt("cnt"));
hour.add(rs.getString("hours")+"ʱ");
// online.setId(rs.getInt("id"));
// online.put("cnt",);
// online.put("hours",rs.getInt("hours"));
}
online.setHour(hour);
online.setHourCount(hourCount);
}
return online;
}
*/
}
package com.ccdt.bds.dao;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @Author:
* @Date:2018/5/18 16:59
*/
@Component("onlineMapper")
public interface OnlineMapper {
List<Map<String, Integer>> selectCount(@Param("day") Date day, @Param("dayEnd") Date dayEnd);
}
mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ccdt.bds.dao.OnlineMapper" >
<resultMap id="BaseResultMap" type="com.ccdt.bds.model.Online" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="time" property="time" jdbcType="TIMESTAMP" />
<result column="count" property="count" jdbcType="VARCHAR" />
<result column="hour" property="hour" jdbcType="VARCHAR" />
<result column="count" property="hourCount" jdbcType="INTEGER" />
<result column="day" property="day" jdbcType="DATE" />
<result column="dayEnd" property="dayEnd" jdbcType="DATE" />
</resultMap>
<select id="selectCount" resultType="java.util.Map" parameterType="java.util.Date">
SELECT HOUR(e.time) as hour,sum(e.count) as count
FROM bds_online_stb e
WHERE
e.time >= #{day,jdbcType=TIMESTAMP} and
e.time <= #{dayEnd,jdbcType=TIMESTAMP}
GROUP BY HOUR(e.time)
ORDER BY Hour(e.time);
</select>
</mapper>