# 海洋项目管理系统 - 技术架构文档

## 1. 技术选型

### 1.1 技术栈

| 层级 | 技术 | 说明 |
|------|------|------|
| **前端** | | |
| | React + React Router | 前后端分离架构 |
| | Ant Design | 企业级UI组件 |
| | Axios | HTTP客户端 |
| | Context API | 简单状态管理 |
| **后端** | | |
| | FastAPI | 高性能异步框架，自动生成API文档 |
| | SQLAlchemy 2.0 | 类型安全的ORM，支持异步 |
| | MySQL 8.0 | 关系型数据库 |
| | JWT (PyJWT) | 无状态认证 |
| | bcrypt | 密码加密存储 |
| | Pydantic v2 | 请求/响应数据验证 |
| **开发工具** | | |
| | Create React App | 前端开发环境 |
| | pipenv | Python依赖管理 |
| | pytest | 测试框架 |

### 1.2 系统特点
- 轻量级架构，适合小并发场景
- 无需Redis缓存，降低部署复杂度
- 基于角色的权限控制（RBAC）
- 前后端分离，易于维护和扩展
- 自动生成API文档（Swagger UI）

## 2. 系统架构

### 2.1 整体架构图

```
┌─────────────────────────────────────────────────┐
│                   浏览器                          │
│  (React + Ant Design + React Router + Axios)     │
└─────────────────────────────────────────────────┘
                       │
                       │ HTTP/HTTPS
                       │ JWT Token
                       ▼
┌─────────────────────────────────────────────────┐
│              FastAPI 后端服务                      │
│  ┌─────────────────────────────────────────┐   │
│  │   API Layer (FastAPI Routes)           │   │
│  ├─────────────────────────────────────────┤   │
│  │   Controllers (业务逻辑)               │   │
│  ├─────────────────────────────────────────┤   │
│  │   Services (复杂业务逻辑)               │   │
│  ├─────────────────────────────────────────┤   │
│  │   Data Access (SQLAlchemy ORM)          │   │
│  ├─────────────────────────────────────────┤   │
│  │   Middleware (认证/日志/错误)           │   │
│  └─────────────────────────────────────────┘   │
└─────────────────────────────────────────────────┘
                       │
                       │ SQL
                       ▼
┌─────────────────────────────────────────────────┐
│              MySQL 8.0 数据库                     │
│  ┌─────────────────────────────────────────┐   │
│  │   users                                  │   │
│  │   projects (60+字段)                      │   │
│  └─────────────────────────────────────────┘   │
└─────────────────────────────────────────────────┘
```

### 2.2 分层架构

#### 2.2.1 API Layer (路由层)
- 定义API端点
- 处理HTTP请求和响应
- 参数验证

#### 2.2.2 Controllers (控制器层)
- 实现业务逻辑
- 调用Services层
- 返回响应数据

#### 2.2.3 Services (服务层)
- 实现复杂的业务逻辑
- 数据转换和处理
- 调用ORM层

#### 2.2.4 Data Access (数据访问层)
- 使用SQLAlchemy ORM
- 数据库操作
- 数据模型定义

#### 2.2.5 Middleware (中间件层)
- 认证中间件
- 日志中间件
- 错误处理中间件

## 3. 项目目录结构

