Bootstrap

苍穹外卖项目(黑马)学习笔记DAY11

目录

Apache Echarts介绍

营业额统计功能

用户统计功能

订单统计功能

销量排名功能


Apache Echarts介绍

        ApacheECharts是一款基于Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。

营业额统计功能

        从产品原型可以看出,可以选择时间范围。x轴为日期,y周为营业额。

        用什么方法请求?传入什么参数?返回什么数据?

        该请求使用get方式。需要传入查询的开始时间和结束时间。返回给前端日期列表和营业额列表封装成TurnoverReportVO后返回。

        传入的时间参数用注解@DateTimeFormat来规定格式。

    public Result<TurnoverReportVO> turnoverStatistics(
            @DateTimeFormat(pattern = "yyyy-MM-dd")
            LocalDate begin,
            @DateTimeFormat(pattern = "yyyy-MM-dd")
            LocalDate end
    ) 

        获取时间的列表的思路:循环一直到开始到结束,每次加一天后加入到列表,之后使用Stringutils中的join将列表变成字符串。、

        获取当日营业额的思路:由于下单时间有时分秒,因此获取列表中年月日的日期后要添加时分秒。查询数据库需要传入三个参数,可以用map封装后传过去。

            LocalDateTime beginTime = LocalDateTime.of(date, LocalTime.MIN);
            LocalDateTime endTime=LocalDateTime.of(date,LocalTime.MAX);
            Map map =new HashMap();
            map.put("begin",beginTime);
            map.put("end",endTime);
            map.put("status", Orders.COMPLETED);
            Double money= Double.valueOf(orderMapper.sumByMap(map));

        最后需要注意的是,当日的营业额查询出来的可能是null,如果是null则返回0。

用户统计功能

        用什么方法请求?传入什么参数?返回什么数据?

        该请求使用get方式。需要传入查询的开始时间和结束时间。返回给前端日期列表和用户总量以及当然新增用户,封装UserReportVO后返回前端。

        这里唯一值得要讲的就是,统计总的用户只要设置开始时间就可以了。

            map.put("end",endTime);
            Integer totalUser = userMapper.getByMap(map);
            map.put("begin",beginTime);
            Integer newUser= userMapper.getByMap(map);

订单统计功能

        用什么方法请求?传入什么参数?返回什么数据?

        该请求使用get方式。需要传入查询的开始时间和结束时间。返回给前端关于订单相关的信息。

        使用了流来统计总数,其他的思路和上面的功能其实是一样的,这里就不冗余描述。

        Integer totalOrderCount = orderTotalList.stream().reduce(Integer::sum).get();
        Integer validOrderCount = validOrderList.stream().reduce(Integer::sum).get();

销量排名功能

        用什么方法请求?传入什么参数?返回什么数据?

        该请求使用get方式。需要传入查询的开始时间和结束时间。需要给前端返回商品名称和销量并用SalesTop10ReportVO封装。

    <select id="getTop10" resultType="com.sky.dto.GoodsSalesDTO">
        select od.name,sum(od.number) number from order_detail od,orders o
        where od.order_id=o.id and o.status=5
        <if test="begin != null">
            and o.order_time &gt; #{begin}
        </if>
        <if test="end!=null">
            and o.order_time &lt; #{end}
        </if>
        group by od.name
        order by number desc
        limit 0,10
    </select>
        List<String> name = goodsSalesDTOList.stream().map(GoodsSalesDTO::getName).collect(Collectors.toList());
        List<Integer> number = goodsSalesDTOList.stream().map(GoodsSalesDTO::getNumber).collect(Collectors.toList());

;