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