疫情数据显示Demo

Demo 3年前 (2021) admin
0

疫情数据显示Demo

本小Demo使用HttpURLConnection实时的从网站获取最新疫情数据内容,并通过echarts显示在前端,基于SpringBoot + MyBatis Plus + Thymeleaf的疫情数据显示Demo

1. 使用技术

1.1 数据库

调整数据获取时间,可以获取第一次访问的数据:

// 配置定时执行的注解  支持cron表达式
// @Scheduled(cron = "*/10 * * * * ? ")  //每10秒钟更新一下数据
@Scheduled(cron = "0 20 * * * ? ")
public void updateData() {
    System.out.println("更新数据");
    saveData();
}
疫情数据显示Demo

2. 界面内容

2.1 全国疫情地图

疫情数据显示Demo

2.2 境外输入省市TOP10

疫情数据显示Demo

2.3 全国现有确诊趋势

疫情数据显示Demo

2.4 全国疫情新增趋势

疫情数据显示Demo

2.5 全国现有确诊构成

疫情数据显示Demo

2.6 疫情数据统计列表

疫情数据显示Demo

3. 程序实现

3.1 数据处理部分

        /*
          分析json字符串对数据进行筛选和提取
         */
        // 实时获取数据
        String respJson = HttpURLConnectionUtil.doGet(urlStr);

        Gson gson = new Gson();
        Map map = gson.fromJson(respJson, Map.class);

        // 此时增加了一层处理  而且data对应的数据格式是string
        String subStr = (String) map.get("data");
        Map subMap = gson.fromJson(subStr, Map.class);

//        System.out.println(map);

        ArrayList areaList = (ArrayList) subMap.get("areaTree");
        Map dataMap = (Map) areaList.get(0);
        ArrayList childrenList = (ArrayList) dataMap.get("children");

        // 遍历然后转化
        List<DataBean> result = new ArrayList<>();

        for (int i = 0; i < childrenList.size(); i++) {
            Map tmp = (Map) childrenList.get(i);
            String name = (String) tmp.get("name");

            Map totalMap = (Map) tmp.get("total");
            double nowConfirm = (Double) totalMap.get("nowConfirm");
            double confirm = (Double) totalMap.get("confirm");
            double heal = (Double) totalMap.get("heal");
            double dead = (Double) totalMap.get("dead");

            DataBean dataBean = new DataBean(name, (int) nowConfirm, (int) confirm,
                    (int) heal, (int) dead);

            result.add(dataBean);
        }

        return result;
    }

3.2 视图层首页

//首页显示所有相关数据
    @GetMapping("/")
    public String list(Model model) {
        List<DataBean> dataList = dataService.list();
        model.addAttribute("dataList", dataList);

        List<MapBean> result = new ArrayList<>();
        for (int i = 0; i < dataList.size(); i++) {
            DataBean dataBean = dataList.get(i);
            MapBean mapBean = new MapBean(dataBean.getArea(), dataBean.getNowConfirm());
            result.add(mapBean);

        }
        model.addAttribute("mapData", new Gson().toJson(result));

        String str = GraphHandler.getData();
        List<GraphBean> list = GraphHandler.getGraphData(str);
        //  进一步改造数据格式
        //  因为前端需要的数据是  x轴所有数据的数组和y轴所有数据的数组

        ArrayList<String> dateList = new ArrayList<>();
        ArrayList<Integer> nowConfirmList = new ArrayList<>();

        for (int i = 0; i < list.size(); i++) {
            GraphBean graphBean = list.get(i);
            dateList.add(graphBean.getDate());
            nowConfirmList.add(graphBean.getNowConfirm());
        }

        model.addAttribute("dateList", new Gson().toJson(dateList));
        model.addAttribute("nowConfirmList", new Gson().toJson(nowConfirmList));

        List<GraphAddBean> addList = GraphHandler.getGraphAddData(str);

        ArrayList<String> addDateList = new ArrayList<>();
        ArrayList<Integer> addConfirmList = new ArrayList<>();
        ArrayList<Integer> addSuspectList = new ArrayList<>();

        for (int i = 0; i < addList.size(); i++) {
            GraphAddBean graphAddBean = addList.get(i);
            addDateList.add(graphAddBean.getDate());
            addConfirmList.add(graphAddBean.getAddConfirm());
            addSuspectList.add(graphAddBean.getAddSuspect());
        }

        model.addAttribute("addDateList", new Gson().toJson(addDateList));
        model.addAttribute("addConfirmList", new Gson().toJson(addConfirmList));
        model.addAttribute("addSuspectList", new Gson().toJson(addSuspectList));

        List<GraphPieBean> pieList = GraphHandler.getGraphPieData(str);
        Collections.sort(pieList);
        model.addAttribute("pieList", new Gson().toJson(pieList));

        List<GraphColumnarBean> columnarList = GraphHandler.getGraphColumnarData();
        Collections.sort(columnarList);

        ArrayList<String> nameList = new ArrayList<>();
        ArrayList<Integer> fromAbroadList = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            GraphColumnarBean bean = columnarList.get(i);
            nameList.add(bean.getArea());
            fromAbroadList.add(bean.getFromAbroad());
        }

        model.addAttribute("nameList", new Gson().toJson(nameList));
        model.addAttribute("fromAbroadList", new Gson().toJson(fromAbroadList));

        return "list";
    }

4. 总结

一个半成品数据可视化Demo,有项目需要的同学可以拿来参考。

需要源码的同学请到这里下载哦,望点个star

https://github.com/xiaobeibi/JavaDemoProjects/tree/master/vinfo


版权声明:admin 发表于 2021-06-17 16:57:35。
转载请注明:疫情数据显示Demo | 小贝比

暂无评论

暂无评论...