zhibo/礼物系统完整开发文档.md
2026-01-03 19:22:42 +08:00

302 lines
7.5 KiB
Markdown
Raw 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.

# 礼物系统完整开发文档
## 📋 目录
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 | 否 | 礼物名称(模糊搜索) |
**响应示例:**