java 实现查询近七天数据功能

java 实现查询近七天数据功能

接上一篇 如何使用echarts表图地址
实现了页面的表图 那么如何对接数据 如何使用 耐心看完!!!
java 实现查询近七天数据功能_第1张图片这次就以右下角这一个表图做示范
这个表图的下面是按时间排序的 并且是动态的 每次获取从今天到前六天的日期 共七天 上面的数据代表每一天的数据量是多少


在开写之前 先来看实现的思路

1.编写SQL 根据这七天的日期作为条件查询数据库
2.获取JAVA内每次从今天开始到前六天的日期数据
3.将查询出来数据做逻辑处理 之后返回json字符串
4.前端使用ajax对接接口 将获取的数据对接到echarts表图上面
!注意 如果你只是看如何获取近七天的数据只看 1 2 3即可

1.编写SQL 根据这七天的日期作为条件查询数据库
说了实现思路 那么现在看一眼我的表结构是什么样子的
java 实现查询近七天数据功能_第2张图片这里看到一共是7条数据 一共是 3条26号 4条25号 1条23号的数据
那么我们查询出来 按每日查询 有数据的显示几条数量
上SQL

SELECT
 COUNT( * ) AS 'count',
 DATE_FORMAT( start_task_time, '%Y-%m-%d' ) AS date 
FROM
 task 
WHERE
 DATE_FORMAT( start_task_time, '%Y-%m-%d' ) IN ( '2020-10-27', '2020-10-26', '2020-10-25', '2020-10-24', '2020-10-23', '2020-10-22', '2020-10-21' ) 
GROUP BY
 DATE_FORMAT( start_task_time, '%Y-%m-%d' ) 
ORDER BY
 DATE_FORMAT( start_task_time, '%Y-%m-%d' ) DESC;

查询出来的效果图
java 实现查询近七天数据功能_第3张图片
那么现在先来讲解一下sql 我是数据库里面时间是带了时分秒 而查询的条件日期是不带时分秒的 这句话的意思是日期格式转换 转换成年月日 去掉时分秒

DATE_FORMAT( start_task_time, '%Y-%m-%d' )

中间的这个是要查询的字段
java 实现查询近七天数据功能_第4张图片
java 实现查询近七天数据功能_第5张图片现在把SQL拆开来看 先看第一部分
sql的第一部分很好理解 第一个是查询出整表共有几条数据 ,第二个是查询出时间 AS的意思是字段取别名 。
现在查询出来的数据是 整表共8条数据 第一条的数据的时间是2020-10-25日
java 实现查询近七天数据功能_第6张图片现在来看SQL的第二段
where DATE_FORMAT( start_task_time, ‘%Y-%m-%d’ ) 是要查询的条件我们根据日期条件进行查询 由于是一次查询七天的 所以需要使用 IN 一个字段多个条件。
后面的group by 分组 每一个日期条件查询出来的时间 进行分组 并显示共有几条 。
最后一个order by 排序
java 实现查询近七天数据功能_第7张图片

OK! 现在看完了sql 来看最后的查询结果 。现在发现如果哪一天有数据的话是可以查询出来并分组的,如何没有数据是查询不出来的 。但是我们查询出近七天的数据,如果没有值就补全为0。

java 实现查询近七天数据功能_第8张图片

2.获取JAVA内每次从今天开始到前六天的日期数据
补全剩下没有日期的数据,这里就需要我们JAVA逻辑来实现了。
首先刚刚的sql语句条件是自己写的 在java里面我们可不能手写要每次都动态的获取从今天开始到前六日的日期数据共七天。
那么上JAVA代码 获取近七天的日期

 //获取近七天日期
    public static List getSevenDate() {
        List dateList = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        for (int i = 0; i < 7; i++) {
            Date date = DateUtils.addDays(new Date(), -i);
            String formatDate = sdf.format(date);
            dateList.add(formatDate);
        }
        return dateList;
    }