```
ocean_project_manager/
├── backend/                          # 后端程序员工作区
│   ├── src/                          # 源代码
│   │   ├── controllers/              # 控制器层
│   │   │   ├── auth.py
│   │   │   ├── users.py
│   │   │   └── projects.py
│   │   ├── services/                # 业务逻辑层
│   │   │   ├── auth_service.py
│   │   │   ├── user_service.py
│   │   │   └── project_service.py
│   │   ├── models/                  # 数据模型
│   │   │   ├── user.py
│   │   │   └── project.py
│   │   ├── routes/                  # 路由定义
│   │   │   ├── auth.py
│   │   │   ├── users.py
│   │   │   └── projects.py
│   │   ├── middleware/              # 中间件
│   │   │   ├── auth.py
│   │   │   └── logging.py
│   │   ├── schemas/                 # Pydantic模型
│   │   │   ├── user.py
│   │   │   └── project.py
│   │   ├── utils/                   # 工具函数
│   │   │   ├── password.py
│   │   │   └── jwt.py
│   │   └── dependencies.py         # 依赖注入
│   ├── tests/                       # 测试目录
│   │   ├── test_auth.py
│   │   ├── test_users.py
│   │   └── test_projects.py
│   ├── config/                      # 配置文件
│   │   ├── __init__.py
│   │   ├── database.py             # 数据库配置
│   │   ├── settings.py             # 应用配置
│   │   ├── init-database.sql       # 数据库初始化
│   │   └── import-excel-data.py   # Excel导入脚本
│   ├── docs/                        # API文档
│   │   └── api.md                 # API接口文档
│   ├── requirements.txt             # Python依赖
│   ├── main.py                     # FastAPI应用入口
│   ├── WORKSTANDARDS.md            # 后端工作规范
│   └── README.md                  # 后端开发说明
│
├── frontend/                         # 前端程序员工作区
│   ├── src/                         # 源代码
│   │   ├── components/             # 可复用组件
│   │   │   ├── Layout.jsx
│   │   │   ├── Header.jsx
│   │   │   └── Sidebar.jsx
│   │   ├── pages/                  # 页面组件
│   │   │   ├── Login.jsx
│   │   │   ├── Dashboard.jsx
│   │   │   ├── UserList.jsx
│   │   │   ├── UserForm.jsx
│   │   │   ├── ProjectList.jsx
│   │   │   ├── ProjectForm.jsx
│   │   │   └── ProjectDetail.jsx
│   │   ├── hooks/                  # 自定义Hooks
│   │   │   └── useAuth.js
│   │   ├── services/               # API服务
│   │   │   ├── api.js            # Axios配置
│   │   │   ├── auth.js
│   │   │   ├── user.js
│   │   │   └── project.js
│   │   ├── utils/                  # 工具函数
│   │   │   └── auth.js
│   │   ├── styles/                 # 样式文件
│   │   │   └── global.css
│   │   ├── types/                  # TypeScript类型定义
│   │   │   ├── user.ts
│   │   │   └── project.ts
│   │   ├── App.jsx                 # 根组件
│   │   └── index.js                # 入口文件
│   ├── tests/                      # 组件测试
│   ├── docs/                       # 组件文档
│   │   └── components.md
│   ├── package.json
│   ├── WORKSTANDARDS.md            # 前端工作规范
│   └── README.md                   # 前端开发说明
│
├── testing/                        # 测试工程师工作区
│   ├── testcases/                  # 测试用例
│   │   ├── api/                   # API测试用例
│   │   ├── ui/                    # UI测试用例
│   │   └── integration/           # 集成测试用例
│   ├── reports/                    # 测试报告
│   ├── data/                       # 测试数据
│   ├── scripts/                    # 自动化测试脚本
│   ├── docs/                       # 测试文档
│   ├── WORKSTANDARDS.md           # 测试工作规范
│   └── README.md                  # 测试工作说明
│
└── docs/                          # 项目文档
    ├── 产品设计文档.md            # 产品需求文档（PRD）
    ├── 技术架构文档.md            # 技术架构文档（本文档）
    ├── 后端架构设计.md            # 后端技术架构
    ├── api.md                     # API接口文档
    ├── ui-design-spec.md          # UI设计规范
    ├── TEAM-COLLABORATION.md      # 团队协作规范
    ├── database-design.md         # 数据库设计
    ├── database-and-data-initialization.md  # 数据初始化
    ├── example.xls                # Excel数据源
    └── plans/                     # 设计方案
```

## 4. 数据库设计

### 4.1 用户表 (users)

| 字段名 | 类型 | 约束 | 说明 |
|--------|------|------|------|
| id | INT | PRIMARY KEY, AUTO_INCREMENT | 用户ID |
| username | VARCHAR(50) | UNIQUE, NOT NULL | 用户名 |
| password_hash | VARCHAR(255) | NOT NULL | 密码哈希 |
| real_name | VARCHAR(100) | NOT NULL | 真实姓名 |
| department | VARCHAR(50) | NOT NULL | 部门 |
| role | ENUM | NOT NULL | 角色（admin/market/other） |
| email | VARCHAR(100) | UNIQUE | 邮箱 |
| phone | VARCHAR(20) | | 电话 |
| is_active | BOOLEAN | DEFAULT TRUE | 是否激活 |
| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE | 更新时间 |

```sql
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    real_name VARCHAR(100) NOT NULL,
    department VARCHAR(50) NOT NULL,
    role ENUM('admin', 'market', 'other') NOT NULL,
    email VARCHAR(100) UNIQUE,
    phone VARCHAR(20),
    is_active BOOLEAN DEFAULT TRUE,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_users_username (username),
    INDEX idx_users_department (department),
    INDEX idx_users_role (role)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
```

### 4.2 项目表 (projects)

基于`docs/database-design.md`，包含60+个字段：

**基础信息字段：**
- project_no, power_contract_no, name, subitem_count, subitem_code
- total_investment, contract_amount, settlement_amount, total_cost_estimated
- voltage_level, engineering_type, owner_unit, owner_contact, bidding_type

**时间字段：**
- signing_date, start_date, planned_end_date, actual_end_date
- warranty_expiry_date, actual_warranty_refund_date

