Files
yunhaifinance/系统架构设计.md
T

414 lines
12 KiB
Markdown

# 跨平台ERP系统架构设计
## 1. 技术栈选择
### 1.1 前端技术栈
- **框架**: React + TypeScript
- **PWA实现**: Workbox + Service Worker
- **状态管理**: Redux Toolkit
- **UI组件库**: Ant Design
- **路由**: React Router
- **HTTP客户端**: Axios
- **表单处理**: Formik + Yup
- **图表库**: ECharts
- **国际化**: i18next
### 1.2 后端技术栈
- **语言**: Node.js (TypeScript)
- **框架**: NestJS
- **ORM**: TypeORM
- **认证**: JWT + Passport
- **缓存**: Redis
- **日志**: Winston
- **API文档**: Swagger
### 1.3 数据库
- **主数据库**: PostgreSQL
- **缓存数据库**: Redis
### 1.4 部署与DevOps
- **容器化**: Docker + Docker Compose
- **CI/CD**: GitHub Actions
- **监控**: Prometheus + Grafana
## 2. 系统架构设计
### 2.1 前端架构
#### 2.1.1 PWA架构
- **核心特性**:
- 离线访问能力
- 可安装到主屏幕
- 推送通知
- 响应式设计
#### 2.1.2 前端目录结构
```
/src
/assets # 静态资源
/components # 通用组件
/pages # 页面组件
/services # API服务
/store # Redux状态管理
/utils # 工具函数
/hooks # 自定义Hooks
/types # TypeScript类型定义
/workers # Web Workers
/config # 配置文件
App.tsx # 应用入口
main.tsx # 主渲染文件
service-worker.js # Service Worker
manifest.json # PWA配置
```
### 2.2 后端架构
#### 2.2.1 分层架构
- **API层**: 处理HTTP请求和响应
- **业务逻辑层**: 实现核心业务逻辑
- **数据访问层**: 与数据库交互
- **基础设施层**: 提供通用功能
#### 2.2.2 后端目录结构
```
/src
/modules
/auth # 认证模块
/users # 用户模块
/customers # 客户模块
/suppliers # 供应商模块
/subcontractors # 分包商模块
/projects # 项目模块
/finance # 财务模块
/construction # 施工模块
/exchange # 汇率模块
/products # 商品模块
/quotations # 预算报价模块
/common
/filters # 数据过滤器
/guards # 守卫
/interceptors # 拦截器
/pipes # 管道
/decorators # 装饰器
/config # 配置文件
/utils # 工具函数
/database # 数据库配置
main.ts # 应用入口
app.module.ts # 根模块
```
### 2.3 数据库设计
#### 2.3.1 核心数据模型
**用户表 (users)**
- id: UUID (主键)
- username: string (用户名)
- password: string (密码哈希)
- name: string (姓名)
- email: string (邮箱)
- role: string (角色)
- created_at: timestamp
- updated_at: timestamp
**角色表 (roles)**
- id: UUID (主键)
- name: string (角色名称)
- description: string (角色描述)
- created_at: timestamp
- updated_at: timestamp
**权限表 (permissions)**
- id: UUID (主键)
- name: string (权限名称)
- description: string (权限描述)
- created_at: timestamp
- updated_at: timestamp
**角色权限关联表 (role_permissions)**
- role_id: UUID (外键)
- permission_id: UUID (外键)
**客户表 (customers)**
- id: UUID (主键)
- name: string (客户名称)
- contact_person: string (联系人)
- phone: string (电话)
- email: string (邮箱)
- address: string (地址)
- created_at: timestamp
- updated_at: timestamp
**供应商表 (suppliers)**
- id: UUID (主键)
- name: string (供应商名称)
- contact_person: string (联系人)
- phone: string (电话)
- email: string (邮箱)
- address: string (地址)
- type: string (类型: 本地/中国)
- created_at: timestamp
- updated_at: timestamp
**分包商表 (subcontractors)**
- id: UUID (主键)
- name: string (分包商名称)
- contact_person: string (联系人)
- phone: string (电话)
- email: string (邮箱)
- address: string (地址)
- created_at: timestamp
- updated_at: timestamp
**项目表 (projects)**
- id: UUID (主键)
- name: string (项目名称)
- customer_id: UUID (外键)
- contract_number: string (合同编号)
- contract_amount: decimal (合同金额)
- currency: string (币种)
- start_date: date (开始日期)
- end_date: date (结束日期)
- status: string (状态)
- payment_terms: jsonb (付款节点)
- created_at: timestamp
- updated_at: timestamp
**分包表 (subcontracts)**
- id: UUID (主键)
- project_id: UUID (外键)
- subcontractor_id: UUID (外键)
- contract_number: string (合同编号)
- contract_amount: decimal (合同金额)
- currency: string (币种)
- payment_terms: jsonb (付款节点)
- status: string (状态)
- created_at: timestamp
- updated_at: timestamp
**采购表 (purchases)**
- id: UUID (主键)
- project_id: UUID (外键)
- supplier_id: UUID (外键)
- contract_number: string (合同编号)
- total_amount: decimal (总金额)
- currency: string (币种)
- expected_delivery_date: date (预计发货日期)
- payment_terms: jsonb (付款节点)
- status: string (状态)
- created_at: timestamp
- updated_at: timestamp
**采购商品表 (purchase_items)**
- id: UUID (主键)
- purchase_id: UUID (外键)
- product_id: UUID (外键)
- quantity: decimal (数量)
- unit_price: decimal (单价)
- total_price: decimal (总价)
**财务记录表 (financial_records)**
- id: UUID (主键)
- type: string (类型: 收入/支出)
- amount: decimal (金额)
- currency: string (币种)
- rmb_equivalent: decimal (人民币等价金额)
- project_id: UUID (外键, 可为空)
- related_id: UUID (外键, 关联具体业务)
- related_type: string (关联类型)
- status: string (状态)
- created_at: timestamp
- updated_at: timestamp
**汇率表 (exchange_rates)**
- id: UUID (主键)
- currency: string (币种)
- rate: decimal (汇率)
- reverse_rate: decimal (反向汇率)
- effective_date: date (生效日期)
- created_at: timestamp
- updated_at: timestamp
**商品表 (products)**
- id: UUID (主键)
- name: string (商品名称)
- category_id: UUID (外键)
- unit: string (单位)
- cost_price: decimal (成本价)
- created_at: timestamp
- updated_at: timestamp
**商品分类表 (product_categories)**
- id: UUID (主键)
- name: string (分类名称)
- parent_id: UUID (外键, 可为空)
- created_at: timestamp
- updated_at: timestamp
**预算报价表 (quotations)**
- id: UUID (主键)
- customer_id: UUID (外键)
- project_name: string (项目名称)
- total_amount: decimal (总金额)
- currency: string (币种)
- status: string (状态)
- created_at: timestamp
- updated_at: timestamp
**预算报价项目表 (quotation_items)**
- id: UUID (主键)
- quotation_id: UUID (外键)
- product_id: UUID (外键)
- quantity: decimal (数量)
- unit_price: decimal (单价)
- total_price: decimal (总价)
### 2.4 安全架构
#### 2.4.1 认证系统
- **JWT认证**: 使用JSON Web Token进行身份验证
- **密码加密**: 使用bcrypt进行密码哈希
- **会话管理**: 基于Token的无状态会话
#### 2.4.2 授权系统
- **基于角色的访问控制 (RBAC)**: 角色分配权限,用户分配角色
- **权限粒度**: 模块级和操作级权限控制
- **动态权限管理**: 支持后台配置权限和流程节点
## 3. API接口规范
### 3.1 RESTful API设计
- **基础URL**: `/api/v1`
- **HTTP方法**: GET, POST, PUT, PATCH, DELETE
- **资源命名**: 复数形式,使用小写字母和连字符
- **版本控制**: 通过URL路径进行版本控制
### 3.2 响应格式
```json
{
"success": true,
"data": {},
"message": "操作成功",
"errors": []
}
```
### 3.3 错误处理
- **400 Bad Request**: 请求参数错误
- **401 Unauthorized**: 未授权
- **403 Forbidden**: 禁止访问
- **404 Not Found**: 资源不存在
- **500 Internal Server Error**: 服务器内部错误
### 3.4 分页规范
```json
{
"success": true,
"data": {
"items": [],
"pagination": {
"total": 100,
"page": 1,
"pageSize": 10,
"totalPages": 10
}
}
}
```
## 4. 财务串通管理设计
### 4.1 核心功能
- **统一财务视图**: 所有收入支出既能从单个项目查看,又能从公司总账目中查看
- **数据一致性**: 确保财务数据在不同视图中的一致性
- **多币种支持**: 支持人民币、老挝基普、泰铢、美元的汇率换算
- **财务流程**: 预支、报销、核销流程的完整实现
### 4.2 实现方案
- **财务记录中心化**: 所有财务交易通过统一的财务记录表进行管理
- **关联关系**: 通过related_id和related_type字段关联具体业务
- **项目维度**: 通过project_id字段实现项目级财务视图
- **公司维度**: 不设置project_id的记录为公司级财务
- **汇率换算**: 实时根据汇率表进行币种换算
## 5. 权限管理功能设计
### 5.1 角色设计
- **超级管理员**: 拥有所有权限
- **管理员**: 拥有大部分管理权限
- **财务人员**: 拥有财务管理权限
- **项目经理**: 拥有项目管理权限
- **采购人员**: 拥有采购管理权限
- **施工人员**: 拥有施工管理权限
### 5.2 权限设计
- **用户管理**: 创建、编辑、删除用户
- **角色管理**: 创建、编辑、删除角色
- **权限管理**: 分配和管理权限
- **客户管理**: 创建、编辑、删除客户
- **供应商管理**: 创建、编辑、删除供应商
- **分包商管理**: 创建、编辑、删除分包商
- **项目管理**: 创建、编辑、删除项目
- **财务管理**: 处理财务流程
- **施工管理**: 管理施工过程
- **汇率管理**: 设置和管理汇率
- **商品管理**: 创建、编辑、删除商品
- **预算报价管理**: 创建、编辑、删除预算报价
### 5.3 流程节点管理
- **可配置流程**: 支持在后台配置审批流程节点
- **流程状态**: 待审批、审批中、已批准、已拒绝
- **通知机制**: 流程状态变更时发送通知
## 6. 系统集成与扩展性
### 6.1 预留接口
- **小工具接口**: 支持集成电工计算器等小工具
- **进销存系统接口**: 预留与后续进销存系统的集成接口
- **第三方服务接口**: 支持集成支付、物流等第三方服务
### 6.2 扩展性设计
- **模块化架构**: 各功能模块独立设计,便于扩展
- **插件机制**: 支持插件式功能扩展
- **API版本控制**: 确保接口变更的向后兼容性
## 7. 性能优化策略
### 7.1 前端优化
- **代码分割**: 按需加载模块
- **缓存策略**: 合理使用浏览器缓存
- **图片优化**: 压缩和懒加载图片
- **PWA缓存**: 使用Service Worker缓存静态资源
### 7.2 后端优化
- **数据库索引**: 合理创建数据库索引
- **查询优化**: 优化SQL查询
- **缓存机制**: 使用Redis缓存热点数据
- **异步处理**: 非关键操作使用异步处理
### 7.3 系统监控
- **性能监控**: 监控系统响应时间和资源使用
- **错误监控**: 实时捕获和分析错误
- **日志管理**: 集中管理系统日志
## 8. 部署方案
### 8.1 本地开发环境
- **Docker Compose**: 快速搭建开发环境
- **热重载**: 支持代码修改实时预览
### 8.2 生产环境
- **容器化部署**: 使用Docker容器部署
- **负载均衡**: 支持多实例部署
- **HTTPS**: 启用HTTPS加密
- **自动备份**: 定期备份数据库
## 9. 总结
本架构设计采用了现代化的技术栈和设计理念,实现了一个跨平台的ERP系统,支持财务串通管理和权限管理功能。系统具有良好的扩展性和可维护性,能够满足企业的业务需求,并为后续功能扩展预留了接口。
通过PWA技术,系统可以在Web端和移动端提供一致的用户体验,支持离线访问和安装到主屏幕。后端采用NestJS框架,提供了强大的API服务和业务逻辑处理能力。数据库使用PostgreSQL,确保数据的可靠性和一致性。
系统的财务串通管理功能确保了所有收入支出既能从单个项目查看,又能从公司总账目中查看,实现了财务数据的完整性和一致性。权限管理功能支持基于角色的访问控制和动态权限配置,满足不同用户的权限需求。
本架构设计为跨平台ERP系统的开发提供了清晰的指导,确保系统能够按时、按质完成,并满足用户的需求。