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