柱狀圖,折線圖 展示補零問題

        最近在寫一些數據展示的需求,表現形式有柱狀圖 折線圖 餅狀圖等等之類,其中 柱狀圖拿到的數據 如果由於其中某一天沒有相關數據,那麼這一天的數據在柱狀圖中的表現形式就是空的,會被直接跳過,表現形式很不好。這時候 就需要根據傳入的時間 依次比較拿到的時間,如果某一天的時間和查到的時間不匹配就表示這一天的數據在結果集中是沒有結果的,這個時候就需要將這一天的日期加上 並且將這一天的數據結果補爲0。

       具體步驟我是這樣做的,覺得很有意思 特意記錄下來,同時防止下次可能會有用到的時候。

       第一步 將查到的數據拿到,這個自己查 我不多說。

       第二步 將傳入的時間按照日期 依次遍歷拿到每一天的日期集合。我用的是一個工具類:

       

public List<String> findDaysStr(String beginDate, String stopDate) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date dBegin = null;
        Date dEnd = null;
        try {
            dBegin = sdf.parse(beginDate);
            dEnd = sdf.parse(stopDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //存放每一天日期String對象的daysStrList
        List<String> daysStrList = new ArrayList<String>();
        //放入開始的那一天日期String
        daysStrList.add(sdf.format(dBegin));

        Calendar calBegin = Calendar.getInstance();
        // 使用給定的 Date 設置此 Calendar 的時間
        calBegin.setTime(dBegin);

        Calendar calEnd = Calendar.getInstance();
        // 使用給定的 Date 設置此 Calendar 的時間
        calEnd.setTime(dEnd);

        // 判斷循環此日期是否在指定日期之後
        while (dEnd.after(calBegin.getTime())) {
            // 根據日曆的規則,給定的日曆字段增加或減去指定的時間量
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
            String dayStr = sdf.format(calBegin.getTime());
            daysStrList.add(dayStr);
        }

        return daysStrList;
    }

       然後,將這個日期集合和查詢到的數據的日期集合進行遍歷比較,日期一致的表示有值,日期不一致的表示該日期內沒有數據,這時候就需要將日期加上 將數據值設置爲0,我的代碼塊而下,大家可以參考下

//查詢到的原來的值
                biSceneBasicDtoList = biSceneBasicMapper.selectDataTrend(biSceneBasicVo);

                //因爲日期都是從數據庫直接拿出來的 所以要是數據庫沒有某一天的數據 這個數據返回的就是 null 這不合理,將爲null的每一天的數據置爲 0.00
                if(biSceneBasicDtoList.size() > 0) {
                    //遍歷傳入的日期 和拿到數據的日期依次比較;有值就是用原值 無值就直接補0就好
                    for (int i = 0; i < daysStrList.size(); i++) {
                        BiSceneBasicDto biSceneBasicDto = new BiSceneBasicDto();
                        biSceneBasicDto.setSceneValue(biSceneBasicVo.getSceneValueList().get(j));
                        biSceneBasicDto.setGmv("0.00");
                        biSceneBasicDto.setUvAll("0");
                        biSceneBasicDto.setAllCreateOrderCnt("0");
                        if(biSceneBasicDtoList.size() != i){
                            if (!(biSceneBasicDtoList.get(i).getCreateTime().equals(daysStrList.get(i))) ) {
                                biSceneBasicDto.setCreateTime(daysStrList.get(i));
                                biSceneBasicDtoList.add(i, biSceneBasicDto);
                            }
                        } else {
                            biSceneBasicDto.setCreateTime(daysStrList.get(i));
                            biSceneBasicDtoList.add(i, biSceneBasicDto);
                        }
                    }
                }else {   //如果查詢的日期內的對象整個爲null,說明該日期內數據都是0,直接補0就好
                    for (int i = 0; i < daysStrList.size(); i++) {
                        BiSceneBasicDto biSceneBasicDto = new BiSceneBasicDto();
                        biSceneBasicDto.setSceneValue(biSceneBasicVo.getSceneValueList().get(j));
                        biSceneBasicDto.setGmv("0.00");
                        biSceneBasicDto.setUvAll("0");
                        biSceneBasicDto.setAllCreateOrderCnt("0");
                        biSceneBasicDto.setCreateTime(daysStrList.get(i));
                        biSceneBasicDtoList.add(i, biSceneBasicDto);
                    }
                }
                biSceneBasicDtoLList.add(biSceneBasicDtoList);

        這些就是我的方法了,大家寫柱狀圖 返回數據的時候 有沒有遇到同樣的問題呢,都是怎麼處理的呢,大家可以說說 我參看參考 共同學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章