做哪类网站赚钱,wordpress域名授权破解版,博客自定义网站,网红营销的概念文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计
所谓用户统计#xff0c;实际上统计的是用户的数量。通过折线图来展示#xff0c;上面这根蓝色线代表的是用户总量#xff0c;下边这根绿色线代表的是新增用户数量#xff0c;是具体到每一天。所以说用户统计… 文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计
所谓用户统计实际上统计的是用户的数量。通过折线图来展示上面这根蓝色线代表的是用户总量下边这根绿色线代表的是新增用户数量是具体到每一天。所以说用户统计主要统计两个数据一个是总的用户数量另外一个是新增用户数量。
原型图 业务规则
基于可视化报表的折线图展示用户数据X轴为日期Y轴为用户数根据时间选择区间展示每天的用户总量和新增用户量数据 接口设计 根据上述原型图设计接口。 VO设计 根据用户统计接口的返回结果设计VO Data
Builder
NoArgsConstructor
AllArgsConstructor
public class UserReportVO implements Serializable {//日期以逗号分隔例如2022-10-01,2022-10-02,2022-10-03private String dateList;//用户总量以逗号分隔例如200,210,220private String totalUserList;//新增用户以逗号分隔例如20,21,10private String newUserList;}根据接口定义在ReportController中创建userStatistics方法 /*** 用户统计* param begin* param end* return*/ApiOperation(用户统计)GetMapping(/userStatistics)public ResultUserReportVO userStatistics(DateTimeFormat(pattern yyyy-MM-dd) LocalDate begin,DateTimeFormat(pattern yyyy-MM-dd) LocalDate end){log.info(营业额统计:{},{},begin,end);//调用业务获取用户统计数据UserReportVO userReportVO reportService.getUserStatistics(begin,end);return Result.success(userReportVO);} 在ReportService接口中声明getUserStatistics方法 /*** 用户统计数据* param begin* param end* return*/UserReportVO getUserStatistics(LocalDate begin, LocalDate end);在ReportServiceImpl实现类中实现getUserStatistics方法 /*** 用户统计数据** param begin* param end* return*/Overridepublic UserReportVO getUserStatistics(LocalDate begin, LocalDate end) {//目标获取用户统计数据用户每天总数量每天新增数量 、 每天日期列表//获取每天新增用户数量//select count(*) from user where create_time 当天最小时间 and create_time 当天最大时间//获取每天用户总数量//select count(*) from user where create_time 当天最大时间//1、根据开始日期与结束日期生成每天日期集合列表ListLocalDate dateList getDateList(begin, end);//2、定义存储每天新增用户 和 每天新增用户集合ArrayListInteger createUserList new ArrayList();ArrayListInteger totalUserList new ArrayList();//3、遍历日期列表每天数据for (LocalDate date : dateList) {//定义每天最大时间和最小时间LocalDateTime beginTime LocalDateTime.of(date, LocalTime.MIN);LocalDateTime endTime LocalDateTime.of(date,LocalTime.MAX);//执行sql//将参数封装到map里MapString,Object map new HashMap();//查询总用户map.put(endTime,endTime);Integer totalUser userMapper.countByMap(map);totalUser totalUser null ? 0 : totalUser;totalUserList.add(totalUser);//查询新增用户只需要再加一个开始条件map.put(beginTime,beginTime);Integer createUser userMapper.countByMap(map);createUser createUser null ? 0 : createUser;createUserList.add(createUser);}//封装返回数据return UserReportVO.builder().dateList(StringUtils.join(dateList,,)).totalUserList(StringUtils.join(totalUserList,,)).newUserList(StringUtils.join(createUserList,,)).build();}在UserMapper接口中声明countByMap方法 /*** 根据动态条件统计用户数量* param map* return*/Integer countByMap(Map map);在UserMapper.xml文件中编写动态SQL
select idcountByMap resultTypejava.lang.Integerselect count(id) from userwhereif testbegin ! nulland create_time gt; #{begin}/ifif testend ! nulland create_time lt; #{end}/if/where
/select2、订单统计
订单统计通过一个折现图来展现折线图上有两根线这根蓝色的线代表的是订单总数而下边这根绿色的线代表的是有效订单数指的就是状态是已完成的订单就属于有效订单分别反映的是每一天的数据。上面还有3个数字分别是订单总数、有效订单、订单完成率它指的是整个时间区间之内总的数据。
原型图 业务规则
有效订单指状态为 “已完成” 的订单基于可视化报表的折线图展示订单数据X轴为日期Y轴为订单数量根据时间选择区间展示每天的订单总数和有效订单数展示所选时间区间内的有效订单数、总订单数、订单完成率订单完成率 有效订单数 / 总订单数 * 100% 接口设计 根据上述原型图设计接口。 VO设计 Data
Builder
NoArgsConstructor
AllArgsConstructor
public class OrderReportVO implements Serializable {//日期以逗号分隔例如2022-10-01,2022-10-02,2022-10-03private String dateList;//每日订单数以逗号分隔例如260,210,215private String orderCountList;//每日有效订单数以逗号分隔例如20,21,10private String validOrderCountList;//订单总数private Integer totalOrderCount;//有效订单数private Integer validOrderCount;//订单完成率private Double orderCompletionRate;}在ReportController中根据订单统计接口创建orderStatistics方法 GetMapping(/ordersStatistics)ApiOperation(订单数据统计)public ResultOrderReportVO orderStatistics(DateTimeFormat(pattern yyyy-MM-dd) LocalDate begin,DateTimeFormat(pattern yyyy-MM-dd) LocalDate end){log.info(订单数量统计{},{},begin,end);//调用业务OrderReportVO orderReportVO reportService.getOrderStatistics(begin,end);return Result.success(orderReportVO);}在ReportService中根据订单统计接口 /*** 订单统计数据* param begin* param end* return*/OrderReportVO getOrderStatistics(LocalDate begin, LocalDate end);实现Service /*** 订单统计数据** param begin* param end* return*/Overridepublic OrderReportVO getOrderStatistics(LocalDate begin, LocalDate end) {//订单统计日期列表dateList,每天订单数量列表//1、根据开始日期与结束日期生成列表ListLocalDate dateList getDateList(begin, end);//2、定义每天订单总数量 ListInteger orderCountList 和每天有效订单数量列表 ListInteger validOrderCountListListInteger orderCountList new ArrayList();ListInteger validOrderCountList new ArrayList();//3、遍历日期列表dateListfor (LocalDate date : dateList) {//生成当天最大时间和最小时间LocalDateTime beginTime LocalDateTime.of(date, LocalTime.MIN);LocalDateTime endTime LocalDateTime.of(date, LocalTime.MAX);MapString, Object map new HashMap();//获取当天订单map.put(beginTime,beginTime);map.put(endTime,endTime);Integer orderCount orderMapper.orderCountByToday(map);orderCount orderCount null?0:orderCount;orderCountList.add(orderCount);//获取有效订单map.put(status, Orders.COMPLETED);Integer validOrder orderMapper.orderCountByToday(map);validOrder validOrder null?0:validOrder;validOrderCountList.add(validOrder);}//4、计算所有天订单总数量和有效订单总数量Integer totalOrderCount orderCountList.stream().reduce(Integer::sum).get();Integer validOrderCount validOrderCountList.stream().reduce(Integer::sum).get();Double orderCompletionRate 0.0;//5、计算完成率if (totalOrderCount ! 0){orderCompletionRate validOrderCount.doubleValue() / totalOrderCount;}//6、封装数据返回return OrderReportVO.builder().dateList(StringUtils.join(dateList,,)).orderCountList(StringUtils.join(orderCountList,,)).validOrderCountList(StringUtils.join(validOrderCountList,,)).totalOrderCount(totalOrderCount).validOrderCount(validOrderCount).orderCompletionRate(orderCompletionRate).build();}mapper层实现 /*** 获取订单数* param map* return*/Integer orderCountByToday(MapString, Object map);select idcountByMap resultTypejava.lang.Integerselect count(id) from orderswhereif teststatus ! nulland status #{status}/ifif testbegin ! nulland order_time gt; #{begin}/ifif testend ! nulland order_time lt; #{end}/if/where
/select3、销量排名Top10
所谓销量排名销量指的是商品销售的数量。项目当中的商品主要包含两类一个是套餐一个是菜品所以销量排名其实指的就是菜品和套餐销售的数量排名。通过柱形图来展示销量排名这些销量是按照降序来排列并且只需要统计销量排名前十的商品。
原型图 业务规则
根据时间选择区间展示销量前10的商品包括菜品和套餐基于可视化报表的柱状图降序展示商品销量此处的销量为商品销售的份数 接口设计 据上述原型图设计接口。 VO设计 根据销量排名接口的返回结果设计VO Data
Builder
NoArgsConstructor
AllArgsConstructor
public class SalesTop10ReportVO implements Serializable {//商品名称列表以逗号分隔例如鱼香肉丝,宫保鸡丁,水煮鱼private String nameList;//销量列表以逗号分隔例如260,215,200private String numberList;}Controller层 在ReportController中根据销量排名接口创建top10方法 ApiOperation(销售top10统计)GetMapping(/top10)public ResultSalesTop10ReportVO salesTop10Statistics(DateTimeFormat(pattern yyyy-MM-dd) LocalDate begin,DateTimeFormat(pattern yyyy-MM-dd) LocalDate end){log.info(销售前10排名{},{},begin,end);SalesTop10ReportVO salesTop10ReportVO reportService.getSalesTop10(begin,end);return Result.success(salesTop10ReportVO);}Service层接口 /*** 销售前10统计* param begin* param end* return*/SalesTop10ReportVO getSalesTop10(LocalDate begin, LocalDate end);接口实现类 /*** 销售前10统计** param begin* param end* return*/Overridepublic SalesTop10ReportVO getSalesTop10(LocalDate begin, LocalDate end) {//目标top10统计商品名称列表 ListString nameList每天销量列表ListInteger numberList//获取最大和最小时间LocalDateTime beginTime LocalDateTime.of(begin, LocalTime.MIN);LocalDateTime endTime LocalDateTime.of(end, LocalTime.MAX);//查询top商品和销量ListGoodsSalesDTO goodsSalesDTOS orderMapper.getTop10(beginTime,endTime);//获取商品名称列表集合ListString nameList goodsSalesDTOS.stream().map(GoodsSalesDTO::getName).collect(Collectors.toList());//获取销量列表集合ListInteger numberList goodsSalesDTOS.stream().map(GoodsSalesDTO::getNumber).collect(Collectors.toList());return SalesTop10ReportVO.builder().nameList(StringUtils.join(nameList,,)).numberList(StringUtils.join(numberList,,)).build();}mapper层 /*** 获取top10* param beginTime* param endTime* return*/ListGoodsSalesDTO getTop10(LocalDateTime beginTime, LocalDateTime endTime);select idgetTop10 resultTypecom.sky.dto.GoodsSalesDTOselect od.name,sum(od.number) number from orders oinner join order_detail od on o.id od.order_idwhereif testbeginTime ! nulland order_time gt; #{beginTime}/ifif testendTime ! nulland order_time lt; #{endTime}/if/wheregroup by od.name order by number desc limit 10/select