Files
zcglxt/backend/API_USAGE_GUIDE.md

12 KiB
Raw Blame History

资产管理系统 - 后端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. 安装依赖

cd asset_management_backend
pip install -r requirements.txt

2. 配置环境变量

编辑 .env 文件:

DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/asset_management
SECRET_KEY=your-secret-key
DEBUG=True

3. 初始化数据库

# 开发环境会自动创建表生产环境使用Alembic迁移
python -m alembic upgrade head

4. 启动服务

python run.py
# 或
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

5. 访问API文档


📝 使用示例

创建设备类型

POST /api/v1/device-types
{
    "type_code": "LAPTOP",
    "type_name": "笔记本电脑",
    "category": "IT设备",
    "description": "笔记本电脑设备",
    "icon": "laptop",
    "sort_order": 1
}

添加动态字段

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
}

创建资产

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"
    }
}

变更资产状态

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. 并发控制

  • 资产编码生成使用数据库锁,高并发下性能可能受影响
  • 建议使用连接池优化

📊 数据库索引优化

资产表索引

-- 主键索引
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