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

数据统计模块后端架构解析:从Controller到SQL的ECharts数据对接实践

一、引言

  1. 业务场景重要性

    • 数据驱动决策:日活、订单趋势、商品热度等指标对运营的价值

    • 可视化需求:Apache ECharts在前端动态图表展示中的关键作用(简略介绍

  2. 技术栈概览

    • 前端可视化:Apache ECharts(折线图/柱状图)

    • 后端框架:SpringBoot + MyBatis

    • 数据存储:MySQL

二、接口设计概览

接口类型路径核心参数返回数据结构
营业额统计/admin/report/turnoverStatisticsdate(日期范围)
Result<TurnoverReportVO>
用户统计/admin/report/userStatisticsdate
Result<UserReportVO>
订单统计/admin/report/ordersStatisticsdate
Result<OrderReportVO>
销量排名TOP10/admin/report/top10date
Result<SalesTop10ReportVO>

三、分层实现详解(核心章节)

        一、营业额统计接口

                1.Controller

@DateTimeFormat主要作用是将前端传递的字符串类型的日期 / 时间数据,按照指定格式转换为 Java 中的日期 / 时间对象

                2.ServerImpl

营业额统计接口实现概要

核心功能
  • 计算指定日期范围内的每日营业额数据

  • 过滤统计条件:仅包含"已完成"状态的订单

实现流程
  1. 日期范围处理

    • 生成从beginend的连续日期序列

    • 使用循环逐日增加直到覆盖整个查询区间

  2. 每日营业额计算

    • 将日期转换为当天的起止时间点(00:00至23:59)

    • 构建查询参数:

      • 时间范围(当日00:00 - 23:59)

      • 订单状态(已完成)

    • 执行SQL聚合查询获取当日营业额总和

  3. 空数据处理

    • 对无订单的日期返回0.0值

    • 避免前端展示断层

  4. 结果封装

    • 日期列表转换为逗号分隔字符串

    • 营业额列表转换为逗号分隔字符串

    • 构建VO对象返回给Controller层

                3.Mapper/.xml

        二、用户统计接口

                1.Controller
                2.ServerImpl

用户统计接口实现概要

核心功能
  • 统计指定日期范围内的用户增长数据

  • 同步计算每日新增用户数和累计用户总数

  • 覆盖完整日期区间,无数据断层

实现流程
  1. 日期范围处理

    • 生成从起始日到结束日的连续日期序列

    • 使用循环逐日推进确保日期连续性

  2. 双指标并行计算

    • 每日累计用户:统计截至当日23:59:59的用户总量

      • 仅需传入当日结束时间参数

    • 每日新增用户:统计当日00:00:00-23:59:59的注册量

      • 同时传入当日开始和结束时间参数

  3. 精确时间控制

    • 将日期转换为当日精确时间范围

    • 最小时间:00:00:00

    • 最大时间:23:59:59.999999999

  4. 结果封装优化

    • 日期序列转换为逗号分隔字符串

    • 用户数据序列转换为逗号分隔数值字符串

    • 构建三列数据返回结构

                3.Mapper/.xml

        三、订单统计接口

                1.Controller
                2.ServerImpl

  1. 日期序列生成

    • 创建从beginend的连续日期列表

    • 确保日期范围完整性(包含起止日)

  2. 双指标同步统计

    • 总订单统计

      • 查询条件:当日时间范围

      • 无状态过滤

    • 有效订单统计

      • 查询条件:当日时间范围 + 已完成状态

      • 使用相同Mapper方法通过参数区分

  3. 实时聚合计算

    • 循环内累计:

      • allDateOrders(总订单量)

      • allValidOrders(有效订单量)

    • 循环外计算:

      • orderCompletionRate = allValidOrders / allDateOrders

  4. 空值安全机制

    • 无订单日期默认返回0

    • 除零保护:当总订单为0时完成率设为0.0

                3.Mapper/.xml

        四、销量统计接口

                1.Controller
                2.ServerImpl

  1. 时间范围精确化

    • 起始日转换为当日零点(00:00:00

    • 结束日转换为当日最后一刻(23:59:59.999999

    • 确保完整覆盖自然日边界

  2. 聚合查询执行

    • 调用Mapper执行核心SQL:

  3. 数据流转换

    • 名称提取List<GoodsSalesDTO> → List<String>

      • 映射函数:GoodsSalesDTO::getName

    • 销量提取List<GoodsSalesDTO> → List<Integer>

      • 映射函数:GoodsSalesDTO::getNumber

  4. 字符串优化封装

    • 名称列表拼接:List<String> → "商品A,商品B,..."

    • 销量列表拼接:List<Integer> → "156,142,..."

    • 构建最终VO对象

                3.Mapper/.xml

<select id="getTop10" resultType="com.sky.dto.GoodsSalesDTO">select od.name,              <!-- 商品名称 -->sum(od.number) number <!-- 总销量(别名number) -->from order_detail od,      <!-- 订单明细表别名od -->orders o              <!-- 订单主表别名o -->where od.order_id = o.id    <!-- 两表关联条件 -->and o.status = 5      <!-- 只统计已完成的订单 --><if test="beginTime!=null">  <!-- 动态时间范围 -->and order_time &gt; #{beginTime}  <!-- 开始时间过滤 --></if><if test="endTime!=null">and order_time &lt; #{endTime}    <!-- 结束时间过滤 --></if>group by od.name               <!-- 按商品名称分组 -->order by number desc           <!-- 按销量降序排序 -->limit 0,10                <!-- 取前10条记录 -->
</select>

1.查找两个表分别是order_detail(订单详情表)和orders(订单表)

2.查找订单名,和订单number的数量 并命名为number

3.查找条件是order_detaiol(订单详情表)和order(订单表)的id相同,并且状态码为5(已完成状态)

4.时间必须在条件范围内。

5.根据名字和数量降序排序,

6.只查询前10个。

四、数据展示图

五、总结

本文详细实现了苍穹外卖系统的四个核心数据统计接口:

  1. 营业额统计:日期维度营收分析

  2. 用户统计:新增用户与总量趋势

  3. 订单统计:订单量与完成率分析(含关键实现细节)

  4. 销量排名:TOP10商品排行

六、附录

营业额统计接口返回VO

用户数量统计接口返回VO

订单数据统计接口返回VO

销量统计接口返回VO

http://www.dtcms.com/a/285855.html

相关文章:

  • Spring介绍以及IOC和AOP的实现
  • 某邮生活旋转验证码逆向
  • Ansible + Shell 服务器巡检脚本
  • 如何使用Python将HTML格式的文本转换为Markdown格式?
  • UDP 协议下一发一收通信程序的实现与解析
  • Python - 数据分析三剑客之Pandas
  • docker--容器自启动
  • Vue导出Html为Word中包含图片在Microsoft Word显示异常问题
  • Python MP3 归一化器和长度分割器实用工具开发指南
  • 曼哈顿自注意力MaSA,基于曼哈顿距离的显式空间先验,以线性计算复杂度高效建模全局与局部空间关系,提升视觉任务的性能。
  • Java: 反射机制的 ParameterizedType(参数化类型)
  • WEB弹性设计
  • 使用 C++ 和 OpenCV 进行表面划痕检测
  • jQuery最新js文件下载教程
  • Django母婴商城项目实践(五)
  • Python 使用期物处理并发(使用concurrent.futures模块下载)
  • 黑马Node.js全套入门教程,nodejs新教程含es6模块化+npm+express+webpack+promise等_ts对象笔记
  • MISRA C-2012准则之指针类型转换
  • build.log中的is not a subdirectory of和ScanSourceDirectories函数的关系
  • 「Java案例」方法重装求不同类型数的立方
  • MySql:索引,结构
  • Leetcode 04 java
  • cocosCreator2.4 Android 输入法遮挡
  • JAVA中StringBuilder类,StringJoiner类构造函数方法简单介绍
  • C语言基础:数组练习题
  • Zabbix安装-Server
  • 【JS笔记】Java Script学习笔记
  • 【C语言进阶】题目练习(2)
  • react控制react Popover组件显示隐藏
  • Vue3 中使用 Element Plus 实现自定义按钮的 ElNotification 提示框