**成本控制字段：**
- total_cost_control, is_adjusted
- labor_cost_control, labor_cost_planned, labor_cost_paid
- material_cost_control, material_cost_payable, material_cost_actual, material_cost_paid
- other_cost_control, other_cost_payable, other_cost_actual

**财务信息字段：**
- warranty_amount, warranty_ratio
- tax_amount, profit, actual_profit
- cost_settlement_amount

**应收应付字段：**
- cumulative_progress
- receivable_amount, invoice_amount, actual_receipt_amount, receipt_completion_rate
- payable_amount, actual_payment_amount, unpaid_amount, payment_completion_rate

**结算信息字段：**
- settlement_cost_amount, settlement_labor_cost, settlement_material_cost, settlement_other_cost
- due_settlement_count, unsettlement_count

**项目管理字段：**
- project_department, project_leader, payment_method
- problems, suggestions, remarks

**注意**：项目表不使用status字段，数据本身反映了项目的真实状态。

### 4.3 索引设计

```sql
-- 项目编号索引
CREATE INDEX idx_projects_project_no ON projects(project_no);

-- 工程类别索引
CREATE INDEX idx_projects_engineering_type ON projects(engineering_type);

-- 所属项目部索引
CREATE INDEX idx_projects_project_department ON projects(project_department);

-- 创建人索引
CREATE INDEX idx_projects_created_by ON projects(created_by);

-- 签订日期索引
CREATE INDEX idx_projects_signing_date ON projects(signing_date);

-- 计划竣工日期索引
CREATE INDEX idx_projects_planned_end_date ON projects(planned_end_date);

-- 复合索引：工程类别 + 创建人
CREATE INDEX idx_projects_type_created_by ON projects(engineering_type, created_by);
```

## 5. API设计

### 5.1 API规范

- **Base URL**: `/api/v1`
- **Content-Type**: `application/json`
- **认证方式**: JWT Token（在Header中传递：`Authorization: Bearer <token>`）
- **API文档地址**: `http://localhost:5000/docs` (Swagger UI)

### 5.2 统一响应格式

```json
{
  "success": true,
  "message": "操作成功",
  "data": {},
  "error_code": null
}
```

### 5.3 错误码设计

| 错误码 | 说明 | HTTP状态码 |
|--------|------|-----------|
| 1001 | 参数验证失败 | 400 |
| 1002 | 用户名或密码错误 | 401 |
| 1003 | Token无效或过期 | 401 |
| 2001 | 资源不存在 | 404 |
| 2002 | 资源已存在 | 409 |
| 3001 | 权限不足 | 403 |
| 5000 | 服务器内部错误 | 500 |

### 5.4 API端点

详细的API文档请参考：[API文档](api.md)

主要端点包括：
- 认证相关：POST /auth/login, GET /auth/me, POST /auth/logout
- 用户管理：GET /users, POST /users, PUT /users/{id}, DELETE /users/{id}
- 项目管理：GET /projects, POST /projects, PUT /projects/{id}, DELETE /projects/{id}
- 项目统计：GET /projects/statistics, GET /projects/statistics/group, GET /projects/statistics/timeline

## 6. 前端设计

### 6.1 技术栈
- React 18
- React Router 6
- Ant Design 5
- Axios
- Context API

### 6.2 组件架构

```
App
├── ProtectedRoute (路由守卫)
├── Layout (主布局)
│   ├── Header (顶部导航)
│   └── Sidebar (侧边栏)
├── Login (登录页)
└── Dashboard (仪表盘)
    ├── UserList (用户列表)
    │   └── UserForm (用户表单)
    └── ProjectList (项目列表)
        ├── ProjectForm (项目表单)
        └── ProjectDetail (项目详情)
```

### 6.3 状态管理
使用React Context API进行状态管理：
- AuthContext: 认证状态（用户信息、Token、登录/登出）
- 可以根据需要扩展其他Context

### 6.4 API服务
使用Axios封装HTTP请求：
- 统一的baseURL配置
- 请求拦截器（自动添加Token）
- 响应拦截器（统一错误处理）
- API模块化管理

## 7. 安全设计

### 7.1 认证安全
- 密码使用bcrypt加密存储（salt rounds=12）
- JWT Token有效期24小时
- Token存储在LocalStorage（可改为HttpOnly Cookie）
- 实现Token自动刷新机制

### 7.2 权限控制
- 后端基于依赖注入的权限验证
- 支持角色级别权限控制（admin/market/other）
- 支持资源级别权限控制（如market只能编辑自己创建的项目）
- 前端路由级别的权限控制（ProtectedRoute组件）

### 7.3 数据安全
- SQL注入防护（SQLAlchemy ORM参数化查询）
- XSS防护（React自动转义）
- 输入验证（前后端双重验证：Pydantic + 前端表单验证）
- 敏感信息加密（密码哈希）

