智能BI项目第一期

news2024/11/24 9:28:30

该项目是全程跟着鱼皮,还未进行功能扩展。为了方便日后复习,打算将一些重要的步骤记录下来。

项目概述

BI:即商业智能:Business Intelligence

过去

        需要手动导入数据、选择要分析的字段和图表,并由专业的数据分析师完成分析,最后得出结论。

现在

        用户只需输入想要分析的目标,并上传原始数据,系统将利用 AI 自动生成可视化图表。这样,会比较方便

项目初期架构(后期会逐步完善)

基础流程

客户端输入分析诉求和原始数据,向业务后端发送请求。业务后端利用 AI 服务处理客户端数据,保持到数据库。前端根据AI生产的代码生成可视化图表,最终将结果返回给客户端展示。

问题:

假设一个 AI 服务生成图表和分析结果要等 50 秒,如果有大量用户需要生成图表,每个人都需要等待 50 秒,那么 AI 服务可能无法承受这种压力。为了解决这个问题,可以采用消息队列技术。这些请求会进入队列,AI 服务会依次处理队列中的请求,从而避免了同时处理大量请求造成的压力

优化流程(异步化)

消息队列根据 AI 服务负载情况,定期检查进度,如果 AI 服务还能处理更多的图表生成请求,就向任务处理模块发送消息。

