# QY LTY 后端服务 — 项目功能介绍

## 项目定位

QY LTY 是一个 AI 智能硬件（如陪伴机器人/智能玩具）的后端平台，基于 Django 构建，为设备提供 AI 对话、语音交互、实时通信能力，同时管理用户账号、卡密激活、订阅付费和成就激励体系。

---

## 代码目录结构

| 目录 | 说明 |
|------|------|
| `qy_lty/` | Django 主配置（settings、urls、asgi） |
| `userapp/` | 用户管理与认证 |
| `aiapp/` | AI 对话系统 |
| `card/` | 卡片/卡密系统 |
| `device_interaction/` | 设备 WebSocket 实时通信 |
| `achievement_app/` | 成就系统 |
| `subscription_app/` | 订阅管理 |
| `ali_vi_app/` | 阿里云视觉智能（换脸/美颜等） |
| `food_app/` | 食物系统（游戏道具） |
| `workflow_app/` | 工作流管理（开发中） |
| `common/` | 公共工具（响应格式、OSS、中间件） |
| `docs/` | 项目文档 |

---

## 功能模块详解

### 1. 用户管理（userapp/）

- 自定义用户模型 `ParadiseUser`，扩展字段：手机号、性别、生日、星座、MBTI、兴趣、社交身份
- 多种登录方式：手机号、邮箱、用户名、MAC 地址
- 阿里云短信验证码
- 微信社交登录（django-allauth）
- Redis Token 认证

**核心文件：**
- `models.py` — ParadiseUser 用户模型
- `views.py` — 注册、登录、资料更新接口
- `authentication.py` — RedisTokenAuthentication 自定义认证
- `utils.py` — 短信发送、Token 生成与管理

---

### 2. AI 对话系统（aiapp/）

- **单轮对话：** `/api/ai/chat/<bot_id>/`
- **多轮对话：** `/api/ai/multichat/`（保持上下文）
- 接入 Kimi（月之暗面）大模型
- **语音服务：** 多供应商抽象架构
  - `audio/AliyunAudioService.py` — 阿里云语音
  - `audio/TencentAudioService.py` — 腾讯云语音
  - `audio/HuoshanAudioService.py` — 火山引擎语音
- 支持语音合成（TTS）和语音识别（ASR）

**核心文件：**
- `models.py` — Bot 机器人模型、ChatMessage 对话记录模型
- `views.py` — ChatBotAPIView（单轮）、MultiChatAPIView（多轮）
- `kimi.py` — Kimi API 客户端（OpenAI 兼容接口）
- `audio/AudioService.py` — 音频服务工厂函数
- `audio/BaseAudioService.py` — 音频服务抽象基类

---

### 3. 设备实时通信（device_interaction/）

- WebSocket 连接：`ws://domain/ws/device/token/{token}/`
- 设备模型：设备类型、批次、序列号、电量、固件版本、WiFi、亮度
- 用户-设备绑定关系
- 消息类型：`chat_message`（聊天）、`weather`（天气）、`sing`（唱歌）、`dance`（跳舞）
- 集成和风天气 API、高德地图 API
- 火山引擎 RTC 实时音视频

**核心文件：**
- `models.py` — DeviceType、DeviceBatch、Device、UserDevice 模型
- `consumers.py` — DeviceConsumer WebSocket 消费者
- `views.py` — 设备管理 API
- `services.py` — Redis 设备连接状态追踪
- `auth.py` — TokenAuthMiddleware WebSocket 认证中间件
- `weather.py` — 和风天气 API 集成
- `amap_api.py` — 高德地图定位服务
- `volcengine_api.py` — 火山引擎 RTC 集成

---

### 4. 卡片/卡密系统（card/）

- 卡片模板：分类（服装、道具、歌曲、舞蹈、家具、装饰）、稀有度
- 批量生成卡密，支持 Excel 导出
- 二维码生成和扫码核销
- 使用日志追踪（扫描、使用、作废、发布、生产）
- 每个分类有独立属性模型（ClothingAttributes、PropAttributes 等）

**核心文件：**
- `models.py` — CardTemplate、Card、CardBatch、CardUsageLog 及各分类属性模型
- `views.py` — 模板 CRUD、批量生成、扫码核销、Excel 导出
- `storage.py` — OSSStorage 阿里云对象存储集成

---

### 5. 成就系统（achievement_app/）

