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

12 KiB

跨平台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 响应格式

{
  "success": true,
  "data": {},
  "message": "操作成功",
  "errors": []
}

3.3 错误处理

  • 400 Bad Request: 请求参数错误
  • 401 Unauthorized: 未授权
  • 403 Forbidden: 禁止访问
  • 404 Not Found: 资源不存在
  • 500 Internal Server Error: 服务器内部错误

3.4 分页规范

{
  "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系统的开发提供了清晰的指导,确保系统能够按时、按质完成,并满足用户的需求。