FinSight Enterprise Backend 是一个基于 Spring Boot 3 的企业级智能管理平台后端。项目围绕企业后台常见能力建设,提供用户、角色、菜单、部门、日志、监控、文件中心、工作流、即时通讯、AI 模型对话与 RAG 知识库能力,适合作为企业内部管理系统、智能办公平台、知识库问答平台的后端基础工程。
当前仓库是后端工程。前端工程位于
../../1web/financial_intelligence_system/,前端技术栈为 Vue 3、TypeScript、Element Plus。
- 企业级 RBAC 权限体系:用户、角色、菜单、部门、按钮权限、二级/三级/多级菜单。
- JWT + Spring Security:无状态认证、接口权限校验、统一 401 响应。
- Redis 安全增强:登录失败限制、Token 黑名单、在线状态、普通用户单设备在线、管理员强制退出用户。
- 中文 Swagger/OpenAPI:接口分组清晰,支持 Bearer Token 调试。
- 登录日志、操作日志、模型对话日志:满足后台审计和运维追踪。
- 系统监控:服务器、JVM、磁盘、Redis、PostgreSQL 实时指标。
- 文件中心:本地存储和 MinIO/S3 存储可切换,支持上传、下载、在线预览、Office 转 PDF 预览。
- 工作流:基于 Flowable BPMN 2.0 的流程定义、部署、发起、审批、驳回、实例查询。
- 系统内即时通讯:用户单聊、群聊、未读消息、文件消息、撤回、搜索、WebSocket 实时推送。
- AI 模型管理:Chat 模型与 Embedding 模型分开配置,可在管理员后台维护和测试。
- 大模型对话:支持普通对话、SSE 流式输出、会话历史、Markdown 前端渲染。
- RAG 知识库:基于 PostgreSQL 16 + pgvector,支持文档解析、父子切片、向量检索、全文检索、RRF 融合召回、引用来源返回。
| 类型 | 技术 |
|---|---|
| 基础框架 | Java 21、Spring Boot 3.5.4 |
| Web | Spring MVC、Spring Validation |
| 安全 | Spring Security、JWT、BCrypt |
| 数据库 | PostgreSQL 16、pgvector |
| 数据访问 | Spring JDBC JdbcClient |
| 数据迁移 | Flyway |
| 缓存/会话 | Redis、Spring Data Redis |
| 接口文档 | SpringDoc OpenAPI、Swagger UI |
| 文件存储 | 本地文件系统、MinIO/S3 |
| 工作流 | Flowable 7.2 |
| 文档解析 | PDFBox、Apache POI |
| Office 预览 | LibreOffice/soffice 转 PDF |
| 实时通信 | Spring WebSocket |
前端 Vue 3
|
| HTTP / SSE / WebSocket
v
Spring Boot Backend
|
|-- Security Filter Chain
| |-- JWT 校验
| |-- Redis Token 黑名单
| |-- 普通用户单设备在线校验
|
|-- Controller
| |-- AuthController
| |-- SystemController
| |-- AiController
| |-- KnowledgeController
| |-- FileController
| |-- WorkflowController
| |-- ImController
| |-- LogController
| |-- MonitorController
|
|-- Service
| |-- AI 调用与流式响应
| |-- RAG 文档解析、切片、向量化、混合检索
| |-- 文件存储、本地/MinIO 切换
| |-- Redis 会话安全
| |-- 审计日志
|
|-- PostgreSQL 16 + pgvector
|-- Redis
|-- MinIO/S3 可选
|-- 大模型服务 OpenAI Compatible API
Financial_Intelligence_System/
├── pom.xml
├── mvnw
├── README.md
├── HELP.md
├── data/
│ └── uploads/ # 默认本地文件上传目录
└── src/
├── main/
│ ├── java/com/rpa/financial_intelligence_system/
│ │ ├── FinancialIntelligenceSystemApplication.java
│ │ ├── common/ # 统一响应、全局异常处理
│ │ ├── config/ # 安全、OpenAPI、异步、WebSocket 配置
│ │ ├── controller/ # REST API 控制器
│ │ ├── security/ # JWT、用户认证、操作日志过滤器
│ │ └── service/ # 业务服务、AI、RAG、文件、Redis、IM
│ └── resources/
│ ├── application.yaml
│ └── db/migration/ # Flyway 数据库迁移脚本
└── test/
- JDK 21+
- Maven 3.9+,也可以直接使用项目自带的
./mvnw - PostgreSQL 16+
- PostgreSQL 扩展:pgvector
- Redis 6+
- 可选:MinIO 或兼容 S3 的对象存储
- 可选:LibreOffice,用于 Word、Excel、PPT 转 PDF 在线预览
请先确认 PostgreSQL 已安装 pgvector 扩展。macOS 可通过 Homebrew 安装:
brew install pgvector创建数据库:
createdb -U postgres financial_ai如果需要手动初始化扩展:
CREATE EXTENSION IF NOT EXISTS vector;本地默认连接:
host: localhost
port: 6379
password: 空
默认配置位于 src/main/resources/application.yaml,也可以通过环境变量覆盖。
本地默认数据库配置:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/financial_ai
username: postgres
password: 123456./mvnw spring-boot:run默认访问地址:
http://localhost:8080
./mvnw -DskipTests compile项目支持通过环境变量覆盖核心配置,适合本地开发、测试环境和生产环境分别配置。
| 环境变量 | 默认值 | 说明 |
|---|---|---|
SERVER_PORT |
8080 |
后端服务端口 |
DB_URL |
jdbc:postgresql://localhost:5432/financial_ai |
PostgreSQL JDBC 地址 |
DB_USERNAME |
postgres |
数据库用户名 |
DB_PASSWORD |
123456 |
数据库密码 |
REDIS_HOST |
localhost |
Redis 地址 |
REDIS_PORT |
6379 |
Redis 端口 |
REDIS_PASSWORD |
空 | Redis 密码 |
JWT_SECRET |
开发默认值 | JWT 签名密钥 |
JWT_EXPIRATION_HOURS |
12 |
Token 有效小时数 |
LIBREOFFICE_COMMAND |
soffice |
LibreOffice 命令路径 |
OFFICE_PREVIEW_TIMEOUT_SECONDS |
60 |
Office 转 PDF 超时时间 |
AI_BASE_URL |
https://api.openai.com/v1 |
默认 Chat API 基础地址 |
AI_API_KEY |
空 | 默认模型 API Key |
AI_CHAT_MODEL |
gpt-4.1-mini |
默认 Chat 模型 |
AI_EMBEDDING_MODEL |
text-embedding-3-small |
默认 Embedding 模型 |
AI_EMBEDDING_DIMENSIONS |
1536 |
默认 Embedding 维度 |
生产环境必须覆盖
JWT_SECRET,并且不要把任何真实 API Key、MinIO Secret、数据库密码提交到 GitHub。
Flyway 初始化脚本会创建一个超级管理员账号:
用户名:admin
密码:Admin@123
该账号拥有全部菜单和接口权限,建议首次部署后立即修改密码。
启动后访问:
http://localhost:8080/swagger-ui.html
OpenAPI JSON:
http://localhost:8080/v3/api-docs
认证方式:
- 调用
/api/auth/login获取token。 - 打开 Swagger 右上角
Authorize。 - 填入登录返回的 JWT Token。
- 登录接口无需认证,其余业务接口默认需要认证。
对应控制器:AuthController
POST /api/auth/login:登录。POST /api/auth/logout:退出登录。GET /api/auth/me:查询当前用户信息、角色、权限菜单。
登录安全能力:
- Redis 记录登录失败次数,短时间连续失败会被限制。
- JWT Token 退出后进入 Redis 黑名单。
- 普通用户只允许一台设备在线,后登录设备会挤掉前一设备。
- 超级管理员不受单设备限制。
对应控制器:SystemController
能力包括:
- 用户管理:新增、修改、删除、查询、在线状态。
- 角色管理:角色 CRUD、角色菜单授权。
- 菜单管理:目录、菜单、按钮权限,支持多级菜单。
- 部门管理:部门树、负责人、排序、状态。
- 管理员强制退出用户:
POST /api/system/users/{id}/force-logout。
权限模型:
- 角色表:
sys_role - 菜单表:
sys_menu - 用户角色关系:
sys_user_role - 角色菜单关系:
sys_role_menu - 接口通过
@PreAuthorize进行权限校验。
对应控制器:LogController
- 登录日志:
GET /api/logs/login - 操作日志:
GET /api/logs/operation - 模型对话日志:
GET /api/logs/chat - 删除单条日志:
DELETE /api/logs/{type}/{id} - 清理历史日志:
DELETE /api/logs/{type}?beforeDays=90
操作日志通过过滤器采集接口、耗时、状态码、用户、IP、错误信息等内容。
对应控制器:MonitorController
GET /api/monitor/system
返回指标包括:
- 服务器基本信息
- JVM 内存和运行信息
- 磁盘使用情况
- Redis 状态、版本、客户端、内存、Key 数
- PostgreSQL 状态、连接数、数据库大小
对应控制器:FileController
能力包括:
- 存储设置查询、保存、测试。
- 本地存储和 MinIO/S3 存储切换。
- 文件上传、下载、删除、在线预览。
- Word、Excel、PPT 转 PDF 预览。
常用接口:
GET /api/storage/settingsPUT /api/storage/settingsPOST /api/storage/settings/testGET /api/filesPOST /api/filesGET /api/files/{id}/downloadGET /api/files/{id}/previewGET /api/files/{id}/preview-pdfDELETE /api/files/{id}
默认本地上传目录:
data/uploads
Office 转 PDF 依赖 LibreOffice。若系统无法识别 soffice,请通过 LIBREOFFICE_COMMAND 指定完整路径。
对应控制器:WorkflowController
基于 Flowable BPMN 2.0,支持:
- 流程定义列表。
- 创建并部署流程。
- 修改并重新部署流程。
- 删除未运行过的流程定义。
- 发起流程实例。
- 查询流程实例。
- 查询我的待办。
- 审批通过或驳回。
常用接口:
GET /api/workflow/definitionsPOST /api/workflow/definitionsPUT /api/workflow/definitions/{id}DELETE /api/workflow/definitions/{id}POST /api/workflow/instancesGET /api/workflow/instancesGET /api/workflow/tasksPOST /api/workflow/tasks/{id}/handle
对应控制器:ImController
能力包括:
- 查询可聊天用户。
- 发起或打开单聊。
- 创建群聊。
- 查询会话列表和消息记录。
- 发送文本、图片、文件消息。
- 未读数统计。
- 消息已读。
- 正在输入状态。
- 两分钟内撤回本人消息。
- 聊天记录搜索。
- 群成员管理、群名修改、置顶、免打扰。
- WebSocket 实时推送。
WebSocket 地址:
ws://localhost:8080/ws/chat?token=JWT_TOKEN
对应控制器:AiController
能力包括:
- 普通模型对话。
- SSE 流式模型对话。
- 模型会话列表、新建、重命名、删除。
- 会话消息查询。
- 模型配置查询、新增、修改、删除。
- Chat 模型连通性测试。
- Embedding 模型连通性测试。
- 可选挂载知识库进行 RAG 问答。
模型配置表:ai_model_config
配置项分为两组:
- Chat 模型配置:
chat_api_url、chat_api_key_encrypted、chat_model、temperature、max_tokens - Embedding 模型配置:
vector_base_url、vector_api_path、vector_api_key_encrypted、embedding_model、embedding_dimensions、vector_concurrency
API Key 会加密后保存,密钥派生自 JWT_SECRET。生产环境必须固定且妥善保管 JWT_SECRET,否则已加密配置可能无法解密。
对应控制器:KnowledgeController
RAG 知识库模块用于把企业文档解析、切片、向量化,并在对话时进行知识库增强回答。
核心表:
knowledge_base:知识库集合。knowledge_document:知识库文档,关联文件中心sys_file。knowledge_chunk:文档切片,包含父块、子块、页码、Token 数、Embedding、全文检索向量。
切片表使用 pgvector HNSW 索引:
CREATE INDEX idx_knowledge_chunk_embedding_hnsw
ON knowledge_chunk
USING HNSW (embedding vector_cosine_ops)
WHERE embedding IS NOT NULL;同时使用 PostgreSQL GIN 全文索引:
CREATE INDEX idx_knowledge_chunk_search_vector
ON knowledge_chunk
USING GIN(search_vector);上传文档
|
v
写入 sys_file
|
v
创建 knowledge_document,状态 PENDING
|
v
后台异步解析文档,状态 PROCESSING
|
v
生成 Parent Chunk
|
v
生成 Child Chunk
|
v
调用 Embedding API
|
v
写入 pgvector
|
v
状态 COMPLETED
如果解析或向量化失败,文档状态会更新为 FAILED,并保存错误信息,不会导致主服务崩溃。
- Parent Chunk:较大的上下文块,约 800-1000 Tokens,用于最终送入大模型。
- Child Chunk:较小的检索块,约 200-300 Tokens,带 Overlap,用于向量化和精准召回。
- 检索时优先召回 Child Chunk,再回溯到 Parent Chunk 作为上下文。
KnowledgeRetrievalService 实现了混合检索:
- 向量语义检索:使用 pgvector 余弦相似度。
- 全文关键词检索:使用 PostgreSQL
tsvector/tsquery。 - RRF 融合:使用 Reciprocal Rank Fusion 融合多路召回结果。
- 元数据过滤:支持按知识库 ID 和当前用户权限过滤。
POST /api/ai/chat/stream 支持传入 knowledgeBaseIds。
请求示例:
{
"message": "请总结这份部署手册的环境要求",
"conversationId": 1,
"knowledgeBaseIds": [1]
}指定知识库后,后端会:
- 对用户问题生成 Query Embedding。
- 通过混合检索召回相关切片。
- 组装防幻觉 System Prompt。
- 调用 Chat 模型进行 SSE 流式回答。
- 返回答案和引用来源。
防幻觉原则:
- 仅基于参考文档回答。
- 知识库无相关信息时,明确说明无法回答。
- 引用来源按编号返回,前端可聚合展示为“第 1、3、5、7 页”。
项目使用 Flyway 自动管理数据库结构,迁移脚本位于:
src/main/resources/db/migration
当前主要迁移:
| 版本 | 说明 |
|---|---|
| V1 | 初始化系统管理、用户、角色、菜单、AI 基础知识表 |
| V2 | AI 模型配置 |
| V3 | Chat 模型和向量模型配置拆分 |
| V4 | 登录日志、操作日志、模型对话日志 |
| V5 | 系统监控菜单 |
| V6 | 文件中心、存储配置、工作流基础表 |
| V7 | 系统监控移动到系统管理 |
| V8 | 文件设置菜单调整 |
| V9 | 文件设置移动到系统管理 |
| V10 | Flowable BPMN 元数据 |
| V11 | 模型设置、日志管理移动到系统管理 |
| V12 | 企业即时通讯 |
| V13 | AI 会话历史 |
| V14 | RAG 知识库增强、父子切片、HNSW、全文索引 |
首次启动时 Flyway 会自动执行迁移。已有数据库升级时请勿手动修改 flyway_schema_history。
| 模块 | 路径 |
|---|---|
| 登录 | POST /api/auth/login |
| 当前用户 | GET /api/auth/me |
| 用户管理 | /api/system/users |
| 角色管理 | /api/system/roles |
| 菜单管理 | /api/system/menus |
| 部门管理 | /api/system/departments |
| 系统监控 | GET /api/monitor/system |
| 文件中心 | /api/files |
| 存储设置 | /api/storage/settings |
| 工作流 | /api/workflow/** |
| 即时通讯 | /api/im/** |
| 模型对话 | /api/ai/chat |
| 流式对话 | /api/ai/chat/stream |
| 模型设置 | /api/ai/settings |
| 知识库 | /api/knowledge/** |
| 日志管理 | /api/logs/** |
完整接口以 Swagger UI 为准。
- Java 版本:21。
- 框架版本:Spring Boot 3.5.x。
- 新接口请统一返回
ApiResponse。 - 新接口请添加中文
@Operation和合适的@Tag。 - 需要权限控制的接口请添加
@PreAuthorize。 - 数据库结构变更必须新增 Flyway 脚本,不要直接改已发布迁移。
- 业务异常优先抛出可读的
IllegalArgumentException,由全局异常处理器统一返回。 - 密钥类字段不要明文落库,参考
SecretCryptoService。 - 文件路径必须做 normalize 和越权校验,避免目录穿越。
- RAG 相关任务失败时应更新状态为
FAILED,并保留错误信息,不能影响主应用。
开源或生产部署前请重点检查:
- 修改默认管理员密码。
- 使用足够强的
JWT_SECRET。 - 不要提交真实数据库密码、Redis 密码、模型 API Key、MinIO Secret。
- 生产环境限制 CORS 来源。
- 生产环境建议启用 HTTPS。
- 对公网开放时建议在网关层增加限流。
- 定期清理历史日志和临时预览文件。
- 根据业务需要补充接口级、数据级权限。
说明 PostgreSQL 未安装 pgvector。请先安装 pgvector,并确认当前数据库可以执行:
CREATE EXTENSION IF NOT EXISTS vector;请确认 Redis 正在运行,并检查以下配置:
spring:
data:
redis:
host: localhost
port: 6379请安装 LibreOffice,并确认命令可执行:
soffice --version如果命令不在 PATH 中,请设置:
export LIBREOFFICE_COMMAND=/Applications/LibreOffice.app/Contents/MacOS/soffice常见原因:
- 模型配置中的 Embedding API Key 无效。
- Embedding 模型维度与数据库
vector(1024)不一致。 - 上传文件内容无法解析。
- 网络无法访问模型服务。
请先在管理员后台测试向量化模型,再重新处理文档。
这是系统设计。普通用户只允许一台设备在线,超级管理员除外。
建议开源前补充以下文件:
LICENSE.gitignoreCONTRIBUTING.mdSECURITY.md- 示例配置文件,例如
application-example.yaml
本项目 README 不包含任何真实密钥。提交 GitHub 前请再次检查:
git diff --cached
git status如果仓库历史中曾经提交过密钥,请在公开前先轮换密钥,并清理 Git 历史。