当前位置: 首页 > news >正文

苍穹外卖 10 用户统计订单统计 销量排名统计

2-21 用户统计&订单统计

02 09-用户统计_需求分析和设计

03 10-用户统计_代码开发

代码开发如下:

/*** 用户统计* @param begin* @param end* @return*/@ApiOperation("用户统计")@GetMapping("/userStatistics")public Result<UserReportVO> 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);}/*** 用户统计* @param begin* @param end* @return*/@Overridepublic UserReportVO getUserStatistics(LocalDate begin, LocalDate end) {log.info("查询用户数据:{}到{}", begin, 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 > begin and create_time < endList<Integer> newUserList = new ArrayList<>();//查询每天总用户数 select count(id) from user where create_time < endList<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();}

07 14-订单统计_需求分析和设计

01 16-订单统计_代码开发

代码实现如下:

controller:

 /*** 订单统计* @param begin* @param end* @return*/@ApiOperation("订单统计")@GetMapping("/orderStatistics")public Result<OrderReportVO> 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);}

 实现类:

 /*** 订单统计* @param begin* @param end* @return*/@Overridepublic OrderReportVO getOrderStatistics(LocalDate begin, LocalDate end) {List<LocalDate> dateList = new ArrayList<>();dateList.add(begin);while (!begin.equals(end)) {begin = begin.plusDays(1);dateList.add(begin);}//日期计算可以通过上述的方式实现遍历累加//存放每天订单总数List<Integer> totalOrderList = new ArrayList<>();//存放每天有效订单总数List<Integer> validOrderList = new ArrayList<>();for (LocalDate localDate : dateList) {//查询每天订单总数   Select count(id) from orders where order_time > begin and order_time < endLocalDateTime beginTime = LocalDateTime.of(localDate, LocalTime.MIN);LocalDateTime endTime = LocalDateTime.of(localDate, LocalTime.MAX);Integer totalOrderCount = getOrderCount(beginTime, endTime, null);//查询每天有效订单总数 Select count(id) from orders where order_time > begin and order_time < end and status = 5Integer validOrderCount =getOrderCount(beginTime,endTime, Orders.COMPLETED);//将数据添加到对应的集合中totalOrderList.add(totalOrderCount);validOrderList.add(validOrderCount);}//遍历集合累加,计算时间区间内的总数量//使用Stream流Integer totalOrderCount = totalOrderList.stream().reduce(Integer::sum).get();//遍历集合累加,计算时间区间内的有效数量Integer validOrderCount = validOrderList.stream().reduce(Integer::sum).get();Double orderCompletionRate = 0.0;if (totalOrderCount != 0) {//计算订单完成率orderCompletionRate = validOrderCount.doubleValue()/totalOrderCount;}return OrderReportVO.builder().dateList(StringUtils.join(dateList, ",")).orderCountList(StringUtils.join(totalOrderList, ",")).validOrderCountList(StringUtils.join(validOrderList, ",")).totalOrderCount(totalOrderCount).validOrderCount(validOrderCount).orderCompletionRate(orderCompletionRate).build();}// 根据状态统计订单数量private Integer getOrderCount(LocalDateTime begin,LocalDateTime end, Integer status){Map map = new HashMap<>();map.put("begin", begin);map.put("end", end);map.put("status", status);return orderMapper.countByMap(map);}

2-22 销量排名统计

03 18-销量排名统计_需求分析和设计

 代码实现如下:

/*** 菜品销量前十统计* @param begin* @param end* @return*/@Overridepublic SalesTop10ReportVO getSalesTop10(LocalDate begin, LocalDate end) {LocalDateTime beginTime = LocalDateTime.of(begin, LocalTime.MIN);LocalDateTime endTime = LocalDateTime.of(end, LocalTime.MAX);List<GoodsSalesDTO> salesTop10 = orderMapper.getSalesTop10(beginTime, endTime);List<String> names = salesTop10.stream().map(GoodsSalesDTO::getName).collect(Collectors.toList());String nameList = StringUtils.join(names, ",");List<Integer> numbers = salesTop10.stream().map(GoodsSalesDTO::getNumber).collect(Collectors.toList());String numberList = StringUtils.join(numbers, ",");return SalesTop10ReportVO.builder().nameList(nameList).numberList(numberList).build();}
<select id="getSalesTop10" resultType="com.sky.dto.GoodsSalesDTO">select od.name, sum(od.number) numberfrom order_detail od,orders owhere 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.nameorder by number desclimit 0,10</select>

相关文章:

  • leetcode450.删除二叉搜索树中的节点:递归法利用有序性处理四种删除场景
  • 1 µs = 10⁻⁶ s
  • github.com/lib/pq 数据库链接完整示例方式
  • GitHub Copilot 使用手册与原理解析
  • Spring Tool Suite(STS)4国内下载与安装教程
  • 1、Pytorch介绍与安装
  • 数据中心双活架构解决方案
  • SOC-ESP32S3部分:18-串口
  • MySQL的基本架构
  • 13 接口自动化-框架封装之 csv 数据驱动封装和日志
  • 哈工大编译原理 | 7.运行时存储分配
  • 上传图片转成3D VR效果 / 用photo-sphere-viewer实现图片VR效果 / VR效果在项目中落地实践
  • JMeter 是什么
  • 基于照片环境信息的AI定位技术:从原理到实战的深度解析
  • 2025年公共管理与信息技术国际会议:智能治理与数据驱动的创新之路
  • Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(四):语音识别输入功能
  • Arbitrum Stylus 合约实战 :Rust 实现 ERC20
  • GelSight Mini触觉传感器:7μm精度+3D 映射,赋能具身智能精密操作
  • UE5.5 pixelstreaming插件打包报错
  • Java 中的 synchronized 和 Lock:如何保证线程安全
  • 温州网站建设制作/培训心得总结
  • 专业做传奇网站解析/个人如何做seo推广
  • 班级网页设计毕业论文/潍坊seo建站
  • wordpress工具栏条/最好的关键词排名优化软件
  • 吉林省长春市长春网站建设哪家好/优化大师
  • 做网站需要懂什么技术/seo优化网站教程