166 lines
4.5 KiB
Markdown
166 lines
4.5 KiB
Markdown
# 视频主设备管理系统
|
||
|
||
基于 Django REST Framework 的视频设备全生命周期管理后端API服务。
|
||
|
||
## 项目背景
|
||
|
||
随着视频监控、视频会议等业务的扩展,视频主设备(如视频编码器、解码器、矩阵、NVR等)数量快速增长。当前采用人工表格管理方式,存在设备信息分散、维护记录缺失、IP地址冲突、序列号追溯困难等问题。
|
||
|
||
## 功能特性
|
||
|
||
### 核心模块
|
||
|
||
| 模块 | 功能说明 |
|
||
|------|----------|
|
||
| **设备管理** | 设备增删改查;按地点/楼栋/状态筛选;服役时长自动计算 |
|
||
| **序列号管理** | 支持多序列号(主序列号+辅助);唯一性校验 |
|
||
| **IP地址管理** | 支持多IP(管理/业务/备用);主IP标识;唯一性校验 |
|
||
| **维修记录** | 故障描述/维修内容/更换配件/维修人/费用;历史追溯 |
|
||
| **附件与缩略图** | 照片/说明书上传;自动生成缩略图展示 |
|
||
| **巡检管理** | 最后巡检时间记录;保修到期预警 |
|
||
| **Excel导入导出** | 批量导入设备;导出设备列表(含主IP/序列号/维修简述) |
|
||
|
||
### 技术栈
|
||
|
||
| 层级 | 技术选型 |
|
||
|------|----------|
|
||
| 后端框架 | Django 4.2 + Django REST Framework 3.15 |
|
||
| 数据库 | SQLite3 (可切换MySQL/PostgreSQL) |
|
||
| 对象存储 | 本地文件系统 (可扩展MinIO) |
|
||
| 图片处理 | Pillow |
|
||
| 身份认证 | JWT + Session |
|
||
| API文档 | drf-yasg (Swagger/Redoc) |
|
||
| Excel处理 | openpyxl + pandas |
|
||
| 日志系统 | loguru |
|
||
|
||
## 快速开始
|
||
|
||
### 环境要求
|
||
|
||
- Python 3.8+
|
||
- pip
|
||
|
||
### 安装依赖
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 数据库迁移
|
||
|
||
```bash
|
||
python manage.py makemigrations
|
||
python manage.py migrate
|
||
```
|
||
|
||
### 创建管理员
|
||
|
||
```bash
|
||
python manage.py createsuperuser
|
||
```
|
||
|
||
### 启动服务
|
||
|
||
```bash
|
||
python manage.py runserver 0.0.0.0:8000
|
||
```
|
||
|
||
## 访问地址
|
||
|
||
| 服务 | 地址 |
|
||
|------|------|
|
||
| Swagger API文档 | http://localhost:8000/swagger/ |
|
||
| Redoc API文档 | http://localhost:8000/redoc/ |
|
||
| Django Admin后台 | http://localhost:8000/admin/ |
|
||
| 设备列表API | http://localhost:8000/api/devices/ |
|
||
|
||
## API端点
|
||
|
||
### 设备管理
|
||
|
||
| 方法 | 端点 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/api/devices/` | 设备列表(分页/过滤/搜索) |
|
||
| POST | `/api/devices/` | 创建设备(可同时创建主序列号和主IP) |
|
||
| GET | `/api/devices/{id}/` | 设备详情(含序列号/IP/维修记录) |
|
||
| PUT | `/api/devices/{id}/` | 全量更新设备 |
|
||
| PATCH | `/api/devices/{id}/` | 部分更新设备 |
|
||
| DELETE | `/api/devices/{id}/` | 删除设备(级联删除子表) |
|
||
| GET | `/api/devices/export_excel/` | 导出Excel |
|
||
| POST | `/api/devices/import_excel/` | 导入Excel |
|
||
| POST | `/api/devices/{id}/upload_attachment/` | 上传附件 |
|
||
|
||
### 其他资源
|
||
|
||
- `/api/serials/` - 序列号管理
|
||
- `/api/ips/` - IP地址管理
|
||
- `/api/maintenance/` - 维修记录管理
|
||
- `/api/attachments/` - 附件管理
|
||
|
||
### 认证
|
||
|
||
```bash
|
||
# 获取JWT Token
|
||
POST /api/token/
|
||
Body: {
|
||
"username": "your_username",
|
||
"password": "your_password"
|
||
}
|
||
|
||
# 使用Token
|
||
Authorization: Bearer <your_access_token>
|
||
```
|
||
|
||
## Excel导入模板列名
|
||
|
||
| 列名 | 说明 | 必填 |
|
||
|------|------|------|
|
||
| 地点 | 设备所在地点 | 是 |
|
||
| 楼栋 | 所在楼栋 | 否 |
|
||
| 设备名称 | 设备标识名 | 是 |
|
||
| 型号 | 设备型号 | 否 |
|
||
| 品牌 | 设备品牌 | 否 |
|
||
| 状态 | normal/warning/offline/repair/scrap | 否(默认normal) |
|
||
| 负责人 | 运维负责人 | 否 |
|
||
| 主序列号 | 设备主键号 | 否 |
|
||
| 主IP | 主要管理IP地址 | 否 |
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
netmeeting-infra/
|
||
├── config/
|
||
│ ├── settings.py # Django配置
|
||
│ ├── urls.py # 主路由
|
||
│ └── wsgi.py
|
||
├── device_management/
|
||
│ ├── models.py # 5个数据库模型
|
||
│ ├── serializers.py # DRF序列化器
|
||
│ ├── views.py # ViewSet视图
|
||
│ ├── urls.py # API路由
|
||
│ ├── admin.py # Admin配置
|
||
│ └── migrations/ # 数据库迁移文件
|
||
├── manage.py
|
||
├── requirements.txt
|
||
└── README.md
|
||
```
|
||
|
||
## 数据库表结构
|
||
|
||
- `device` - 设备主表(15个业务字段)
|
||
- `device_serial` - 序列号子表(唯一约束)
|
||
- `device_ip` - IP地址子表(唯一约束)
|
||
- `maintenance_record` - 维修记录子表
|
||
- `device_attachment` - 附件管理表
|
||
|
||
## 部署方式(可选)
|
||
|
||
```bash
|
||
# Docker + Nginx + Gunicorn
|
||
# 详见Django官方部署文档
|
||
```
|
||
|
||
## 许可证
|
||
|
||
BSD License
|