From 15d1cb698a21a3a1ee21aaf50ed58e7fd5220444 Mon Sep 17 00:00:00 2001 From: zhangjf Date: Sat, 14 Feb 2026 00:19:30 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=96=87=E6=A1=A3=EF=BC=8C=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=9E=B6=E6=9E=84=E3=80=81=E6=8A=80=E6=9C=AF?= =?UTF-8?q?=E9=80=89=E5=9E=8B=E3=80=81=E6=95=B0=E6=8D=AE=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E3=80=81=E5=AE=89=E5=85=A8=E6=9E=B6=E6=9E=84=E3=80=81=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/资金服务平台 FundPlatform 架构设计文档.md | 510 ++++++++++++++++++ 1 file changed, 510 insertions(+) create mode 100644 doc/资金服务平台 FundPlatform 架构设计文档.md diff --git a/doc/资金服务平台 FundPlatform 架构设计文档.md b/doc/资金服务平台 FundPlatform 架构设计文档.md new file mode 100644 index 0000000..7187380 --- /dev/null +++ b/doc/资金服务平台 FundPlatform 架构设计文档.md @@ -0,0 +1,510 @@ +# 资金服务平台 (FundPlatform) - 架构设计文档 + +> **文档版本**: v1.0 +> **创建日期**: 2026-02-13 +> **项目名称**: 资金服务平台 +> **项目代号**: fundplatform + +--- + +## 一、架构设计概述 + +### 1.1 设计目标 + +| 目标 | 描述 | +|------|------| +| **高可用性** | 系统可用性≥99.5%,支持故障自动恢复 | +| **高性能** | 支持≥100人并发,接口响应<3秒 | +| **可扩展性** | 微服务架构,支持水平扩展 | +| **安全性** | 数据加密传输,完善的权限控制 | +| **可维护性** | 模块化设计,代码结构清晰 | + +### 1.2 架构风格 + +采用 **微服务架构** + **前后端分离** 模式: +- 后端:Spring Cloud Alibaba 微服务框架 +- 前端:Vue 3 + UniApp 多端应用 +- 数据层:MySQL + Redis 缓存 +- 基础设施:Nacos 服务治理、Nginx 负载均衡 + +--- + +## 二、系统整体架构 + +### 2.1 架构全景图 + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 接入层 (Access Layer) │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ Web端 │ │ 移动端 │ │ 小程序 │ │ H5页面 │ │ +│ │ (Vue3) │ │ (UniApp) │ │ (UniApp) │ │ (UniApp) │ │ +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ +└─────────┼────────────────┼────────────────┼────────────────┼───────────────┘ + │ │ │ │ + └────────────────┴────────────────┴────────────────┘ + │ +┌────────────────────────────────────┼────────────────────────────────────────┐ +│ 网关层 (Gateway Layer) │ +│ ┌─────────────────────────────────┴─────────────────────────────────────┐ │ +│ │ Nginx 负载均衡 │ │ +│ │ SSL终止 / 静态资源 / 反向代理 │ │ +│ └─────────────────────────────────┬─────────────────────────────────────┘ │ +│ │ │ +│ ┌─────────────────────────────────┴─────────────────────────────────────┐ │ +│ │ Spring Cloud Gateway │ │ +│ │ 路由转发 / 限流熔断 / 鉴权认证 / 日志记录 │ │ +│ └─────────────────────────────────┬─────────────────────────────────────┘ │ +└────────────────────────────────────┼────────────────────────────────────────┘ + │ +┌────────────────────────────────────┼────────────────────────────────────────┐ +│ 服务层 (Service Layer) │ +│ │ │ +│ ┌─────────────────────────────────┴─────────────────────────────────────┐ │ +│ │ Nacos 服务注册与配置中心 │ │ +│ └───────────────────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ +│ │ 系统服务 │ │ 客户中心 │ │ 项目中心 │ │ 需求中心 │ │ +│ │ fund-sys │ │ fund-cust │ │ fund-proj │ │ fund-req │ │ +│ │ │ │ │ │ │ │ │ │ +│ │ • 用户管理 │ │ • 客户管理 │ │ • 项目管理 │ │ • 需求工单 │ │ +│ │ • 权限管理 │ │ • 联系人管理 │ │ • 成员管理 │ │ • 应收款管理 │ │ +│ │ • 部门管理 │ │ │ │ │ │ │ │ +│ │ • 日志管理 │ │ │ │ │ │ │ │ +│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ +│ │ │ │ │ │ +│ ┌──────┴───────┐ ┌──────┴───────┐ ┌──────┴───────┐ ┌──────┴───────┐ │ +│ │ 支出中心 │ │ 收款中心 │ │ 报表中心 │ │ 文件中心 │ │ +│ │ fund-exp │ │ fund-receipt │ │ fund-report │ │ fund-file │ │ +│ │ │ │ │ │ │ │ │ │ +│ │ • 支出类型 │ │ • 收款记录 │ │ • 收支统计 │ │ • 文件上传 │ │ +│ │ • 支出申请 │ │ • 收款凭证 │ │ • 趋势分析 │ │ • 文件存储 │ │ +│ │ • 付款管理 │ │ • 账期管理 │ │ • 数据导出 │ │ • 文件下载 │ │ +│ │ • 统计分析 │ │ │ │ │ │ │ │ +│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │ +│ │ +└──────────────────────────────────────────────────────────────────────────────┘ + │ +┌────────────────────────────────────┼────────────────────────────────────────┐ +│ 数据层 (Data Layer) │ +│ │ │ +│ ┌─────────────────────────────────┴─────────────────────────────────────┐ │ +│ │ Redis 缓存集群 │ │ +│ │ 会话缓存 / 热点数据 / 分布式锁 / 限流计数器 │ │ +│ └───────────────────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────────────────────────┐ │ +│ │ MySQL 8.0 主从集群 │ │ +│ │ 用户库 / 业务库 / 日志库 / 报表库 │ │ +│ └─────────────────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────────────────────────┐ │ +│ │ 腾讯COS 对象存储 │ │ +│ │ 文件存储 / 图片存储 / 凭证附件 │ │ +│ └─────────────────────────────────────────────────────────────────────┘ │ +│ │ +└──────────────────────────────────────────────────────────────────────────────┘ +``` + +### 2.2 服务划分 + +| 服务名 | 服务编码 | 职责 | 端口范围 | +|--------|----------|------|----------| +| 网关服务 | fund-gateway | 路由、鉴权、限流 | 8080 | +| 系统服务 | fund-sys | 用户、权限、部门、日志 | 8100-8109 | +| 客户中心 | fund-cust | 客户、联系人管理 | 8110-8119 | +| 项目中心 | fund-proj | 项目、成员管理 | 8120-8129 | +| 需求中心 | fund-req | 需求工单、应收款 | 8130-8139 | +| 支出中心 | fund-exp | 支出类型、支出管理 | 8140-8149 | +| 收款中心 | fund-receipt | 收款记录、账期管理 | 8150-8159 | +| 报表中心 | fund-report | 统计分析、数据导出 | 8160-8169 | +| 文件中心 | fund-file | 文件上传、存储管理 | 8170-8179 | + +--- + +## 三、技术架构 + +### 3.1 技术栈选型 + +#### 3.1.1 后端技术栈 + +| 层级 | 技术选型 | 版本 | 用途 | +|------|----------|------|------| +| **基础框架** | Spring Boot | 3.2.x | 应用基础框架 | +| **微服务框架** | Spring Cloud Alibaba | 2022.x | 微服务治理 | +| **服务注册** | Nacos | 3.0.0 | 服务注册与配置中心 | +| **服务网关** | Spring Cloud Gateway | 4.x | API网关 | +| **负载均衡** | Spring Cloud LoadBalancer | 4.x | 客户端负载均衡 | +| **服务调用** | OpenFeign | 4.x | 声明式HTTP客户端 | +| **服务容错** | Sentinel | 1.8.x | 限流、熔断、降级 | +| **ORM框架** | MyBatis-Plus | 3.5.x | 数据访问层 | +| **数据库连接池** | Druid | 1.2.x | 连接池、监控 | +| **缓存框架** | Spring Data Redis | 3.x | Redis操作 | +| **安全框架** | Spring Security | 6.x | 认证授权 | +| **JWT令牌** | jjwt | 0.12.x | Token生成与验证 | +| **API文档** | Knife4j | 4.x | Swagger增强 | +| **对象存储** | 腾讯云COS SDK | 5.x | 文件存储 | +| **定时任务** | XXL-JOB | 2.4.x | 分布式任务调度 | +| **日志框架** | Logback + SLF4J | - | 日志记录 | +| **工具类库** | Hutool | 5.8.x | 常用工具 | + +#### 3.1.2 前端技术栈 + +| 端 | 技术选型 | 版本 | 用途 | +|----|----------|------|------| +| **管理后台** | Vue | 3.4.x | 前端框架 | +| | TypeScript | 5.x | 类型安全 | +| | Element Plus | 2.5.x | UI组件库 | +| | Pinia | 2.x | 状态管理 | +| | Vue Router | 4.x | 路由管理 | +| | Axios | 1.x | HTTP客户端 | +| | ECharts | 5.x | 图表库 | +| | Vite | 5.x | 构建工具 | +| **移动端** | UniApp | 3.x | 跨端框架 | +| | Vue | 3.x | 前端框架 | +| | uView UI | 2.x | 移动端UI库 | + +### 3.2 架构分层 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ 表现层 (Presentation) │ +│ Controller / DTO / VO / 参数校验 / 异常处理 │ +└─────────────────────────────────────────────────────────────┘ + │ +┌─────────────────────────────────────────────────────────────┐ +│ 业务层 (Business) │ +│ Service / 业务逻辑 / 事务管理 / 权限校验 │ +└─────────────────────────────────────────────────────────────┘ + │ +┌─────────────────────────────────────────────────────────────┐ +│ 数据访问层 (Data Access) │ +│ Mapper / DAO / MyBatis-Plus / 数据库操作 │ +└─────────────────────────────────────────────────────────────┘ + │ +┌─────────────────────────────────────────────────────────────┐ +│ 基础设施层 (Infrastructure) │ +│ Redis / MySQL / COS / MQ / 缓存 / 消息队列 │ +└─────────────────────────────────────────────────────────────┘ +``` + +--- + +## 四、数据架构 + +### 4.1 数据库设计 + +#### 4.1.1 数据库划分 + +| 数据库 | 用途 | 主要表 | +|--------|------|--------| +| fund_sys | 系统数据 | sys_user, sys_dept, sys_role, sys_menu, sys_log | +| fund_biz | 业务数据 | customer, project, requirement, expense, receivable, receipt | +| fund_file | 文件数据 | file_record, file_chunk | + +#### 4.1.2 分库分表策略 + +| 表名 | 策略 | 分片键 | 说明 | +|------|------|--------|------| +| sys_operation_log | 按时间分表 | created_time | 每月一张表 | +| expense | 按时间分表 | expense_date | 每季度一张表 | +| receipt | 按时间分表 | receipt_date | 每季度一张表 | + +### 4.2 缓存设计 + +#### 4.2.1 缓存策略 + +| 缓存类型 | Key前缀 | 过期时间 | 说明 | +|----------|---------|----------|------| +| 用户会话 | `session:` | 30分钟 | JWT Token 黑名单 | +| 用户信息 | `user:info:` | 1小时 | 用户基本信息缓存 | +| 字典数据 | `dict:` | 24小时 | 系统字典数据 | +| 热点数据 | `hot:` | 10分钟 | 频繁访问数据 | +| 限流计数 | `limit:` | 1分钟 | API限流计数 | +| 分布式锁 | `lock:` | 30秒 | 并发控制 | + +#### 4.2.2 缓存更新策略 + +``` +┌─────────────┐ 查询 ┌─────────────┐ +│ 业务请求 │ ───────────> │ 查询缓存 │ +└─────────────┘ └──────┬──────┘ + │ + ┌───────────────┼───────────────┐ + │ 命中 │ 未命中 │ + ▼ ▼ │ + ┌─────────────┐ ┌─────────────┐ │ + │ 返回缓存 │ │ 查询数据库 │ │ + │ 数据 │ │ │ │ + └─────────────┘ └──────┬──────┘ │ + │ │ + ▼ │ + ┌─────────────┐ │ + │ 写入缓存 │<─────┘ + │ 设置过期 │ + └─────────────┘ +``` + +--- + +## 五、安全架构 + +### 5.1 认证授权 + +#### 5.1.1 JWT认证流程 + +``` +┌─────────┐ ┌─────────┐ +│ 客户端 │ │ 服务端 │ +└────┬────┘ └────┬────┘ + │ │ + │ 1. 登录请求 (username/password) │ + │ ──────────────────────────────────────> │ + │ │ + │ ┌─────────┴─────────┐ + │ │ 验证用户名密码 │ + │ │ 生成JWT Token │ + │ └─────────┬─────────┘ + │ │ + │ 2. 返回 Token │ + │ <────────────────────────────────────── │ + │ │ + │ 3. 业务请求 (Header: Authorization) │ + │ ──────────────────────────────────────> │ + │ ┌─────────┴─────────┐ + │ │ 验证Token有效性 │ + │ │ 解析用户信息 │ + │ │ 权限校验 │ + │ └─────────┬─────────┘ + │ │ + │ 4. 返回业务数据 │ + │ <────────────────────────────────────── │ +``` + +#### 5.1.2 权限模型 + +采用 **RBAC** (Role-Based Access Control) 模型: + +``` +用户 (User) ──N:M──> 角色 (Role) ──N:M──> 权限 (Permission) + │ + └─N:M──> 菜单/按钮 (Menu) +``` + +### 5.2 数据安全 + +| 安全措施 | 实现方式 | +|----------|----------| +| 传输加密 | HTTPS/TLS 1.3 | +| 密码加密 | BCrypt (强度10) | +| 敏感数据 | AES-256 加密存储 | +| SQL注入 | MyBatis预编译语句 | +| XSS攻击 | 前端转义 + 后端过滤 | +| CSRF攻击 | Token验证 + SameSite Cookie | + +--- + +## 六、部署架构 + +### 6.1 生产环境部署 + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ 负载均衡层 │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ Nginx (主) + Nginx (备) │ │ +│ │ Keepalived VIP: 192.168.1.10 │ │ +│ └─────────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────────┘ + │ +┌─────────────────────────────────────────────────────────────────┐ +│ 应用服务层 │ +│ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ Gateway-1 │ │ Gateway-2 │ │ Gateway-3 │ │ +│ │ :8080 │ │ :8080 │ │ :8080 │ │ +│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ +│ │ │ │ │ +│ ┌──────┴────────────────┴────────────────┴──────┐ │ +│ │ Nacos 集群 (3节点) │ │ +│ │ 8848 / 9848 / 7848 │ │ +│ └───────────────────────────────────────────────┘ │ +│ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │fund-sys │ │fund-cust │ │fund-proj │ │fund-req │ │ +│ │ x 2 │ │ x 2 │ │ x 2 │ │ x 2 │ │ +│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │fund-exp │ │fund-rec │ │fund-rpt │ │fund-file │ │ +│ │ x 2 │ │ x 2 │ │ x 2 │ │ x 2 │ │ +│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ + │ +┌─────────────────────────────────────────────────────────────────┐ +│ 数据存储层 │ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ Redis 集群 (6节点,3主3从) │ │ +│ │ 6379 / 6380 / 6381 │ │ +│ └─────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────────────────────────────────┐ │ +│ │ MySQL 主从集群 │ │ +│ │ Master: 3306 ──> Slave: 3306 (x2) │ │ +│ └─────────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +### 6.2 容器化部署 + +#### 6.2.1 Docker Compose 配置 + +```yaml +version: '3.8' +services: + # Nacos + nacos: + image: nacos/nacos-server:v3.0.0 + ports: + - "8848:8848" + - "9848:9848" + environment: + - MODE=standalone + + # Redis + redis: + image: redis:8.0.2 + ports: + - "6379:6379" + command: redis-server --requirepass zjf@123456 + + # MySQL + mysql: + image: mysql:8.0 + ports: + - "3306:3306" + environment: + - MYSQL_ROOT_PASSWORD=zjf@123456 + volumes: + - ./sql:/docker-entrypoint-initdb.d + + # Gateway + gateway: + image: fundplatform/fund-gateway:1.0.0 + ports: + - "8080:8080" + environment: + - NACOS_SERVER=nacos:8848 + + # Services + fund-sys: + image: fundplatform/fund-sys:1.0.0 + deploy: + replicas: 2 + environment: + - NACOS_SERVER=nacos:8848 + - DB_HOST=mysql + - REDIS_HOST=redis +``` + +--- + +## 七、监控与运维 + +### 7.1 监控体系 + +| 监控类型 | 工具 | 监控内容 | +|----------|------|----------| +| **应用监控** | Prometheus + Grafana | JVM、接口响应、错误率 | +| **链路追踪** | SkyWalking | 调用链、性能瓶颈 | +| **日志收集** | ELK Stack | 业务日志、错误日志 | +| **告警通知** | AlertManager | 钉钉/邮件/短信告警 | + +### 7.2 运维脚本 + +```bash +# 服务启动脚本 +#!/bin/bash +SERVICES=("gateway" "sys" "cust" "proj" "req" "exp" "receipt" "report" "file") +for service in "${SERVICES[@]}"; do + docker-compose up -d fund-${service} + sleep 5 +done + +# 健康检查脚本 +#!/bin/bash +curl -f http://localhost:8080/actuator/health || exit 1 +``` + +--- + +## 八、开发规范 + +### 8.1 代码结构 + +``` +fund-sys/ +├── src/ +│ ├── main/ +│ │ ├── java/ +│ │ │ └── com/fundplatform/sys/ +│ │ │ ├── SysApplication.java +│ │ │ ├── config/ # 配置类 +│ │ │ ├── controller/ # 控制器层 +│ │ │ ├── service/ # 业务层 +│ │ │ │ └── impl/ +│ │ │ ├── mapper/ # 数据访问层 +│ │ │ ├── entity/ # 实体类 +│ │ │ ├── dto/ # 数据传输对象 +│ │ │ ├── vo/ # 视图对象 +│ │ │ ├── enums/ # 枚举类 +│ │ │ ├── utils/ # 工具类 +│ │ │ └── handler/ # 处理器 +│ │ └── resources/ +│ │ ├── application.yml +│ │ ├── application-dev.yml +│ │ ├── application-prod.yml +│ │ └── mapper/ # XML映射文件 +│ └── test/ +├── Dockerfile +├── pom.xml +└── README.md +``` + +### 8.2 API 设计规范 + +| 规范项 | 要求 | +|--------|------| +| **URL** | /api/{service}/{version}/{resource}/{action} | +| **HTTP方法** | GET(查)、POST(增)、PUT(改)、DELETE(删) | +| **响应格式** | { "code": 200, "message": "", "data": {} } | +| **分页** | pageNum, pageSize, total, list | +| **版本** | v1, v2 在URL中体现 | + +--- + +## 九、附录 + +### 9.1 端口分配表 + +| 服务 | 端口 | 说明 | +|------|------|------| +| Nginx | 80/443 | 负载均衡 | +| Gateway | 8080 | API网关 | +| Nacos | 8848/9848 | 注册配置中心 | +| Redis | 6379 | 缓存服务 | +| MySQL | 3306 | 数据库 | +| XXL-JOB | 8081 | 任务调度中心 | + +### 9.2 文档修订记录 + +| 版本 | 修订日期 | 修订内容 | 修订人 | +|------|----------|----------|--------| +| v1.0 | 2026-02-13 | 初始版本 | zhangjf | + +--- + +**文档结束**