Java 针对接口中的没有数据自动补0,用于折线统计图

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.aniu.backend.service.bi.product.AniuBIProductService;
import org.junit.Test;

import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public final class CompletionDateUtils {

    private static AniuBIProductService aniuBIProductService;

    /**
     * 隐藏构造方法.
     */
    private CompletionDateUtils() {
    }

    /**
     * 数据库查询出来的统计数据有时候日期是不连续的.
     * 但是前端展示要补全缺失的日期.
     * 此方法返回一个给定日期期间的所有日期字符串列表.
     * 具体在业务逻辑中去判断补全.
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return
     */
    public static List<String> completionDate(LocalDate startDate, LocalDate endDate) {
        //日期格式化
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        List<String> dateList = new ArrayList<>();
        //遍历给定的日期期间的每一天
        for (int i = 0; !Period.between(startDate.plusDays(i), endDate).isNegative(); i++) {
            //添加日期
            dateList.add(startDate.plusDays(i).format(formatter));
        }
        return dateList;
    }


    @Test
    public void selectTest2() {

        String startDate = "2021-04-20";
        String endDate = "2021-06-05";
        //3.补全为空的日期
        //补全后的结果
        List<Map> result = new ArrayList<>();
        boolean dbDateExist = false;
        LocalDate localDate1 = LocalDate.parse(startDate);
        LocalDate localDate2 = LocalDate.parse(endDate);
        List<String> dateList = CompletionDateUtils.completionDate(localDate1, localDate2);

        List<Map> table = new ArrayList<>();
        List<Map> maps1 = ProductService.qqqqqq(startDate, endDate);
        JSONArray json1 = (JSONArray) JSONArray.toJSON(maps1);// 获取post中的字符串转换成json
        for (int i = 0; i < json1.size(); i++) {
            Map<String, Object> map = new HashMap<>();
            map.put("daytime", JSON.parseObject(json1.get(i).toString()).getString("daytime"));
            map.put("cash_amount", JSON.parseObject(json1.get(i).toString()).getString("cash_amount"));
            map.put("return_cash", JSON.parseObject(json1.get(i).toString()).getString("return_cash"));
            map.put("product_type", JSON.parseObject(json1.get(i).toString()).getString("product_type"));
            table.add(map);
        }
        // map.put("list",  table.add(map);

        for (String date : dateList) {
            for (Map<String, Object> row : table) {
                if (row.get("daytime").equals(date)) {
                    //集合已包含该日期
                    dbDateExist = true;
                    result.add(row);
                    break;
                }
            }
            //添加补全的数据到最后结果列表
            if (!dbDateExist) {
                Map<String, Object> temp = new HashMap<>(2);
                temp.put("daytime", date);
                temp.put("cash_amount", 0);
                temp.put("return_cash", 0);
                temp.put("product_type", "6666666");
                result.add(temp);
            }
            //状态修改为不存在
            dbDateExist = false;
        }
                    System.out.print(result);
//            System.out.print(completionDate(localDate1, localDate2));
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值