- 成就定义：名称、描述、图标、达成条件（JSON）
- 稀有度：普通 / 珍贵 / 稀有 / 史诗 / 传说
- 类型：登录 / 活动 / 社交 / 使用 / 特殊 / 隐藏
- 用户成就进度追踪与通知

**核心文件：**
- `models.py` — Achievement 成就定义、UserAchievement 用户成就记录

---

### 6. 订阅管理（subscription_app/）

- 订阅计划：月付 / 季付 / 年付
- 增值包购买（AddOnPackage）
- 计费记录（TenantBilling）
- 定时任务处理订阅续期

**核心文件：**
- `models.py` — SubscriptionPlan、Subscription、AddOnPackage、SubscriptionAddOn、TenantBilling
- `scheduler.py` — 定时任务
- `tasks.py` — 异步任务

---

### 7. 阿里云视觉智能（ali_vi_app/）

- 人脸融合/换脸
- 人脸美颜
- 面部液化、妆容、肤质优化

**核心文件：**
- `vi.py` — VI 类，封装阿里云 FaceBody API（add_template、merge_image_face、face_beauty 等）

---

### 8. 食物系统（food_app/）

- 食物道具：水果、蔬菜、肉类、海鲜等 11 种分类
- 稀有度等级、卡路里、口味标签、营养值
- 游戏效果、使用次数限制、上架时间窗口
- 用户食物背包、使用日志

**核心文件：**
- `models.py` — Food 食物定义、UserFood 用户背包、FoodUsageLog 使用日志

---

### 9. 公共基础设施（common/）

- 标准化 API 响应格式：`{success, code, message, data}`
- 阿里云 OSS 文件上传
- 阿里云日志服务
- 自定义分页（默认 10 条，最大 100 条）
- 火山引擎 Token 管理

**核心文件：**
- `responses.py` — api_response、success_response、error_response 等标准响应函数
- `middleware.py` — StandardResponseMiddleware 统一响应中间件
- `pagination.py` — CustomPageNumberPagination 分页器
- `oss.py` — OSSUploader 文件上传工具
- `aliyun_logging.py` — 阿里云日志配置

---

## API 接口一览

| 路径 | 说明 |
|------|------|
| `/api/user/` | 用户认证与管理 |
| `/api/ai/` | AI 对话接口 |
| `/api/device/` | 设备管理与消息推送 |
| `/api/card/` | 卡片系统管理 |
| `/api/achievement/` | 成就系统 |
| `/api/v1/admin/` | 管理后台接口 |
| `/swagger/` | Swagger API 文档 |
| `/redoc/` | ReDoc API 文档 |

**WebSocket 端点：**
- `ws://domain/ws/device/` — 设备连接
- `ws://domain/ws/device/token/{token}/` — 带 Token 认证的设备连接

---

## 技术栈

| 层面 | 技术 |
|------|------|
| 框架 | Django 4.2.13 + Django REST Framework |
| 实时通信 | Django Channels + Daphne ASGI |
| 数据库 | PostgreSQL |
| 缓存/消息 | Redis |
| AI 模型 | Kimi（OpenAI 兼容接口） |
| 语音服务 | 阿里云 / 腾讯 / 火山引擎（可配置切换） |
| 文件存储 | 阿里云 OSS |
| 短信服务 | 阿里云 SMS |
| 视觉智能 | 阿里云 FaceBody |
| 地图/天气 | 高德地图 / 和风天气 |
| 音视频 | 火山引擎 RTC |
| 部署 | Docker + docker-compose |
| API 文档 | drf-yasg（Swagger / ReDoc） |
| 后台管理 | django-simpleui |

---

## 环境配置

### 必需环境变量（.env）

- `SECRET_KEY` — Django 密钥
- `DEBUG` — 调试模式
- `POSTGRESQL_DATABASE_*` — 数据库连接
- `REDIS_LOCATION`、`REDIS_PASSWORD` — Redis 配置
- `KIMI_API_KEY`、`KIMI_BASE_URL` — Kimi AI 配置
- `ALIYUN_*` — 阿里云各服务凭证
- `VOLCENGINE_ACCESS_KEY`、`VOLCENGINE_SECRET_KEY` — 火山引擎配置
- `AUDIO_SERVICE_PROVIDER` — 语音服务商选择

### 快速启动

```bash
# 安装依赖
pip install -r requirements.txt

# 配置环境变量
cp .env.bak .env

# 数据库迁移
python manage.py migrate

# 启动服务（支持 WebSocket）
daphne -b 0.0.0.0 -p 8000 qy_lty.asgi:application

# Docker 部署
docker-compose up -d --build
```
