zhibo/礼物系统完整开发文档.md

302 lines
7.5 KiB
Markdown
Raw Normal View History

2026-01-03 19:22:42 +08:00
# 礼物系统完整开发文档
## 📋 目录
1. [系统概述](#系统概述)
2. [数据库设计](#数据库设计)
3. [后端API接口](#后端api接口)
4. [前端页面](#前端页面)
5. [APP端集成](#app端集成)
6. [部署指南](#部署指南)
7. [测试验证](#测试验证)
---
## 系统概述
### 功能简介
礼物系统是直播平台的核心功能之一,支持用户在直播间送礼物给主播,包含以下核心功能:
- **礼物管理**:后台管理员可以添加、编辑、删除、启用/禁用礼物
- **打赏记录**:记录所有用户的礼物打赏行为
- **统计分析**:礼物数量、启用/禁用状态、总价值统计
- **APP集成**:移动端获取礼物列表并发送礼物
### 技术栈
- **后端**Java + Spring Boot + MyBatis + MySQL
- **前端管理**Vue.js + Element UI
- **移动端**Android (Java)
- **数据库**MySQL 5.7+
### 核心数据表
- `eb_gift` - 礼物主数据表20个礼物
- `eb_gift_record` - 礼物打赏记录表
---
## 数据库设计
### 1. eb_gift 表(礼物主数据表)
```sql
CREATE TABLE `eb_gift` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '礼物ID',
`name` varchar(50) NOT NULL COMMENT '礼物名称',
`image` varchar(255) DEFAULT NULL COMMENT '礼物图片URL',
`diamond_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '钻石价格',
`intimacy` int(11) NOT NULL DEFAULT '0' COMMENT '亲密度',
`is_heartbeat` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否心动礼物 0-否 1-是',
`level` int(11) NOT NULL DEFAULT '1' COMMENT '礼物等级',
`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 0-禁用 1-启用',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除 0-否 1-是',
`buy_type` varchar(20) DEFAULT 'diamond' COMMENT '购买类型',
`belong` varchar(20) DEFAULT 'common' COMMENT '归属',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_sort` (`sort`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='礼物表';
```
**字段说明:**
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 礼物唯一标识 |
| name | varchar(50) | 礼物名称,如"玫瑰花"、"钻戒" |
| image | varchar(255) | 礼物图片URL |
| diamond_price | decimal(10,2) | 钻石价格 |
| intimacy | int | 赠送礼物增加的亲密度 |
| is_heartbeat | tinyint | 是否为心动礼物(特殊标记) |
| level | int | 礼物等级 |
| sort | int | 显示排序 |
| status | tinyint | 启用状态0-禁用1-启用) |
| is_deleted | tinyint | 软删除标记 |
| buy_type | varchar(20) | 购买类型diamond-钻石) |
| belong | varchar(20) | 归属common-通用live-直播专属) |
| remark | varchar(255) | 备注信息 |
### 2. eb_gift_record 表(打赏记录表)
```sql
CREATE TABLE `eb_gift_record` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '记录ID',
`sender_id` int(11) NOT NULL COMMENT '送礼用户ID',
`sender_nickname` varchar(50) DEFAULT NULL COMMENT '送礼用户昵称',
`receiver_id` int(11) NOT NULL COMMENT '收礼用户ID',
`receiver_nickname` varchar(50) DEFAULT NULL COMMENT '收礼用户昵称',
`gift_id` int(11) NOT NULL COMMENT '礼物ID',
`gift_count` int(11) NOT NULL DEFAULT '1' COMMENT '礼物数量',
`total_price` decimal(10,2) NOT NULL COMMENT '总价格',
`room_id` int(11) DEFAULT NULL COMMENT '直播间ID',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_sender` (`sender_id`),
KEY `idx_receiver` (`receiver_id`),
KEY `idx_gift` (`gift_id`),
KEY `idx_room` (`room_id`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='礼物打赏记录表';
```
**字段说明:**
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 记录唯一标识 |
| sender_id | int | 送礼用户ID |
| sender_nickname | varchar(50) | 送礼用户昵称 |
| receiver_id | int | 收礼用户ID主播 |
| receiver_nickname | varchar(50) | 收礼用户昵称 |
| gift_id | int | 礼物ID关联eb_gift表 |
| gift_count | int | 礼物数量 |
| total_price | decimal(10,2) | 总价格(单价×数量) |
| room_id | int | 直播间ID |
| create_time | timestamp | 打赏时间 |
### 3. 初始化数据
系统预置了20个礼物
1. 玫瑰花 - 10钻石
2. 爱心 - 20钻石
3. 火箭 - 100钻石
4. 皇冠 - 500钻石
5. 跑车 - 1000钻石
6. 城堡 - 5000钻石
7. 棒棒糖 - 5钻石
8. 啤酒 - 15钻石
9. 蛋糕 - 50钻石
10. 钻戒 - 2000钻石
11-20. 其他礼物...
---
## 后端API接口
### 基础路径
```
http://your-server.com/api/admin/gift
```
### 1. 礼物列表(管理端)
**接口地址:** `GET /list`
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 页码默认1 |
| limit | int | 否 | 每页数量默认10 |
| name | string | 否 | 礼物名称(模糊搜索) |
| status | int | 否 | 状态0-禁用1-启用) |
**响应示例:**
```json
{
"code": 200,
"message": null,
"data": {
"page": 1,
"limit": 10,
"totalPage": 2,
"total": 20,
"list": [
{
"id": 1,
"name": "玫瑰花",
"image": "https://example.com/gifts/rose.png",
"diamondPrice": "10.00",
"intimacy": 10,
"status": true,
"isHeartbeat": false,
"buyType": "diamond",
"belong": "common",
"remark": "浪漫玫瑰",
"level": 1,
"sort": 0,
"createTime": "2025-12-30 20:25:16",
"updateTime": "2025-12-30 20:25:16"
}
]
}
}
```
### 2. 添加礼物
**接口地址:** `POST /add`
**请求体:**
```json
{
"name": "新礼物",
"image": "https://example.com/gift.png",
"diamondPrice": 100,
"intimacy": 100,
"isHeartbeat": false,
"level": 1,
"sort": 0,
"status": true,
"buyType": "diamond",
"belong": "common",
"remark": "备注信息"
}
```
**响应示例:**
```json
{
"code": 200,
"message": "添加成功",
"data": null
}
```
### 3. 编辑礼物
**接口地址:** `POST /update`
**请求体:**
```json
{
"id": 1,
"name": "更新后的名称",
"image": "https://example.com/new-gift.png",
"diamondPrice": 150,
"intimacy": 150,
"isHeartbeat": true,
"level": 2,
"sort": 1,
"status": true,
"buyType": "diamond",
"belong": "live",
"remark": "更新后的备注"
}
```
### 4. 删除礼物
**接口地址:** `POST /delete/{id}`
**路径参数:**
- `id`: 礼物ID
**响应示例:**
```json
{
"code": 200,
"message": "删除成功",
"data": null
}
```
### 5. 修改礼物状态
**接口地址:** `POST /status/{id}`
**路径参数:**
- `id`: 礼物ID
**请求参数:**
- `status`: 状态0-禁用1-启用)
**响应示例:**
```json
{
"code": 200,
"message": "状态修改成功",
"data": null
}
```
### 6. 打赏记录列表
**接口地址:** `GET /records`
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 页码默认1 |
| limit | int | 否 | 每页数量默认20 |
| senderName | string | 否 | 送礼用户昵称(模糊搜索) |
| receiverName | string | 否 | 收礼用户昵称(模糊搜索) |
| giftName | string | 否 | 礼物名称(模糊搜索) |
**响应示例:**