### 7.4 其他安全措施
- CORS配置（限制跨域访问）
- 请求频率限制（可选，使用slowapi）
- HTTPS部署（生产环境必须）

## 8. 部署方案

### 8.1 开发环境

**后端：**
```bash
cd backend
pip install -r requirements.txt
uvicorn main:app --reload --host 0.0.0.0 --port 5000
# 服务运行在 http://localhost:5000
```

**前端：**
```bash
cd frontend
npm install
npm start
# 服务运行在 http://localhost:3000
```

**数据库：**
- 本地MySQL数据库
- 数据库名：`project_manager`
- 配置文件：`backend/config/.env`

### 8.2 生产环境

**推荐方案：使用Docker Compose**

```yaml
version: '3.8'

services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: project_manager
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "3306:3306"

  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - mysql
    environment:
      DATABASE_URL: mysql+aiomysql://root:rootpassword@mysql/project_manager
      SECRET_KEY: your-secret-key

  frontend:
    build: ./frontend
    ports:
      - "80:80"
    depends_on:
      - backend

volumes:
  mysql_data:
```

**部署命令：**
```bash
docker-compose up -d
```

### 8.3 服务器要求

**最低配置：**
- CPU: 2核
- 内存: 4GB
- 硬盘: 50GB
- 系统: Ubuntu 20.04+ 或 CentOS 7+

**推荐配置：**
- CPU: 4核
- 内存: 8GB
- 硬盘: 100GB
- 系统: Ubuntu 22.04+ 或 CentOS 8+

## 9. 开发规范

### 9.1 后端开发规范

**代码风格：**
- 遵循PEP 8规范
- 使用Type Hints进行类型标注
- 函数和类添加docstring

**提交规范：**
- 提交格式: `[backend] <类型>: <描述>`
- 类型: feat, fix, docs, style, refactor, test, chore

**测试要求：**
- 单元测试覆盖率 > 80%
- 使用pytest测试框架
- 测试文件命名: `test_<模块名>.py`

### 9.2 前端开发规范

**代码风格：**
- 遵循ESLint规则
- 使用Prettier格式化代码
- 组件使用函数式组件 + Hooks

**提交规范：**
- 提交格式: `[frontend] <类型>: <描述>`
- 类型: feat, fix, style, refactor, test, chore

**测试要求：**
- 关键组件必须有测试
- 使用Jest或Vitest测试框架
- 测试文件命名: `<组件名>.test.jsx`

### 9.3 测试规范

**测试分类：**
- 单元测试：测试单个函数/组件
- 集成测试：测试模块间的交互
- 端到端测试：测试完整业务流程

**测试覆盖率：**
- 后端: > 80%
- 前端关键组件: > 70%

## 10. 性能优化

### 10.1 数据库优化
- 合理使用索引
- 查询优化（避免N+1查询）
- 使用连接池
- 定期备份和优化

### 10.2 后端优化
- 异步处理（FastAPI async/await）
- 缓存（可选，Redis）
- 请求限流
- 日志优化

### 10.3 前端优化
- 代码分割（React.lazy）
- 图片懒加载
- 使用CDN
- Gzip压缩

## 11. 监控和日志

### 11.1 日志管理
- 后端使用Python logging模块
- 日志级别：DEBUG, INFO, WARNING, ERROR, CRITICAL
- 日志文件按日期分割

### 11.2 性能监控
- 使用APM工具（如Sentry）
- 监控API响应时间
- 监控错误率

### 11.3 错误追踪
- 自动捕获和记录错误
- 发送错误告警
- 错误堆栈追踪

## 12. 备份和恢复

### 12.1 数据库备份
```bash
# 备份
mysqldump -u root -p project_manager > backup_$(date +%Y%m%d).sql

# 恢复
mysql -u root -p project_manager < backup_20260125.sql
```

### 12.2 代码备份
- 使用Git进行版本控制
- 定期推送到远程仓库
- 打标签标记重要版本

### 12.3 备份策略
- 每日自动备份数据库
- 每周备份到远程服务器
- 保留最近30天的备份

## 13. 相关文档

### 13.1 技术文档
- [后端架构设计](后端架构设计.md) - 后端技术架构详解
- [API文档](api.md) - 完整的API接口文档
- [数据库设计](database-design.md) - 数据库表结构详细设计

### 13.2 产品文档
- [产品设计文档](产品设计文档.md) - 产品需求文档（PRD）

### 13.3 其他文档
- [UI设计规范](ui-design-spec.md) - 前端UI设计规范
- [团队协作规范](TEAM-COLLABORATION.md) - 团队协作流程
- [数据库设计和数据初始化](database-and-data-initialization.md) - 数据初始化方案

---

**文档维护**: 技术总监、后端程序员
**文档类型**: 技术架构文档
**最后更新**: 2026-01-25
