# 海洋项目管理系统 - 后端架构设计

## 1. 技术栈

| 层级 | 技术 | 说明 |
|------|------|------|
| Web框架 | FastAPI | 高性能异步框架，自动生成API文档 |
| ORM | SQLAlchemy 2.0 | 类型安全的ORM，支持异步 |
| 数据库 | MySQL 8.0 | 关系型数据库 |
| 认证 | JWT (PyJWT) | 无状态认证 |
| 密码加密 | bcrypt | 密码哈希存储 |
| 数据验证 | Pydantic v2 | 请求/响应数据验证 |
| API文档 | FastAPI自动生成 + OpenAPI 3.1 | Swagger UI |

## 2. 系统架构

```
┌─────────────────────────────────────────┐
│         前端 (React + Ant Design)       │
└─────────────────────────────────────────┘
                    │
                    │ HTTP/HTTPS + JWT
                    ▼
┌─────────────────────────────────────────┐
│           FastAPI 应用层                │
│  ┌─────────────────────────────────┐   │
│  │   Routes (API端点)              │   │
│  ├─────────────────────────────────┤   │
│  │   Controllers (业务逻辑)         │   │
│  ├─────────────────────────────────┤   │
│  │   Services (复杂业务逻辑)       │   │
│  ├─────────────────────────────────┤   │
│  │   Models (数据模型)             │   │
│  ├─────────────────────────────────┤   │
│  │   Middleware (认证/日志/错误)   │   │
│  └─────────────────────────────────┘   │
└─────────────────────────────────────────┘
                    │
                    │ SQLAlchemy ORM
                    ▼
┌─────────────────────────────────────────┐
│         MySQL 数据库                     │
│  - users (用户表)                        │
│  - projects (项目表, 60+字段)           │
└─────────────────────────────────────────┘
```

## 3. 项目目录结构

```
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          # 应用配置
├── requirements.txt         # Python依赖
├── main.py                 # FastAPI应用入口
└── README.md
```

## 4. 核心功能模块

### 4.1 认证授权模块
- JWT Token生成和验证
- 密码加密（bcrypt）
- 基于角色的权限控制（RBAC）
- Token自动刷新机制

### 4.2 用户管理模块
- 用户CRUD操作
- 用户列表查询（支持分页、筛选）
- 密码重置功能（仅管理员）

### 4.3 项目管理模块
- 项目CRUD操作
- 项目列表查询（支持复杂条件筛选）
- 项目统计功能（基础统计、分组统计、时间维度统计）
- Excel数据导入（通过脚本导入，非API）

## 5. 数据库设计

### 5.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 | 更新时间 |

### 5.2 项目表 (projects)

基于`docs/database-design.md`，保持单表设计，包含60+个字段：
- 基础信息：project_no, name, engineering_type, signing_date等
- 成本信息：total_cost_control, labor_cost_control, material_cost_control等
- 财务信息：contract_amount, actual_receipt_amount, actual_payment_amount等
- 质保信息：warranty_amount, warranty_expiry_date等
- 结算信息：settlement_amount, cost_settlement_amount等

**注意**：不使用status字段，数据是什么就是什么。

## 6. API设计规范

### 6.1 基础规范
- Base URL: `/api/v1`
- Content-Type: `application/json`
- 认证方式: JWT Token (Header: `Authorization: Bearer <token>`)
- 统一响应格式:
```json
{
  "success": true,
  "message": "操作成功",
  "data": {},
  "error_code": null
}
```

### 6.2 错误码设计
| 错误码 | 说明 |
|--------|------|
| 1001 | 参数验证失败 |
| 1002 | 用户名或密码错误 |
| 1003 | Token无效或过期 |
| 2001 | 资源不存在 |
| 2002 | 资源已存在 |
| 3001 | 权限不足 |
| 5000 | 服务器内部错误 |

## 7. 筛选和统计功能设计

### 7.1 组合筛选（AND条件）
支持多个字段同时筛选，所有条件必须同时满足。
示例：
- 工程类别=基建 AND 签订日期>2026-01-01 AND 合同金额>100万

### 7.2 统计功能
- **基础统计**：记录总数、字段总和、平均值等
- **分组统计**：按指定字段分组统计
- **时间维度统计**：按时间区间统计（按日/月/年）

## 8. 安全设计

### 8.1 认证安全
- 密码使用bcrypt加密存储（salt rounds=12）
- JWT Token有效期24小时
- Token存储在HttpOnly Cookie或LocalStorage

### 8.2 权限控制
- 后端基于依赖注入的权限验证
- 支持角色级别和资源级别权限控制

### 8.3 数据安全
- SQL注入防护（SQLAlchemy ORM参数化查询）
- XSS防护（FastAPI自动处理）
- 输入验证（Pydantic模型）
- 请求频率限制（可选）

## 9. 开发规范

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

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

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

## 10. 部署方案

### 10.1 开发环境
```bash
cd backend
pip install -r requirements.txt
uvicorn main:app --reload --host 0.0.0.0 --port 5000
```

### 10.2 生产环境
- 使用Gunicorn + Uvicorn Workers
- Nginx反向代理
- Docker容器化部署（可选）

---

**文档维护**: 后端程序员
**更新时间**: 2026-01-25
