1511 lines
45 KiB
Markdown
1511 lines
45 KiB
Markdown
|
|
# 电商微信小程序
|
|||
|
|
|
|||
|
|
数据库mysql 127.0.0.1:3306 root JKjk20011115 ai_dianshang
|
|||
|
|
redis 127.0.0.1:6379
|
|||
|
|
|
|||
|
|
## 项目概述
|
|||
|
|
|
|||
|
|
本项目是一个功能完整的电商微信小程序,提供商品展示、购物车、订单管理、用户管理等核心电商功能。
|
|||
|
|
|
|||
|
|
## 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
dianshang/
|
|||
|
|
├── server/ # 后端服务
|
|||
|
|
│ ├── cmd/ # 命令行工具
|
|||
|
|
│ │ ├── migrate/ # 数据库迁移工具
|
|||
|
|
│ │ └── server/ # 服务启动入口
|
|||
|
|
│ ├── configs/ # 配置文件
|
|||
|
|
│ ├── internal/ # 内部代码
|
|||
|
|
│ │ ├── config/ # 配置管理
|
|||
|
|
│ │ ├── handler/ # HTTP处理器
|
|||
|
|
│ │ ├── middleware/ # 中间件
|
|||
|
|
│ │ ├── model/ # 数据模型
|
|||
|
|
│ │ ├── repository/ # 数据访问层
|
|||
|
|
│ │ ├── router/ # 路由配置
|
|||
|
|
│ │ ├── service/ # 业务逻辑层
|
|||
|
|
│ │ └── utils/ # 工具函数
|
|||
|
|
│ ├── migrations/ # 数据库迁移文件
|
|||
|
|
│ ├── go.mod # Go模块文件
|
|||
|
|
│ └── go.sum # Go依赖锁定文件
|
|||
|
|
└── README.md # 项目说明文档
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 技术栈
|
|||
|
|
|
|||
|
|
### 后端技术栈
|
|||
|
|
- **后端框架**: Gin
|
|||
|
|
- **数据库**: MySQL 8.0+
|
|||
|
|
- **缓存**: Redis
|
|||
|
|
- **ORM**: GORM
|
|||
|
|
- **配置管理**: Viper
|
|||
|
|
- **日志**: Logrus + Lumberjack
|
|||
|
|
- **JWT**: golang-jwt/jwt
|
|||
|
|
- **密码加密**: bcrypt
|
|||
|
|
|
|||
|
|
## 环境要求
|
|||
|
|
|
|||
|
|
- Go 1.21+
|
|||
|
|
- MySQL 8.0+
|
|||
|
|
- Redis 6.0+
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 1. 克隆项目
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
git clone <repository-url>
|
|||
|
|
cd dianshang
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 安装依赖
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd server
|
|||
|
|
go mod download
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 配置数据库
|
|||
|
|
|
|||
|
|
创建 MySQL 数据库:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE DATABASE dianshang CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 配置文件
|
|||
|
|
|
|||
|
|
修改 `server/configs/config.yaml` 中的数据库和Redis连接信息:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
server:
|
|||
|
|
port: 8080
|
|||
|
|
mode: debug
|
|||
|
|
|
|||
|
|
database:
|
|||
|
|
driver: mysql
|
|||
|
|
host: localhost
|
|||
|
|
port: 3306
|
|||
|
|
username: root
|
|||
|
|
password: your_password
|
|||
|
|
dbname: dianshang
|
|||
|
|
charset: utf8mb4
|
|||
|
|
parseTime: true
|
|||
|
|
loc: Local
|
|||
|
|
|
|||
|
|
redis:
|
|||
|
|
host: localhost
|
|||
|
|
port: 6379
|
|||
|
|
password: ""
|
|||
|
|
db: 0
|
|||
|
|
|
|||
|
|
jwt:
|
|||
|
|
secret: your_jwt_secret_key
|
|||
|
|
expire: 168h
|
|||
|
|
|
|||
|
|
log:
|
|||
|
|
level: info
|
|||
|
|
filename: logs/app.log
|
|||
|
|
maxSize: 100
|
|||
|
|
maxAge: 30
|
|||
|
|
maxBackups: 5
|
|||
|
|
|
|||
|
|
wechat:
|
|||
|
|
appId: your_wechat_app_id
|
|||
|
|
appSecret: your_wechat_app_secret
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 数据库迁移
|
|||
|
|
|
|||
|
|
运行数据库迁移:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 仅迁移表结构
|
|||
|
|
go run cmd/migrate/main.go
|
|||
|
|
|
|||
|
|
# 迁移表结构并初始化示例数据
|
|||
|
|
go run cmd/migrate/main.go --seed
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
或者直接执行SQL文件:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
mysql -u root -p dianshang < migrations/init.sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. 启动服务
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
go run cmd/server/main.go
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
服务将在 `http://localhost:8080` 启动。
|
|||
|
|
|
|||
|
|
## API 文档
|
|||
|
|
|
|||
|
|
### 用户相关接口
|
|||
|
|
|
|||
|
|
#### 用户登录
|
|||
|
|
```
|
|||
|
|
POST /api/users/login
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"code": "微信登录code"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 获取用户信息
|
|||
|
|
```
|
|||
|
|
GET /api/users/profile
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 更新用户信息
|
|||
|
|
```
|
|||
|
|
PUT /api/users/profile
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"nickname": "昵称",
|
|||
|
|
"avatar": "头像URL",
|
|||
|
|
"gender": 1,
|
|||
|
|
"phone": "手机号",
|
|||
|
|
"email": "邮箱"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 地址管理
|
|||
|
|
```
|
|||
|
|
GET /api/users/addresses # 获取地址列表
|
|||
|
|
POST /api/users/addresses # 创建地址
|
|||
|
|
PUT /api/users/addresses/:id # 更新地址
|
|||
|
|
DELETE /api/users/addresses/:id # 删除地址
|
|||
|
|
PUT /api/users/addresses/:id/default # 设置默认地址
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 商品相关接口
|
|||
|
|
|
|||
|
|
#### 获取商品列表
|
|||
|
|
```
|
|||
|
|
GET /api/products?page=1&limit=10&category_id=1&keyword=搜索关键词&min_price=100&max_price=1000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 获取商品详情
|
|||
|
|
```
|
|||
|
|
GET /api/products/:id
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 获取商品分类
|
|||
|
|
```
|
|||
|
|
GET /api/products/categories
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 商品搜索
|
|||
|
|
```
|
|||
|
|
GET /api/products/search?keyword=关键词&page=1&limit=10
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 热门商品
|
|||
|
|
```
|
|||
|
|
GET /api/products/hot
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 推荐商品
|
|||
|
|
```
|
|||
|
|
GET /api/products/recommend
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 商品评价
|
|||
|
|
```
|
|||
|
|
GET /api/products/:id/reviews # 获取商品评价
|
|||
|
|
POST /api/products/:id/reviews # 创建评价
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 购物车相关接口
|
|||
|
|
|
|||
|
|
#### 获取购物车
|
|||
|
|
```
|
|||
|
|
GET /api/cart
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 添加商品到购物车
|
|||
|
|
```
|
|||
|
|
POST /api/cart
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"product_id": 1,
|
|||
|
|
"quantity": 2
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 更新购物车商品
|
|||
|
|
```
|
|||
|
|
PUT /api/cart/:id
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"quantity": 3
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 删除购物车商品
|
|||
|
|
```
|
|||
|
|
DELETE /api/cart/:id
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 清空购物车
|
|||
|
|
```
|
|||
|
|
DELETE /api/cart
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 获取购物车数量
|
|||
|
|
```
|
|||
|
|
GET /api/cart/count
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 订单相关接口
|
|||
|
|
|
|||
|
|
#### 创建订单
|
|||
|
|
```
|
|||
|
|
POST /api/orders
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"address_id": 1,
|
|||
|
|
"items": [
|
|||
|
|
{
|
|||
|
|
"product_id": 1,
|
|||
|
|
"quantity": 2
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"remark": "备注"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 获取订单列表
|
|||
|
|
```
|
|||
|
|
GET /api/orders?page=1&limit=10&status=1
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 获取订单详情
|
|||
|
|
```
|
|||
|
|
GET /api/orders/:id
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 支付订单
|
|||
|
|
```
|
|||
|
|
POST /api/orders/:id/pay
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"payment_method": 1
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 取消订单
|
|||
|
|
```
|
|||
|
|
POST /api/orders/:id/cancel
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 确认收货
|
|||
|
|
```
|
|||
|
|
POST /api/orders/:id/receive
|
|||
|
|
Authorization: Bearer <token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 管理后台接口
|
|||
|
|
|
|||
|
|
#### 用户管理
|
|||
|
|
```
|
|||
|
|
GET /api/admin/users # 获取用户列表
|
|||
|
|
GET /api/admin/users/:id # 获取用户详情
|
|||
|
|
PUT /api/admin/users/:id/status # 更新用户状态
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 商品管理
|
|||
|
|
```
|
|||
|
|
GET /api/admin/products # 获取商品列表
|
|||
|
|
POST /api/admin/products # 创建商品
|
|||
|
|
PUT /api/admin/products/:id # 更新商品
|
|||
|
|
DELETE /api/admin/products/:id # 删除商品
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 分类管理
|
|||
|
|
```
|
|||
|
|
GET /api/admin/categories # 获取分类列表
|
|||
|
|
POST /api/admin/categories # 创建分类
|
|||
|
|
PUT /api/admin/categories/:id # 更新分类
|
|||
|
|
DELETE /api/admin/categories/:id # 删除分类
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 订单管理
|
|||
|
|
```
|
|||
|
|
GET /api/admin/orders # 获取订单列表
|
|||
|
|
GET /api/admin/orders/:id # 获取订单详情
|
|||
|
|
POST /api/admin/orders/:id/ship # 发货
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 数据统计
|
|||
|
|
```
|
|||
|
|
GET /api/admin/statistics # 获取统计数据
|
|||
|
|
GET /api/admin/statistics/daily # 获取每日统计
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 部署说明
|
|||
|
|
|
|||
|
|
### Docker 部署
|
|||
|
|
|
|||
|
|
1. 创建 Dockerfile:
|
|||
|
|
|
|||
|
|
```dockerfile
|
|||
|
|
FROM golang:1.21-alpine AS builder
|
|||
|
|
|
|||
|
|
WORKDIR /app
|
|||
|
|
COPY go.mod go.sum ./
|
|||
|
|
RUN go mod download
|
|||
|
|
|
|||
|
|
COPY . .
|
|||
|
|
RUN CGO_ENABLED=0 GOOS=linux go build -o main cmd/server/main.go
|
|||
|
|
|
|||
|
|
FROM alpine:latest
|
|||
|
|
RUN apk --no-cache add ca-certificates tzdata
|
|||
|
|
WORKDIR /root/
|
|||
|
|
|
|||
|
|
COPY --from=builder /app/main .
|
|||
|
|
COPY --from=builder /app/configs ./configs
|
|||
|
|
|
|||
|
|
EXPOSE 8080
|
|||
|
|
CMD ["./main"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. 构建镜像:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd server
|
|||
|
|
docker build -t dianshang-server .
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. 运行容器:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
docker run -d \
|
|||
|
|
--name dianshang-server \
|
|||
|
|
-p 8080:8080 \
|
|||
|
|
-v $(pwd)/configs:/root/configs \
|
|||
|
|
-v $(pwd)/logs:/root/logs \
|
|||
|
|
dianshang-server
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 生产环境部署
|
|||
|
|
|
|||
|
|
1. 编译二进制文件:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd server
|
|||
|
|
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o dianshang cmd/server/main.go
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. 上传到服务器并运行:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 上传文件
|
|||
|
|
scp dianshang user@server:/path/to/app/
|
|||
|
|
scp -r configs user@server:/path/to/app/
|
|||
|
|
|
|||
|
|
# 在服务器上运行
|
|||
|
|
chmod +x dianshang
|
|||
|
|
./dianshang
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. 使用 systemd 管理服务:
|
|||
|
|
|
|||
|
|
创建 `/etc/systemd/system/dianshang.service`:
|
|||
|
|
|
|||
|
|
```ini
|
|||
|
|
[Unit]
|
|||
|
|
Description=Dianshang Server
|
|||
|
|
After=network.target
|
|||
|
|
|
|||
|
|
[Service]
|
|||
|
|
Type=simple
|
|||
|
|
User=www-data
|
|||
|
|
WorkingDirectory=/path/to/app
|
|||
|
|
ExecStart=/path/to/app/dianshang
|
|||
|
|
Restart=on-failure
|
|||
|
|
RestartSec=5
|
|||
|
|
|
|||
|
|
[Install]
|
|||
|
|
WantedBy=multi-user.target
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
启动服务:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
sudo systemctl daemon-reload
|
|||
|
|
sudo systemctl enable dianshang
|
|||
|
|
sudo systemctl start dianshang
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Nginx 反向代理
|
|||
|
|
|
|||
|
|
配置 Nginx:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name your-domain.com;
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
proxy_pass http://127.0.0.1:8080;
|
|||
|
|
proxy_set_header Host $host;
|
|||
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|||
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|||
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 开发指南
|
|||
|
|
|
|||
|
|
### 代码规范
|
|||
|
|
|
|||
|
|
- 使用 `gofmt` 格式化代码
|
|||
|
|
- 遵循 Go 官方编码规范
|
|||
|
|
- 使用有意义的变量和函数名
|
|||
|
|
- 添加必要的注释
|
|||
|
|
|
|||
|
|
### 测试
|
|||
|
|
|
|||
|
|
运行测试:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
go test ./...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 日志
|
|||
|
|
|
|||
|
|
日志文件位置:`logs/app.log`
|
|||
|
|
|
|||
|
|
日志级别:
|
|||
|
|
- `debug`: 调试信息
|
|||
|
|
- `info`: 一般信息
|
|||
|
|
- `warn`: 警告信息
|
|||
|
|
- `error`: 错误信息
|
|||
|
|
|
|||
|
|
## 常见问题
|
|||
|
|
|
|||
|
|
### 1. 数据库连接失败
|
|||
|
|
|
|||
|
|
检查数据库配置是否正确,确保 MySQL 服务正在运行。
|
|||
|
|
|
|||
|
|
### 2. Redis 连接失败
|
|||
|
|
|
|||
|
|
检查 Redis 配置是否正确,确保 Redis 服务正在运行。
|
|||
|
|
|
|||
|
|
### 3. JWT Token 验证失败
|
|||
|
|
|
|||
|
|
检查 JWT 密钥配置是否正确,确保客户端正确传递 Authorization 头。
|
|||
|
|
|
|||
|
|
## 贡献指南
|
|||
|
|
|
|||
|
|
1. Fork 项目
|
|||
|
|
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
|||
|
|
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
|||
|
|
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
|||
|
|
5. 打开 Pull Request
|
|||
|
|
|
|||
|
|
## 许可证
|
|||
|
|
|
|||
|
|
本项目采用 MIT 许可证。详情请参阅 [LICENSE](LICENSE) 文件。
|
|||
|
|
|
|||
|
|
## 业务需求
|
|||
|
|
|
|||
|
|
### 1. 用户管理
|
|||
|
|
- **用户注册/登录**: 支持微信授权登录
|
|||
|
|
- **用户信息管理**: 个人资料、收货地址管理
|
|||
|
|
- **用户等级**: 普通用户、VIP用户等级体系
|
|||
|
|
- **积分系统**: 购物积分、积分兑换
|
|||
|
|
|
|||
|
|
### 2. 商品管理
|
|||
|
|
- **商品分类**: 多级分类展示
|
|||
|
|
- **商品详情**: 商品图片、描述、规格、价格
|
|||
|
|
- **商品搜索**: 关键词搜索、分类筛选
|
|||
|
|
- **商品收藏**: 用户收藏商品功能
|
|||
|
|
- **商品评价**: 用户评价和评分系统
|
|||
|
|
|
|||
|
|
### 3. 购物车功能
|
|||
|
|
- **添加商品**: 选择规格、数量添加到购物车
|
|||
|
|
- **购物车管理**: 修改数量、删除商品
|
|||
|
|
- **批量操作**: 全选、批量删除
|
|||
|
|
|
|||
|
|
### 4. 订单管理
|
|||
|
|
- **下单流程**: 选择地址、支付方式、确认订单
|
|||
|
|
- **订单状态**: 待支付、待发货、待收货、已完成、已取消
|
|||
|
|
- **订单详情**: 查看订单信息、物流跟踪
|
|||
|
|
- **退款/退货**: 申请退款退货流程
|
|||
|
|
|
|||
|
|
### 5. 支付功能
|
|||
|
|
- **微信支付**: 集成微信支付API
|
|||
|
|
- **支付状态**: 支付成功/失败处理
|
|||
|
|
- **退款处理**: 自动/手动退款
|
|||
|
|
|
|||
|
|
### 6. 营销功能
|
|||
|
|
- **优惠券**: 满减券、折扣券
|
|||
|
|
- **秒杀活动**: 限时抢购
|
|||
|
|
- **拼团**: 多人拼团优惠
|
|||
|
|
- **推荐系统**: 个性化商品推荐
|
|||
|
|
|
|||
|
|
### 7. 管理后台
|
|||
|
|
- **商品管理**: 商品增删改查、库存管理
|
|||
|
|
- **订单管理**: 订单处理、发货管理
|
|||
|
|
- **用户管理**: 用户信息查看、权限管理
|
|||
|
|
- **数据统计**: 销售数据、用户数据分析
|
|||
|
|
|
|||
|
|
## 数据表结构
|
|||
|
|
|
|||
|
|
### 用户相关表
|
|||
|
|
|
|||
|
|
#### users (用户表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE `users` (
|
|||
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|||
|
|
`openid` VARCHAR(100) NOT NULL COMMENT '微信openid',
|
|||
|
|
`unionid` VARCHAR(100) DEFAULT NULL COMMENT '微信unionid',
|
|||
|
|
`nickname` VARCHAR(50) DEFAULT NULL COMMENT '昵称',
|
|||
|
|
`avatar_url` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
|
|||
|
|
`gender` TINYINT UNSIGNED DEFAULT 0 COMMENT '性别 0-未知 1-男 2-女',
|
|||
|
|
`phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
|
|||
|
|
`email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
|
|||
|
|
`birthday` DATE DEFAULT NULL COMMENT '生日',
|
|||
|
|
`level` TINYINT UNSIGNED DEFAULT 1 COMMENT '用户等级',
|
|||
|
|
`points` INT UNSIGNED DEFAULT 0 COMMENT '积分',
|
|||
|
|
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '状态 0-禁用 1-正常',
|
|||
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|||
|
|
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|||
|
|
`deleted_at` DATETIME(3) DEFAULT NULL,
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
UNIQUE KEY `idx_users_openid` (`openid`),
|
|||
|
|
KEY `idx_users_deleted_at` (`deleted_at`),
|
|||
|
|
KEY `idx_users_phone` (`phone`),
|
|||
|
|
KEY `idx_users_status` (`status`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### user_addresses (用户地址表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE `user_addresses` (
|
|||
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|||
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|||
|
|
`name` VARCHAR(50) NOT NULL COMMENT '收货人姓名',
|
|||
|
|
`phone` VARCHAR(20) NOT NULL COMMENT '收货人电话',
|
|||
|
|
`province` VARCHAR(50) NOT NULL COMMENT '省份',
|
|||
|
|
`city` VARCHAR(50) NOT NULL COMMENT '城市',
|
|||
|
|
`district` VARCHAR(50) NOT NULL COMMENT '区县',
|
|||
|
|
`detail` VARCHAR(255) NOT NULL COMMENT '详细地址',
|
|||
|
|
`is_default` TINYINT UNSIGNED DEFAULT 0 COMMENT '是否默认地址',
|
|||
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|||
|
|
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|||
|
|
`deleted_at` DATETIME(3) DEFAULT NULL,
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
KEY `idx_user_addresses_user_id` (`user_id`),
|
|||
|
|
KEY `idx_user_addresses_deleted_at` (`deleted_at`),
|
|||
|
|
KEY `idx_user_addresses_is_default` (`is_default`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户地址表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 商品相关表
|
|||
|
|
|
|||
|
|
#### categories (商品分类表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE `categories` (
|
|||
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|||
|
|
`name` VARCHAR(50) NOT NULL COMMENT '分类名称',
|
|||
|
|
`parent_id` BIGINT UNSIGNED DEFAULT 0 COMMENT '父分类ID',
|
|||
|
|
`level` TINYINT UNSIGNED DEFAULT 1 COMMENT '分类级别',
|
|||
|
|
`sort_order` INT DEFAULT 0 COMMENT '排序',
|
|||
|
|
`icon` VARCHAR(255) DEFAULT NULL COMMENT '分类图标',
|
|||
|
|
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '状态 0-禁用 1-启用',
|
|||
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|||
|
|
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|||
|
|
`deleted_at` DATETIME(3) DEFAULT NULL,
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
KEY `idx_categories_parent_id` (`parent_id`),
|
|||
|
|
KEY `idx_categories_status` (`status`),
|
|||
|
|
KEY `idx_categories_sort_order` (`sort_order`),
|
|||
|
|
KEY `idx_categories_deleted_at` (`deleted_at`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品分类表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### products (商品表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE `products` (
|
|||
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|||
|
|
`name` VARCHAR(255) NOT NULL COMMENT '商品名称',
|
|||
|
|
`category_id` BIGINT UNSIGNED NOT NULL COMMENT '分类ID',
|
|||
|
|
`brand` VARCHAR(100) DEFAULT NULL COMMENT '品牌',
|
|||
|
|
`description` TEXT COMMENT '商品描述',
|
|||
|
|
`main_image` VARCHAR(255) DEFAULT NULL COMMENT '主图',
|
|||
|
|
`price` DECIMAL(10,2) NOT NULL COMMENT '价格',
|
|||
|
|
`original_price` DECIMAL(10,2) DEFAULT NULL COMMENT '原价',
|
|||
|
|
`stock` INT UNSIGNED DEFAULT 0 COMMENT '库存',
|
|||
|
|
`sales` INT UNSIGNED DEFAULT 0 COMMENT '销量',
|
|||
|
|
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '状态 0-下架 1-上架',
|
|||
|
|
`sort_order` INT DEFAULT 0 COMMENT '排序',
|
|||
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|||
|
|
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|||
|
|
`deleted_at` DATETIME(3) DEFAULT NULL,
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
KEY `idx_products_category_id` (`category_id`),
|
|||
|
|
KEY `idx_products_status` (`status`),
|
|||
|
|
KEY `idx_products_sort_order` (`sort_order`),
|
|||
|
|
KEY `idx_products_deleted_at` (`deleted_at`),
|
|||
|
|
KEY `idx_products_price` (`price`),
|
|||
|
|
KEY `idx_products_sales` (`sales`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### product_images (商品图片表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE `product_images` (
|
|||
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|||
|
|
`product_id` BIGINT UNSIGNED NOT NULL,
|
|||
|
|
`image_url` VARCHAR(255) NOT NULL COMMENT '图片URL',
|
|||
|
|
`sort_order` INT DEFAULT 0 COMMENT '排序',
|
|||
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|||
|
|
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|||
|
|
`deleted_at` DATETIME(3) DEFAULT NULL,
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
KEY `idx_product_images_product_id` (`product_id`),
|
|||
|
|
KEY `idx_product_images_sort_order` (`sort_order`),
|
|||
|
|
KEY `idx_product_images_deleted_at` (`deleted_at`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品图片表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### product_specs (商品规格表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE `product_specs` (
|
|||
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|||
|
|
`product_id` BIGINT UNSIGNED NOT NULL,
|
|||
|
|
`spec_name` VARCHAR(50) NOT NULL COMMENT '规格名称',
|
|||
|
|
`spec_value` VARCHAR(100) NOT NULL COMMENT '规格值',
|
|||
|
|
`price` DECIMAL(10,2) DEFAULT NULL COMMENT '规格价格',
|
|||
|
|
`stock` INT UNSIGNED DEFAULT 0 COMMENT '规格库存',
|
|||
|
|
`sku_code` VARCHAR(100) DEFAULT NULL COMMENT 'SKU编码',
|
|||
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|||
|
|
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|||
|
|
`deleted_at` DATETIME(3) DEFAULT NULL,
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
KEY `idx_product_specs_product_id` (`product_id`),
|
|||
|
|
KEY `idx_product_specs_sku_code` (`sku_code`),
|
|||
|
|
KEY `idx_product_specs_deleted_at` (`deleted_at`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品规格表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 购物车和订单相关表
|
|||
|
|
|
|||
|
|
#### carts (购物车表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE `carts` (
|
|||
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|||
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|||
|
|
`product_id` BIGINT UNSIGNED NOT NULL,
|
|||
|
|
`spec_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '规格ID',
|
|||
|
|
`quantity` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '数量',
|
|||
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|||
|
|
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|||
|
|
`deleted_at` DATETIME(3) DEFAULT NULL,
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
KEY `idx_carts_user_id` (`user_id`),
|
|||
|
|
KEY `idx_carts_product_id` (`product_id`),
|
|||
|
|
KEY `idx_carts_spec_id` (`spec_id`),
|
|||
|
|
KEY `idx_carts_deleted_at` (`deleted_at`),
|
|||
|
|
UNIQUE KEY `uk_carts_user_product_spec` (`user_id`, `product_id`, `spec_id`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='购物车表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### orders (订单表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE `orders` (
|
|||
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|||
|
|
`order_no` VARCHAR(50) NOT NULL COMMENT '订单号',
|
|||
|
|
`user_id` BIGINT UNSIGNED NOT NULL,
|
|||
|
|
`total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
|
|||
|
|
`discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额',
|
|||
|
|
`shipping_fee` DECIMAL(10,2) DEFAULT 0.00 COMMENT '运费',
|
|||
|
|
`actual_amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额',
|
|||
|
|
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '订单状态 1-待支付 2-待发货 3-待收货 4-已完成 5-已取消',
|
|||
|
|
`payment_method` TINYINT UNSIGNED DEFAULT NULL COMMENT '支付方式 1-微信支付',
|
|||
|
|
`payment_status` TINYINT UNSIGNED DEFAULT 0 COMMENT '支付状态 0-未支付 1-已支付',
|
|||
|
|
`shipping_name` VARCHAR(50) DEFAULT NULL COMMENT '收货人姓名',
|
|||
|
|
`shipping_phone` VARCHAR(20) DEFAULT NULL COMMENT '收货人电话',
|
|||
|
|
`shipping_address` VARCHAR(500) DEFAULT NULL COMMENT '收货地址',
|
|||
|
|
`remark` TEXT COMMENT '订单备注',
|
|||
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|||
|
|
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|||
|
|
`deleted_at` DATETIME(3) DEFAULT NULL,
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
UNIQUE KEY `uk_orders_order_no` (`order_no`),
|
|||
|
|
KEY `idx_orders_user_id` (`user_id`),
|
|||
|
|
KEY `idx_orders_status` (`status`),
|
|||
|
|
KEY `idx_orders_payment_status` (`payment_status`),
|
|||
|
|
KEY `idx_orders_created_at` (`created_at`),
|
|||
|
|
KEY `idx_orders_deleted_at` (`deleted_at`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### order_items (订单商品表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE `order_items` (
|
|||
|
|
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|||
|
|
`order_id` BIGINT UNSIGNED NOT NULL,
|
|||
|
|
`product_id` BIGINT UNSIGNED NOT NULL,
|
|||
|
|
`spec_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '规格ID',
|
|||
|
|
`product_name` VARCHAR(255) NOT NULL COMMENT '商品名称',
|
|||
|
|
`spec_name` VARCHAR(100) DEFAULT NULL COMMENT '规格名称',
|
|||
|
|
`price` DECIMAL(10,2) NOT NULL COMMENT '商品价格',
|
|||
|
|
`quantity` INT UNSIGNED NOT NULL COMMENT '购买数量',
|
|||
|
|
`total_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额',
|
|||
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|||
|
|
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|||
|
|
`deleted_at` DATETIME(3) DEFAULT NULL,
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
KEY `idx_order_items_order_id` (`order_id`),
|
|||
|
|
KEY `idx_order_items_product_id` (`product_id`),
|
|||
|
|
KEY `idx_order_items_spec_id` (`spec_id`),
|
|||
|
|
KEY `idx_order_items_deleted_at` (`deleted_at`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单商品表';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 营销相关表
|
|||
|
|
|
|||
|
|
#### coupons (优惠券表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE coupons (
|
|||
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
name VARCHAR(100) NOT NULL COMMENT '优惠券名称',
|
|||
|
|
type TINYINT NOT NULL COMMENT '类型 1-满减券 2-折扣券',
|
|||
|
|
value DECIMAL(10,2) NOT NULL COMMENT '优惠值',
|
|||
|
|
min_amount DECIMAL(10,2) DEFAULT 0 COMMENT '最低消费金额',
|
|||
|
|
total_count INT NOT NULL COMMENT '发放总数',
|
|||
|
|
used_count INT DEFAULT 0 COMMENT '已使用数量',
|
|||
|
|
start_time TIMESTAMP NOT NULL COMMENT '开始时间',
|
|||
|
|
end_time TIMESTAMP NOT NULL COMMENT '结束时间',
|
|||
|
|
status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-启用',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### user_coupons (用户优惠券表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE user_coupons (
|
|||
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
user_id INT NOT NULL,
|
|||
|
|
coupon_id INT NOT NULL,
|
|||
|
|
status TINYINT DEFAULT 0 COMMENT '状态 0-未使用 1-已使用 2-已过期',
|
|||
|
|
used_at TIMESTAMP NULL COMMENT '使用时间',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
FOREIGN KEY (user_id) REFERENCES users(id),
|
|||
|
|
FOREIGN KEY (coupon_id) REFERENCES coupons(id)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 评价相关表
|
|||
|
|
|
|||
|
|
#### product_reviews (商品评价表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE product_reviews (
|
|||
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
user_id INT NOT NULL,
|
|||
|
|
product_id INT NOT NULL,
|
|||
|
|
order_id INT NOT NULL,
|
|||
|
|
rating TINYINT NOT NULL COMMENT '评分 1-5星',
|
|||
|
|
content TEXT COMMENT '评价内容',
|
|||
|
|
images VARCHAR(1000) COMMENT '评价图片,JSON格式',
|
|||
|
|
is_anonymous TINYINT DEFAULT 0 COMMENT '是否匿名评价',
|
|||
|
|
reply_content TEXT COMMENT '商家回复',
|
|||
|
|
reply_time TIMESTAMP NULL COMMENT '回复时间',
|
|||
|
|
status TINYINT DEFAULT 1 COMMENT '状态 0-隐藏 1-显示',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
FOREIGN KEY (user_id) REFERENCES users(id),
|
|||
|
|
FOREIGN KEY (product_id) REFERENCES products(id),
|
|||
|
|
FOREIGN KEY (order_id) REFERENCES orders(id)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 公共业务表
|
|||
|
|
|
|||
|
|
#### system_logs (系统日志表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE system_logs (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
user_id INT COMMENT '用户ID',
|
|||
|
|
module VARCHAR(50) NOT NULL COMMENT '模块名称',
|
|||
|
|
action VARCHAR(50) NOT NULL COMMENT '操作类型',
|
|||
|
|
method VARCHAR(10) COMMENT '请求方法',
|
|||
|
|
url VARCHAR(500) COMMENT '请求URL',
|
|||
|
|
ip VARCHAR(50) COMMENT 'IP地址',
|
|||
|
|
user_agent VARCHAR(500) COMMENT '用户代理',
|
|||
|
|
request_data TEXT COMMENT '请求参数',
|
|||
|
|
response_data TEXT COMMENT '响应数据',
|
|||
|
|
status_code INT COMMENT '状态码',
|
|||
|
|
execution_time INT COMMENT '执行时间(毫秒)',
|
|||
|
|
error_message TEXT COMMENT '错误信息',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
INDEX idx_user_id (user_id),
|
|||
|
|
INDEX idx_module_action (module, action),
|
|||
|
|
INDEX idx_created_at (created_at)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### system_configs (系统配置表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE system_configs (
|
|||
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
config_key VARCHAR(100) UNIQUE NOT NULL COMMENT '配置键',
|
|||
|
|
config_value TEXT COMMENT '配置值',
|
|||
|
|
config_type VARCHAR(20) DEFAULT 'string' COMMENT '配置类型',
|
|||
|
|
description VARCHAR(255) COMMENT '配置描述',
|
|||
|
|
is_public TINYINT DEFAULT 0 COMMENT '是否公开配置',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### notifications (通知消息表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE notifications (
|
|||
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
user_id INT COMMENT '用户ID,为空表示系统通知',
|
|||
|
|
type VARCHAR(50) NOT NULL COMMENT '通知类型',
|
|||
|
|
title VARCHAR(255) NOT NULL COMMENT '通知标题',
|
|||
|
|
content TEXT NOT NULL COMMENT '通知内容',
|
|||
|
|
data JSON COMMENT '附加数据',
|
|||
|
|
is_read TINYINT DEFAULT 0 COMMENT '是否已读',
|
|||
|
|
read_at TIMESTAMP NULL COMMENT '阅读时间',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
FOREIGN KEY (user_id) REFERENCES users(id),
|
|||
|
|
INDEX idx_user_read (user_id, is_read),
|
|||
|
|
INDEX idx_created_at (created_at)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### file_uploads (文件上传记录表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE file_uploads (
|
|||
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
user_id INT COMMENT '上传用户ID',
|
|||
|
|
original_name VARCHAR(255) NOT NULL COMMENT '原始文件名',
|
|||
|
|
file_name VARCHAR(255) NOT NULL COMMENT '存储文件名',
|
|||
|
|
file_path VARCHAR(500) NOT NULL COMMENT '文件路径',
|
|||
|
|
file_size BIGINT NOT NULL COMMENT '文件大小(字节)',
|
|||
|
|
mime_type VARCHAR(100) COMMENT '文件类型',
|
|||
|
|
file_hash VARCHAR(64) COMMENT '文件哈希值',
|
|||
|
|
usage_type VARCHAR(50) COMMENT '使用类型',
|
|||
|
|
status TINYINT DEFAULT 1 COMMENT '状态 0-删除 1-正常',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
FOREIGN KEY (user_id) REFERENCES users(id),
|
|||
|
|
INDEX idx_file_hash (file_hash),
|
|||
|
|
INDEX idx_usage_type (usage_type)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### admin_users (管理员用户表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE admin_users (
|
|||
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
username VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名',
|
|||
|
|
password VARCHAR(255) NOT NULL COMMENT '密码',
|
|||
|
|
real_name VARCHAR(50) COMMENT '真实姓名',
|
|||
|
|
email VARCHAR(100) COMMENT '邮箱',
|
|||
|
|
phone VARCHAR(20) COMMENT '手机号',
|
|||
|
|
avatar VARCHAR(255) COMMENT '头像',
|
|||
|
|
role_id INT COMMENT '角色ID',
|
|||
|
|
last_login_at TIMESTAMP NULL COMMENT '最后登录时间',
|
|||
|
|
last_login_ip VARCHAR(50) COMMENT '最后登录IP',
|
|||
|
|
status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-正常',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### admin_roles (管理员角色表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE admin_roles (
|
|||
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
name VARCHAR(50) NOT NULL COMMENT '角色名称',
|
|||
|
|
description VARCHAR(255) COMMENT '角色描述',
|
|||
|
|
permissions JSON COMMENT '权限列表',
|
|||
|
|
status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-启用',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### operation_logs (操作日志表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE operation_logs (
|
|||
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
admin_id INT COMMENT '管理员ID',
|
|||
|
|
module VARCHAR(50) NOT NULL COMMENT '操作模块',
|
|||
|
|
operation VARCHAR(100) NOT NULL COMMENT '操作描述',
|
|||
|
|
target_type VARCHAR(50) COMMENT '操作对象类型',
|
|||
|
|
target_id INT COMMENT '操作对象ID',
|
|||
|
|
old_data JSON COMMENT '操作前数据',
|
|||
|
|
new_data JSON COMMENT '操作后数据',
|
|||
|
|
ip VARCHAR(50) COMMENT 'IP地址',
|
|||
|
|
user_agent VARCHAR(500) COMMENT '用户代理',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
FOREIGN KEY (admin_id) REFERENCES admin_users(id),
|
|||
|
|
INDEX idx_admin_id (admin_id),
|
|||
|
|
INDEX idx_module (module),
|
|||
|
|
INDEX idx_created_at (created_at)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### data_statistics (数据统计表)
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE data_statistics (
|
|||
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|||
|
|
stat_date DATE NOT NULL COMMENT '统计日期',
|
|||
|
|
stat_type VARCHAR(50) NOT NULL COMMENT '统计类型',
|
|||
|
|
stat_key VARCHAR(100) NOT NULL COMMENT '统计键',
|
|||
|
|
stat_value DECIMAL(15,2) DEFAULT 0 COMMENT '统计值',
|
|||
|
|
extra_data JSON COMMENT '额外数据',
|
|||
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|||
|
|
UNIQUE KEY uk_date_type_key (stat_date, stat_type, stat_key),
|
|||
|
|
INDEX idx_stat_date (stat_date),
|
|||
|
|
INDEX idx_stat_type (stat_type)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 系统API接口
|
|||
|
|
|
|||
|
|
### 1. 用户相关接口
|
|||
|
|
|
|||
|
|
#### 用户认证
|
|||
|
|
- `POST /api/auth/login` - 微信登录
|
|||
|
|
- `POST /api/auth/refresh` - 刷新token
|
|||
|
|
- `POST /api/auth/logout` - 退出登录
|
|||
|
|
|
|||
|
|
#### 用户信息管理
|
|||
|
|
- `GET /api/user/profile` - 获取用户信息
|
|||
|
|
- `PUT /api/user/profile` - 更新用户信息
|
|||
|
|
- `DELETE /api/user/account` - 注销用户账户
|
|||
|
|
- `GET /api/user/points` - 获取用户积分记录
|
|||
|
|
- `POST /api/user/points/exchange` - 积分兑换
|
|||
|
|
|
|||
|
|
#### 用户地址管理
|
|||
|
|
- `GET /api/user/addresses` - 获取用户地址列表
|
|||
|
|
- `GET /api/user/addresses/{id}` - 获取单个地址详情
|
|||
|
|
- `POST /api/user/addresses` - 添加收货地址
|
|||
|
|
- `PUT /api/user/addresses/{id}` - 更新收货地址
|
|||
|
|
- `DELETE /api/user/addresses/{id}` - 删除收货地址
|
|||
|
|
- `PUT /api/user/addresses/{id}/default` - 设置默认地址
|
|||
|
|
|
|||
|
|
### 2. 商品相关接口
|
|||
|
|
|
|||
|
|
#### 商品分类管理
|
|||
|
|
- `GET /api/categories` - 获取商品分类列表
|
|||
|
|
- `GET /api/categories/{id}` - 获取分类详情
|
|||
|
|
- `GET /api/categories/{id}/products` - 获取分类下的商品
|
|||
|
|
- `POST /api/categories` - 创建商品分类(管理员)
|
|||
|
|
- `PUT /api/categories/{id}` - 更新商品分类(管理员)
|
|||
|
|
- `DELETE /api/categories/{id}` - 删除商品分类(管理员)
|
|||
|
|
- `PUT /api/categories/{id}/sort` - 调整分类排序(管理员)
|
|||
|
|
|
|||
|
|
#### 商品信息管理
|
|||
|
|
- `GET /api/products` - 获取商品列表(支持分页、搜索、筛选)
|
|||
|
|
- `GET /api/products/{id}` - 获取商品详情
|
|||
|
|
- `POST /api/products` - 创建商品(管理员)
|
|||
|
|
- `PUT /api/products/{id}` - 更新商品(管理员)
|
|||
|
|
- `DELETE /api/products/{id}` - 删除商品(管理员)
|
|||
|
|
- `PUT /api/products/{id}/status` - 修改商品状态(管理员)
|
|||
|
|
- `GET /api/products/search` - 商品搜索
|
|||
|
|
- `GET /api/products/recommend` - 推荐商品
|
|||
|
|
|
|||
|
|
#### 商品规格管理
|
|||
|
|
- `GET /api/products/{id}/specs` - 获取商品规格列表
|
|||
|
|
- `GET /api/products/specs/{id}` - 获取单个规格详情
|
|||
|
|
- `POST /api/products/{id}/specs` - 添加商品规格(管理员)
|
|||
|
|
- `PUT /api/products/specs/{id}` - 更新商品规格(管理员)
|
|||
|
|
- `DELETE /api/products/specs/{id}` - 删除商品规格(管理员)
|
|||
|
|
|
|||
|
|
#### 商品图片管理
|
|||
|
|
- `GET /api/products/{id}/images` - 获取商品图片列表
|
|||
|
|
- `POST /api/products/{id}/images` - 添加商品图片(管理员)
|
|||
|
|
- `PUT /api/products/images/{id}` - 更新图片信息(管理员)
|
|||
|
|
- `DELETE /api/products/images/{id}` - 删除商品图片(管理员)
|
|||
|
|
- `PUT /api/products/images/{id}/sort` - 调整图片排序(管理员)
|
|||
|
|
|
|||
|
|
### 3. 购物车相关接口
|
|||
|
|
|
|||
|
|
#### 购物车管理
|
|||
|
|
- `GET /api/cart` - 获取购物车列表
|
|||
|
|
- `GET /api/cart/count` - 获取购物车商品数量
|
|||
|
|
- `POST /api/cart` - 添加商品到购物车
|
|||
|
|
- `PUT /api/cart/{id}` - 更新购物车商品数量
|
|||
|
|
- `DELETE /api/cart/{id}` - 删除购物车商品
|
|||
|
|
- `DELETE /api/cart/batch` - 批量删除购物车商品
|
|||
|
|
- `DELETE /api/cart/clear` - 清空购物车
|
|||
|
|
- `POST /api/cart/batch` - 批量添加商品到购物车
|
|||
|
|
|
|||
|
|
### 4. 订单相关接口
|
|||
|
|
|
|||
|
|
#### 订单管理
|
|||
|
|
- `GET /api/orders` - 获取订单列表
|
|||
|
|
- `GET /api/orders/{id}` - 获取订单详情
|
|||
|
|
- `POST /api/orders` - 创建订单
|
|||
|
|
- `PUT /api/orders/{id}` - 更新订单信息(管理员)
|
|||
|
|
- `DELETE /api/orders/{id}` - 删除订单(管理员)
|
|||
|
|
- `PUT /api/orders/{id}/cancel` - 取消订单
|
|||
|
|
- `PUT /api/orders/{id}/confirm` - 确认收货
|
|||
|
|
- `GET /api/orders/{id}/logistics` - 获取物流信息
|
|||
|
|
|
|||
|
|
#### 订单商品管理
|
|||
|
|
- `GET /api/orders/{id}/items` - 获取订单商品列表
|
|||
|
|
- `GET /api/order-items/{id}` - 获取订单商品详情
|
|||
|
|
- `POST /api/orders/{id}/items` - 添加订单商品(管理员)
|
|||
|
|
- `PUT /api/order-items/{id}` - 更新订单商品(管理员)
|
|||
|
|
- `DELETE /api/order-items/{id}` - 删除订单商品(管理员)
|
|||
|
|
|
|||
|
|
#### 支付相关
|
|||
|
|
- `POST /api/orders/{id}/pay` - 发起支付
|
|||
|
|
- `POST /api/orders/pay/callback` - 支付回调
|
|||
|
|
- `GET /api/orders/{id}/payment-status` - 获取支付状态
|
|||
|
|
- `POST /api/orders/{id}/refund` - 申请退款
|
|||
|
|
- `GET /api/orders/{id}/refund-status` - 获取退款状态
|
|||
|
|
|
|||
|
|
### 5. 营销相关接口
|
|||
|
|
|
|||
|
|
#### 优惠券管理
|
|||
|
|
- `GET /api/coupons` - 获取可领取优惠券列表
|
|||
|
|
- `GET /api/coupons/{id}` - 获取优惠券详情
|
|||
|
|
- `POST /api/coupons` - 创建优惠券(管理员)
|
|||
|
|
- `PUT /api/coupons/{id}` - 更新优惠券(管理员)
|
|||
|
|
- `DELETE /api/coupons/{id}` - 删除优惠券(管理员)
|
|||
|
|
- `PUT /api/coupons/{id}/status` - 修改优惠券状态(管理员)
|
|||
|
|
- `POST /api/coupons/{id}/receive` - 领取优惠券
|
|||
|
|
- `GET /api/orders/available-coupons` - 获取订单可用优惠券
|
|||
|
|
|
|||
|
|
#### 用户优惠券管理
|
|||
|
|
- `GET /api/user/coupons` - 获取用户优惠券列表
|
|||
|
|
- `GET /api/user/coupons/{id}` - 获取用户优惠券详情
|
|||
|
|
- `PUT /api/user/coupons/{id}/use` - 使用优惠券
|
|||
|
|
- `DELETE /api/user/coupons/{id}` - 删除用户优惠券
|
|||
|
|
|
|||
|
|
#### 活动管理
|
|||
|
|
- `GET /api/activities/seckill` - 获取秒杀活动列表
|
|||
|
|
- `GET /api/activities/seckill/{id}` - 获取秒杀活动详情
|
|||
|
|
- `POST /api/activities/seckill` - 创建秒杀活动(管理员)
|
|||
|
|
- `PUT /api/activities/seckill/{id}` - 更新秒杀活动(管理员)
|
|||
|
|
- `DELETE /api/activities/seckill/{id}` - 删除秒杀活动(管理员)
|
|||
|
|
- `POST /api/activities/seckill/{id}/join` - 参与秒杀
|
|||
|
|
- `GET /api/activities/group-buy` - 获取拼团活动列表
|
|||
|
|
- `GET /api/activities/group-buy/{id}` - 获取拼团活动详情
|
|||
|
|
- `POST /api/activities/group-buy` - 创建拼团活动(管理员)
|
|||
|
|
- `PUT /api/activities/group-buy/{id}` - 更新拼团活动(管理员)
|
|||
|
|
- `DELETE /api/activities/group-buy/{id}` - 删除拼团活动(管理员)
|
|||
|
|
- `POST /api/activities/group-buy/{id}/join` - 参与拼团
|
|||
|
|
|
|||
|
|
### 6. 评价相关接口
|
|||
|
|
|
|||
|
|
#### 商品评价管理
|
|||
|
|
- `GET /api/products/{id}/reviews` - 获取商品评价列表
|
|||
|
|
- `GET /api/reviews/{id}` - 获取评价详情
|
|||
|
|
- `POST /api/orders/{id}/review` - 提交订单评价
|
|||
|
|
- `PUT /api/reviews/{id}` - 更新评价(用户本人)
|
|||
|
|
- `DELETE /api/reviews/{id}` - 删除评价(用户本人或管理员)
|
|||
|
|
- `POST /api/reviews/{id}/reply` - 商家回复评价(管理员)
|
|||
|
|
- `PUT /api/reviews/{id}/status` - 修改评价状态(管理员)
|
|||
|
|
- `GET /api/user/reviews` - 获取用户评价列表
|
|||
|
|
|
|||
|
|
### 7. 收藏相关接口
|
|||
|
|
|
|||
|
|
- `GET /api/user/favorites` - 获取用户收藏列表
|
|||
|
|
- `POST /api/products/{id}/favorite` - 收藏商品
|
|||
|
|
- `DELETE /api/products/{id}/favorite` - 取消收藏
|
|||
|
|
|
|||
|
|
### 8. 通知相关接口
|
|||
|
|
|
|||
|
|
#### 用户通知管理
|
|||
|
|
- `GET /api/notifications` - 获取用户通知列表
|
|||
|
|
- `GET /api/notifications/{id}` - 获取通知详情
|
|||
|
|
- `PUT /api/notifications/{id}/read` - 标记通知为已读
|
|||
|
|
- `PUT /api/notifications/read-all` - 标记所有通知为已读
|
|||
|
|
- `DELETE /api/notifications/{id}` - 删除通知
|
|||
|
|
- `GET /api/notifications/unread-count` - 获取未读通知数量
|
|||
|
|
|
|||
|
|
#### 系统通知管理(管理员)
|
|||
|
|
- `GET /api/admin/notifications` - 获取所有通知列表
|
|||
|
|
- `POST /api/admin/notifications` - 创建系统通知
|
|||
|
|
- `PUT /api/admin/notifications/{id}` - 更新通知
|
|||
|
|
- `DELETE /api/admin/notifications/{id}` - 删除通知
|
|||
|
|
- `POST /api/admin/notifications/broadcast` - 广播通知给所有用户
|
|||
|
|
|
|||
|
|
### 9. 文件上传接口
|
|||
|
|
|
|||
|
|
#### 文件管理
|
|||
|
|
- `POST /api/upload/image` - 上传图片
|
|||
|
|
- `POST /api/upload/file` - 上传文件
|
|||
|
|
- `GET /api/upload/policy` - 获取上传策略(如阿里云OSS签名)
|
|||
|
|
- `GET /api/files` - 获取文件列表(管理员)
|
|||
|
|
- `GET /api/files/{id}` - 获取文件详情
|
|||
|
|
- `DELETE /api/files/{id}` - 删除文件
|
|||
|
|
- `GET /api/files/statistics` - 获取文件统计信息(管理员)
|
|||
|
|
|
|||
|
|
### 10. 系统配置接口
|
|||
|
|
|
|||
|
|
#### 配置管理
|
|||
|
|
- `GET /api/config/public` - 获取公开配置
|
|||
|
|
- `GET /api/config/app` - 获取应用配置
|
|||
|
|
- `GET /api/admin/configs` - 获取所有系统配置(管理员)
|
|||
|
|
- `GET /api/admin/configs/{key}` - 获取指定配置(管理员)
|
|||
|
|
- `POST /api/admin/configs` - 创建系统配置(管理员)
|
|||
|
|
- `PUT /api/admin/configs/{key}` - 更新系统配置(管理员)
|
|||
|
|
- `DELETE /api/admin/configs/{key}` - 删除系统配置(管理员)
|
|||
|
|
|
|||
|
|
### 12. 日志相关接口
|
|||
|
|
|
|||
|
|
#### 系统日志管理
|
|||
|
|
- `GET /api/admin/logs/system` - 获取系统日志列表(管理员)
|
|||
|
|
- `GET /api/admin/logs/system/{id}` - 获取系统日志详情(管理员)
|
|||
|
|
- `DELETE /api/admin/logs/system/{id}` - 删除系统日志(管理员)
|
|||
|
|
- `DELETE /api/admin/logs/system/batch` - 批量删除系统日志(管理员)
|
|||
|
|
- `GET /api/admin/logs/system/statistics` - 获取日志统计(管理员)
|
|||
|
|
|
|||
|
|
#### 操作日志管理
|
|||
|
|
- `GET /api/admin/logs/operation` - 获取操作日志列表(管理员)
|
|||
|
|
- `GET /api/admin/logs/operation/{id}` - 获取操作日志详情(管理员)
|
|||
|
|
- `DELETE /api/admin/logs/operation/{id}` - 删除操作日志(管理员)
|
|||
|
|
- `DELETE /api/admin/logs/operation/batch` - 批量删除操作日志(管理员)
|
|||
|
|
|
|||
|
|
### 13. 数据统计接口
|
|||
|
|
|
|||
|
|
#### 统计数据管理
|
|||
|
|
- `GET /api/admin/statistics/data` - 获取统计数据列表(管理员)
|
|||
|
|
- `GET /api/admin/statistics/data/{id}` - 获取统计数据详情(管理员)
|
|||
|
|
- `POST /api/admin/statistics/data` - 创建统计数据(管理员)
|
|||
|
|
- `PUT /api/admin/statistics/data/{id}` - 更新统计数据(管理员)
|
|||
|
|
- `DELETE /api/admin/statistics/data/{id}` - 删除统计数据(管理员)
|
|||
|
|
- `POST /api/admin/statistics/calculate` - 手动触发统计计算(管理员)
|
|||
|
|
|
|||
|
|
### 11. 管理后台接口
|
|||
|
|
|
|||
|
|
#### 管理员认证
|
|||
|
|
- `POST /api/admin/login` - 管理员登录
|
|||
|
|
- `POST /api/admin/logout` - 管理员退出
|
|||
|
|
- `GET /api/admin/profile` - 获取管理员信息
|
|||
|
|
|
|||
|
|
#### 用户管理
|
|||
|
|
- `GET /api/admin/users` - 获取用户列表
|
|||
|
|
- `GET /api/admin/users/{id}` - 获取用户详情
|
|||
|
|
- `PUT /api/admin/users/{id}/status` - 修改用户状态
|
|||
|
|
|
|||
|
|
#### 商品管理
|
|||
|
|
- `GET /api/admin/products` - 获取商品列表
|
|||
|
|
- `POST /api/admin/products` - 添加商品
|
|||
|
|
- `PUT /api/admin/products/{id}` - 更新商品
|
|||
|
|
- `DELETE /api/admin/products/{id}` - 删除商品
|
|||
|
|
- `PUT /api/admin/products/{id}/status` - 修改商品状态
|
|||
|
|
|
|||
|
|
#### 订单管理
|
|||
|
|
- `GET /api/admin/orders` - 获取订单列表
|
|||
|
|
- `GET /api/admin/orders/{id}` - 获取订单详情
|
|||
|
|
- `PUT /api/admin/orders/{id}/ship` - 订单发货
|
|||
|
|
- `PUT /api/admin/orders/{id}/status` - 修改订单状态
|
|||
|
|
|
|||
|
|
#### 数据统计
|
|||
|
|
- `GET /api/admin/statistics/overview` - 获取概览数据
|
|||
|
|
- `GET /api/admin/statistics/sales` - 获取销售统计
|
|||
|
|
- `GET /api/admin/statistics/users` - 获取用户统计
|
|||
|
|
- `GET /api/admin/statistics/products` - 获取商品统计
|
|||
|
|
|
|||
|
|
#### 系统管理
|
|||
|
|
- `GET /api/admin/configs` - 获取系统配置列表
|
|||
|
|
- `PUT /api/admin/configs/{key}` - 更新系统配置
|
|||
|
|
- `GET /api/admin/logs` - 获取系统日志
|
|||
|
|
- `GET /api/admin/operation-logs` - 获取操作日志
|
|||
|
|
|
|||
|
|
## 技术栈
|
|||
|
|
|
|||
|
|
### 前端(小程序)
|
|||
|
|
- **框架**: 微信小程序原生开发 / uni-app
|
|||
|
|
- **UI组件**: Vant Weapp / uView
|
|||
|
|
- **状态管理**: Vuex / Pinia
|
|||
|
|
- **网络请求**: wx.request / axios
|
|||
|
|
|
|||
|
|
### 后端
|
|||
|
|
- **语言**: Go (Golang)
|
|||
|
|
- **Web框架**: Gin / Fiber / Echo
|
|||
|
|
- **ORM框架**: GORM
|
|||
|
|
- **数据库**: MySQL 8.0+
|
|||
|
|
- **缓存**: Redis
|
|||
|
|
- **消息队列**: RabbitMQ / Kafka
|
|||
|
|
- **配置管理**: Viper
|
|||
|
|
- **日志**: Logrus / Zap
|
|||
|
|
- **API文档**: Swagger (gin-swagger)
|
|||
|
|
|
|||
|
|
### 部署
|
|||
|
|
- **服务器**: 阿里云 / 腾讯云
|
|||
|
|
- **容器**: Docker
|
|||
|
|
- **反向代理**: Nginx
|
|||
|
|
- **监控**: Prometheus + Grafana
|
|||
|
|
- **进程管理**: Systemd / Supervisor
|
|||
|
|
|
|||
|
|
## 开发规范
|
|||
|
|
|
|||
|
|
### Go代码规范
|
|||
|
|
- 遵循Go官方代码规范 (gofmt, golint)
|
|||
|
|
- 使用goimports自动管理导入
|
|||
|
|
- 变量命名采用驼峰命名法
|
|||
|
|
- 包名使用小写字母
|
|||
|
|
- 接口名以-er结尾
|
|||
|
|
- 错误处理不能忽略
|
|||
|
|
- 使用context.Context进行超时控制
|
|||
|
|
|
|||
|
|
### GORM模型规范
|
|||
|
|
```go
|
|||
|
|
// 模型定义示例
|
|||
|
|
type User struct {
|
|||
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|||
|
|
OpenID string `gorm:"uniqueIndex;size:100;not null" json:"openid"`
|
|||
|
|
UnionID string `gorm:"size:100" json:"unionid"`
|
|||
|
|
Nickname string `gorm:"size:50" json:"nickname"`
|
|||
|
|
Avatar string `gorm:"size:255" json:"avatar"`
|
|||
|
|
Gender uint8 `gorm:"default:0" json:"gender"`
|
|||
|
|
Phone string `gorm:"size:20;index" json:"phone"`
|
|||
|
|
Email string `gorm:"size:100" json:"email"`
|
|||
|
|
Birthday *time.Time `json:"birthday"`
|
|||
|
|
Points uint `gorm:"default:0" json:"points"`
|
|||
|
|
Level uint8 `gorm:"default:1" json:"level"`
|
|||
|
|
Status uint8 `gorm:"default:1;index" json:"status"`
|
|||
|
|
CreatedAt time.Time `json:"created_at"`
|
|||
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|||
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### API规范
|
|||
|
|
- RESTful API设计
|
|||
|
|
- 统一的响应格式
|
|||
|
|
```go
|
|||
|
|
type Response struct {
|
|||
|
|
Code int `json:"code"`
|
|||
|
|
Message string `json:"message"`
|
|||
|
|
Data interface{} `json:"data,omitempty"`
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
- 错误码标准化
|
|||
|
|
- 接口版本控制 (v1, v2)
|
|||
|
|
- 使用Gin中间件进行认证和日志
|
|||
|
|
|
|||
|
|
### 数据库规范
|
|||
|
|
- 表名使用下划线命名
|
|||
|
|
- 字段名使用下划线命名
|
|||
|
|
- 必须有created_at、updated_at和deleted_at字段
|
|||
|
|
- 使用GORM的软删除功能
|
|||
|
|
- 主键使用BIGINT UNSIGNED
|
|||
|
|
- 字符集使用utf8mb4
|
|||
|
|
- 合理添加索引提高查询性能
|
|||
|
|
|
|||
|
|
### 项目结构规范
|
|||
|
|
- cmd/: 应用程序入口
|
|||
|
|
- internal/: 内部应用代码
|
|||
|
|
- pkg/: 可复用的包
|
|||
|
|
- configs/: 配置文件
|
|||
|
|
- migrations/: 数据库迁移文件
|
|||
|
|
|
|||
|
|
## 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
dianshang/
|
|||
|
|
├── miniprogram/ # 小程序前端
|
|||
|
|
│ ├── pages/ # 页面文件
|
|||
|
|
│ ├── components/ # 组件文件
|
|||
|
|
│ ├── utils/ # 工具函数
|
|||
|
|
│ ├── api/ # API接口
|
|||
|
|
│ └── app.js # 小程序入口
|
|||
|
|
├── server/ # Go后端服务
|
|||
|
|
│ ├── cmd/ # 应用程序入口
|
|||
|
|
│ │ └── main.go # 主程序入口
|
|||
|
|
│ ├── internal/ # 内部应用代码
|
|||
|
|
│ │ ├── handler/ # HTTP处理器(控制器)
|
|||
|
|
│ │ ├── service/ # 业务逻辑层
|
|||
|
|
│ │ ├── repository/ # 数据访问层
|
|||
|
|
│ │ ├── model/ # 数据模型(GORM)
|
|||
|
|
│ │ ├── middleware/ # 中间件
|
|||
|
|
│ │ ├── config/ # 配置管理
|
|||
|
|
│ │ └── router/ # 路由配置
|
|||
|
|
│ ├── pkg/ # 可复用的包
|
|||
|
|
│ │ ├── utils/ # 工具函数
|
|||
|
|
│ │ ├── logger/ # 日志包
|
|||
|
|
│ │ ├── jwt/ # JWT认证
|
|||
|
|
│ │ └── response/ # 统一响应格式
|
|||
|
|
│ ├── configs/ # 配置文件
|
|||
|
|
│ │ ├── config.yaml # 主配置文件
|
|||
|
|
│ │ └── database.yaml # 数据库配置
|
|||
|
|
│ ├── migrations/ # 数据库迁移文件
|
|||
|
|
│ ├── scripts/ # 脚本文件
|
|||
|
|
│ ├── go.mod # Go模块文件
|
|||
|
|
│ ├── go.sum # 依赖校验文件
|
|||
|
|
│ └── Dockerfile # Docker构建文件
|
|||
|
|
├── docs/ # 项目文档
|
|||
|
|
│ ├── api/ # API文档
|
|||
|
|
│ └── database/ # 数据库文档
|
|||
|
|
└── README.md # 项目说明
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 部署说明
|
|||
|
|
|
|||
|
|
### 环境要求
|
|||
|
|
- Go 1.19+
|
|||
|
|
- MySQL 8.0+
|
|||
|
|
- Redis 6.0+
|
|||
|
|
- Nginx
|
|||
|
|
|
|||
|
|
### 部署步骤
|
|||
|
|
|
|||
|
|
1. **克隆项目**
|
|||
|
|
```bash
|
|||
|
|
git clone <repository-url>
|
|||
|
|
cd dianshang
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **安装Go依赖**
|
|||
|
|
```bash
|
|||
|
|
cd server
|
|||
|
|
go mod download
|
|||
|
|
go mod tidy
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **配置环境**
|
|||
|
|
```bash
|
|||
|
|
cp configs/config.yaml.example configs/config.yaml
|
|||
|
|
# 编辑配置文件,配置数据库连接等信息
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **数据库初始化**
|
|||
|
|
```bash
|
|||
|
|
# 运行数据库迁移
|
|||
|
|
go run cmd/main.go migrate
|
|||
|
|
|
|||
|
|
# 或使用migrate工具
|
|||
|
|
migrate -path migrations -database "mysql://user:password@tcp(localhost:3306)/dbname" up
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
5. **编译和启动服务**
|
|||
|
|
```bash
|
|||
|
|
# 开发环境
|
|||
|
|
go run cmd/main.go
|
|||
|
|
|
|||
|
|
# 生产环境编译
|
|||
|
|
go build -o bin/dianshang cmd/main.go
|
|||
|
|
./bin/dianshang
|
|||
|
|
|
|||
|
|
# 或使用Air进行热重载开发
|
|||
|
|
air
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
6. **Docker部署**
|
|||
|
|
```bash
|
|||
|
|
# 构建镜像
|
|||
|
|
docker build -t dianshang-server .
|
|||
|
|
|
|||
|
|
# 运行容器
|
|||
|
|
docker run -d \
|
|||
|
|
--name dianshang-server \
|
|||
|
|
-p 8080:8080 \
|
|||
|
|
-v $(pwd)/configs:/app/configs \
|
|||
|
|
dianshang-server
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
7. **配置Nginx**
|
|||
|
|
```nginx
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name your-domain.com;
|
|||
|
|
|
|||
|
|
location /api {
|
|||
|
|
proxy_pass http://localhost:8080;
|
|||
|
|
proxy_set_header Host $host;
|
|||
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|||
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|||
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
root /path/to/miniprogram/dist;
|
|||
|
|
try_files $uri $uri/ /index.html;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 生产环境配置示例
|
|||
|
|
|
|||
|
|
**configs/config.yaml**
|
|||
|
|
```yaml
|
|||
|
|
server:
|
|||
|
|
port: 8080
|
|||
|
|
mode: release
|
|||
|
|
|
|||
|
|
database:
|
|||
|
|
driver: mysql
|
|||
|
|
host: localhost
|
|||
|
|
port: 3306
|
|||
|
|
username: root
|
|||
|
|
password: your_password
|
|||
|
|
dbname: dianshang
|
|||
|
|
charset: utf8mb4
|
|||
|
|
parseTime: true
|
|||
|
|
loc: Local
|
|||
|
|
|
|||
|
|
redis:
|
|||
|
|
host: localhost
|
|||
|
|
port: 6379
|
|||
|
|
password: ""
|
|||
|
|
db: 0
|
|||
|
|
|
|||
|
|
jwt:
|
|||
|
|
secret: your_jwt_secret
|
|||
|
|
expire: 7200
|
|||
|
|
|
|||
|
|
log:
|
|||
|
|
level: info
|
|||
|
|
filename: logs/app.log
|
|||
|
|
maxSize: 100
|
|||
|
|
maxAge: 30
|
|||
|
|
maxBackups: 5
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 配置文件
|
|||
|
|
- 数据库配置
|
|||
|
|
- 微信小程序配置
|
|||
|
|
- 支付配置
|
|||
|
|
- 第三方服务配置
|
|||
|
|
|
|||
|
|
## 联系方式
|
|||
|
|
|
|||
|
|
- 项目负责人: [姓名]
|
|||
|
|
- 邮箱: [邮箱地址]
|
|||
|
|
- 技术支持: [联系方式]
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*本文档会根据项目进展持续更新*
|