【JAVA根据查询日期按天分组统计,为空补0】

1.查询2020-03-22 到 2020-03-25三天数据,发现数据库中只有一条

2.现在我需要将2020-03-24到2020-03-25这两天的数据补0

3.代码实现

/**
     * 获取两个日期之间的日期,包括开始结束日期
     *
     * @param beginData 开始日期
     * @param endData   结束日期
     * @return 日期集合
     */
    public static List<String> getBetweenDates(Date beginData, Date endData) {
        List<String> result = new ArrayList<String>();
        LocalDate ld1 = new LocalDate(new DateTime(beginData));
        LocalDate ld2 = new LocalDate(new DateTime(endData));
        if (ld1.equals(ld2)) {
            result.add(new SimpleDateFormat("yyyy-MM-dd").format(beginData));
        } else {
            Calendar tempStart = Calendar.getInstance();
            tempStart.setTime(beginData);
            tempStart.add(Calendar.DAY_OF_YEAR, 1);

            Calendar tempEnd = Calendar.getInstance();
            tempEnd.setTime(endData);
            result.add(new SimpleDateFormat("yyyy-MM-dd").format(beginData));
            while (tempStart.before(tempEnd)) {
                result.add(new SimpleDateFormat("yyyy-MM-dd").format(tempStart.getTime()));
                tempStart.add(Calendar.DAY_OF_YEAR, 1);
            }
            result.add(new SimpleDateFormat("yyyy-MM-dd").format(endData));
        }
        return result;
    }

/**
     *  @Date: 2020/3/24 10:54
     *  @Description:构建datelist数据,按开始时间和结束时间和盒子id按日期分组排序,日期为空补0
     */
    public  void constructDatelist(List<MileageRecordVo> mileageRecordVoList, List<String> days,MileageRecordVo record){
        if(mileageRecordVoList!=null&&mileageRecordVoList.size()>0){
            for (MileageRecordVo mileageRecordVo : mileageRecordVoList) {
                record.setBoxId(mileageRecordVo.getBoxId());
                List<MileageRecordVo> list = dailyMileageMapper.queryDailyMileageList(record);
                //存放盒子id和盒子id出现次数
                HashMap<String,Integer> boxIdCountMap = new HashMap<>();
                //存放盒子id和日期
                HashMap<String,Integer> boxIdDateMap = new HashMap<>();
                if(list!=null&&list.size()>0){
                    //存放数据库查出来的数据
                    List<DailyMileageVo> existList = new ArrayList<DailyMileageVo>();
                    //存放补日期的数据
                    List<DailyMileageVo> noList = new ArrayList<DailyMileageVo>();
                    for (MileageRecordVo recordVo : list) {
                        //数据库有,则添加
                        DailyMileageVo dailyMileageVo = new DailyMileageVo();
                        dailyMileageVo.setDate(recordVo.getDate());
                        dailyMileageVo.setMileage(recordVo.getMileage());
                        existList.add(dailyMileageVo);
                        //构建boxIdCountMap
                        if (boxIdCountMap.containsKey(recordVo.getBoxId())) {
                            int count = boxIdCountMap.get(recordVo.getBoxId()) + 1;
                            boxIdCountMap.put(recordVo.getBoxId(), count);
                        } else {
                            boxIdCountMap.put(recordVo.getBoxId(), 1);
                        }
                        //构建boxIdDateMap
                        boxIdDateMap.put(recordVo.getBoxId() + "-" + recordVo.getDate(), 1);
                    }

                    //得到日期为空的数据,补0
                    for (Map.Entry<String, Integer> entry : boxIdCountMap.entrySet()){
                        if (entry.getValue() < days.size()){
                            for (int i =0;i< days.size();i++){
                                if (!boxIdDateMap.containsKey(entry.getKey() + "-"+days.get(i))){
                                    if(mileageRecordVo.getBoxId().equals(entry.getKey())){
                                        DailyMileageVo dailyMileageVo = new DailyMileageVo();
                                        dailyMileageVo.setDate(days.get(i));
                                        dailyMileageVo.setMileage(0);
                                        noList.add(dailyMileageVo);
                                    }
                                }
                            }

                        }
                    }
                    //将补0的数据添加到数据库有的数据中
                    existList.addAll(noList);
                    mileageRecordVo.setDateList(existList);
                }else{
                    //为空则直接补0
                    List<DailyMileageVo> noList = new ArrayList<DailyMileageVo>();
                    for(int i=0;i<days.size();i++){
                        DailyMileageVo dailyMileageVo = new DailyMileageVo();
                        dailyMileageVo.setDate(days.get(i));
                        dailyMileageVo.setMileage(0);
                        noList.add(dailyMileageVo);
                    }
                    mileageRecordVo.setDateList(noList);
                }

            }
        }
    }


    
  

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值