前言
做过数据分析的人应该都深有体会:拿到一堆Excel数据,先要花大量时间清洗整理,然后琢磨用什么图表展示最合适,再对着ECharts文档一行一行写配置,最后还要搭看板做汇报。这一套流程走下来,少说也得小半天。
如果告诉AI你想要什么,它自动帮你把图表配置生成好,甚至把数据结论也写出来,你只需要微调一下就能用,是不是能省下不少时间?
这篇文章介绍的就是这样一个系统——一个前后端分离的轻量级智能BI平台,让数据分析这件事变得更快、更省事。
项目介绍
一套基于Spring Boot + React + TypeScript构建的智能BI系统。用户上传Excel数据文件后,系统自动调用大语言模型生成ECharts图表配置和数据分析结论。整个流程支持同步和异步两种模式,同时涵盖了图表管理、数据大屏、多文件联合分析等完整的BI业务能力。
说白了,这就是一个用AI帮你把Excel数据变成可视化图表和分析报告的工具,不用自己折腾图表代码。
项目功能
功能模块 | 具体说明 |
图表AI生成 | 上传Excel后自动调用AI模型生成ECharts配置和数据分析结论 |
三种执行模式 | 同步阻塞、线程池异步、RabbitMQ消息队列异步 |
图表生命周期管理 | 增删改查、收藏、置顶、回收站恢复与物理删除、重新生成 |
多文件联合分析 | 支持多Excel同时上传,跨表字段拼接后统一分析 |
数据可视化大屏 | 自定义拖拽布局,将已有图表组合成数据看板 |
实时状态推送 | WebSocket推送AI任务执行状态,无需手动刷新 |
数据统计仪表盘 | 展示图表总量、成功/运行中任务、7天趋势、图表类型分布 |
用户权限管理 | 基于@AuthCheck注解实现简易权限控制,区分普通用户和管理员 |
接口限流防刷 | Redis实现接口限流和分布式锁,防止高频重复提交 |
项目特点
AI驱动图表生成:用户只需要提供数据,系统自动分析数据特征并选择合适的图表类型,配置代码全部由AI生成
异步解耦设计:通过RabbitMQ将AI调用与主业务流程分离,即使AI接口响应慢也不影响用户其他操作
多任务方案灵活切换:根据业务场景可选择同步、线程池或MQ三种模式,开发调试用同步,生产环境用MQ
全生命周期图表管理:从生成到删除回收,图表状态和操作记录完整可追溯
跨文件联合分析:Session缓存实现多Excel数据拼接,不用反复上传相同文件
实时反馈机制:WebSocket推送让用户能清晰感知任务进度,而不是干等
项目技术
后端技术栈
技术 | 用途 |
Spring Boot | 基础框架,提供Web服务能力 |
MyBatis-Plus | 数据持久层,简化数据库操作 |
RabbitMQ | 消息队列,异步解耦AI生成任务 |
Redis | 接口限流、分布式锁、缓存 |
WebSocket | 实时推送图表生成状态 |
AiManage | 自定义模块,对接智谱AI大模型 |
Hutool、Gson、Commons Lang3 | 工具类库 |
前端技术栈
技术 | 用途 |
Umi Max / Ant Design Pro v6 | 企业级后台框架 |
Ant Design v5 | UI组件库 |
ECharts + echarts-for-react | 图表可视化渲染 |
react-grid-layout | 大屏拖拽布局 |
TypeScript | 类型安全 |
数据库
MySQL 5.7/8.x,存储用户、图表、数据看板、任务配置等业务数据。
项目代码
先看后端的核心实体类——图表实体,记录了AI生成任务的完整信息:
@Data@TableName("chart")publicclass Chart { private Long id; private Long userId; private String chartName; private String excelData; private String chartConfig; private String analysisResult; private String status; private String execMessage; private Boolean isFavourite; private Boolean isPinned; private Integer taskType; private Date createTime; private Date updateTime;}AI调用核心逻辑封装在AiManage模块中,负责组装提示词、调用大模型接口、解析返回结果。
@Servicepublicclass AiManage { public String doAnalysis(String csvData, String userGoal) { String prompt = buildPrompt(csvData, userGoal); String response = callAiModel(prompt); return extractChartConfig(response); } private String buildPrompt(String csvData, String userGoal) { return"你是一个数据分析专家。以下是CSV格式的数据:\n" + csvData + "\n用户需求:" + userGoal + "\n请生成ECharts图表配置JSON和数据分析结论,按照以下格式返回..."; }}MQ异步生成图表是生产环境推荐模式。生产者发送消息,消费者消费任务并调用AI接口。
@Componentpublicclass ChartMessageProducer { @Autowired private RabbitTemplate rabbitTemplate; public void sendChartTask(Long chartId) { rabbitTemplate.convertAndSend("chart.exchange", "chart.route", chartId); }}@Componentpublicclass ChartMessageConsumer { @RabbitListener(queues = "chart.queue") public void consumeChartTask(Long chartId) { // 查询图表记录 // 调用AI接口生成图表配置 // 更新图表状态 // WebSocket推送结果 }}WebSocket前端连接和消息处理的代码很精简,连接成功后监听状态更新事件,收到消息后刷新对应图表的状态展示。
useEffect(() => { const ws = new WebSocket('ws://localhost:8080/ws/chart'); ws.onmessage = (event) => { const data = JSON.parse(event.data); updateChartStatus(data.chartId, data.status); }; return () => ws.close();}, []);项目效果
图表管理列表页:所有生成的图表以表格形式展示,状态标签清晰标识任务进度,支持搜索、筛选、收藏和置顶操作。
图表生成页面:上传Excel后自动调用AI生成图表配置,同时展示AI生成的数据分析结论和ECharts图表。
数据仪表盘:统计图表总量、成功任务数、运行中任务数以及7天内的任务趋势和图表类型分布。
多文件联合分析:支持同时上传多个Excel文件,预览数据后选择需要分析的字段,系统自动拼接后生成联合分析图表。
数据大屏:通过拖拽布局将已有图表组合成大屏看板,适配大屏展示场景。
项目源码
后端:基于Spring Boot + MyBatis-Plus + RabbitMQ + Redis
前端:基于Umi Max + Ant Design Pro + TypeScript + ECharts
数据库:MySQL,初始化脚本在项目sql目录下
启动流程
1、执行create_table.sql初始化数据库
2、修改application.yml配置数据库、Redis、RabbitMQ和AI模型参数
3、启动Spring Boot服务
4、前端执行npm install后npm run dev
GitHub:https://github.com/dongzhy/zhybi
总结
以前拿到一沓Excel,得先想清楚用什么图展示最合适,然后翻ECharts文档写option配置,遇到复杂图表还得调试半天样式。现在把数据丢进去,告诉AI你想看什么维度的分析,它直接把图表配置和结论一起返回,你只需要确认一下,改一改细节就能用了。
多文件联合分析这块在实际工作中也挺实用。比如销售数据和库存数据分别在两个表里,以前得先合并再分析,现在系统帮你把字段拼好再丢给AI,省了一步操作。
RabbitMQ异步模式在生产环境跑下来比较稳,AI接口响应慢的时候用户该干嘛干嘛,任务处理完了通过WebSocket通知一声就行。如果对实时性要求不高,这种异步模式用起来确实省心。
总体来说,这个系统比较适合需要频繁处理数据报表、又不想在图表配置上花太多时间的场景。后续计划接入更多AI模型,支持自然语言直接查询数据,让数据分析的门槛再往下降一降。
关键词
作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
方便大家交流、资源共享和共同成长
纯技术交流群、需要的小伙伴请扫码
有收获?不妨分享让更多人受益
关注「程序员开源栈」,共同提升技术实力
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!