fundplatform/doc/资金服务平台 FundPlatform 架构设计文档.md

511 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 资金服务平台 (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 |
---
**文档结束**