任务处理模块调用 AI 服务处理客户端数据,AI 服务异步生成结果返回给后端并保存到数据库,当后端的 AI 服务生成完毕后,可以通过向前端发送通知的方式,或者通过业务后端监控数据库中图表生成服务的状态,来确定生成结果是否可用。若生成结果可用,前端即可获取并处理相应的数据,最终将结果返回给客户端展示。(在此期间,用户可以去做自己的事情

技术栈

前端:

  1. React

  2. 开发框架 Umi + Ant Design Pro

  3. 可视化开发库(Echarts + HighCharts + AntV) <可视化会涉及到图表的生成>

  4. umi openapi 代码生成(自动生成后端调用代码) <前后联调开发>

后端:

  1. Spring Boot 
  2. MySQL
  3. MyBatis Plus
  4. 消息队列(RabbitMQ)
  5. AI 能力(Open AI接口开发 / 星球提供现成的 AI 接口)
  6. Excel 的上传和数据的解析(Easy Excel)
  7. Swagger + Knife4j 项目接口文档
  8. Hutool 工具库

前端初始化

项目启动

这里的dev命令start:dev命令一样都是启动命令。

start:dev命令中的MOCK=none,是把自动模拟的数据关闭;

dev命令是调用自己定义的后端;

start命令是以模拟数据的方式运行项目。

关于git

  1. 工作区: 在你电脑里看到的目录
  2. 暂存区: 在 .git 文件夹内的 index 中 (二进制记录)
  3. 版本库: 指的整个 .git 文件夹 (也认为是本地仓库)

项目瘦身

如果报错:

1.执行
yarn add eslint-config-prettier --dev yarn add eslint-plugin-unicorn --dev 
2.然后修改node_modules/@umijs/lint/dist/config/eslint/index.js文件注释
// es2022: true可以解决问题
如果启动后找不到菜单栏,把图中文件夹的路由都加上name属性

后端初始化

源码下载百度网盘链接: 百度网盘 请输入提取码 提取码: h4pi

如果pom.xml有报错,找到报错的位置,没有版本号就添加版本号,有版本号就换一个。 maven repository

根据需求,按照readme文件的要求,更改你的配置,比如redis、mysql等等

20240915:今天有些累了,晚上睡不着做点笔记,下次继续,最近两天先学一下项目部署上线,后面再来写笔记


20240916:早上和下午学了服务器部署,构建要好长时间,那就继续做笔记吧

更名

数据库:

连接数据库这个基本操作就不做笔记了,直接在左侧database那里连接即可,自己准备好库 

create table if not exists chart
(
    id          bigint auto_increment comment 'id' primary key,
    `name`      varchar(128)                       null comment '图表名称',
    goal        text                               null comment '分析目标',
    chartData   text                               null comment '图表数据',
    chartType   varchar(128)                       null comment '图表类型',
    genChart    text                               null comment '生成的图表数据',
    genResult   text                               null comment '生成的分析结论',
    status      varchar(128)                       not null default 'wait' comment 'wait running success failed',
    execMessage text                               null comment '执行信息',
    userId      bigint                             null comment '创建用户 id',
    createTime  datetime default CURRENT_TIMESTAMP not null comment '创建时间',
    updateTime  datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    isDelete    tinyint  default 0                 not null comment '是否删除'
) comment '图表信息表' collate = utf8mb4_unicode_ci;
create table if not exists user
(
    id           bigint auto_increment comment 'id' primary key,
    userAccount  varchar(256)                           not null comment '账号',
    userPassword varchar(512)                           not null comment '密码',
    userName     varchar(256)                           null comment '用户昵称',
    userAvatar   varchar(1024)                          null comment '用户头像',
    userRole     varchar(256) default 'user'            not null comment '用户角色:user/admin',
    createTime   datetime     default CURRENT_TIMESTAMP not null comment '创建时间',
    updateTime   datetime     default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    isDelete     tinyint      default 0                 not null comment '是否删除',
    index idx_userAccount (userAccount)
) comment '用户' collate = utf8mb4_unicode_ci;

 goal:就是你打算让AI为你分析啥

charData:前端传进来的excel的内容

charType:图表类型,比如折线图什么的

genChart:Ai生成的代码,通过echarts可以转化成对应的图片

genResult:AI生成的结论

status:因为是异步的,生成的过程中会有不同的状态,比如生成失败,正在生成之类的

userId:发起这个请求的用户

为了规范,把表放在sql目录下,新建一个sql文件来存放,然后在这个文件里执行你的sql代码

模拟数据

sql之父

可以用这个网站来自定义生成一些模拟数据,里面的createTime字段会多一个双引号,记得要去掉

代码框架生成

 这个时候在src/main/java/generator 目录下会有一些写好的代码框架,进行迁移即可 

防止爬虫

这两个实体类的主键id加上@TableId(type = IdType.ASSIGN_ID)

假删

这里配置了假删标志

假删的字段上加上@TableLogic,然后代码里的一些跟项目无关的内容可以删掉,比如引入微信模块

基础增删改查

这个项目里集成了一些基础的增删改查,我们直接复制过来改一些名称即可

我们找个简单一些的controller,复制PostController,粘贴到controller包下,改名为ChartController

全局替换post->chart、Post->Chart(记得要区分大小写)

这时候会改错一部分,把ChartMapping->PostMapping


此时大致框架搭好了,一些请求参数还没有创建,我们可以在com/ptu/api/model/dto 下面创建一个chart包,专门放关于图表的请求参数,此时可以用上com/ptu/api/model/dto/post包的内容,把他们的增删改查复制过来

更改对应的类名和内容

这里的字段可以根据需求来,不一定要按照鱼皮的代码

前后端联调

代码自动生成

使用 Ant Design Pro 自带的openAPI工具,根据后端的swagger接口文档数据自动生成对应的请求 service 代码。

打开前端项目,找到config.ts中的openAPI

 然后运行package.json里的openapi按钮运行,就会自动生成后端controller代码的调用,会生成在src/service目录下

修改配置

此时前后端代码就算是调通了 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2140718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker发布redis容器

1.导入redis镜像 2.写docker-compose文件 并创建容器 redis:container_name: redisimage: redis:latestports:- "6379:6379"restart: always 3.测试一下

“深入解析:MySQL半同步复制的配置指南与实践技巧“

本次配置是在已搭建好主从复制的架构中进行配置 配置环境 操作系统 master节点 slave节点 centos7 8.0.37 8.0.37 配置半同步复制 配置master 安装master半同步复制插件 INSTALL PLUGIN rpl_semi_sync_source SONAME semisync_source.so; 在MySQL的配置文件中添加配置…

论文(六):Fire-Net: A Deep Learning Framework for Active Forest Fire Detection

文章目录 1.Introduction2.Study Area2.1Landsat-8 Dataset2.2Inventory data 3.Methodology3.1Image Pre-processing3.2Proposed Deep Learning Architecture (Fire-Net)3.2.1Convolution Layers3.2.2 Evaluation Indices/methods or accuracy assessment. 4.Results4.1 Austr…

JVM HotSpot 虚拟机: 对象的创建, 内存布局和访问定位

目录 前言 对象的创建 对象的内存布局 对象的访问定位 前言 了解JVM的内存区域划分之后, 也大致了解了java程序的内存分布模型, 也了解它里面的内存区域里面的类型和各个类型的作用, 接下来我们进一步从对象创建到访问的角度, 来看看这些内存区域之间是怎么关联起来的. …

【C++篇】C++类与对象深度解析(二):类的默认成员函数详解

文章目录 【C篇】C类与对象深度解析&#xff08;二&#xff09;前言1. 类的默认成员函数2. 构造函数2.1 函数名与类名相同2.2 无返回值2.3 对象实例化时系统会自动调用2.4 构造函数可以重载2.5 默认构造函数的生成规则2.6 无参构造函数与全缺省构造函数的关系2.7 内置类型与自定…

五、(JS)window中的定时器

一、为什么叫做window中的定时器 我们在全局中会用到一些函数&#xff0c;比如说alert函数&#xff0c;prompt函数&#xff0c;setTimeout等等 我们有在这里定义过这些函数吗&#xff1f;很明显没有。可见我们这些函数都是来自于window。 所以还可以写成window.setTimeout。…

Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解

目录 一、Linux软件包管理器 - yum&#xff08;ubuntu用apt代替yum&#xff09;1、Linux下安装软件的方式2、认识 yum3、查找软件包4、安装软件5、如何实现本地机器和云服务器之间的文件互传 二、Linux编辑器 - vim1、vim 的基本概念2、vim 下各模式的切换3、vim 命令模式各命令…

【Linux篇】TCP/IP协议(笔记)

目录 一、TCP/IP协议族体系结构 1. 数据链路层 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;常用协议 ① ARP协议&#xff08;Address Resolve Protocol&#xff0c;地址解析协议&#xff09; ② RARP协议&#xff08;Reverse Address Resolve Protocol&…

[Meachines] [Easy] Sauna DC域+AS-REP+TGT票证窃取+AutoLogon凭据+DCSync攻击

信息收集 IP AddressOpening Ports10.10.10.175TCP:53,80,88,135,139,389,445,464,593,3268,3269,5985 $ nmap -p- 10.10.10.175 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 53/tcp open domain? | fingerprint-strings: | DNSVersionBindReqTCP…

电容的不同材质对应的温度范围

电容的温度范围是指电容在不同温度下能够正常工作的范围。不同材质的电容具有不同的温度特性&#xff0c;以下是一些常见电容材质的温度范围。 C0G/NP0&#xff1a;这类电容具有非常稳定的电气性能&#xff0c;工作温度范围通常为-55℃至125℃。 X7R&#xff1a;X7R材质的电容…

2021高教社杯全国大学生数学建模竞赛C题 Python代码演示

目录 问题一1.1 根据附件 1&#xff0c;对 402 家供应商的供货特征进行量化分析计算供货特征数据标准化对正向指标归一化对负向指标归一化 1.2 建立反映保障企业生产重要性的数学模型熵权法熵权法-TOPSISAHP 1.3 在此基础上确定 50 家最重要的供应商&#xff0c;并在论文中列表…

软件工程毕业设计开题汇总

文章目录 &#x1f6a9; 1 前言1.1 选题注意事项1.1.1 难度怎么把控&#xff1f;1.1.2 题目名称怎么取&#xff1f; 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢&#xff1f; &#x1f6a9;2 选题概览&#x1f6a9; 3 项目概览题目1 : 大数据电商…

几个常见的非初等函数

在多个激励共同作用下,其响应恒等于每个激励单独引起的响应之和。这种现象称为线性现象。线性性质使得对这类现象的数学描述大为简化,它是线性系统理论的基础。 本篇博客将简单介绍以下几个常用的非初等函数。 rect 矩形函数(Rectangular Function)sinc 函数(Sinc Function)三…

“树”据结构:并查集从入门到AC

“树”据结构&#xff1a;并查集 前言算法设计代码示例优化相关文章 前言 在一组数据中&#xff0c;数据被分为了不同的集合&#xff0c;那么其中的集合往往可以用树形来表示。而区分集合&#xff0c;与查找集合的元素&#xff0c;就会成为核心的问题。并查集主要就是解决这类…

模特妙善:一位多才多艺的短视频达人,绽放新光彩

模特妙善&#xff0c;在当今多元化的网络时代&#xff0c;短视频已成为人们生活中不可或缺的一部分。而在这一领域中&#xff0c;有一位以其独特魅力和多才多艺而备受瞩目的达人&#xff0c;她就是妙善&#xff0c;本名高艳芳。 模特妙善&#xff0c;出生于山西省的著名景点——…

一款免费的AI搜索工具,提升您的搜索效率!

开搜AI是一款面向大众的、直达答案的AI搜索引擎&#xff0c;它能够为用户问题提供直接、精准的答案&#xff0c;并自动总结重点、生成大纲、思维导图并下载。 开搜AI功能特点 精准结果呈现&#xff1a;开搜AI能够直接呈现精准结果&#xff0c;省去用户翻阅多个的繁琐过程。信…

MyBatis 增删改查【后端 17】

MyBatis 增删改查 引言 MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射&#xff0c;将接口和 Java 的 POJOs (…

Adding Placement Constraints

步骤2&#xff1a;添加放置约束 探索一些设计层次结构&#xff0c;并开始放置逻辑元素以创建物理 约束。 1.从Flow Navigator中&#xff0c;选择Open Synthetic Design。综合设计可能 如果您直接进入此步骤&#xff0c;则已经打开。 合成网表打开&#xff0c;显示设备窗口。 2.…

Note091203_Outlook邮件撤回操作

Note091203_Outlook邮件撤回操作 如图所示&#xff1a; step1: 打开outlook step2&#xff1a; 点击已发送邮件&#xff0c;选中目标撤回邮件双击打开&#xff1b; step3&#xff1a; 点击图中2框所示&#xff0c;可看见撤回操作&#xff1b; 以上