Files
zcglxt/backend_new/API_USAGE_GUIDE.md

497 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 资产管理系统 - 后端API开发总结
> **版本**: v1.0.0
> **开发者**: Claude (AI Assistant)
> **完成时间**: 2025-01-24
> **状态**: Phase 3 & Phase 4 核心模块已完成
---
## 📋 已完成模块清单
### Phase 3: 基础数据管理 ✅
#### 1. 设备类型管理
- **模型**: `app/models/device_type.py`
- **Schema**: `app/schemas/device_type.py`
- **CRUD**: `app/crud/device_type.py`
- **Service**: `app/services/device_type_service.py`
- **API路由**: `app/api/v1/device_types.py`
**功能特性**:
- ✅ 设备类型CRUD创建、查询、更新、删除
- ✅ 动态字段定义(字段名、字段类型、是否必填、默认值、验证规则)
- ✅ 支持7种字段类型: text, number, date, select, multiselect, boolean, textarea
- ✅ 字段验证规则配置JSONB格式
- ✅ 字段排序
- ✅ 软删除
**API端点**:
- `GET /api/v1/device-types` - 获取设备类型列表
- `GET /api/v1/device-types/categories` - 获取所有设备分类
- `GET /api/v1/device-types/{id}` - 获取设备类型详情
- `POST /api/v1/device-types` - 创建设备类型
- `PUT /api/v1/device-types/{id}` - 更新设备类型
- `DELETE /api/v1/device-types/{id}` - 删除设备类型
- `GET /api/v1/device-types/{id}/fields` - 获取字段列表
- `POST /api/v1/device-types/{id}/fields` - 创建字段
- `PUT /api/v1/device-types/fields/{id}` - 更新字段
- `DELETE /api/v1/device-types/fields/{id}` - 删除字段
---
#### 2. 机构网点管理
- **模型**: `app/models/organization.py`
- **Schema**: `app/schemas/organization.py`
- **CRUD**: `app/crud/organization.py`
- **Service**: `app/services/organization_service.py`
- **API路由**: `app/api/v1/organizations.py`
**功能特性**:
- ✅ 机构网点CRUD
- ✅ 树形结构支持parent_id、tree_path、tree_level
- ✅ 递归查询所有子节点
- ✅ 递归查询所有父节点
- ✅ 计算机构层级
- ✅ 软删除
**API端点**:
- `GET /api/v1/organizations` - 获取机构列表
- `GET /api/v1/organizations/tree` - 获取机构树
- `GET /api/v1/organizations/{id}` - 获取机构详情
- `GET /api/v1/organizations/{id}/children` - 获取直接子机构
- `GET /api/v1/organizations/{id}/all-children` - 递归获取所有子机构
- `GET /api/v1/organizations/{id}/parents` - 递归获取所有父机构
- `POST /api/v1/organizations` - 创建机构
- `PUT /api/v1/organizations/{id}` - 更新机构
- `DELETE /api/v1/organizations/{id}` - 删除机构
---
#### 3. 品牌管理
- **模型**: `app/models/brand_supplier.py`
- **Schema**: `app/schemas/brand_supplier.py`
- **CRUD**: `app/crud/brand_supplier.py`
- **Service**: `app/services/brand_supplier_service.py`
- **API路由**: `app/api/v1/brands_suppliers.py`
**功能特性**:
- ✅ 基础CRUD功能
- ✅ 品牌Logo、官网信息
- ✅ 软删除
**API端点**:
- `GET /api/v1/brands` - 获取品牌列表
- `GET /api/v1/brands/{id}` - 获取品牌详情
- `POST /api/v1/brands` - 创建品牌
- `PUT /api/v1/brands/{id}` - 更新品牌
- `DELETE /api/v1/brands/{id}` - 删除品牌
---
#### 4. 供应商管理
- **模型**: `app/models/brand_supplier.py`
- **Schema**: `app/schemas/brand_supplier.py`
- **CRUD**: `app/crud/brand_supplier.py`
- **Service**: `app/services/brand_supplier_service.py`
- **API路由**: `app/api/v1/brands_suppliers.py`
**功能特性**:
- ✅ 基础CRUD功能
- ✅ 供应商详细信息(联系人、银行账号等)
- ✅ 软删除
**API端点**:
- `GET /api/v1/suppliers` - 获取供应商列表
- `GET /api/v1/suppliers/{id}` - 获取供应商详情
- `POST /api/v1/suppliers` - 创建供应商
- `PUT /api/v1/suppliers/{id}` - 更新供应商
- `DELETE /api/v1/suppliers/{id}` - 删除供应商
---
### Phase 4: 资产管理核心 ✅
#### 5. 资产管理
- **模型**: `app/models/asset.py`
- **Schema**: `app/schemas/asset.py`
- **CRUD**: `app/crud/asset.py`
- **Service**: `app/services/asset_service.py`
- **API路由**: `app/api/v1/assets.py`
**功能特性**:
- ✅ 资产CRUD创建、查询、更新、删除
- ✅ 资产编码自动生成支持并发格式AS+YYYYMMDD+流水号)
- ✅ 二维码生成使用qrcode库
- ✅ 资产状态机8种状态
- ✅ 状态转换验证
- ✅ 状态历史记录
- ✅ JSONB动态字段存储和查询
- ✅ 高级搜索(支持多条件、模糊搜索、范围查询)
- ✅ 分页查询
- ✅ 软删除
**API端点**:
- `GET /api/v1/assets` - 获取资产列表
- `GET /api/v1/assets/statistics` - 获取资产统计信息
- `GET /api/v1/assets/{id}` - 获取资产详情
- `GET /api/v1/assets/scan/{code}` - 扫码查询资产
- `POST /api/v1/assets` - 创建资产
- `PUT /api/v1/assets/{id}` - 更新资产
- `DELETE /api/v1/assets/{id}` - 删除资产
- `POST /api/v1/assets/{id}/status` - 变更资产状态
- `GET /api/v1/assets/{id}/history` - 获取资产状态历史
---
#### 6. 资产状态机服务
- **文件**: `app/services/state_machine_service.py`
**状态定义**:
- `pending` - 待入库
- `in_stock` - 库存中
- `in_use` - 使用中
- `transferring` - 调拨中
- `maintenance` - 维修中
- `pending_scrap` - 待报废
- `scrapped` - 已报废
- `lost` - 已丢失
**状态转换规则**:
```
pending → in_stock, pending_scrap
in_stock → in_use, transferring, maintenance, pending_scrap, lost
in_use → in_stock, transferring, maintenance, pending_scrap, lost
transferring → in_stock, in_use
maintenance → in_stock, in_use, pending_scrap
pending_scrap → scrapped, in_stock
scrapped → [终态]
lost → [终态]
```
---
#### 7. 资产编码生成服务
- **文件**: `app/utils/asset_code.py`
**格式**: `AS + YYYYMMDD + 流水号(4位)`
**示例**: `AS202501240001`
**特性**:
- ✅ 使用PostgreSQL Advisory Lock保证并发安全
- ✅ 按日期重置流水号
- ✅ 自动补零到4位
- ✅ 编码格式验证
---
#### 8. 二维码生成服务
- **文件**: `app/utils/qrcode.py`
**特性**:
- ✅ 使用qrcode库生成二维码
- ✅ 二维码内容:资产编码
- ✅ 保存到uploads/qrcodes/目录
- ✅ 返回相对路径用于访问
---
## 🔧 技术实现亮点
### 1. 分层架构
```
API层 (路由控制器)
Service层 (业务逻辑)
CRUD层 (数据库操作)
Model层 (SQLAlchemy模型)
```
### 2. 并发安全
- 使用PostgreSQL Advisory Lock保证资产编码生成的并发安全
- 锁ID基于日期避免不同日期的锁冲突
- 自动释放锁,防止死锁
### 3. 状态机模式
- 清晰定义状态转换规则
- 状态转换验证
- 状态历史记录完整
- 支持状态查询和统计
### 4. 动态字段
- 使用PostgreSQL JSONB类型存储动态字段
- 支持多种字段类型和验证规则
- 高效的JSONB查询使用GIN索引
### 5. 树形结构
- 使用tree_path字段优化树形查询
- 支持递归查询父节点和子节点
- 自动计算层级深度
### 6. 软删除
- 所有核心表支持软删除deleted_at字段
- 查询时自动过滤已删除数据
- 保留数据用于审计和恢复
---
## 📦 文件清单
### Models (数据模型)
- `app/models/device_type.py` - 设备类型模型
- `app/models/organization.py` - 机构网点模型
- `app/models/brand_supplier.py` - 品牌和供应商模型
- `app/models/asset.py` - 资产模型
### Schemas (数据验证)
- `app/schemas/device_type.py` - 设备类型Schema
- `app/schemas/organization.py` - 机构网点Schema
- `app/schemas/brand_supplier.py` - 品牌和供应商Schema
- `app/schemas/asset.py` - 资产Schema
### CRUD (数据库操作)
- `app/crud/device_type.py` - 设备类型CRUD
- `app/crud/organization.py` - 机构网点CRUD
- `app/crud/brand_supplier.py` - 品牌和供应商CRUD
- `app/crud/asset.py` - 资产CRUD
### Services (业务逻辑)
- `app/services/device_type_service.py` - 设备类型服务
- `app/services/organization_service.py` - 机构网点服务
- `app/services/brand_supplier_service.py` - 品牌和供应商服务
- `app/services/state_machine_service.py` - 状态机服务
- `app/services/asset_service.py` - 资产服务
### API Routes (路由控制器)
- `app/api/v1/device_types.py` - 设备类型API
- `app/api/v1/organizations.py` - 机构网点API
- `app/api/v1/brands_suppliers.py` - 品牌和供应商API
- `app/api/v1/assets.py` - 资产API
### Utils (工具函数)
- `app/utils/asset_code.py` - 资产编码生成
- `app/utils/qrcode.py` - 二维码生成
---
## 🚀 启动说明
### 1. 安装依赖
```bash
cd asset_management_backend
pip install -r requirements.txt
```
### 2. 配置环境变量
编辑 `.env` 文件:
```env
DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/asset_management
SECRET_KEY=your-secret-key
DEBUG=True
```
### 3. 初始化数据库
```bash
# 开发环境会自动创建表生产环境使用Alembic迁移
python -m alembic upgrade head
```
### 4. 启动服务
```bash
python run.py
# 或
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
```
### 5. 访问API文档
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
---
## 📝 使用示例
### 创建设备类型
```python
POST /api/v1/device-types
{
"type_code": "LAPTOP",
"type_name": "笔记本电脑",
"category": "IT设备",
"description": "笔记本电脑设备",
"icon": "laptop",
"sort_order": 1
}
```
### 添加动态字段
```python
POST /api/v1/device-types/1/fields
{
"field_code": "cpu",
"field_name": "CPU型号",
"field_type": "text",
"is_required": true,
"placeholder": "例如: Intel i5-10400",
"validation_rules": {
"max_length": 100
},
"sort_order": 1
}
```
### 创建资产
```python
POST /api/v1/assets
{
"asset_name": "联想ThinkPad X1",
"device_type_id": 1,
"brand_id": 1,
"model": "X1 Carbon",
"serial_number": "SN20250124001",
"purchase_date": "2025-01-15",
"purchase_price": 8500.00,
"warranty_period": 24,
"organization_id": 1,
"location": "3楼办公室",
"dynamic_attributes": {
"cpu": "Intel i7-1165G7",
"memory": "16GB",
"disk": "512GB SSD"
}
}
```
### 变更资产状态
```python
POST /api/v1/assets/1/status
{
"new_status": "in_use",
"remark": "分配给张三使用"
}
```
---
## ⚠️ 注意事项
### 1. 数据库兼容性
- 使用PostgreSQL 14+
- 需要JSONB支持
- 需要Advisory Lock支持
### 2. 依赖包
需要安装以下Python包
- fastapi
- sqlalchemy[asyncio]
- asyncpg
- pydantic
- qrcode
- openpyxl用于Excel导入导出
### 3. 文件上传
- 需要创建uploads/qrcodes目录
- 确保有写权限
### 4. 并发控制
- 资产编码生成使用数据库锁,高并发下性能可能受影响
- 建议使用连接池优化
---
## 📊 数据库索引优化
### 资产表索引
```sql
-- 主键索引
PRIMARY KEY (id)
-- 唯一索引
UNIQUE INDEX (asset_code)
-- 普通索引
INDEX (device_type_id)
INDEX (organization_id)
INDEX (status)
INDEX (serial_number)
INDEX (purchase_date)
-- JSONB GIN索引重要
INDEX (dynamic_attributes) USING GIN
-- 全文搜索索引
INDEX (asset_name) USING GIN (gin_trgm_ops)
INDEX (model) USING GIN (gin_trgm_ops)
```
---
## 🔄 后续开发建议
### Phase 5: 资产分配管理
- 资产分配单
- 资产调拨
- 资产回收
- 审批流程
### Phase 6: 维修管理
- 维修记录
- 维修状态跟踪
- 维修费用统计
### Phase 7: 批量导入导出
- Excel批量导入
- Excel批量导出
- 数据验证
### Phase 8: 统计分析
- 资产统计报表
- 资产折旧计算
- 资产分布分析
---
## ✅ 质量保证
### 代码规范
- ✅ 遵循PEP 8规范
- ✅ 完整的Type Hints
- ✅ 详细的Docstring文档
- ✅ 异步async/await支持
- ✅ Pydantic v2数据验证
### 异常处理
- ✅ 自定义异常类
- ✅ 统一错误响应格式
- ✅ 完整的错误日志
### 安全性
- ✅ JWT认证
- ✅ 权限控制(预留)
- ✅ SQL注入防护ORM
- ✅ XSS防护输入验证
---
## 🎯 总结
本次开发完成了资产管理系统的Phase 3和Phase 4核心模块包括
1. **4个基础数据管理模块**(设备类型、机构网点、品牌、供应商)
2. **完整的资产管理核心功能**
3. **状态机服务**
4. **资产编码生成服务**
5. **二维码生成服务**
所有模块都遵循了项目的代码规范和架构设计,代码质量高,功能完整,性能优化到位。
**代码质量第一,功能完整第二,性能第三!**
---
**开发者**: Claude (AI Assistant)
**完成时间**: 2025-01-24
**版本**: v1.0.0