【烘焙坊项目】后端搭建(13)- 数据统计--图形报表
一、Apache ECharts1.1介绍Apache ECharts是一款基于Javascript的数据可视化图表库提供直观生动可交互可个性化定制的数据可视化图表。官网地址Apache ECharts总结使用Echarts重点在于研究当前图表所需的数据格式。通常是需要后端提供符合格式要求的动态数据然后响应给前端来展示图表。二、营业额统计2.1需求分析和设计业务规则营业额指订单状态为已完成的订单金额合计基于可视化报表的折线图展示营业额数据x轴为日期y轴为营业额根据时间选择区间展示每天的营业额数据查看接口文档2.2代码开发controller层service层Service Slf4j public class ReportServiceImpl implements ReportService { Autowired private OrderMapper orderMapper; /** * 统计指定时间区间内的营业额数据 * param begin * param end * return */ Override public TurnoverReportVO getTurnoverReport(LocalDate begin, LocalDate end) { //当前集合用于存放从begin到end范围内的每天日期 ListLocalDate dateList new ArrayList(); dateList.add(begin); while(!begin.equals(end)){ //日期计算计算指定日期的后一天对应的日期 begin begin.plusDays(1); dateList.add(begin); } //存放每天的营业额 ListDouble turnoverList new ArrayList(); for(LocalDate date:dateList){ //查询date日期对应的营业额,营业额是指状态为“已完成”的订单金额合计 LocalDateTime beginTime LocalDateTime.of(date, LocalTime.MIN); LocalDateTime endTime LocalDateTime.of(date, LocalTime.MAX); //select sum(amount) from orders where order_time ? and order_time ? and status 5 Map map new HashMap(); map.put(beginTime,beginTime); map.put(endTime,endTime); map.put(status, Orders.COMPLETED); Double turnover orderMapper.sumByMap(map); turnover turnover null ? 0.0 : turnover; turnoverList.add(turnover); } //封装返回结果 return TurnoverReportVO .builder() .dateList(StringUtils.join(dateList, ,))//用“,”分隔开 .turnoverList(StringUtils.join(turnoverList, ,)) .build(); } }dao层2.3功能测试通过三、用户统计3.1需求分析和设计业务规则基于可视化报表的折线图展示用户数据x轴为日期y轴为用户数根据时间选择区间展示每天的用户总量和新增用户量数据查看接口文档3.2代码开发controller层service层/** * 统计指定时间内的新增用户和总用户数据 * param begin * param end * return */ Override public UserReportVO getUserReport(LocalDate begin, LocalDate end) { //存放从begin到end之间每天对应的日期 ListLocalDate dateList new ArrayList(); dateList.add(begin); while(!begin.equals(end)){ begin begin.plusDays(1); dateList.add(begin); } //存放每天的新增用户数量 ListInteger newUserList new ArrayList(); //存放每天总用户数量 ListInteger 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(endTime,endTime); Integer totalUser userMapper.countByMap(map);//总用户数量 totalUserList.add(totalUser); map.put(beginTime, beginTime); Integer newUser userMapper.countByMap(map);//新增用户数量 newUserList.add(newUser); } return UserReportVO .builder() .dateList(StringUtils.join(dateList, ,)) .newUserList(StringUtils.join(newUserList, ,)) .totalUserList(StringUtils.join(totalUserList, ,)) .build(); }dao层3.3功能测试通过四、订单统计4.1需求分析和设计业务规则有效订单指状态为“已完成”的订单基于可视化报表的折线图展示订单数据x轴为日期y轴为订单数量根据时间选择区间展示每天的订单总数和有效订单数展示所选时间区间内的有效订单数、总订单数、订单完成率、订单完成率有效订单数/总订单数*100%查看接口文档4.2代码开发controller层service层/** * 统计指定时间内的订单相关数据 * param begin * param end * return */ Override public OrderReportVO getStatisticsReport(LocalDate begin, LocalDate end) { //存放从begin到end之间每天对应的日期 ListLocalDate dateList new ArrayList(); dateList.add(begin); while(!begin.equals(end)){ begin begin.plusDays(1); dateList.add(begin); } //存放每天的订单数量列表 ListInteger orderCountList new ArrayList(); //存放每天有效订单数量列表 ListInteger validOrderCountList new ArrayList(); //存放订单总数 Integer totalOrderCount 0; //存放有效订单总数 Integer validOrderCount 0; //存放订单完成率 Double orderCompletionRate 0.0; for (LocalDate date : dateList) { LocalDateTime beginTime LocalDateTime.of(date, LocalTime.MIN); LocalDateTime endTime LocalDateTime.of(date, LocalTime.MAX); Map map new HashMap(); map.put(beginTime,beginTime); map.put(endTime,endTime); Integer totalOrder orderMapper.countOrderByMap(map);//每日订单数量 orderCountList.add(totalOrder); if(totalOrder!null){ totalOrderCount totalOrderCount totalOrder; } map.put(status, Orders.COMPLETED); Integer validOrder orderMapper.countOrderByMap(map);//每日有效订单数 validOrderCountList.add(validOrder); if(validOrder!null){ validOrderCount validOrderCount validOrder; } } orderCompletionRate totalOrderCount0 ? 0.0 :(validOrderCount*1.0/totalOrderCount); return OrderReportVO .builder() .dateList(StringUtils.join(dateList, ,)) .orderCountList(StringUtils.join(orderCountList,,)) .validOrderCountList(StringUtils.join(validOrderCountList,,)) .orderCompletionRate(orderCompletionRate) .totalOrderCount(totalOrderCount) .validOrderCount(validOrderCount) .build(); }dao层4.3功能测试通过五、销量排名Top105.1需求分析和设计业务规则根据时间选择区间展示销量前十的商品包括菜品和套餐基于可视化报表的柱状图降序展示商品销量此处的销量为商品销售的份数查看接口文档5.2代码开发controller层service层dao层5.3功能测试通过六、小结注意MySql语句中 select sum()...是统计具体的数值总和select count()...是统计符合记录数有几条请勿混淆订单统计部分业务代码还是有些复杂的没有跟着老师走看看接口文档自己设计也能够顺畅运行。销量排名部分的sql语句有一些长考虑的较多。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2427816.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!