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