Bootstrap

《苍穹外卖》项目学习记录-Day11用户统计

返回的数据由前端这个折线图来约定的,也就是说折线图对这个数据有这样的要求,我们去适应前端的这个数据格式,也就是前端需要什么样的数据,我们后端给它什么样的数据。

统计指定时间区间之内的每一天的用户数量,每一天的用户数量包含两部分,一个是用户的总量,一个是新增用户数量。

//存放每天的新增用户数量 select count(id) from user where create_time < ? and create_time > ?

//存放每天的总用户数量 select count(id) from user where create_time < ?

我们写一个动态SQL来兼容这两条SQL,也就是说动态的去拼这个where条件。

 /**
     * 统计指定时间区间的用户数据
     * @param begin
     * @param end
     * @return
     */
    public UserReportVO getUserStatistics(LocalDate begin, LocalDate end) {
        //存放从begin到end之间的每天对应的日期
        List<LocalDate> dateList = new ArrayList<>();
        dateList.add(begin);
        while (!begin.equals(end)){
            begin = begin.plusDays(1);
            dateList.add(begin);
        }
        //存放每天的新增用户数量 select count(id) from user where create_time < ? and create_time > ?
        List<Integer> newUserList = new ArrayList<>();
        //存放每天的总用户数量 select count(id) from user where create_time < ?
        List<Integer> totalUserList = new ArrayList<>();
        for (LocalDate date : dateList) {
            LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN);
            LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);
            Map map = new HashMap();
            map.put("end",endTime);
            //总用户数量
            Integer totalUser = userMapper.countByMap(map);
            map.put("begin",beginTime);
            //新增用户数量
            Integer newUser = userMapper.countByMap(map);
            totalUserList.add(totalUser);
            newUserList.add(newUser);

        }
        //封装结果数据
        return UserReportVO
                .builder()
                .dateList(StringUtils.join(dateList,","))
                .totalUserList(StringUtils.join(totalUserList,","))
                .newUserList(StringUtils.join(newUserList,","))
                .build();
    }

 ·功能测试

转义字符

>   &gt;

<   &lt;

StringUtils.join()是Apache Commons Lang库中的一个方法,用于将数组、集合或迭代器中的元素连接成一个字符串,并通过指定的分隔符分隔这些元素。

StringUtils.join(Object[] array,String separator);

StringUtils.join(Iterable<?> iterable,String separator);

StringUtils.join(Iterator<?> iterator,String separator);

·array:要连接的数组或集合

·separator:连接元素时使用的分隔符

参数类型

StringUtils.join()方法可以接受不同类型的参数:

·数组:可以是任何类型的数组。

·集合:实现了Iterable接口的集合类型。

·迭代器:实现了Iterator接口的迭代器。

返回值

该方法返回一个字符串,其中包含所有元素按指定分隔符连接的结果。如果输入的集合或数组为null,则返回null。

;