Merge branch 'master' of http://192.168.195.14:3000/outsource/HaniBlindBox
This commit is contained in:
commit
027b32efe2
920
docs/API接口文档.md
Normal file
920
docs/API接口文档.md
Normal file
|
|
@ -0,0 +1,920 @@
|
||||||
|
# 抽奖盲盒系统API接口文档
|
||||||
|
|
||||||
|
## 1. 接口概览
|
||||||
|
|
||||||
|
### 基础信息
|
||||||
|
- **基础URL**: `https://api.example.com`
|
||||||
|
- **API版本**: `v1`
|
||||||
|
- **数据格式**: `JSON`
|
||||||
|
- **字符编码**: `UTF-8`
|
||||||
|
- **认证方式**: `JWT Token`
|
||||||
|
|
||||||
|
### 通用响应格式
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {},
|
||||||
|
"timestamp": 1640995200
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 状态码说明
|
||||||
|
| 状态码 | 说明 |
|
||||||
|
|--------|------|
|
||||||
|
| 200 | 请求成功 |
|
||||||
|
| 400 | 请求参数错误 |
|
||||||
|
| 401 | 未授权访问 |
|
||||||
|
| 403 | 权限不足 |
|
||||||
|
| 404 | 资源不存在 |
|
||||||
|
| 500 | 服务器内部错误 |
|
||||||
|
|
||||||
|
## 2. 用户认证接口
|
||||||
|
|
||||||
|
### 2.1 发送验证码
|
||||||
|
```http
|
||||||
|
POST /api/user/sendCode
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"phone": "13800138000",
|
||||||
|
"type": 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**参数说明:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| phone | string | 是 | 手机号 |
|
||||||
|
| type | int | 是 | 类型:1-登录注册 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "验证码发送成功",
|
||||||
|
"data": {
|
||||||
|
"expire_time": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2 用户登录/注册
|
||||||
|
```http
|
||||||
|
POST /api/user/login
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"phone": "13800138000",
|
||||||
|
"code": "123456",
|
||||||
|
"openid": "wx_openid_123"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "登录成功",
|
||||||
|
"data": {
|
||||||
|
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
|
||||||
|
"user_info": {
|
||||||
|
"id": 1001,
|
||||||
|
"phone": "13800138000",
|
||||||
|
"nickname": "用户昵称",
|
||||||
|
"avatar": "头像URL",
|
||||||
|
"money": "100.00",
|
||||||
|
"integral": "50.00",
|
||||||
|
"level": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.3 获取用户信息
|
||||||
|
```http
|
||||||
|
GET /api/user/info
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求头:**
|
||||||
|
```
|
||||||
|
Authorization: Bearer {token}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"id": 1001,
|
||||||
|
"phone": "138****8000",
|
||||||
|
"nickname": "用户昵称",
|
||||||
|
"avatar": "头像URL",
|
||||||
|
"money": "100.00",
|
||||||
|
"integral": "50.00",
|
||||||
|
"money2": "20.00",
|
||||||
|
"level": 1,
|
||||||
|
"draw_num": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. 商品相关接口
|
||||||
|
|
||||||
|
### 3.1 获取商品分类
|
||||||
|
```http
|
||||||
|
GET /api/goods/category
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"title": "手办模型",
|
||||||
|
"sort": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"title": "数码产品",
|
||||||
|
"sort": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 获取商品列表
|
||||||
|
```http
|
||||||
|
GET /api/goods/list
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| category_id | int | 否 | 分类ID |
|
||||||
|
| type | int | 否 | 商品类型 |
|
||||||
|
| page | int | 否 | 页码,默认1 |
|
||||||
|
| limit | int | 否 | 每页数量,默认20 |
|
||||||
|
| keyword | string | 否 | 搜索关键词 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"id": 1001,
|
||||||
|
"title": "精美手办盲盒",
|
||||||
|
"imgurl": "商品图片URL",
|
||||||
|
"price": "29.90",
|
||||||
|
"type": 1,
|
||||||
|
"type_name": "一番赏",
|
||||||
|
"stock": 100,
|
||||||
|
"sale_stock": 50,
|
||||||
|
"status": 1,
|
||||||
|
"prize_num": 1,
|
||||||
|
"show_price": "29.9元/抽"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"total": 100,
|
||||||
|
"page": 1,
|
||||||
|
"limit": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 获取商品详情
|
||||||
|
```http
|
||||||
|
GET /api/goods/detail/{id}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"id": 1001,
|
||||||
|
"title": "精美手办盲盒",
|
||||||
|
"imgurl": "商品封面图",
|
||||||
|
"imgurl_detail": "商品详情图",
|
||||||
|
"price": "29.90",
|
||||||
|
"type": 1,
|
||||||
|
"type_name": "一番赏",
|
||||||
|
"stock": 100,
|
||||||
|
"sale_stock": 50,
|
||||||
|
"prize_num": 1,
|
||||||
|
"goods_describe": "商品描述",
|
||||||
|
"prize_list": [
|
||||||
|
{
|
||||||
|
"id": 2001,
|
||||||
|
"title": "限定手办A",
|
||||||
|
"imgurl": "奖品图片",
|
||||||
|
"price": "299.00",
|
||||||
|
"money": "150.00",
|
||||||
|
"real_pro": "0.05000",
|
||||||
|
"goods_type": 1,
|
||||||
|
"prize_code": "A001"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.4 获取商品奖品列表
|
||||||
|
```http
|
||||||
|
GET /api/goods/prizeList/{goods_id}
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| num | int | 否 | 第几套,默认0 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 2001,
|
||||||
|
"title": "限定手办A",
|
||||||
|
"imgurl": "奖品图片",
|
||||||
|
"price": "299.00",
|
||||||
|
"money": "150.00",
|
||||||
|
"real_pro": "0.05000",
|
||||||
|
"goods_type": 1,
|
||||||
|
"stock": 10,
|
||||||
|
"surplus_stock": 8,
|
||||||
|
"prize_code": "A001",
|
||||||
|
"rank": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. 订单相关接口
|
||||||
|
|
||||||
|
### 4.1 创建订单
|
||||||
|
```http
|
||||||
|
POST /api/order/create
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"goods_id": 1001,
|
||||||
|
"num": 0,
|
||||||
|
"prize_num": 1,
|
||||||
|
"coupon_id": 0,
|
||||||
|
"use_money": "0.00",
|
||||||
|
"use_integral": "0.00",
|
||||||
|
"use_draw": 0
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**参数说明:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| goods_id | int | 是 | 商品ID |
|
||||||
|
| num | int | 是 | 第几套 |
|
||||||
|
| prize_num | int | 是 | 抽奖数量 |
|
||||||
|
| coupon_id | int | 否 | 优惠券ID |
|
||||||
|
| use_money | decimal | 否 | 使用余额 |
|
||||||
|
| use_integral | decimal | 否 | 使用积分 |
|
||||||
|
| use_draw | int | 否 | 使用抽奖券 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "订单创建成功",
|
||||||
|
"data": {
|
||||||
|
"order_id": 10001,
|
||||||
|
"order_num": "202401010001",
|
||||||
|
"order_total": "29.90",
|
||||||
|
"price": "29.90",
|
||||||
|
"goods_info": {
|
||||||
|
"id": 1001,
|
||||||
|
"title": "精美手办盲盒",
|
||||||
|
"imgurl": "商品图片"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 获取支付参数
|
||||||
|
```http
|
||||||
|
POST /api/order/pay
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"order_id": 10001,
|
||||||
|
"pay_type": 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**参数说明:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| order_id | int | 是 | 订单ID |
|
||||||
|
| pay_type | int | 是 | 支付方式:1-微信,2-支付宝 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"pay_params": {
|
||||||
|
"appId": "wx123456789",
|
||||||
|
"timeStamp": "1640995200",
|
||||||
|
"nonceStr": "abc123",
|
||||||
|
"package": "prepay_id=wx123456789",
|
||||||
|
"signType": "RSA",
|
||||||
|
"paySign": "signature"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 获取订单列表
|
||||||
|
```http
|
||||||
|
GET /api/order/list
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| status | int | 否 | 订单状态:0-未支付,1-已支付 |
|
||||||
|
| page | int | 否 | 页码 |
|
||||||
|
| limit | int | 否 | 每页数量 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"id": 10001,
|
||||||
|
"order_num": "202401010001",
|
||||||
|
"goods_title": "精美手办盲盒",
|
||||||
|
"goods_imgurl": "商品图片",
|
||||||
|
"order_total": "29.90",
|
||||||
|
"price": "29.90",
|
||||||
|
"prize_num": 1,
|
||||||
|
"status": 1,
|
||||||
|
"addtime": 1640995200,
|
||||||
|
"pay_time": 1640995300
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"total": 50,
|
||||||
|
"page": 1,
|
||||||
|
"limit": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. 抽奖相关接口
|
||||||
|
|
||||||
|
### 5.1 获取中奖记录
|
||||||
|
```http
|
||||||
|
GET /api/prize/list
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| status | int | 否 | 状态:0-待选择,1-回收,2-发货,3-集市 |
|
||||||
|
| page | int | 否 | 页码 |
|
||||||
|
| limit | int | 否 | 每页数量 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"id": 20001,
|
||||||
|
"order_id": 10001,
|
||||||
|
"goodslist_title": "限定手办A",
|
||||||
|
"goodslist_imgurl": "奖品图片",
|
||||||
|
"goodslist_price": "299.00",
|
||||||
|
"goodslist_money": "150.00",
|
||||||
|
"goodslist_type": 1,
|
||||||
|
"status": 0,
|
||||||
|
"addtime": 1640995300,
|
||||||
|
"prize_code": "A001",
|
||||||
|
"luck_no": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"total": 20,
|
||||||
|
"page": 1,
|
||||||
|
"limit": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 选择奖品处理方式
|
||||||
|
```http
|
||||||
|
POST /api/prize/choose
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"order_list_ids": [20001, 20002],
|
||||||
|
"type": 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**参数说明:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| order_list_ids | array | 是 | 中奖记录ID数组 |
|
||||||
|
| type | int | 是 | 处理方式:1-回收,2-发货,3-集市 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "操作成功",
|
||||||
|
"data": {
|
||||||
|
"recovery_num": "R202401010001",
|
||||||
|
"total_money": "300.00"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6. 集市相关接口
|
||||||
|
|
||||||
|
### 6.1 获取集市商品列表
|
||||||
|
```http
|
||||||
|
GET /api/market/list
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| keyword | string | 否 | 搜索关键词 |
|
||||||
|
| min_price | decimal | 否 | 最低价格 |
|
||||||
|
| max_price | decimal | 否 | 最高价格 |
|
||||||
|
| page | int | 否 | 页码 |
|
||||||
|
| limit | int | 否 | 每页数量 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"id": 30001,
|
||||||
|
"order_num": "M202401010001",
|
||||||
|
"price": "280.00",
|
||||||
|
"stock": 1,
|
||||||
|
"status": 0,
|
||||||
|
"addtime": 1640995400,
|
||||||
|
"goods_info": [
|
||||||
|
{
|
||||||
|
"title": "限定手办A",
|
||||||
|
"imgurl": "奖品图片",
|
||||||
|
"price": "299.00"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"total": 100,
|
||||||
|
"page": 1,
|
||||||
|
"limit": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 发布集市商品
|
||||||
|
```http
|
||||||
|
POST /api/market/publish
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"order_list_ids": [20001],
|
||||||
|
"price": "280.00"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "发布成功",
|
||||||
|
"data": {
|
||||||
|
"market_id": 30001,
|
||||||
|
"order_num": "M202401010001"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.3 购买集市商品
|
||||||
|
```http
|
||||||
|
POST /api/market/buy
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"market_id": 30001,
|
||||||
|
"pay_type": 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "购买成功",
|
||||||
|
"data": {
|
||||||
|
"order_id": 40001,
|
||||||
|
"pay_params": {
|
||||||
|
"appId": "wx123456789",
|
||||||
|
"timeStamp": "1640995200",
|
||||||
|
"nonceStr": "abc123",
|
||||||
|
"package": "prepay_id=wx123456789",
|
||||||
|
"signType": "RSA",
|
||||||
|
"paySign": "signature"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7. 财务相关接口
|
||||||
|
|
||||||
|
### 7.1 获取资金明细
|
||||||
|
```http
|
||||||
|
GET /api/finance/moneyLog
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| type | int | 否 | 类型:1-充值,2-消费,3-回收等 |
|
||||||
|
| page | int | 否 | 页码 |
|
||||||
|
| limit | int | 否 | 每页数量 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"id": 50001,
|
||||||
|
"change_money": "+150.00",
|
||||||
|
"money": "250.00",
|
||||||
|
"type": 4,
|
||||||
|
"type_name": "背包回收",
|
||||||
|
"content": "回收奖品获得",
|
||||||
|
"addtime": 1640995500
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"total": 50,
|
||||||
|
"page": 1,
|
||||||
|
"limit": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.2 获取积分明细
|
||||||
|
```http
|
||||||
|
GET /api/finance/integralLog
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应格式同资金明细**
|
||||||
|
|
||||||
|
### 7.3 获取优惠券列表
|
||||||
|
```http
|
||||||
|
GET /api/finance/couponList
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| status | int | 否 | 状态:0-未使用,1-已使用,2-已过期 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 60001,
|
||||||
|
"title": "新人专享券",
|
||||||
|
"price": "5.00",
|
||||||
|
"man_price": "30.00",
|
||||||
|
"end_time": 1641081600,
|
||||||
|
"status": 0,
|
||||||
|
"state": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 8. 发货相关接口
|
||||||
|
|
||||||
|
### 8.1 创建发货订单
|
||||||
|
```http
|
||||||
|
POST /api/delivery/create
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"order_list_ids": [20001, 20002],
|
||||||
|
"name": "张三",
|
||||||
|
"mobile": "13800138000",
|
||||||
|
"address": "北京市朝阳区xxx街道xxx号",
|
||||||
|
"message": "请小心轻放"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "发货订单创建成功",
|
||||||
|
"data": {
|
||||||
|
"send_id": 70001,
|
||||||
|
"send_num": "S202401010001",
|
||||||
|
"freight": "10.00",
|
||||||
|
"total_price": "10.00"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8.2 获取发货订单列表
|
||||||
|
```http
|
||||||
|
GET /api/delivery/list
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"id": 70001,
|
||||||
|
"send_num": "S202401010001",
|
||||||
|
"freight": "10.00",
|
||||||
|
"status": 1,
|
||||||
|
"count": 2,
|
||||||
|
"name": "张三",
|
||||||
|
"mobile": "138****8000",
|
||||||
|
"address": "北京市朝阳区xxx街道xxx号",
|
||||||
|
"courier_number": "SF1234567890",
|
||||||
|
"courier_name": "顺丰速运",
|
||||||
|
"addtime": 1640995600,
|
||||||
|
"send_time": 1640995700
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8.3 获取物流信息
|
||||||
|
```http
|
||||||
|
GET /api/delivery/track/{send_id}
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"courier_number": "SF1234567890",
|
||||||
|
"courier_name": "顺丰速运",
|
||||||
|
"delivery_status": 3,
|
||||||
|
"delivery_list": [
|
||||||
|
{
|
||||||
|
"time": "2024-01-01 10:00:00",
|
||||||
|
"context": "快件已发出"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"time": "2024-01-01 15:30:00",
|
||||||
|
"context": "快件已到达中转站"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 9. 系统配置接口
|
||||||
|
|
||||||
|
### 9.1 获取系统配置
|
||||||
|
```http
|
||||||
|
GET /api/system/config
|
||||||
|
```
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": {
|
||||||
|
"app_name": "抽奖盲盒",
|
||||||
|
"app_version": "1.0.0",
|
||||||
|
"customer_service": "400-123-4567",
|
||||||
|
"agreement_url": "https://example.com/agreement",
|
||||||
|
"privacy_url": "https://example.com/privacy"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9.2 获取轮播图
|
||||||
|
```http
|
||||||
|
GET /api/system/banner
|
||||||
|
```
|
||||||
|
|
||||||
|
**请求参数:**
|
||||||
|
| 参数 | 类型 | 必填 | 说明 |
|
||||||
|
|------|------|------|------|
|
||||||
|
| type | int | 否 | 类型:1-首页轮播,2-抽卡机轮播 |
|
||||||
|
|
||||||
|
**响应示例:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "success",
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"imgurl": "轮播图URL",
|
||||||
|
"url": "跳转链接",
|
||||||
|
"ttype": 2,
|
||||||
|
"goods_id": 1001
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 10. 错误码说明
|
||||||
|
|
||||||
|
| 错误码 | 说明 |
|
||||||
|
|--------|------|
|
||||||
|
| 10001 | 参数错误 |
|
||||||
|
| 10002 | 用户不存在 |
|
||||||
|
| 10003 | 验证码错误 |
|
||||||
|
| 10004 | 验证码已过期 |
|
||||||
|
| 20001 | 商品不存在 |
|
||||||
|
| 20002 | 商品已下架 |
|
||||||
|
| 20003 | 商品库存不足 |
|
||||||
|
| 30001 | 订单不存在 |
|
||||||
|
| 30002 | 订单状态错误 |
|
||||||
|
| 30003 | 余额不足 |
|
||||||
|
| 40001 | 支付失败 |
|
||||||
|
| 40002 | 支付超时 |
|
||||||
|
| 50001 | 抽奖失败 |
|
||||||
|
| 50002 | 奖品库存不足 |
|
||||||
|
|
||||||
|
## 11. 接口调用示例
|
||||||
|
|
||||||
|
### JavaScript示例
|
||||||
|
```javascript
|
||||||
|
// 用户登录
|
||||||
|
const login = async (phone, code) => {
|
||||||
|
const response = await fetch('/api/user/login', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
phone: phone,
|
||||||
|
code: code
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await response.json();
|
||||||
|
if (result.code === 200) {
|
||||||
|
localStorage.setItem('token', result.data.token);
|
||||||
|
return result.data;
|
||||||
|
} else {
|
||||||
|
throw new Error(result.msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取商品列表
|
||||||
|
const getGoodsList = async (params = {}) => {
|
||||||
|
const query = new URLSearchParams(params).toString();
|
||||||
|
const response = await fetch(`/api/goods/list?${query}`, {
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${localStorage.getItem('token')}`
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return await response.json();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 创建订单
|
||||||
|
const createOrder = async (orderData) => {
|
||||||
|
const response = await fetch('/api/order/create', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Authorization': `Bearer ${localStorage.getItem('token')}`
|
||||||
|
},
|
||||||
|
body: JSON.stringify(orderData)
|
||||||
|
});
|
||||||
|
|
||||||
|
return await response.json();
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### PHP示例
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
class ApiClient {
|
||||||
|
private $baseUrl;
|
||||||
|
private $token;
|
||||||
|
|
||||||
|
public function __construct($baseUrl) {
|
||||||
|
$this->baseUrl = $baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setToken($token) {
|
||||||
|
$this->token = $token;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function request($method, $endpoint, $data = null) {
|
||||||
|
$url = $this->baseUrl . $endpoint;
|
||||||
|
$headers = ['Content-Type: application/json'];
|
||||||
|
|
||||||
|
if ($this->token) {
|
||||||
|
$headers[] = 'Authorization: Bearer ' . $this->token;
|
||||||
|
}
|
||||||
|
|
||||||
|
$ch = curl_init();
|
||||||
|
curl_setopt($ch, CURLOPT_URL, $url);
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||||
|
|
||||||
|
if ($method === 'POST') {
|
||||||
|
curl_setopt($ch, CURLOPT_POST, true);
|
||||||
|
if ($data) {
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
return json_decode($response, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function login($phone, $code) {
|
||||||
|
return $this->request('POST', '/api/user/login', [
|
||||||
|
'phone' => $phone,
|
||||||
|
'code' => $code
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGoodsList($params = []) {
|
||||||
|
$query = http_build_query($params);
|
||||||
|
return $this->request('GET', '/api/goods/list?' . $query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用示例
|
||||||
|
$client = new ApiClient('https://api.example.com');
|
||||||
|
$result = $client->login('13800138000', '123456');
|
||||||
|
|
||||||
|
if ($result['code'] === 200) {
|
||||||
|
$client->setToken($result['data']['token']);
|
||||||
|
$goodsList = $client->getGoodsList(['type' => 1, 'page' => 1]);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
```
|
||||||
|
|
||||||
|
这份API文档涵盖了抽奖盲盒系统的主要功能接口,包括用户认证、商品管理、订单处理、抽奖机制、集市交易、财务管理等核心业务模块。每个接口都提供了详细的参数说明和响应示例,便于前端开发和第三方集成。
|
||||||
284
docs/README.md
Normal file
284
docs/README.md
Normal file
|
|
@ -0,0 +1,284 @@
|
||||||
|
# 抽奖盲盒系统文档
|
||||||
|
|
||||||
|
欢迎来到抽奖盲盒系统的技术文档中心!本文档集合包含了系统的完整技术资料,帮助开发者、运维人员和产品经理全面了解系统架构和业务流程。
|
||||||
|
|
||||||
|
## 📚 文档目录
|
||||||
|
|
||||||
|
### 🎯 [业务流程图](./业务流程图.md)
|
||||||
|
详细展示了系统的核心业务流程,包括:
|
||||||
|
- 系统整体业务流程
|
||||||
|
- 用户注册登录流程
|
||||||
|
- 抽奖核心流程
|
||||||
|
- 支付流程
|
||||||
|
- 商品管理流程
|
||||||
|
- 订单处理流程
|
||||||
|
- 集市交易流程
|
||||||
|
- 数据统计分析流程
|
||||||
|
|
||||||
|
### 🏗️ [系统架构图](./系统架构图.md)
|
||||||
|
全面介绍了系统的技术架构设计,包括:
|
||||||
|
- 系统整体架构
|
||||||
|
- 应用模块架构
|
||||||
|
- 抽奖算法架构
|
||||||
|
- 支付系统架构
|
||||||
|
- 缓存架构设计
|
||||||
|
- 消息队列架构
|
||||||
|
- 安全架构设计
|
||||||
|
- 监控运维架构
|
||||||
|
|
||||||
|
### 🗄️ [数据库设计图](./数据库设计图.md)
|
||||||
|
完整的数据库设计文档,包含:
|
||||||
|
- 数据库整体ER图
|
||||||
|
- 核心业务表关系图
|
||||||
|
- 用户财务系统表关系图
|
||||||
|
- 商品管理系统表关系图
|
||||||
|
- 管理后台系统表关系图
|
||||||
|
- 数据表索引设计
|
||||||
|
- 数据库分表策略
|
||||||
|
- 数据备份与恢复策略
|
||||||
|
|
||||||
|
### 🔌 [API接口文档](./API接口文档.md)
|
||||||
|
详细的API接口说明文档,包括:
|
||||||
|
- 用户认证接口
|
||||||
|
- 商品相关接口
|
||||||
|
- 订单相关接口
|
||||||
|
- 抽奖相关接口
|
||||||
|
- 集市相关接口
|
||||||
|
- 财务相关接口
|
||||||
|
- 发货相关接口
|
||||||
|
- 系统配置接口
|
||||||
|
- 错误码说明
|
||||||
|
- 接口调用示例
|
||||||
|
|
||||||
|
## 🎮 系统概述
|
||||||
|
|
||||||
|
### 项目简介
|
||||||
|
这是一个基于 **ThinkPHP 6.0** 框架开发的**抽奖盲盒系统**,主要面向娱乐抽奖和商品销售场景。系统采用前后端分离架构,支持多种抽奖模式和支付方式。
|
||||||
|
|
||||||
|
### 核心特性
|
||||||
|
- 🎲 **多样化抽奖模式**:支持一番赏、无限赏、擂台赏、抽卡机等9种抽奖类型
|
||||||
|
- 💰 **灵活支付系统**:支持微信支付、支付宝、余额、虚拟货币等多种支付方式
|
||||||
|
- 🎁 **智能奖品管理**:支持普通奖品、宝箱奖品、特殊奖品等多种类型
|
||||||
|
- 🛒 **完整交易流程**:从下单到收货的完整闭环,支持发货、回收、集市交易
|
||||||
|
- 📊 **数据分析系统**:全方位的用户行为分析和销售数据统计
|
||||||
|
- 🔒 **安全防护机制**:多层安全防护,完善的权限控制体系
|
||||||
|
|
||||||
|
### 技术栈
|
||||||
|
- **后端框架**:ThinkPHP 6.0
|
||||||
|
- **数据库**:MySQL 5.7+
|
||||||
|
- **缓存**:Redis
|
||||||
|
- **PHP版本**:7.1+ (兼容 PHP 8.0)
|
||||||
|
- **依赖管理**:Composer
|
||||||
|
|
||||||
|
## 🚀 快速开始
|
||||||
|
|
||||||
|
### 环境要求
|
||||||
|
- PHP 7.1+
|
||||||
|
- MySQL 5.7+
|
||||||
|
- Redis 3.0+
|
||||||
|
- Composer
|
||||||
|
|
||||||
|
### 安装步骤
|
||||||
|
1. **克隆项目**
|
||||||
|
```bash
|
||||||
|
git clone [项目地址]
|
||||||
|
cd lottery-system
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **安装依赖**
|
||||||
|
```bash
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **配置环境**
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
# 编辑 .env 文件,配置数据库和其他服务
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **导入数据库**
|
||||||
|
```bash
|
||||||
|
mysql -u root -p < table.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **启动服务**
|
||||||
|
```bash
|
||||||
|
php think run
|
||||||
|
```
|
||||||
|
|
||||||
|
### 配置说明
|
||||||
|
主要配置文件位于 `config/` 目录下:
|
||||||
|
- `database.php` - 数据库配置
|
||||||
|
- `app.php` - 应用配置
|
||||||
|
- `cache.php` - 缓存配置
|
||||||
|
- `route.php` - 路由配置
|
||||||
|
|
||||||
|
## 📋 业务模块
|
||||||
|
|
||||||
|
### 用户系统
|
||||||
|
- 手机号注册登录
|
||||||
|
- 用户信息管理
|
||||||
|
- 等级体系
|
||||||
|
- 推荐机制
|
||||||
|
|
||||||
|
### 商品系统
|
||||||
|
- 商品分类管理
|
||||||
|
- 多种抽奖类型
|
||||||
|
- 奖品配置
|
||||||
|
- 库存管理
|
||||||
|
- 概率控制
|
||||||
|
|
||||||
|
### 订单系统
|
||||||
|
- 订单创建
|
||||||
|
- 支付处理
|
||||||
|
- 抽奖执行
|
||||||
|
- 中奖记录
|
||||||
|
|
||||||
|
### 财务系统
|
||||||
|
- 多币种支持
|
||||||
|
- 资金流水
|
||||||
|
- 优惠券系统
|
||||||
|
- 回收机制
|
||||||
|
|
||||||
|
### 物流系统
|
||||||
|
- 发货管理
|
||||||
|
- 物流跟踪
|
||||||
|
- 收货确认
|
||||||
|
|
||||||
|
### 集市系统
|
||||||
|
- 商品发布
|
||||||
|
- 交易撮合
|
||||||
|
- 安全保障
|
||||||
|
|
||||||
|
## 🔧 开发指南
|
||||||
|
|
||||||
|
### 代码结构
|
||||||
|
```
|
||||||
|
server/php/
|
||||||
|
├── app/ # 应用目录
|
||||||
|
│ ├── admin/ # 管理后台
|
||||||
|
│ ├── api/ # API接口
|
||||||
|
│ ├── index/ # 前台页面
|
||||||
|
│ ├── command/ # 命令行任务
|
||||||
|
│ └── common/ # 公共模块
|
||||||
|
├── config/ # 配置文件
|
||||||
|
├── public/ # 入口文件
|
||||||
|
├── route/ # 路由定义
|
||||||
|
├── view/ # 视图模板
|
||||||
|
└── vendor/ # 第三方依赖
|
||||||
|
```
|
||||||
|
|
||||||
|
### 开发规范
|
||||||
|
- 遵循 PSR-4 自动加载规范
|
||||||
|
- 使用 ThinkPHP 6.0 开发规范
|
||||||
|
- 数据库操作使用 ORM
|
||||||
|
- 接口返回统一 JSON 格式
|
||||||
|
- 完善的异常处理机制
|
||||||
|
|
||||||
|
### 扩展开发
|
||||||
|
系统采用模块化设计,支持功能扩展:
|
||||||
|
- 新增抽奖类型
|
||||||
|
- 自定义支付方式
|
||||||
|
- 扩展奖品类型
|
||||||
|
- 增加数据分析维度
|
||||||
|
|
||||||
|
## 🛡️ 安全特性
|
||||||
|
|
||||||
|
### 数据安全
|
||||||
|
- 敏感信息加密存储
|
||||||
|
- SQL注入防护
|
||||||
|
- XSS攻击防护
|
||||||
|
- CSRF防护
|
||||||
|
|
||||||
|
### 业务安全
|
||||||
|
- 防刷机制
|
||||||
|
- 风控系统
|
||||||
|
- 异常监控
|
||||||
|
- 操作审计
|
||||||
|
|
||||||
|
### 系统安全
|
||||||
|
- JWT认证
|
||||||
|
- 权限控制
|
||||||
|
- 访问日志
|
||||||
|
- 安全配置
|
||||||
|
|
||||||
|
## 📈 性能优化
|
||||||
|
|
||||||
|
### 数据库优化
|
||||||
|
- 合理的索引设计
|
||||||
|
- 读写分离
|
||||||
|
- 分表策略
|
||||||
|
- 查询优化
|
||||||
|
|
||||||
|
### 缓存策略
|
||||||
|
- Redis缓存
|
||||||
|
- 数据缓存
|
||||||
|
- 页面缓存
|
||||||
|
- 对象缓存
|
||||||
|
|
||||||
|
### 系统优化
|
||||||
|
- 异步处理
|
||||||
|
- 队列机制
|
||||||
|
- 负载均衡
|
||||||
|
- CDN加速
|
||||||
|
|
||||||
|
## 🔍 监控运维
|
||||||
|
|
||||||
|
### 日志管理
|
||||||
|
- 应用日志
|
||||||
|
- 错误日志
|
||||||
|
- 访问日志
|
||||||
|
- 业务日志
|
||||||
|
|
||||||
|
### 性能监控
|
||||||
|
- 系统性能
|
||||||
|
- 数据库性能
|
||||||
|
- 接口性能
|
||||||
|
- 用户体验
|
||||||
|
|
||||||
|
### 告警机制
|
||||||
|
- 实时告警
|
||||||
|
- 邮件通知
|
||||||
|
- 短信通知
|
||||||
|
- 钉钉通知
|
||||||
|
|
||||||
|
## 🤝 贡献指南
|
||||||
|
|
||||||
|
### 开发流程
|
||||||
|
1. Fork 项目
|
||||||
|
2. 创建功能分支
|
||||||
|
3. 提交代码
|
||||||
|
4. 创建 Pull Request
|
||||||
|
|
||||||
|
### 代码规范
|
||||||
|
- 遵循 PSR 标准
|
||||||
|
- 添加必要注释
|
||||||
|
- 编写单元测试
|
||||||
|
- 更新文档
|
||||||
|
|
||||||
|
### 问题反馈
|
||||||
|
- 通过 Issue 反馈问题
|
||||||
|
- 提供详细的问题描述
|
||||||
|
- 包含复现步骤
|
||||||
|
- 提供环境信息
|
||||||
|
|
||||||
|
## 📞 技术支持
|
||||||
|
|
||||||
|
### 联系方式
|
||||||
|
- 技术交流群:[群号]
|
||||||
|
- 邮箱:[邮箱地址]
|
||||||
|
- 官网:[官网地址]
|
||||||
|
|
||||||
|
### 常见问题
|
||||||
|
- 查看 FAQ 文档
|
||||||
|
- 搜索历史 Issue
|
||||||
|
- 参考技术文档
|
||||||
|
- 联系技术支持
|
||||||
|
|
||||||
|
## 📄 许可证
|
||||||
|
|
||||||
|
本项目采用 [Apache 2.0](../LICENSE) 许可证。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**注意**:本文档会持续更新,请关注最新版本。如有疑问或建议,欢迎提交 Issue 或 Pull Request。
|
||||||
375
docs/业务流程图.md
Normal file
375
docs/业务流程图.md
Normal file
|
|
@ -0,0 +1,375 @@
|
||||||
|
# 抽奖盲盒系统业务流程图
|
||||||
|
|
||||||
|
## 1. 系统整体业务流程
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[用户注册/登录] --> B[浏览商品]
|
||||||
|
B --> C{选择抽奖类型}
|
||||||
|
|
||||||
|
C --> D1[一番赏]
|
||||||
|
C --> D2[无限赏]
|
||||||
|
C --> D3[擂台赏]
|
||||||
|
C --> D4[抽卡机]
|
||||||
|
C --> D5[积分赏]
|
||||||
|
C --> D6[全局赏]
|
||||||
|
C --> D7[福利盲盒]
|
||||||
|
C --> D8[领主赏]
|
||||||
|
C --> D9[连击赏]
|
||||||
|
|
||||||
|
D1 --> E[创建订单]
|
||||||
|
D2 --> E
|
||||||
|
D3 --> E
|
||||||
|
D4 --> E
|
||||||
|
D5 --> E
|
||||||
|
D6 --> E
|
||||||
|
D7 --> E
|
||||||
|
D8 --> E
|
||||||
|
D9 --> E
|
||||||
|
|
||||||
|
E --> F{选择支付方式}
|
||||||
|
F --> G1[微信支付]
|
||||||
|
F --> G2[支付宝支付]
|
||||||
|
F --> G3[余额支付]
|
||||||
|
F --> G4[虚拟货币支付]
|
||||||
|
F --> G5[优惠券抵扣]
|
||||||
|
|
||||||
|
G1 --> H[支付成功]
|
||||||
|
G2 --> H
|
||||||
|
G3 --> H
|
||||||
|
G4 --> H
|
||||||
|
G5 --> H
|
||||||
|
|
||||||
|
H --> I[执行抽奖算法]
|
||||||
|
I --> J[生成中奖结果]
|
||||||
|
J --> K{奖品类型判断}
|
||||||
|
|
||||||
|
K --> L1[普通奖品]
|
||||||
|
K --> L2[宝箱奖品]
|
||||||
|
K --> L3[特殊奖品]
|
||||||
|
K --> L4[虚拟货币]
|
||||||
|
|
||||||
|
L1 --> M[用户选择处理方式]
|
||||||
|
L2 --> N[开启宝箱]
|
||||||
|
L3 --> M
|
||||||
|
L4 --> O[自动到账]
|
||||||
|
|
||||||
|
N --> M
|
||||||
|
M --> P{处理方式}
|
||||||
|
P --> Q1[选择发货]
|
||||||
|
P --> Q2[回收换钱]
|
||||||
|
P --> Q3[发布集市]
|
||||||
|
|
||||||
|
Q1 --> R1[填写收货地址]
|
||||||
|
Q2 --> R2[获得回收金额]
|
||||||
|
Q3 --> R3[集市交易]
|
||||||
|
|
||||||
|
R1 --> S1[商家发货]
|
||||||
|
R2 --> T[完成]
|
||||||
|
R3 --> U[等待买家]
|
||||||
|
|
||||||
|
S1 --> V[用户确认收货]
|
||||||
|
U --> W[买家购买]
|
||||||
|
V --> T
|
||||||
|
W --> T
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. 用户注册登录流程
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
participant U as 用户
|
||||||
|
participant F as 前端
|
||||||
|
participant A as API服务
|
||||||
|
participant D as 数据库
|
||||||
|
participant S as 短信服务
|
||||||
|
|
||||||
|
U->>F: 输入手机号
|
||||||
|
F->>A: 发送验证码请求
|
||||||
|
A->>S: 调用短信接口
|
||||||
|
S-->>A: 发送成功
|
||||||
|
A->>D: 保存验证码记录
|
||||||
|
A-->>F: 返回发送结果
|
||||||
|
|
||||||
|
U->>F: 输入验证码
|
||||||
|
F->>A: 提交登录/注册
|
||||||
|
A->>D: 验证验证码
|
||||||
|
D-->>A: 验证结果
|
||||||
|
|
||||||
|
alt 验证成功
|
||||||
|
A->>D: 创建/更新用户信息
|
||||||
|
A->>A: 生成JWT Token
|
||||||
|
A-->>F: 返回用户信息和Token
|
||||||
|
F-->>U: 登录成功
|
||||||
|
else 验证失败
|
||||||
|
A-->>F: 返回错误信息
|
||||||
|
F-->>U: 显示错误
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. 抽奖核心流程
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[用户发起抽奖] --> B[验证用户权限]
|
||||||
|
B --> C{权限检查}
|
||||||
|
C -->|失败| D[返回错误信息]
|
||||||
|
C -->|成功| E[验证商品状态]
|
||||||
|
|
||||||
|
E --> F{商品检查}
|
||||||
|
F -->|下架/售罄| G[返回商品不可用]
|
||||||
|
F -->|正常| H[创建订单]
|
||||||
|
|
||||||
|
H --> I[计算订单金额]
|
||||||
|
I --> J[应用优惠券/折扣]
|
||||||
|
J --> K[用户确认支付]
|
||||||
|
|
||||||
|
K --> L{支付处理}
|
||||||
|
L -->|失败| M[订单取消]
|
||||||
|
L -->|成功| N[开始抽奖流程]
|
||||||
|
|
||||||
|
N --> O[获取奖品池]
|
||||||
|
O --> P[执行抽奖算法]
|
||||||
|
|
||||||
|
P --> Q{抽奖算法类型}
|
||||||
|
Q --> R1[加权随机算法]
|
||||||
|
Q --> R2[概率区间算法]
|
||||||
|
Q --> R3[库存消耗算法]
|
||||||
|
|
||||||
|
R1 --> S[计算中奖结果]
|
||||||
|
R2 --> S
|
||||||
|
R3 --> S
|
||||||
|
|
||||||
|
S --> T[更新库存]
|
||||||
|
T --> U[创建中奖记录]
|
||||||
|
U --> V{奖品类型}
|
||||||
|
|
||||||
|
V --> W1[普通奖品]
|
||||||
|
V --> W2[宝箱奖品]
|
||||||
|
V --> W3[虚拟货币]
|
||||||
|
V --> W4[特殊奖品]
|
||||||
|
|
||||||
|
W1 --> X[等待用户选择]
|
||||||
|
W2 --> Y[触发宝箱开启]
|
||||||
|
W3 --> Z[自动发放到账]
|
||||||
|
W4 --> AA[特殊处理逻辑]
|
||||||
|
|
||||||
|
Y --> BB[递归抽奖流程]
|
||||||
|
BB --> X
|
||||||
|
AA --> X
|
||||||
|
|
||||||
|
X --> CC[用户做出选择]
|
||||||
|
CC --> DD{选择类型}
|
||||||
|
DD --> EE[发货流程]
|
||||||
|
DD --> FF[回收流程]
|
||||||
|
DD --> GG[集市流程]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. 支付流程
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
participant U as 用户
|
||||||
|
participant F as 前端
|
||||||
|
participant A as API服务
|
||||||
|
participant P as 支付服务
|
||||||
|
participant D as 数据库
|
||||||
|
|
||||||
|
U->>F: 选择支付方式
|
||||||
|
F->>A: 创建支付订单
|
||||||
|
A->>D: 保存订单信息
|
||||||
|
A->>P: 调用支付接口
|
||||||
|
P-->>A: 返回支付参数
|
||||||
|
A-->>F: 返回支付信息
|
||||||
|
|
||||||
|
F->>U: 显示支付界面
|
||||||
|
U->>P: 完成支付
|
||||||
|
P->>A: 支付回调通知
|
||||||
|
|
||||||
|
A->>D: 验证订单状态
|
||||||
|
A->>D: 更新支付状态
|
||||||
|
A->>A: 触发抽奖流程
|
||||||
|
A-->>P: 确认回调处理
|
||||||
|
|
||||||
|
A->>F: 推送抽奖结果
|
||||||
|
F-->>U: 显示中奖信息
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. 商品管理流程
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[管理员登录] --> B[商品管理后台]
|
||||||
|
B --> C{操作类型}
|
||||||
|
|
||||||
|
C --> D1[创建商品]
|
||||||
|
C --> D2[编辑商品]
|
||||||
|
C --> D3[管理库存]
|
||||||
|
C --> D4[设置奖品]
|
||||||
|
|
||||||
|
D1 --> E1[填写基本信息]
|
||||||
|
E1 --> E2[上传商品图片]
|
||||||
|
E2 --> E3[设置价格和库存]
|
||||||
|
E3 --> E4[配置抽奖参数]
|
||||||
|
E4 --> E5[保存商品]
|
||||||
|
|
||||||
|
D4 --> F1[添加奖品]
|
||||||
|
F1 --> F2[设置奖品概率]
|
||||||
|
F2 --> F3[配置奖品库存]
|
||||||
|
F3 --> F4[设置奖品价值]
|
||||||
|
F4 --> F5[保存奖品配置]
|
||||||
|
|
||||||
|
D3 --> G1[查看库存状态]
|
||||||
|
G1 --> G2[调整库存数量]
|
||||||
|
G2 --> G3[设置预警阈值]
|
||||||
|
G3 --> G4[配置自动下架]
|
||||||
|
|
||||||
|
E5 --> H[商品审核]
|
||||||
|
F5 --> H
|
||||||
|
G4 --> H
|
||||||
|
|
||||||
|
H --> I{审核结果}
|
||||||
|
I -->|通过| J[商品上架]
|
||||||
|
I -->|拒绝| K[返回修改]
|
||||||
|
|
||||||
|
J --> L[用户可见]
|
||||||
|
K --> C
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6. 订单处理流程
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[订单创建] --> B[订单支付]
|
||||||
|
B --> C[抽奖执行]
|
||||||
|
C --> D[生成中奖记录]
|
||||||
|
|
||||||
|
D --> E{用户选择}
|
||||||
|
E --> F1[选择发货]
|
||||||
|
E --> F2[选择回收]
|
||||||
|
E --> F3[发布集市]
|
||||||
|
|
||||||
|
F1 --> G1[用户填写地址]
|
||||||
|
G1 --> G2[生成发货订单]
|
||||||
|
G2 --> G3[商家打包发货]
|
||||||
|
G3 --> G4[物流配送]
|
||||||
|
G4 --> G5[用户确认收货]
|
||||||
|
G5 --> G6[订单完成]
|
||||||
|
|
||||||
|
F2 --> H1[计算回收价格]
|
||||||
|
H1 --> H2[确认回收]
|
||||||
|
H2 --> H3[资金到账]
|
||||||
|
H3 --> H4[回收完成]
|
||||||
|
|
||||||
|
F3 --> I1[设置售价]
|
||||||
|
I1 --> I2[发布到集市]
|
||||||
|
I2 --> I3[等待买家]
|
||||||
|
I3 --> I4{是否有买家}
|
||||||
|
I4 -->|是| I5[买家支付]
|
||||||
|
I4 -->|否| I6[撤回商品]
|
||||||
|
I5 --> I7[交易完成]
|
||||||
|
I6 --> E
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7. 集市交易流程
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
participant S as 卖家
|
||||||
|
participant M as 集市系统
|
||||||
|
participant B as 买家
|
||||||
|
participant P as 支付系统
|
||||||
|
participant D as 数据库
|
||||||
|
|
||||||
|
S->>M: 发布商品到集市
|
||||||
|
M->>D: 保存商品信息
|
||||||
|
M-->>S: 发布成功
|
||||||
|
|
||||||
|
B->>M: 浏览集市商品
|
||||||
|
M->>D: 查询商品列表
|
||||||
|
D-->>M: 返回商品数据
|
||||||
|
M-->>B: 显示商品列表
|
||||||
|
|
||||||
|
B->>M: 选择购买商品
|
||||||
|
M->>D: 检查商品状态
|
||||||
|
D-->>M: 商品可购买
|
||||||
|
M->>P: 创建支付订单
|
||||||
|
P-->>M: 返回支付信息
|
||||||
|
M-->>B: 显示支付界面
|
||||||
|
|
||||||
|
B->>P: 完成支付
|
||||||
|
P->>M: 支付成功回调
|
||||||
|
M->>D: 更新交易状态
|
||||||
|
M->>D: 转移商品所有权
|
||||||
|
M->>S: 通知交易成功
|
||||||
|
M-->>B: 交易完成
|
||||||
|
```
|
||||||
|
|
||||||
|
## 8. 数据统计分析流程
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[数据收集] --> B[实时数据处理]
|
||||||
|
B --> C[数据存储]
|
||||||
|
C --> D[定时任务分析]
|
||||||
|
|
||||||
|
D --> E{分析类型}
|
||||||
|
E --> F1[用户行为分析]
|
||||||
|
E --> F2[销售数据分析]
|
||||||
|
E --> F3[财务数据分析]
|
||||||
|
E --> F4[商品热度分析]
|
||||||
|
|
||||||
|
F1 --> G1[用户活跃度]
|
||||||
|
F1 --> G2[用户消费习惯]
|
||||||
|
F1 --> G3[用户留存率]
|
||||||
|
|
||||||
|
F2 --> H1[销售额统计]
|
||||||
|
F2 --> H2[商品销量排行]
|
||||||
|
F2 --> H3[地区销售分布]
|
||||||
|
|
||||||
|
F3 --> I1[收入支出统计]
|
||||||
|
F3 --> I2[利润率分析]
|
||||||
|
F3 --> I3[成本控制]
|
||||||
|
|
||||||
|
F4 --> J1[商品点击率]
|
||||||
|
F4 --> J2[转化率分析]
|
||||||
|
F4 --> J3[库存周转率]
|
||||||
|
|
||||||
|
G1 --> K[生成报表]
|
||||||
|
G2 --> K
|
||||||
|
G3 --> K
|
||||||
|
H1 --> K
|
||||||
|
H2 --> K
|
||||||
|
H3 --> K
|
||||||
|
I1 --> K
|
||||||
|
I2 --> K
|
||||||
|
I3 --> K
|
||||||
|
J1 --> K
|
||||||
|
J2 --> K
|
||||||
|
J3 --> K
|
||||||
|
|
||||||
|
K --> L[管理员查看]
|
||||||
|
K --> M[自动预警]
|
||||||
|
K --> N[决策支持]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 流程图说明
|
||||||
|
|
||||||
|
### 主要业务流程特点:
|
||||||
|
|
||||||
|
1. **多样化抽奖模式**:支持9种不同的抽奖类型,满足不同用户需求
|
||||||
|
2. **灵活支付方式**:支持多种支付方式和虚拟货币组合支付
|
||||||
|
3. **智能抽奖算法**:采用优化后的加权随机算法,确保公平性和性能
|
||||||
|
4. **完整订单流程**:从下单到收货的完整闭环
|
||||||
|
5. **用户自主选择**:中奖后可选择发货、回收或集市交易
|
||||||
|
6. **实时数据分析**:全方位的数据统计和分析支持
|
||||||
|
|
||||||
|
### 技术实现要点:
|
||||||
|
|
||||||
|
- 使用事务确保数据一致性
|
||||||
|
- 异步处理提高系统性能
|
||||||
|
- 缓存机制减少数据库压力
|
||||||
|
- 完善的日志记录便于问题排查
|
||||||
|
- 模块化设计便于功能扩展
|
||||||
|
|
||||||
|
这些流程图展示了系统的核心业务逻辑和技术架构,为开发和运维提供了清晰的指导。
|
||||||
629
docs/数据库设计图.md
Normal file
629
docs/数据库设计图.md
Normal file
|
|
@ -0,0 +1,629 @@
|
||||||
|
# 抽奖盲盒系统数据库设计图
|
||||||
|
|
||||||
|
## 1. 数据库整体ER图
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
%% 用户相关表
|
||||||
|
USER ||--o{ ORDER : "下单"
|
||||||
|
USER ||--o{ ORDER_LIST : "中奖记录"
|
||||||
|
USER ||--o{ COUPON_RECEIVE : "领取优惠券"
|
||||||
|
USER ||--o{ PROFIT_MONEY : "资金变动"
|
||||||
|
USER ||--o{ PROFIT_INTEGRAL : "积分变动"
|
||||||
|
USER ||--o{ COLLECT : "收藏"
|
||||||
|
USER ||--o{ MARKET : "集市发布"
|
||||||
|
USER ||--o{ MARKET_ORDER : "集市购买"
|
||||||
|
|
||||||
|
%% 商品相关表
|
||||||
|
CATEGORY ||--o{ GOODS : "商品分类"
|
||||||
|
GOODS ||--o{ GOODS_LIST : "奖品列表"
|
||||||
|
GOODS ||--o{ ORDER : "被购买"
|
||||||
|
GOODS ||--o{ GOODS_LOCK : "锁箱记录"
|
||||||
|
GOODS_LIST ||--o{ ORDER_LIST : "中奖奖品"
|
||||||
|
|
||||||
|
%% 订单相关表
|
||||||
|
ORDER ||--o{ ORDER_LIST : "订单明细"
|
||||||
|
ORDER_LIST ||--o{ ORDER_LIST_SEND : "发货记录"
|
||||||
|
ORDER_LIST ||--o{ ORDER_LIST_RECOVERY : "回收记录"
|
||||||
|
ORDER_LIST ||--o{ MARKET : "集市商品"
|
||||||
|
|
||||||
|
%% 优惠券相关表
|
||||||
|
COUPON ||--o{ COUPON_RECEIVE : "用户优惠券"
|
||||||
|
|
||||||
|
%% 集市相关表
|
||||||
|
MARKET ||--o{ MARKET_ORDER : "集市订单"
|
||||||
|
|
||||||
|
%% 管理员相关表
|
||||||
|
ADMIN ||--o{ ADMIN_LOGIN_LOG : "登录日志"
|
||||||
|
ADMIN ||--o{ ADMIN_OPERATION_LOG : "操作日志"
|
||||||
|
ADMIN_QUANXIAN ||--o{ ADMIN : "权限分配"
|
||||||
|
|
||||||
|
USER {
|
||||||
|
int id PK "用户ID"
|
||||||
|
string phone "手机号"
|
||||||
|
string nickname "昵称"
|
||||||
|
string avatar "头像"
|
||||||
|
decimal money "余额"
|
||||||
|
decimal integral "积分"
|
||||||
|
decimal money2 "达达卷"
|
||||||
|
int level "等级"
|
||||||
|
int status "状态"
|
||||||
|
int addtime "注册时间"
|
||||||
|
int login_time "最后登录"
|
||||||
|
string openid "微信openid"
|
||||||
|
int share_uid "推荐人ID"
|
||||||
|
}
|
||||||
|
|
||||||
|
GOODS {
|
||||||
|
int id PK "商品ID"
|
||||||
|
int category_id FK "分类ID"
|
||||||
|
string title "商品名称"
|
||||||
|
string imgurl "封面图"
|
||||||
|
string imgurl_detail "详情图"
|
||||||
|
decimal price "价格"
|
||||||
|
int stock "库存"
|
||||||
|
int sale_stock "销量"
|
||||||
|
int type "类型1一番赏2无限赏3擂台赏4抽卡机5积分赏6全局赏7福利盲盒8领主赏9连击赏"
|
||||||
|
int status "状态1上架2下架3售罄"
|
||||||
|
int sort "排序"
|
||||||
|
int lock_is "锁箱开关"
|
||||||
|
int lock_time "锁箱时间"
|
||||||
|
int coupon_is "发券开关"
|
||||||
|
int coupon_pro "发券概率"
|
||||||
|
int integral_is "发积分开关"
|
||||||
|
int prize_num "抽奖数量"
|
||||||
|
int sale_time "预售时间"
|
||||||
|
int addtime "添加时间"
|
||||||
|
int update_time "更新时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
GOODS_LIST {
|
||||||
|
int id PK "奖品ID"
|
||||||
|
int goods_id FK "商品ID"
|
||||||
|
int num "第几套"
|
||||||
|
string title "奖品名称"
|
||||||
|
string imgurl "奖品图片"
|
||||||
|
int stock "库存"
|
||||||
|
int surplus_stock "剩余库存"
|
||||||
|
decimal price "奖品价值"
|
||||||
|
decimal money "回收价"
|
||||||
|
decimal sc_money "市场参考价"
|
||||||
|
decimal real_pro "真实概率"
|
||||||
|
int goods_type "奖品类型1现货2预售3货币4宝箱"
|
||||||
|
int sale_time "预售时间"
|
||||||
|
int sort "排序"
|
||||||
|
string shang_id "赏ID"
|
||||||
|
int reward_num "奖励数量"
|
||||||
|
int rank "榜单排名"
|
||||||
|
string prize_code "奖品编号"
|
||||||
|
int addtime "添加时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
ORDER {
|
||||||
|
int id PK "订单ID"
|
||||||
|
int user_id FK "用户ID"
|
||||||
|
string order_num "订单号"
|
||||||
|
decimal order_total "订单总金额"
|
||||||
|
decimal order_zhe_total "折扣金额"
|
||||||
|
decimal price "微信支付金额"
|
||||||
|
decimal use_money "余额支付"
|
||||||
|
decimal use_integral "积分支付"
|
||||||
|
decimal use_money2 "达达卷支付"
|
||||||
|
decimal use_coupon "优惠券抵扣"
|
||||||
|
int use_draw "抽奖券抵扣"
|
||||||
|
int use_item_card "道具卡抵扣"
|
||||||
|
int goods_id FK "商品ID"
|
||||||
|
int num "第几套"
|
||||||
|
decimal goods_price "商品单价"
|
||||||
|
string goods_title "商品标题"
|
||||||
|
string goods_imgurl "商品图片"
|
||||||
|
int prize_num "抽奖数量"
|
||||||
|
int status "状态0未支付1已支付"
|
||||||
|
int addtime "下单时间"
|
||||||
|
int pay_time "支付时间"
|
||||||
|
int pay_type "支付方式1微信2支付宝"
|
||||||
|
int order_type "订单类型"
|
||||||
|
int coupon_id "优惠券ID"
|
||||||
|
}
|
||||||
|
|
||||||
|
ORDER_LIST {
|
||||||
|
int id PK "中奖记录ID"
|
||||||
|
int order_id FK "订单ID"
|
||||||
|
int user_id FK "用户ID"
|
||||||
|
string recovery_num "回收订单号"
|
||||||
|
string send_num "发货订单号"
|
||||||
|
int status "状态0待选择1回收2发货3集市"
|
||||||
|
int goods_id FK "商品ID"
|
||||||
|
int num "第几箱"
|
||||||
|
int shang_id "赏ID"
|
||||||
|
int goodslist_id FK "奖品ID"
|
||||||
|
string goodslist_title "奖品名称"
|
||||||
|
string goodslist_imgurl "奖品图片"
|
||||||
|
decimal goodslist_price "奖品价值"
|
||||||
|
decimal goodslist_money "回收价"
|
||||||
|
int goodslist_type "奖品类型"
|
||||||
|
int goodslist_sale_time "预售时间"
|
||||||
|
int addtime "中奖时间"
|
||||||
|
int choice_time "选择时间"
|
||||||
|
int insurance_is "保险柜0否1是"
|
||||||
|
int order_type "订单类型"
|
||||||
|
int luck_no "抽奖序号"
|
||||||
|
string prize_code "奖品编号"
|
||||||
|
int source "来源1抽奖2集市购买"
|
||||||
|
}
|
||||||
|
|
||||||
|
CATEGORY {
|
||||||
|
int id PK "分类ID"
|
||||||
|
string title "分类名称"
|
||||||
|
int sort "排序"
|
||||||
|
int addtime "添加时间"
|
||||||
|
int update_time "更新时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
COUPON {
|
||||||
|
int id PK "优惠券ID"
|
||||||
|
int type "类型1新人券2权益券"
|
||||||
|
string title "优惠券名称"
|
||||||
|
int sort "排序"
|
||||||
|
decimal price "减免金额"
|
||||||
|
decimal man_price "满减条件"
|
||||||
|
int effective_day "有效天数"
|
||||||
|
int addtime "添加时间"
|
||||||
|
int status "状态0上架2下架4删除"
|
||||||
|
int ttype "使用限制0不限制1一番赏2无限赏"
|
||||||
|
}
|
||||||
|
|
||||||
|
COUPON_RECEIVE {
|
||||||
|
int id PK "用户优惠券ID"
|
||||||
|
string title "优惠券名称"
|
||||||
|
decimal price "减免金额"
|
||||||
|
decimal man_price "满减条件"
|
||||||
|
int end_time "过期时间"
|
||||||
|
int addtime "领取时间"
|
||||||
|
int status "状态0未使用1已使用2已过期"
|
||||||
|
int user_id FK "用户ID"
|
||||||
|
int coupon_id FK "优惠券ID"
|
||||||
|
int state "使用限制"
|
||||||
|
}
|
||||||
|
|
||||||
|
PROFIT_MONEY {
|
||||||
|
int id PK "资金记录ID"
|
||||||
|
int user_id FK "用户ID"
|
||||||
|
decimal change_money "变化金额"
|
||||||
|
decimal money "变化后金额"
|
||||||
|
int type "类型1后台充值2在线充值3消费4回收5推荐奖励"
|
||||||
|
string content "描述"
|
||||||
|
int addtime "添加时间"
|
||||||
|
int share_uid "来源用户ID"
|
||||||
|
string other "其他信息"
|
||||||
|
}
|
||||||
|
|
||||||
|
PROFIT_INTEGRAL {
|
||||||
|
int id PK "积分记录ID"
|
||||||
|
int user_id FK "用户ID"
|
||||||
|
decimal change_money "变化积分"
|
||||||
|
decimal money "变化后积分"
|
||||||
|
int type "类型1后台充值2消费3开券获得4领主返币5分享欧气券"
|
||||||
|
string content "描述"
|
||||||
|
int addtime "添加时间"
|
||||||
|
int share_uid "来源用户ID"
|
||||||
|
string other "其他信息"
|
||||||
|
}
|
||||||
|
|
||||||
|
MARKET {
|
||||||
|
int id PK "集市商品ID"
|
||||||
|
int user_id FK "卖家ID"
|
||||||
|
string order_num "挂售单号"
|
||||||
|
decimal price "售价"
|
||||||
|
text order_list_ids "奖品ID列表"
|
||||||
|
int status "状态0在售1已售2已撤回"
|
||||||
|
int stock "库存"
|
||||||
|
int addtime "发布时间"
|
||||||
|
int update_time "更新时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
MARKET_ORDER {
|
||||||
|
int id PK "集市订单ID"
|
||||||
|
int market_id FK "集市商品ID"
|
||||||
|
int user_id FK "买家ID"
|
||||||
|
string order_num "订单号"
|
||||||
|
decimal price "单价"
|
||||||
|
text order_list_ids "奖品ID列表"
|
||||||
|
int status "状态1未支付2已支付3卡单"
|
||||||
|
int pay_time "支付时间"
|
||||||
|
decimal total "总价"
|
||||||
|
decimal total_price "实际支付"
|
||||||
|
decimal money "余额支付"
|
||||||
|
int addtime "下单时间"
|
||||||
|
int update_time "更新时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
ADMIN {
|
||||||
|
int id PK "管理员ID"
|
||||||
|
string username "账号"
|
||||||
|
string nickname "姓名"
|
||||||
|
string password "密码"
|
||||||
|
int qid "权限ID"
|
||||||
|
int status "状态0正常1禁用"
|
||||||
|
int get_time "登录刷新时间"
|
||||||
|
string random "token随机数"
|
||||||
|
string token "token"
|
||||||
|
int admin_id "操作人"
|
||||||
|
int addtime "添加时间"
|
||||||
|
int update_time "修改时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
ADMIN_QUANXIAN {
|
||||||
|
int id PK "权限ID"
|
||||||
|
string title "权限名称"
|
||||||
|
text describe "描述"
|
||||||
|
text quanxian "权限内容"
|
||||||
|
int addtime "添加时间"
|
||||||
|
int update_time "修改时间"
|
||||||
|
int admin_id "操作人"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. 核心业务表关系图
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
%% 抽奖核心流程
|
||||||
|
USER ||--o{ ORDER : "用户下单"
|
||||||
|
ORDER ||--|| GOODS : "购买商品"
|
||||||
|
ORDER ||--o{ ORDER_LIST : "生成中奖记录"
|
||||||
|
GOODS ||--o{ GOODS_LIST : "包含奖品"
|
||||||
|
GOODS_LIST ||--|| ORDER_LIST : "中奖奖品"
|
||||||
|
|
||||||
|
%% 用户选择处理
|
||||||
|
ORDER_LIST ||--o| ORDER_LIST_SEND : "选择发货"
|
||||||
|
ORDER_LIST ||--o| ORDER_LIST_RECOVERY : "选择回收"
|
||||||
|
ORDER_LIST ||--o| MARKET : "发布集市"
|
||||||
|
|
||||||
|
%% 集市交易
|
||||||
|
MARKET ||--o{ MARKET_ORDER : "集市购买"
|
||||||
|
USER ||--o{ MARKET_ORDER : "买家下单"
|
||||||
|
|
||||||
|
ORDER_LIST {
|
||||||
|
int id PK
|
||||||
|
int order_id FK
|
||||||
|
int user_id FK
|
||||||
|
int goodslist_id FK
|
||||||
|
int status "0待选择1回收2发货3集市"
|
||||||
|
string goodslist_title
|
||||||
|
decimal goodslist_price
|
||||||
|
decimal goodslist_money
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
ORDER_LIST_SEND {
|
||||||
|
int id PK
|
||||||
|
int user_id FK
|
||||||
|
string send_num "发货订单号"
|
||||||
|
decimal freight "运费"
|
||||||
|
int status "0待支付1待发货2待收货3已完成"
|
||||||
|
int count "发货数量"
|
||||||
|
string name "收货人"
|
||||||
|
string mobile "电话"
|
||||||
|
string address "地址"
|
||||||
|
string courier_number "快递单号"
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
ORDER_LIST_RECOVERY {
|
||||||
|
int id PK
|
||||||
|
int user_id FK
|
||||||
|
string recovery_num "回收订单号"
|
||||||
|
decimal money "回收金额"
|
||||||
|
int count "回收数量"
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. 用户财务系统表关系图
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
USER ||--o{ PROFIT_MONEY : "余额变动"
|
||||||
|
USER ||--o{ PROFIT_INTEGRAL : "积分变动"
|
||||||
|
USER ||--o{ PROFIT_DRAW : "抽奖券变动"
|
||||||
|
USER ||--o{ COUPON_RECEIVE : "优惠券"
|
||||||
|
|
||||||
|
COUPON ||--o{ COUPON_RECEIVE : "发放"
|
||||||
|
ORDER ||--|| PROFIT_MONEY : "支付扣款"
|
||||||
|
ORDER_LIST_RECOVERY ||--|| PROFIT_MONEY : "回收入账"
|
||||||
|
|
||||||
|
USER {
|
||||||
|
int id PK
|
||||||
|
decimal money "余额"
|
||||||
|
decimal integral "积分"
|
||||||
|
decimal money2 "达达卷"
|
||||||
|
int draw_num "抽奖券"
|
||||||
|
}
|
||||||
|
|
||||||
|
PROFIT_MONEY {
|
||||||
|
int id PK
|
||||||
|
int user_id FK
|
||||||
|
decimal change_money "变化金额"
|
||||||
|
decimal money "变化后余额"
|
||||||
|
int type "1后台充值2在线充值3消费4回收5推荐奖励"
|
||||||
|
string content "描述"
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
PROFIT_INTEGRAL {
|
||||||
|
int id PK
|
||||||
|
int user_id FK
|
||||||
|
decimal change_money "变化积分"
|
||||||
|
decimal money "变化后积分"
|
||||||
|
int type "1后台充值2消费3开券获得4领主返币"
|
||||||
|
string content "描述"
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
PROFIT_DRAW {
|
||||||
|
int id PK
|
||||||
|
int user_id FK
|
||||||
|
decimal change_money "变化抽奖券"
|
||||||
|
decimal money "变化后抽奖券"
|
||||||
|
int type "变动类型"
|
||||||
|
string content "描述"
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. 商品管理系统表关系图
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
CATEGORY ||--o{ GOODS : "商品分类"
|
||||||
|
GOODS ||--o{ GOODS_LIST : "奖品配置"
|
||||||
|
GOODS ||--o{ GOODS_LOCK : "锁箱记录"
|
||||||
|
GOODS ||--o{ GOODS_EXTEND : "扩展配置"
|
||||||
|
GOODS_TYPE ||--|| GOODS : "商品类型"
|
||||||
|
|
||||||
|
GOODS {
|
||||||
|
int id PK
|
||||||
|
int category_id FK
|
||||||
|
string title "商品名称"
|
||||||
|
string imgurl "封面图"
|
||||||
|
decimal price "价格"
|
||||||
|
int stock "库存套数"
|
||||||
|
int type "1一番赏2无限赏3擂台赏等"
|
||||||
|
int status "1上架2下架3售罄"
|
||||||
|
int lock_is "锁箱开关"
|
||||||
|
int coupon_is "发券开关"
|
||||||
|
int integral_is "发积分开关"
|
||||||
|
int prize_num "抽奖数量"
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
GOODS_LIST {
|
||||||
|
int id PK
|
||||||
|
int goods_id FK
|
||||||
|
int num "第几套"
|
||||||
|
string title "奖品名称"
|
||||||
|
int stock "奖品库存"
|
||||||
|
int surplus_stock "剩余库存"
|
||||||
|
decimal price "奖品价值"
|
||||||
|
decimal money "回收价"
|
||||||
|
decimal real_pro "中奖概率"
|
||||||
|
int goods_type "1现货2预售3货币4宝箱"
|
||||||
|
string prize_code "奖品编号"
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
GOODS_LOCK {
|
||||||
|
int id PK
|
||||||
|
int user_id FK
|
||||||
|
string goods_id_num "商品ID_套数"
|
||||||
|
int endtime "锁箱过期时间"
|
||||||
|
int update_time
|
||||||
|
}
|
||||||
|
|
||||||
|
GOODS_EXTEND {
|
||||||
|
int id PK
|
||||||
|
int goods_id FK
|
||||||
|
int pay_wechat "微信支付开关"
|
||||||
|
int pay_balance "余额支付开关"
|
||||||
|
int pay_currency "货币支付开关"
|
||||||
|
int pay_coupon "优惠券支付开关"
|
||||||
|
int is_deduction "是否抵扣"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. 管理后台系统表关系图
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
ADMIN_QUANXIAN ||--o{ ADMIN : "权限分配"
|
||||||
|
ADMIN ||--o{ ADMIN_LOGIN_LOG : "登录日志"
|
||||||
|
ADMIN ||--o{ ADMIN_OPERATION_LOG : "操作日志"
|
||||||
|
ADMIN ||--o{ ADMIN_GOODS_LOG : "商品操作日志"
|
||||||
|
|
||||||
|
ADMIN {
|
||||||
|
int id PK
|
||||||
|
string username "账号"
|
||||||
|
string nickname "姓名"
|
||||||
|
string password "密码"
|
||||||
|
int qid FK "权限ID"
|
||||||
|
int status "0正常1禁用"
|
||||||
|
string token "登录token"
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
ADMIN_QUANXIAN {
|
||||||
|
int id PK
|
||||||
|
string title "权限名称"
|
||||||
|
text describe "权限描述"
|
||||||
|
text quanxian "权限配置JSON"
|
||||||
|
int addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
ADMIN_LOGIN_LOG {
|
||||||
|
int id PK
|
||||||
|
int a_id FK "管理员ID"
|
||||||
|
string ip "登录IP"
|
||||||
|
int addtime "登录时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
ADMIN_OPERATION_LOG {
|
||||||
|
int id PK
|
||||||
|
int a_id FK "管理员ID"
|
||||||
|
string ip "操作IP"
|
||||||
|
string operation "操作控制器"
|
||||||
|
text content "操作内容"
|
||||||
|
int addtime "操作时间"
|
||||||
|
}
|
||||||
|
|
||||||
|
ADMIN_GOODS_LOG {
|
||||||
|
int id PK
|
||||||
|
int a_id FK "管理员ID"
|
||||||
|
int goods_id "商品ID"
|
||||||
|
int goods_list_id "奖品ID"
|
||||||
|
text original_data "原始数据"
|
||||||
|
text new_data "修改后数据"
|
||||||
|
string ip "操作IP"
|
||||||
|
int addtime "操作时间"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6. 数据表索引设计
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- 用户表索引
|
||||||
|
CREATE INDEX idx_user_phone ON user(phone);
|
||||||
|
CREATE INDEX idx_user_openid ON user(openid);
|
||||||
|
CREATE INDEX idx_user_share_uid ON user(share_uid);
|
||||||
|
|
||||||
|
-- 商品表索引
|
||||||
|
CREATE INDEX idx_goods_category_id ON goods(category_id);
|
||||||
|
CREATE INDEX idx_goods_type ON goods(type);
|
||||||
|
CREATE INDEX idx_goods_status ON goods(status);
|
||||||
|
CREATE INDEX idx_goods_addtime ON goods(addtime);
|
||||||
|
|
||||||
|
-- 奖品表索引
|
||||||
|
CREATE INDEX idx_goods_list_goods_id ON goods_list(goods_id);
|
||||||
|
CREATE INDEX idx_goods_list_num ON goods_list(num);
|
||||||
|
CREATE INDEX idx_goods_list_shang_id ON goods_list(shang_id);
|
||||||
|
CREATE INDEX idx_goods_list_real_pro ON goods_list(real_pro);
|
||||||
|
CREATE INDEX idx_goods_list_surplus_stock ON goods_list(surplus_stock);
|
||||||
|
CREATE INDEX idx_goods_list_prize_code ON goods_list(prize_code);
|
||||||
|
|
||||||
|
-- 订单表索引
|
||||||
|
CREATE UNIQUE INDEX idx_order_order_num ON `order`(order_num);
|
||||||
|
CREATE INDEX idx_order_user_id ON `order`(user_id);
|
||||||
|
CREATE INDEX idx_order_goods_id ON `order`(goods_id);
|
||||||
|
CREATE INDEX idx_order_status ON `order`(status);
|
||||||
|
CREATE INDEX idx_order_addtime ON `order`(addtime);
|
||||||
|
CREATE INDEX idx_order_pay_time ON `order`(pay_time);
|
||||||
|
|
||||||
|
-- 中奖记录表索引
|
||||||
|
CREATE INDEX idx_order_list_user_id ON order_list(user_id);
|
||||||
|
CREATE INDEX idx_order_list_order_id ON order_list(order_id);
|
||||||
|
CREATE INDEX idx_order_list_goods_id ON order_list(goods_id);
|
||||||
|
CREATE INDEX idx_order_list_goodslist_id ON order_list(goodslist_id);
|
||||||
|
CREATE INDEX idx_order_list_status ON order_list(status);
|
||||||
|
CREATE INDEX idx_order_list_prize_code ON order_list(prize_code);
|
||||||
|
CREATE INDEX idx_order_list_addtime ON order_list(addtime);
|
||||||
|
|
||||||
|
-- 财务记录表索引
|
||||||
|
CREATE INDEX idx_profit_money_user_id ON profit_money(user_id);
|
||||||
|
CREATE INDEX idx_profit_money_type ON profit_money(type);
|
||||||
|
CREATE INDEX idx_profit_money_addtime ON profit_money(addtime);
|
||||||
|
|
||||||
|
-- 集市表索引
|
||||||
|
CREATE INDEX idx_market_user_id ON market(user_id);
|
||||||
|
CREATE INDEX idx_market_status ON market(status);
|
||||||
|
CREATE INDEX idx_market_addtime ON market(addtime);
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7. 数据库分表策略
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph "订单相关表分表策略"
|
||||||
|
A1[order表] --> B1[按月分表order_202401]
|
||||||
|
A1 --> B2[按月分表order_202402]
|
||||||
|
A1 --> B3[按月分表order_202403]
|
||||||
|
|
||||||
|
A2[order_list表] --> C1[按月分表order_list_202401]
|
||||||
|
A2 --> C2[按月分表order_list_202402]
|
||||||
|
A2 --> C3[按月分表order_list_202403]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "日志表分表策略"
|
||||||
|
D1[admin_operation_log] --> E1[按月分表admin_operation_log_202401]
|
||||||
|
D1 --> E2[按月分表admin_operation_log_202402]
|
||||||
|
|
||||||
|
D2[admin_login_log] --> F1[按月分表admin_login_log_202401]
|
||||||
|
D2 --> F2[按月分表admin_login_log_202402]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "财务表分表策略"
|
||||||
|
G1[profit_money] --> H1[按月分表profit_money_202401]
|
||||||
|
G1 --> H2[按月分表profit_money_202402]
|
||||||
|
|
||||||
|
G2[profit_integral] --> I1[按月分表profit_integral_202401]
|
||||||
|
G2 --> I2[按月分表profit_integral_202402]
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
## 8. 数据备份与恢复策略
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph "备份策略"
|
||||||
|
A1[全量备份] --> B1[每日凌晨2点]
|
||||||
|
A2[增量备份] --> B2[每4小时一次]
|
||||||
|
A3[日志备份] --> B3[实时备份]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "存储策略"
|
||||||
|
C1[本地存储] --> D1[保留7天]
|
||||||
|
C2[远程存储] --> D2[保留30天]
|
||||||
|
C3[归档存储] --> D3[保留1年]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "恢复策略"
|
||||||
|
E1[热备恢复] --> F1[5分钟内]
|
||||||
|
E2[温备恢复] --> F2[30分钟内]
|
||||||
|
E3[冷备恢复] --> F3[2小时内]
|
||||||
|
end
|
||||||
|
|
||||||
|
B1 --> C1
|
||||||
|
B1 --> C2
|
||||||
|
B2 --> C1
|
||||||
|
B3 --> C1
|
||||||
|
|
||||||
|
C1 --> C2
|
||||||
|
C2 --> C3
|
||||||
|
|
||||||
|
D1 --> E1
|
||||||
|
D2 --> E2
|
||||||
|
D3 --> E3
|
||||||
|
```
|
||||||
|
|
||||||
|
## 数据库设计特点
|
||||||
|
|
||||||
|
### 1. 业务特点适配
|
||||||
|
- 支持多种抽奖类型的数据结构
|
||||||
|
- 灵活的奖品配置和概率控制
|
||||||
|
- 完整的用户财务流水记录
|
||||||
|
|
||||||
|
### 2. 性能优化
|
||||||
|
- 合理的索引设计提升查询效率
|
||||||
|
- 分表策略应对大数据量
|
||||||
|
- 读写分离支持高并发
|
||||||
|
|
||||||
|
### 3. 数据完整性
|
||||||
|
- 外键约束保证数据一致性
|
||||||
|
- 事务支持确保操作原子性
|
||||||
|
- 完善的日志记录便于审计
|
||||||
|
|
||||||
|
### 4. 扩展性设计
|
||||||
|
- 预留扩展字段支持功能升级
|
||||||
|
- 模块化表结构便于维护
|
||||||
|
- 标准化命名规范提升可读性
|
||||||
|
|
||||||
|
这个数据库设计充分考虑了抽奖盲盒系统的业务复杂性,在保证数据完整性的同时,也为系统的高性能和可扩展性提供了良好的基础。
|
||||||
559
docs/系统架构图.md
Normal file
559
docs/系统架构图.md
Normal file
|
|
@ -0,0 +1,559 @@
|
||||||
|
# 抽奖盲盒系统架构图
|
||||||
|
|
||||||
|
## 1. 系统整体架构
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TB
|
||||||
|
subgraph "客户端层"
|
||||||
|
A1[微信小程序]
|
||||||
|
A2[H5页面]
|
||||||
|
A3[管理后台]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "网关层"
|
||||||
|
B1[Nginx反向代理]
|
||||||
|
B2[负载均衡]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "应用层"
|
||||||
|
C1[API接口模块]
|
||||||
|
C2[管理后台模块]
|
||||||
|
C3[定时任务模块]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "业务服务层"
|
||||||
|
D1[用户服务]
|
||||||
|
D2[商品服务]
|
||||||
|
D3[订单服务]
|
||||||
|
D4[支付服务]
|
||||||
|
D5[抽奖服务]
|
||||||
|
D6[物流服务]
|
||||||
|
D7[集市服务]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "数据层"
|
||||||
|
E1[MySQL主库]
|
||||||
|
E2[MySQL从库]
|
||||||
|
E3[Redis缓存]
|
||||||
|
E4[文件存储]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "外部服务"
|
||||||
|
F1[微信支付]
|
||||||
|
F2[支付宝]
|
||||||
|
F3[短信服务]
|
||||||
|
F4[物流接口]
|
||||||
|
F5[腾讯云COS]
|
||||||
|
end
|
||||||
|
|
||||||
|
A1 --> B1
|
||||||
|
A2 --> B1
|
||||||
|
A3 --> B1
|
||||||
|
|
||||||
|
B1 --> B2
|
||||||
|
B2 --> C1
|
||||||
|
B2 --> C2
|
||||||
|
|
||||||
|
C1 --> D1
|
||||||
|
C1 --> D2
|
||||||
|
C1 --> D3
|
||||||
|
C1 --> D4
|
||||||
|
C1 --> D5
|
||||||
|
C1 --> D6
|
||||||
|
C1 --> D7
|
||||||
|
|
||||||
|
C2 --> D1
|
||||||
|
C2 --> D2
|
||||||
|
C2 --> D3
|
||||||
|
|
||||||
|
C3 --> D1
|
||||||
|
C3 --> D2
|
||||||
|
C3 --> D3
|
||||||
|
|
||||||
|
D1 --> E1
|
||||||
|
D2 --> E1
|
||||||
|
D3 --> E1
|
||||||
|
D4 --> E1
|
||||||
|
D5 --> E1
|
||||||
|
D6 --> E1
|
||||||
|
D7 --> E1
|
||||||
|
|
||||||
|
D1 --> E2
|
||||||
|
D2 --> E2
|
||||||
|
D3 --> E2
|
||||||
|
|
||||||
|
D1 --> E3
|
||||||
|
D2 --> E3
|
||||||
|
D3 --> E3
|
||||||
|
D4 --> E3
|
||||||
|
D5 --> E3
|
||||||
|
|
||||||
|
D2 --> E4
|
||||||
|
D6 --> E4
|
||||||
|
|
||||||
|
D4 --> F1
|
||||||
|
D4 --> F2
|
||||||
|
D1 --> F3
|
||||||
|
D6 --> F4
|
||||||
|
D2 --> F5
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. 应用模块架构
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph "ThinkPHP 6.0 框架"
|
||||||
|
A[应用入口 public/index.php]
|
||||||
|
|
||||||
|
subgraph "多应用模式"
|
||||||
|
B1[admin - 管理后台]
|
||||||
|
B2[api - 接口服务]
|
||||||
|
B3[index - 前台页面]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "公共模块"
|
||||||
|
C1[common/model - 数据模型]
|
||||||
|
C2[common/service - 业务服务]
|
||||||
|
C3[common/helper - 工具类]
|
||||||
|
C4[common/server - 服务类]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "中间件层"
|
||||||
|
D1[认证中间件]
|
||||||
|
D2[权限中间件]
|
||||||
|
D3[日志中间件]
|
||||||
|
D4[跨域中间件]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "配置管理"
|
||||||
|
E1[数据库配置]
|
||||||
|
E2[缓存配置]
|
||||||
|
E3[路由配置]
|
||||||
|
E4[应用配置]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
A --> B1
|
||||||
|
A --> B2
|
||||||
|
A --> B3
|
||||||
|
|
||||||
|
B1 --> C1
|
||||||
|
B1 --> C2
|
||||||
|
B2 --> C1
|
||||||
|
B2 --> C2
|
||||||
|
B3 --> C1
|
||||||
|
B3 --> C2
|
||||||
|
|
||||||
|
B1 --> D1
|
||||||
|
B1 --> D2
|
||||||
|
B2 --> D1
|
||||||
|
B2 --> D3
|
||||||
|
|
||||||
|
C1 --> E1
|
||||||
|
C2 --> E2
|
||||||
|
B1 --> E3
|
||||||
|
B2 --> E3
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. 数据库架构设计
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
USER ||--o{ ORDER : "下单"
|
||||||
|
USER ||--o{ ORDER_LIST : "中奖"
|
||||||
|
USER ||--o{ COUPON_RECEIVE : "领取"
|
||||||
|
USER ||--o{ PROFIT_MONEY : "资金变动"
|
||||||
|
|
||||||
|
GOODS ||--o{ GOODS_LIST : "包含"
|
||||||
|
GOODS ||--o{ ORDER : "被购买"
|
||||||
|
GOODS_LIST ||--o{ ORDER_LIST : "中奖奖品"
|
||||||
|
|
||||||
|
ORDER ||--o{ ORDER_LIST : "包含"
|
||||||
|
ORDER_LIST ||--o{ ORDER_LIST_SEND : "发货"
|
||||||
|
ORDER_LIST ||--o{ MARKET : "集市"
|
||||||
|
|
||||||
|
CATEGORY ||--o{ GOODS : "分类"
|
||||||
|
COUPON ||--o{ COUPON_RECEIVE : "优惠券"
|
||||||
|
|
||||||
|
USER {
|
||||||
|
int id PK
|
||||||
|
string phone
|
||||||
|
string nickname
|
||||||
|
decimal money
|
||||||
|
decimal integral
|
||||||
|
int level
|
||||||
|
datetime addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
GOODS {
|
||||||
|
int id PK
|
||||||
|
int category_id FK
|
||||||
|
string title
|
||||||
|
string imgurl
|
||||||
|
decimal price
|
||||||
|
int stock
|
||||||
|
int type
|
||||||
|
int status
|
||||||
|
datetime addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
GOODS_LIST {
|
||||||
|
int id PK
|
||||||
|
int goods_id FK
|
||||||
|
string title
|
||||||
|
string imgurl
|
||||||
|
int stock
|
||||||
|
decimal price
|
||||||
|
decimal real_pro
|
||||||
|
int goods_type
|
||||||
|
}
|
||||||
|
|
||||||
|
ORDER {
|
||||||
|
int id PK
|
||||||
|
int user_id FK
|
||||||
|
string order_num
|
||||||
|
decimal order_total
|
||||||
|
decimal price
|
||||||
|
int goods_id FK
|
||||||
|
int prize_num
|
||||||
|
int status
|
||||||
|
datetime addtime
|
||||||
|
}
|
||||||
|
|
||||||
|
ORDER_LIST {
|
||||||
|
int id PK
|
||||||
|
int order_id FK
|
||||||
|
int user_id FK
|
||||||
|
int goods_id FK
|
||||||
|
int goodslist_id FK
|
||||||
|
string goodslist_title
|
||||||
|
decimal goodslist_price
|
||||||
|
int status
|
||||||
|
datetime addtime
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. 抽奖算法架构
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[抽奖请求] --> B{抽奖类型判断}
|
||||||
|
|
||||||
|
B --> C1[一番赏算法]
|
||||||
|
B --> C2[无限赏算法]
|
||||||
|
B --> C3[抽卡机算法]
|
||||||
|
B --> C4[其他类型算法]
|
||||||
|
|
||||||
|
subgraph "抽奖算法核心"
|
||||||
|
D1[加权随机算法]
|
||||||
|
D2[概率区间算法]
|
||||||
|
D3[库存消耗算法]
|
||||||
|
|
||||||
|
E1[奖品池构建]
|
||||||
|
E2[权重计算]
|
||||||
|
E3[随机数生成]
|
||||||
|
E4[结果匹配]
|
||||||
|
end
|
||||||
|
|
||||||
|
C1 --> D1
|
||||||
|
C2 --> D2
|
||||||
|
C3 --> D3
|
||||||
|
C4 --> D1
|
||||||
|
|
||||||
|
D1 --> E1
|
||||||
|
D2 --> E1
|
||||||
|
D3 --> E1
|
||||||
|
|
||||||
|
E1 --> E2
|
||||||
|
E2 --> E3
|
||||||
|
E3 --> E4
|
||||||
|
|
||||||
|
E4 --> F{奖品类型}
|
||||||
|
F --> G1[普通奖品]
|
||||||
|
F --> G2[宝箱奖品]
|
||||||
|
F --> G3[特殊奖品]
|
||||||
|
|
||||||
|
G2 --> H[递归抽奖]
|
||||||
|
H --> E1
|
||||||
|
|
||||||
|
G1 --> I[更新库存]
|
||||||
|
G3 --> I
|
||||||
|
|
||||||
|
I --> J[生成中奖记录]
|
||||||
|
J --> K[返回结果]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. 支付系统架构
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[支付请求] --> B[支付路由]
|
||||||
|
|
||||||
|
B --> C{支付方式}
|
||||||
|
C --> D1[微信支付]
|
||||||
|
C --> D2[支付宝支付]
|
||||||
|
C --> D3[余额支付]
|
||||||
|
C --> D4[虚拟货币支付]
|
||||||
|
|
||||||
|
subgraph "支付处理"
|
||||||
|
E1[订单验证]
|
||||||
|
E2[金额计算]
|
||||||
|
E3[优惠券处理]
|
||||||
|
E4[支付执行]
|
||||||
|
E5[回调处理]
|
||||||
|
end
|
||||||
|
|
||||||
|
D1 --> E1
|
||||||
|
D2 --> E1
|
||||||
|
D3 --> E1
|
||||||
|
D4 --> E1
|
||||||
|
|
||||||
|
E1 --> E2
|
||||||
|
E2 --> E3
|
||||||
|
E3 --> E4
|
||||||
|
|
||||||
|
E4 --> F{支付结果}
|
||||||
|
F -->|成功| G[触发抽奖]
|
||||||
|
F -->|失败| H[订单取消]
|
||||||
|
|
||||||
|
subgraph "外部支付"
|
||||||
|
I1[微信支付API]
|
||||||
|
I2[支付宝API]
|
||||||
|
end
|
||||||
|
|
||||||
|
D1 --> I1
|
||||||
|
D2 --> I2
|
||||||
|
|
||||||
|
I1 --> E5
|
||||||
|
I2 --> E5
|
||||||
|
|
||||||
|
E5 --> J[更新订单状态]
|
||||||
|
J --> G
|
||||||
|
```
|
||||||
|
|
||||||
|
## 6. 缓存架构设计
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph "应用层缓存"
|
||||||
|
A1[用户信息缓存]
|
||||||
|
A2[商品信息缓存]
|
||||||
|
A3[配置信息缓存]
|
||||||
|
A4[热点数据缓存]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "Redis集群"
|
||||||
|
B1[Redis Master]
|
||||||
|
B2[Redis Slave 1]
|
||||||
|
B3[Redis Slave 2]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "缓存策略"
|
||||||
|
C1[读写分离]
|
||||||
|
C2[主从同步]
|
||||||
|
C3[故障转移]
|
||||||
|
C4[数据持久化]
|
||||||
|
end
|
||||||
|
|
||||||
|
A1 --> B1
|
||||||
|
A2 --> B1
|
||||||
|
A3 --> B1
|
||||||
|
A4 --> B1
|
||||||
|
|
||||||
|
B1 --> B2
|
||||||
|
B1 --> B3
|
||||||
|
|
||||||
|
B1 --> C1
|
||||||
|
B2 --> C1
|
||||||
|
B3 --> C1
|
||||||
|
|
||||||
|
C1 --> C2
|
||||||
|
C2 --> C3
|
||||||
|
C3 --> C4
|
||||||
|
|
||||||
|
subgraph "缓存更新策略"
|
||||||
|
D1[定时更新]
|
||||||
|
D2[事件触发更新]
|
||||||
|
D3[LRU淘汰]
|
||||||
|
D4[TTL过期]
|
||||||
|
end
|
||||||
|
|
||||||
|
C4 --> D1
|
||||||
|
C4 --> D2
|
||||||
|
C4 --> D3
|
||||||
|
C4 --> D4
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7. 消息队列架构
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph "消息生产者"
|
||||||
|
A1[订单服务]
|
||||||
|
A2[支付服务]
|
||||||
|
A3[抽奖服务]
|
||||||
|
A4[物流服务]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "消息队列"
|
||||||
|
B1[支付成功队列]
|
||||||
|
B2[抽奖结果队列]
|
||||||
|
B3[发货通知队列]
|
||||||
|
B4[数据统计队列]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "消息消费者"
|
||||||
|
C1[抽奖处理器]
|
||||||
|
C2[通知处理器]
|
||||||
|
C3[统计处理器]
|
||||||
|
C4[日志处理器]
|
||||||
|
end
|
||||||
|
|
||||||
|
A1 --> B1
|
||||||
|
A2 --> B1
|
||||||
|
A2 --> B4
|
||||||
|
A3 --> B2
|
||||||
|
A3 --> B4
|
||||||
|
A4 --> B3
|
||||||
|
|
||||||
|
B1 --> C1
|
||||||
|
B2 --> C2
|
||||||
|
B3 --> C2
|
||||||
|
B4 --> C3
|
||||||
|
|
||||||
|
C1 --> D1[执行抽奖]
|
||||||
|
C2 --> D2[发送通知]
|
||||||
|
C3 --> D3[更新统计]
|
||||||
|
C4 --> D4[记录日志]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 8. 安全架构设计
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph "网络安全"
|
||||||
|
A1[HTTPS加密]
|
||||||
|
A2[防火墙]
|
||||||
|
A3[DDoS防护]
|
||||||
|
A4[IP白名单]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "应用安全"
|
||||||
|
B1[JWT认证]
|
||||||
|
B2[权限控制]
|
||||||
|
B3[参数验证]
|
||||||
|
B4[SQL注入防护]
|
||||||
|
B5[XSS防护]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "数据安全"
|
||||||
|
C1[数据加密]
|
||||||
|
C2[敏感信息脱敏]
|
||||||
|
C3[数据备份]
|
||||||
|
C4[访问日志]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "业务安全"
|
||||||
|
D1[防刷机制]
|
||||||
|
D2[风控系统]
|
||||||
|
D3[异常监控]
|
||||||
|
D4[操作审计]
|
||||||
|
end
|
||||||
|
|
||||||
|
A1 --> B1
|
||||||
|
A2 --> B2
|
||||||
|
A3 --> B3
|
||||||
|
A4 --> B4
|
||||||
|
|
||||||
|
B1 --> C1
|
||||||
|
B2 --> C2
|
||||||
|
B3 --> C3
|
||||||
|
B4 --> C4
|
||||||
|
B5 --> C4
|
||||||
|
|
||||||
|
C1 --> D1
|
||||||
|
C2 --> D2
|
||||||
|
C3 --> D3
|
||||||
|
C4 --> D4
|
||||||
|
```
|
||||||
|
|
||||||
|
## 9. 监控运维架构
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
subgraph "应用监控"
|
||||||
|
A1[性能监控]
|
||||||
|
A2[错误监控]
|
||||||
|
A3[业务监控]
|
||||||
|
A4[用户行为监控]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "系统监控"
|
||||||
|
B1[服务器监控]
|
||||||
|
B2[数据库监控]
|
||||||
|
B3[缓存监控]
|
||||||
|
B4[网络监控]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "日志管理"
|
||||||
|
C1[应用日志]
|
||||||
|
C2[访问日志]
|
||||||
|
C3[错误日志]
|
||||||
|
C4[审计日志]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "告警系统"
|
||||||
|
D1[实时告警]
|
||||||
|
D2[邮件通知]
|
||||||
|
D3[短信通知]
|
||||||
|
D4[钉钉通知]
|
||||||
|
end
|
||||||
|
|
||||||
|
A1 --> D1
|
||||||
|
A2 --> D1
|
||||||
|
A3 --> D1
|
||||||
|
A4 --> D1
|
||||||
|
|
||||||
|
B1 --> D1
|
||||||
|
B2 --> D1
|
||||||
|
B3 --> D1
|
||||||
|
B4 --> D1
|
||||||
|
|
||||||
|
C1 --> D2
|
||||||
|
C2 --> D2
|
||||||
|
C3 --> D2
|
||||||
|
C4 --> D2
|
||||||
|
|
||||||
|
D1 --> D3
|
||||||
|
D2 --> D3
|
||||||
|
D3 --> D4
|
||||||
|
```
|
||||||
|
|
||||||
|
## 架构特点说明
|
||||||
|
|
||||||
|
### 1. 高可用性
|
||||||
|
- 采用主从数据库架构,支持读写分离
|
||||||
|
- Redis集群提供缓存高可用
|
||||||
|
- 负载均衡确保服务高可用
|
||||||
|
|
||||||
|
### 2. 高性能
|
||||||
|
- 多层缓存策略减少数据库压力
|
||||||
|
- 异步消息队列处理耗时操作
|
||||||
|
- 优化的抽奖算法提升处理效率
|
||||||
|
|
||||||
|
### 3. 可扩展性
|
||||||
|
- 微服务化的业务模块设计
|
||||||
|
- 水平扩展支持
|
||||||
|
- 插件化的支付和物流接口
|
||||||
|
|
||||||
|
### 4. 安全性
|
||||||
|
- 多层安全防护机制
|
||||||
|
- 完善的权限控制体系
|
||||||
|
- 全面的审计和监控
|
||||||
|
|
||||||
|
### 5. 可维护性
|
||||||
|
- 清晰的分层架构
|
||||||
|
- 标准化的开发规范
|
||||||
|
- 完善的日志和监控体系
|
||||||
|
|
||||||
|
这个架构设计充分考虑了抽奖盲盒系统的业务特点,在保证系统稳定性和性能的同时,也为未来的功能扩展预留了空间。
|
||||||
Loading…
Reference in New Issue
Block a user