近七日趋势展示(数据小于7天,补全日期与相应数据)

近七日趋势展示(数据小于7天,补全日期与相应数据)

最近做项目遇到一个问题,就是获取近七日趋势数据的展示,从数据库中查询出满足条件的数据有几条就返回几条,如果条数<7,就会缺失相应日期与该日期对应的数据,在前端界面上显示就会不太美观。接下来就针对上述问题进行处理,如果数据库返回的数据的条数小于7,则补全缺少的日期,该日期对应的数据为0。

获取近七日日期的工具类

 public static Set<String> getBeforeDayTimeOnlyDayList() {
        Set<String> timeList = new HashSet<>();
        Date startDate = getDateBefore(new Date(), 6);
        Date endDate = new Date();
        Calendar start = Calendar.getInstance();
        start.setTime(startDate);
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_MONTH_DAY);
        while (startDate.getTime() <= endDate.getTime()) {
            timeList.add(sdf.format(startDate));
            start.add(Calendar.DAY_OF_MONTH, 1);
            startDate = start.getTime();
        }
        // Comparator<String>sort=Comparator.comparing(S)
        timeList.stream().sorted();
        return timeList;

    }

具体业务处理过程

 public BaseResult<List> get7dayZdrTotalTrend() {
        try {
            String endTime = DateUtils.getDay()+" 23:59:59";
            String startTime = DateUtils.getAfterDay(-6)+" 00:00:00";
            Set<String> dateList = getBeforeDayTimeOnlyDayList();
            List<ZdrTrendDto> dtoList = new ArrayList<>();
            List<ZdrTrendDto> resList = new ArrayList<>();
            List<Map<String, Object>> list = zdrAlarmInfoRepository.get7dayZdrTotalTrend(startTime, endTime);
            if (CollectionUtils.isNotEmpty(list)) {
                dtoList = list.stream().map(item -> {
                    ZdrTrendDto dto = new ZdrTrendDto();
                    dto.setDay(String.valueOf(item.get("daystr")).substring(5, 10));
                    dto.setZdrNum(Integer.valueOf(String.valueOf(item.get("zdrnum"))));
                    return dto;
                }).collect(Collectors.toList());
            } //else {
                for (String str : dateList) {
                    ZdrTrendDto zdrTrendDto = new ZdrTrendDto();
                    ZdrTrendDto dto =
                            dtoList.stream().filter(x -> x.getDay().equalsIgnoreCase(str)).findAny().orElse(null);
                    if(dto!=null){
                        zdrTrendDto.setZdrNum(dto.getZdrNum()==null?0:dto.getZdrNum());
                    }else{
                        zdrTrendDto.setZdrNum(0);
                    }
                    zdrTrendDto.setDay(str);
                    resList.add(zdrTrendDto);
                    Comparator<ZdrTrendDto> sort = Comparator.comparing(ZdrTrendDto::getDay);
                    resList.sort(sort);
                //}
            }
            return BaseResult.success(resList);
        } catch (Exception e) {
            logger.error("获取7日重点人趋势失败", e.getMessage(), e);
            throw new BusinessExceptionAdapter(ErrorCode.ZDR.GET_ZDR_TOTAL_TREND_ERROR);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值