java 实现查询近七天数据功能_第9张图片
3.将查询出来数据做逻辑处理 之后返回json字符串
在java中获取到了最新的近七天的日期 现在将日期和sql结合 在项目中查询出数据来。
现在看接口,先看前两句,第一句是获取近七天数据,我把代码封装到工具类中了,直接调用的,第二句是将生成的日期作为参数,执行查询方法
java 实现查询近七天数据功能_第10张图片
这里看Mapper foreach 当中collection 传的是map就写map 传list就写list 这里咱们查询方法 默认就写list就行,item是集合中每一个元素进行迭代时的别名, 传的参数名叫什么这个就叫什么就可以。 其他的默认不用管

java 实现查询近七天数据功能_第11张图片


写完后我们测试一下看看查询出来的数据是什么样子
java 实现查询近七天数据功能_第12张图片
用postman测试了一下接口和在数据库查询返回的数据是一样的

java 实现查询近七天数据功能_第13张图片
java 实现查询近七天数据功能_第14张图片
那么现在用java将没有的日期和数量进行补全
在开始写之前说一下编写思路
现在知道生成的日期长度是7 而数据库查询出来的数据长度是不一定的 因为只有那个日期有数据的话才能查询出来, 实现思路是 创建一个空的arraylist集合来放我们的封装类,循环创建封装类要创建七个,之后循环拿生成的时间和数据库查询出的时间做比较,如果一致就将查询出来的数据添加进封装类中,如果不一致就设置为0,因为我们要有七天的数据,所以要有七条数据,每一条数据一个封装类,共七个,之后循环的将封装类添加进arraylist集合中。我不知道大家能不能看明白我所表达的意思 ,如果不明白也没关系,去看代码一句一句理解意思。

下面我上代码 我会一句一句解释意思
第三句创建一个arraylist对象 这个就是我们最后要返回的集合 这个不难理解
第四句 for循环 长度是我们生成日期数组长度 也就是七个
第五句 创建封装类 外圈循环七次 一共会创建七个封装类 一个封装类代表一条数据
第六句 创建boolean类型变量 ,用来判断生成的日期和查询出的日期是否一致,默认为false
第七句 创建小循环 目的是每次小循环都去循环查询出来的日期 一个一个的跟生成出的日期比较,如果一致就将查询出的数据添加进封装类中,并且设置boolean类型为true 不让进入设置0的判断,并结束此次小循环,开始第二次大循环。
第八句 将查询出的数据添加进封装类中
第九句 设置boolean类型为true
第十句 结束此次小循环 break
第十一句 每次大循环都要判断 是否进入了循环内部判断 如果进入就不设置0 如果没有进入就设置为0
第十二句 将每次的封装类添加到list集合中 并最后返回

java 实现查询近七天数据功能_第15张图片
java 实现查询近七天数据功能_第16张图片
上面图片有点误差 最后的list要放到外面

@ResponseBody
    @RequestMapping("/sevenDaysCompleteTask")
    public List  sevenDaysCompleteTask(){
        try {
            //获取近七天日期
            List sevenDate = ConFig.getSevenDate();
            //查询近七天完成任务数量方法
            List tasks = healthCommissionService.sevenDaysCompleteTask(sevenDate);
            //创建一个arraylist对象
            List list=new ArrayList<>();
            //外层七天循环  循环七次
           for (int i=0;i

好了 java的逻辑已经完成了 最后看一下返回的数据
java 实现查询近七天数据功能_第17张图片
java 实现查询近七天数据功能_第18张图片现在成功的吧没有数据的日期也添加到集合并且返回了

4.前端使用ajax对接接口 将获取的数据对接到echarts表图上面
OK!! 最后一步 对接echarts图表
打开html 在图表的js里面先创建两个 数组 一个代表时间 一个代表数量 也就是图表当中的这两部分
java 实现查询近七天数据功能_第19张图片
java 实现查询近七天数据功能_第20张图片
使用ajax 对接接口 用each循环将返回的json数据添加进两个数组中

java 实现查询近七天数据功能_第21张图片
将数据添加进去后 把数组放入echarts图表中

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201027160203476.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NjY0MzI5,size_16,color_FFFFFF,t_70#pic_center

java 实现查询近七天数据功能_第22张图片
这里就结束了 看成品效果
java 实现查询近七天数据功能_第23张图片

最后放js代码 比较长



你可能感兴趣的:(html,springboot,java,javascript,html,后端,数据可视化)