重构动物模型和路由系统,优化查询逻辑并新增商户和促销活动功能
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
## 1. 项目概述
|
||||
|
||||
### 1.1 项目简介
|
||||
解班客后端服务是一个基于Node.js + TypeScript + Express的微服务架构系统,为小程序端、管理后台和官网提供API服务支持。
|
||||
结伴客后端服务是一个基于Node.js + TypeScript + Express的微服务架构系统,为小程序端、管理后台和官网提供API服务支持。
|
||||
|
||||
### 1.2 技术栈
|
||||
- **运行环境**:Node.js 18.x
|
||||
@@ -842,7 +842,7 @@ const logger = winston.createLogger({
|
||||
|
||||
## 8. 总结
|
||||
|
||||
本开发文档详细规划了解班客后端系统的开发计划,包括:
|
||||
本开发文档详细规划了结伴客后端系统的开发计划,包括:
|
||||
|
||||
### 8.1 开发计划
|
||||
- **总工期**:65个工作日
|
||||
|
||||
10
docs/安全文档.md
10
docs/安全文档.md
@@ -1,4 +1,4 @@
|
||||
# 解班客项目安全文档
|
||||
# 结伴客项目安全文档
|
||||
|
||||
## 1. 安全概述
|
||||
|
||||
@@ -309,8 +309,8 @@ const mfaService = {
|
||||
// 生成TOTP密钥
|
||||
generateSecret: (userId) => {
|
||||
const secret = speakeasy.generateSecret({
|
||||
name: `解班客 (${userId})`,
|
||||
issuer: '解班客',
|
||||
name: `结伴客 (${userId})`,
|
||||
issuer: '结伴客',
|
||||
length: 32
|
||||
});
|
||||
|
||||
@@ -1958,7 +1958,7 @@ main "$@"
|
||||
|
||||
### 10.1 安全架构总结
|
||||
|
||||
解班客项目的安全架构采用了多层防护策略,包括:
|
||||
结伴客项目的安全架构采用了多层防护策略,包括:
|
||||
|
||||
- **网络安全层**:WAF、防火墙、DDoS防护
|
||||
- **应用安全层**:身份认证、权限控制、输入验证
|
||||
@@ -1993,4 +1993,4 @@ main "$@"
|
||||
- **《个人信息保护法》**:个人信息处理规范
|
||||
- **等保2.0**:信息系统安全等级保护
|
||||
|
||||
通过实施本安全文档中的各项措施,可以有效保护解班客项目的安全,确保用户数据和业务系统的安全稳定运行。
|
||||
通过实施本安全文档中的各项措施,可以有效保护结伴客项目的安全,确保用户数据和业务系统的安全稳定运行。
|
||||
@@ -1,9 +1,9 @@
|
||||
# 解班客官网需求文档
|
||||
# 结伴客官网需求文档
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
### 1.1 官网定位
|
||||
解班客官网作为品牌展示和商家入驻的主要平台,承担着品牌宣传、用户引流、商家服务、信息展示等重要职能。
|
||||
结伴客官网作为品牌展示和商家入驻的主要平台,承担着品牌宣传、用户引流、商家服务、信息展示等重要职能。
|
||||
|
||||
### 1.2 目标用户
|
||||
- **潜在用户**:了解平台服务,下载小程序
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
### 2.1 首页
|
||||
#### 2.1.1 品牌展示区
|
||||
- **品牌Logo和Slogan**:突出显示解班客品牌标识
|
||||
- **品牌Logo和Slogan**:突出显示结伴客品牌标识
|
||||
- **核心价值主张**:简洁明了地传达平台价值
|
||||
- **视觉冲击力**:使用高质量的背景图片或视频
|
||||
- **行动召唤按钮**:引导用户下载小程序
|
||||
|
||||
@@ -161,11 +161,11 @@ X-Version: 1.0.0
|
||||
"openid": "wx_openid_123",
|
||||
"unionid": "wx_unionid_456",
|
||||
"nickname": "微信用户",
|
||||
"avatar_url": "https://wx.qlogo.cn/avatar.jpg",
|
||||
"gender": 1,
|
||||
"city": "北京",
|
||||
"province": "北京",
|
||||
"country": "中国",
|
||||
"real_name": "",
|
||||
"avatar": "https://wx.qlogo.cn/avatar.jpg",
|
||||
"user_type": "regular",
|
||||
"balance": 0.00,
|
||||
"status": "active",
|
||||
"is_new_user": false,
|
||||
"profile_completed": true
|
||||
}
|
||||
@@ -216,18 +216,12 @@ X-Version: 1.0.0
|
||||
"id": 1,
|
||||
"uuid": "user_123456",
|
||||
"nickname": "旅行达人",
|
||||
"real_name": "张三",
|
||||
"avatar_url": "https://example.com/avatar.jpg",
|
||||
"gender": 1,
|
||||
"birthday": "1990-01-01",
|
||||
"location": "北京市",
|
||||
"bio": "热爱旅行和小动物",
|
||||
"phone": "13800138000",
|
||||
"email": "user@example.com",
|
||||
"user_type": "normal",
|
||||
"balance": 1500.00,
|
||||
"status": 1,
|
||||
"profile_completed": true,
|
||||
"real_name_verified": true,
|
||||
"phone_verified": true,
|
||||
"email_verified": false,
|
||||
"created_at": "2024-01-01T10:00:00Z",
|
||||
"statistics": {
|
||||
"travel_count": 5,
|
||||
@@ -269,7 +263,7 @@ X-Version: 1.0.0
|
||||
"data": {
|
||||
"id": 1,
|
||||
"nickname": "新昵称",
|
||||
"avatar_url": "https://example.com/new_avatar.jpg",
|
||||
"avatar": "https://example.com/new_avatar.jpg",
|
||||
"updated_at": "2024-01-15T10:30:00Z"
|
||||
}
|
||||
}
|
||||
@@ -318,18 +312,19 @@ X-Version: 1.0.0
|
||||
"duration_days": 5,
|
||||
"max_participants": 8,
|
||||
"current_participants": 3,
|
||||
"budget_min": 2000.00,
|
||||
"budget_max": 3000.00,
|
||||
"price_per_person": 2500.00,
|
||||
"includes": "住宿、早餐、门票、导游",
|
||||
"excludes": "午餐、晚餐、个人消费",
|
||||
"travel_type": "cultural",
|
||||
"status": 1,
|
||||
"is_featured": 1,
|
||||
"status": "recruiting",
|
||||
"is_featured": true,
|
||||
"view_count": 156,
|
||||
"like_count": 23,
|
||||
"comment_count": 8,
|
||||
"creator": {
|
||||
"id": 1,
|
||||
"nickname": "旅行达人",
|
||||
"avatar_url": "https://example.com/avatar.jpg"
|
||||
"avatar": "https://example.com/avatar.jpg"
|
||||
},
|
||||
"cover_image": "https://example.com/cover.jpg",
|
||||
"images": [
|
||||
@@ -383,28 +378,20 @@ X-Version: 1.0.0
|
||||
"duration_days": 5,
|
||||
"max_participants": 8,
|
||||
"current_participants": 3,
|
||||
"min_age": 18,
|
||||
"max_age": 60,
|
||||
"gender_limit": 0,
|
||||
"budget_min": 2000.00,
|
||||
"budget_max": 3000.00,
|
||||
"price_per_person": 2500.00,
|
||||
"includes": "住宿、早餐、门票、导游",
|
||||
"excludes": "午餐、晚餐、个人消费",
|
||||
"travel_type": "cultural",
|
||||
"transportation": "高铁+包车",
|
||||
"accommodation": "客栈",
|
||||
"itinerary": [
|
||||
{
|
||||
"day": 1,
|
||||
"title": "抵达大理",
|
||||
"activities": ["接机", "入住客栈", "古城夜游"],
|
||||
"meals": ["晚餐"],
|
||||
"accommodation": "大理古城客栈"
|
||||
"activities": ["接机", "入住客栈", "古城夜游"]
|
||||
},
|
||||
{
|
||||
"day": 2,
|
||||
"title": "大理古城游览",
|
||||
"activities": ["洱海骑行", "三塔寺参观", "古城购物"],
|
||||
"meals": ["早餐", "午餐", "晚餐"],
|
||||
"accommodation": "大理古城客栈"
|
||||
"activities": ["洱海骑行", "三塔寺参观", "古城购物"]
|
||||
}
|
||||
],
|
||||
"requirements": "身体健康,有一定体力,热爱文化旅行",
|
||||
@@ -419,8 +406,8 @@ X-Version: 1.0.0
|
||||
"https://example.com/image2.jpg"
|
||||
],
|
||||
"tags": ["文化", "古城", "摄影"],
|
||||
"status": 1,
|
||||
"is_featured": 1,
|
||||
"status": "recruiting",
|
||||
"is_featured": true,
|
||||
"view_count": 156,
|
||||
"like_count": 23,
|
||||
"comment_count": 8,
|
||||
@@ -428,7 +415,7 @@ X-Version: 1.0.0
|
||||
"creator": {
|
||||
"id": 1,
|
||||
"nickname": "旅行达人",
|
||||
"avatar_url": "https://example.com/avatar.jpg",
|
||||
"avatar": "https://example.com/avatar.jpg",
|
||||
"travel_count": 15,
|
||||
"rating": 4.8,
|
||||
"verified": true
|
||||
@@ -439,11 +426,11 @@ X-Version: 1.0.0
|
||||
"user": {
|
||||
"id": 2,
|
||||
"nickname": "小明",
|
||||
"avatar_url": "https://example.com/avatar2.jpg",
|
||||
"avatar": "https://example.com/avatar2.jpg",
|
||||
"age": 28,
|
||||
"gender": 1
|
||||
},
|
||||
"status": 1,
|
||||
"status": "confirmed",
|
||||
"applied_at": "2024-01-10T15:30:00Z"
|
||||
}
|
||||
],
|
||||
@@ -468,35 +455,21 @@ X-Version: 1.0.0
|
||||
"title": "西藏拉萨朝圣之旅",
|
||||
"description": "深度体验西藏文化,朝圣布达拉宫...",
|
||||
"destination": "西藏拉萨",
|
||||
"destination_detail": {
|
||||
"province": "西藏自治区",
|
||||
"city": "拉萨市",
|
||||
"address": "布达拉宫广场",
|
||||
"latitude": 29.6544,
|
||||
"longitude": 91.1175
|
||||
},
|
||||
"start_date": "2024-04-01",
|
||||
"end_date": "2024-04-07",
|
||||
"max_participants": 6,
|
||||
"min_age": 20,
|
||||
"max_age": 50,
|
||||
"gender_limit": 0,
|
||||
"budget_min": 5000.00,
|
||||
"budget_max": 8000.00,
|
||||
"price_per_person": 6500.00,
|
||||
"includes": "住宿、早餐、景点门票",
|
||||
"excludes": "往返机票、午晚餐",
|
||||
"travel_type": "cultural",
|
||||
"transportation": "飞机+包车",
|
||||
"accommodation": "酒店",
|
||||
"itinerary": [
|
||||
{
|
||||
"day": 1,
|
||||
"title": "抵达拉萨",
|
||||
"activities": ["接机", "入住酒店", "适应高原"],
|
||||
"meals": ["晚餐"]
|
||||
"activities": ["接机", "入住酒店", "适应高原"]
|
||||
}
|
||||
],
|
||||
"requirements": "身体健康,无高原反应病史",
|
||||
"included_services": ["住宿", "早餐", "景点门票"],
|
||||
"excluded_services": ["往返机票", "午晚餐"],
|
||||
"contact_info": {
|
||||
"wechat": "tibet_lover",
|
||||
"phone": "13900139000"
|
||||
@@ -626,13 +599,13 @@ X-Version: 1.0.0
|
||||
| size | integer | 否 | 每页数量,默认10 |
|
||||
| sort | string | 否 | 排序,默认created_at:desc |
|
||||
| keyword | string | 否 | 搜索关键词(动物名称) |
|
||||
| species | string | 否 | 物种:cat,dog,rabbit,other |
|
||||
| type | string | 否 | 动物类型:cat,dog,rabbit,other |
|
||||
| breed | string | 否 | 品种 |
|
||||
| gender | integer | 否 | 性别:1-雄性,2-雌性 |
|
||||
| gender | string | 否 | 性别:male,female |
|
||||
| age_min | integer | 否 | 年龄下限(月) |
|
||||
| age_max | integer | 否 | 年龄上限(月) |
|
||||
| location | string | 否 | 所在地 |
|
||||
| status | integer | 否 | 状态:1-可认领,2-已认领 |
|
||||
| status | string | 否 | 状态:available,claimed,unavailable |
|
||||
| is_featured | integer | 否 | 是否精选:1-是 |
|
||||
|
||||
#### 响应示例
|
||||
@@ -646,35 +619,34 @@ X-Version: 1.0.0
|
||||
"id": 1,
|
||||
"uuid": "animal_123456",
|
||||
"name": "小花",
|
||||
"species": "cat",
|
||||
"type": "猫",
|
||||
"breed": "英国短毛猫",
|
||||
"gender": 2,
|
||||
"gender": "female",
|
||||
"age": 24,
|
||||
"weight": 4.5,
|
||||
"color": "银渐层",
|
||||
"description": "性格温顺,喜欢晒太阳",
|
||||
"personality": "温顺、亲人、活泼",
|
||||
"health_status": "健康",
|
||||
"price": 500.00,
|
||||
"daily_cost": 15.00,
|
||||
"location": "北京市朝阳区",
|
||||
"adoption_fee": 500.00,
|
||||
"monthly_cost": 200.00,
|
||||
"status": 1,
|
||||
"is_featured": 1,
|
||||
"view_count": 89,
|
||||
"like_count": 15,
|
||||
"adoption_count": 0,
|
||||
"cover_image": "https://example.com/cat_cover.jpg",
|
||||
"status": "available",
|
||||
"health_status": "健康",
|
||||
"description": "性格温顺,喜欢晒太阳",
|
||||
"images": [
|
||||
"https://example.com/cat1.jpg",
|
||||
"https://example.com/cat2.jpg"
|
||||
],
|
||||
"farm": {
|
||||
"vaccination_records": [
|
||||
{
|
||||
"vaccine": "狂犬疫苗",
|
||||
"date": "2024-01-01",
|
||||
"next_date": "2025-01-01"
|
||||
}
|
||||
],
|
||||
"farmer": {
|
||||
"id": 1,
|
||||
"name": "爱心动物农场",
|
||||
"location": "北京市朝阳区",
|
||||
"rating": 4.8
|
||||
"location": "北京市朝阳区"
|
||||
},
|
||||
"tags": ["温顺", "亲人", "已绝育"],
|
||||
"view_count": 89,
|
||||
"like_count": 15,
|
||||
"created_at": "2024-01-10T10:00:00Z"
|
||||
}
|
||||
],
|
||||
@@ -704,78 +676,35 @@ X-Version: 1.0.0
|
||||
"id": 1,
|
||||
"uuid": "animal_123456",
|
||||
"name": "小花",
|
||||
"species": "cat",
|
||||
"type": "猫",
|
||||
"breed": "英国短毛猫",
|
||||
"gender": 2,
|
||||
"gender": "female",
|
||||
"age": 24,
|
||||
"weight": 4.5,
|
||||
"color": "银渐层",
|
||||
"description": "小花是一只非常温顺的英国短毛猫,喜欢晒太阳和玩毛线球...",
|
||||
"personality": "温顺、亲人、活泼",
|
||||
"health_status": "健康",
|
||||
"vaccination_status": {
|
||||
"rabies": {
|
||||
"vaccinated": true,
|
||||
"date": "2023-12-01",
|
||||
"next_due": "2024-12-01"
|
||||
},
|
||||
"feline_distemper": {
|
||||
"vaccinated": true,
|
||||
"date": "2023-12-01",
|
||||
"next_due": "2024-12-01"
|
||||
}
|
||||
},
|
||||
"medical_history": "2023年11月进行了绝育手术,恢复良好",
|
||||
"price": 500.00,
|
||||
"daily_cost": 15.00,
|
||||
"location": "北京市朝阳区",
|
||||
"adoption_fee": 500.00,
|
||||
"monthly_cost": 200.00,
|
||||
"status": 1,
|
||||
"is_featured": 1,
|
||||
"view_count": 89,
|
||||
"like_count": 15,
|
||||
"adoption_count": 0,
|
||||
"status": "available",
|
||||
"health_status": "健康",
|
||||
"description": "小花是一只非常温顺的英国短毛猫,喜欢晒太阳和玩毛线球...",
|
||||
"images": [
|
||||
"https://example.com/cat1.jpg",
|
||||
"https://example.com/cat2.jpg"
|
||||
],
|
||||
"videos": [
|
||||
"https://example.com/cat_video1.mp4"
|
||||
"vaccination_records": [
|
||||
{
|
||||
"vaccine": "狂犬疫苗",
|
||||
"date": "2024-01-01",
|
||||
"next_date": "2025-01-01"
|
||||
}
|
||||
],
|
||||
"farm": {
|
||||
"farmer": {
|
||||
"id": 1,
|
||||
"name": "爱心动物农场",
|
||||
"location": "北京市朝阳区",
|
||||
"contact_phone": "13800138000",
|
||||
"description": "专业的动物救助机构",
|
||||
"rating": 4.8,
|
||||
"images": [
|
||||
"https://example.com/farm1.jpg"
|
||||
]
|
||||
"contact_phone": "13800138000"
|
||||
},
|
||||
"caretaker": {
|
||||
"id": 1,
|
||||
"name": "张三",
|
||||
"avatar_url": "https://example.com/caretaker.jpg",
|
||||
"experience": "5年动物护理经验",
|
||||
"introduction": "热爱动物,专业护理"
|
||||
},
|
||||
"adoption_types": [
|
||||
{
|
||||
"type": 1,
|
||||
"name": "长期认领",
|
||||
"description": "12个月以上的长期认领",
|
||||
"min_duration": 12,
|
||||
"monthly_fee": 200.00
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"name": "短期认领",
|
||||
"description": "1-6个月的短期认领",
|
||||
"min_duration": 1,
|
||||
"monthly_fee": 250.00
|
||||
}
|
||||
],
|
||||
"tags": ["温顺", "亲人", "已绝育"],
|
||||
"view_count": 89,
|
||||
"like_count": 15,
|
||||
"is_liked": false,
|
||||
"can_adopt": true,
|
||||
"created_at": "2024-01-10T10:00:00Z"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# 解班客小程序需求文档
|
||||
# 结伴客小程序需求文档
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
### 1.1 产品定位
|
||||
解班客微信小程序是面向C端用户的核心产品,专注于提供结伴旅行和动物认领服务。通过微信生态的便利性,为用户提供便捷的社交旅行体验和创新的动物认领服务。
|
||||
结伴客微信小程序是面向C端用户的核心产品,专注于提供结伴旅行和动物认领服务。通过微信生态的便利性,为用户提供便捷的社交旅行体验和创新的动物认领服务。
|
||||
|
||||
### 1.2 目标用户
|
||||
- **主要用户群体**:18-35岁的年轻用户
|
||||
|
||||
562
docs/数据库设计文档.md
562
docs/数据库设计文档.md
@@ -253,49 +253,392 @@ erDiagram
|
||||
```sql
|
||||
CREATE TABLE users (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
|
||||
openid VARCHAR(100) UNIQUE NOT NULL COMMENT '微信openid',
|
||||
unionid VARCHAR(100) COMMENT '微信unionid',
|
||||
nickname VARCHAR(50) NOT NULL COMMENT '用户昵称',
|
||||
avatar VARCHAR(255) COMMENT '头像URL',
|
||||
gender ENUM('male', 'female', 'unknown') DEFAULT 'unknown' COMMENT '性别',
|
||||
birthday DATE COMMENT '生日',
|
||||
phone VARCHAR(20) UNIQUE COMMENT '手机号码',
|
||||
email VARCHAR(100) UNIQUE COMMENT '邮箱地址',
|
||||
province VARCHAR(50) COMMENT '省份',
|
||||
city VARCHAR(50) COMMENT '城市',
|
||||
travel_count INT DEFAULT 0 COMMENT '旅行次数',
|
||||
animal_claim_count INT DEFAULT 0 COMMENT '认领动物数量',
|
||||
real_name VARCHAR(50) COMMENT '真实姓名',
|
||||
nickname VARCHAR(50) COMMENT '用户昵称',
|
||||
avatar_url VARCHAR(255) COMMENT '头像URL',
|
||||
user_type ENUM('regular','vip','premium') DEFAULT 'regular' COMMENT '用户类型',
|
||||
status ENUM('active','inactive','banned') DEFAULT 'active' COMMENT '用户状态',
|
||||
balance DECIMAL(10,2) DEFAULT 0.00 COMMENT '账户余额',
|
||||
points INT DEFAULT 0 COMMENT '积分',
|
||||
level ENUM('bronze', 'silver', 'gold', 'platinum') DEFAULT 'bronze' COMMENT '用户等级',
|
||||
status ENUM('active', 'inactive', 'banned') DEFAULT 'active' COMMENT '用户状态',
|
||||
level INT DEFAULT 1 COMMENT '用户等级',
|
||||
last_login_at TIMESTAMP COMMENT '最后登录时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
deleted_at TIMESTAMP NULL COMMENT '删除时间',
|
||||
|
||||
INDEX idx_openid (openid),
|
||||
INDEX idx_phone (phone),
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_user_type (user_type),
|
||||
INDEX idx_level (level),
|
||||
INDEX idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户基础信息表';
|
||||
```
|
||||
|
||||
#### 1.2 用户兴趣表 (user_interests)
|
||||
#### 1.2 管理员表 (admins)
|
||||
```sql
|
||||
CREATE TABLE user_interests (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '兴趣ID',
|
||||
CREATE TABLE admins (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '管理员ID',
|
||||
username VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名',
|
||||
password VARCHAR(255) NOT NULL COMMENT '密码',
|
||||
email VARCHAR(100) UNIQUE COMMENT '邮箱',
|
||||
nickname VARCHAR(50) COMMENT '昵称',
|
||||
avatar VARCHAR(255) COMMENT '头像',
|
||||
role ENUM('super_admin','admin','editor') DEFAULT 'admin' COMMENT '角色',
|
||||
status ENUM('active','inactive') DEFAULT 'active' COMMENT '状态',
|
||||
last_login TIMESTAMP COMMENT '最后登录时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
INDEX idx_username (username),
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_role (role),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员表';
|
||||
```
|
||||
|
||||
### 2. 商家管理模块
|
||||
|
||||
#### 2.1 商家表 (merchants)
|
||||
```sql
|
||||
CREATE TABLE merchants (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '商家ID',
|
||||
user_id INT NOT NULL COMMENT '关联用户ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '商家名称',
|
||||
description TEXT COMMENT '商家描述',
|
||||
address VARCHAR(255) COMMENT '地址',
|
||||
latitude DECIMAL(10,8) COMMENT '纬度',
|
||||
longitude DECIMAL(11,8) COMMENT '经度',
|
||||
contact_phone VARCHAR(20) COMMENT '联系电话',
|
||||
business_hours VARCHAR(100) COMMENT '营业时间',
|
||||
images JSON COMMENT '商家图片',
|
||||
rating DECIMAL(3,2) DEFAULT 0.00 COMMENT '评分',
|
||||
review_count INT DEFAULT 0 COMMENT '评价数量',
|
||||
status ENUM('active','inactive','pending') DEFAULT 'pending' COMMENT '状态',
|
||||
verified_at TIMESTAMP NULL COMMENT '认证时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_rating (rating),
|
||||
INDEX idx_location (latitude, longitude)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商家信息表';
|
||||
```
|
||||
|
||||
### 3. 动物认领模块
|
||||
|
||||
#### 3.1 动物表 (animals)
|
||||
```sql
|
||||
CREATE TABLE animals (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '动物ID',
|
||||
name VARCHAR(50) NOT NULL COMMENT '动物名称',
|
||||
type VARCHAR(30) NOT NULL COMMENT '动物类型',
|
||||
breed VARCHAR(50) COMMENT '品种',
|
||||
age INT COMMENT '年龄',
|
||||
gender ENUM('male','female','unknown') DEFAULT 'unknown' COMMENT '性别',
|
||||
description TEXT COMMENT '描述',
|
||||
images JSON COMMENT '图片',
|
||||
price DECIMAL(10,2) NOT NULL COMMENT '认领价格',
|
||||
daily_cost DECIMAL(8,2) COMMENT '日常费用',
|
||||
location VARCHAR(100) COMMENT '所在地',
|
||||
farmer_id INT COMMENT '农场主ID',
|
||||
status ENUM('available','claimed','unavailable') DEFAULT 'available' COMMENT '状态',
|
||||
health_status VARCHAR(50) COMMENT '健康状态',
|
||||
vaccination_records JSON COMMENT '疫苗记录',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
deleted_at TIMESTAMP NULL COMMENT '删除时间',
|
||||
|
||||
FOREIGN KEY (farmer_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_farmer_id (farmer_id),
|
||||
INDEX idx_type (type),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_price (price)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='动物信息表';
|
||||
```
|
||||
|
||||
#### 3.2 动物认领表 (animal_claims)
|
||||
```sql
|
||||
CREATE TABLE animal_claims (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '认领ID',
|
||||
animal_id INT NOT NULL COMMENT '动物ID',
|
||||
user_id INT NOT NULL COMMENT '用户ID',
|
||||
interest_name VARCHAR(50) NOT NULL COMMENT '兴趣名称',
|
||||
interest_type ENUM('travel', 'food', 'sports', 'culture', 'nature') COMMENT '兴趣类型',
|
||||
contact_info VARCHAR(100) COMMENT '联系信息',
|
||||
status ENUM('pending','approved','rejected','cancelled') DEFAULT 'pending' COMMENT '状态',
|
||||
reviewed_by INT COMMENT '审核人ID',
|
||||
reviewed_at TIMESTAMP NULL COMMENT '审核时间',
|
||||
review_note TEXT COMMENT '审核备注',
|
||||
start_date DATE COMMENT '开始日期',
|
||||
end_date DATE COMMENT '结束日期',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
deleted_at TIMESTAMP NULL COMMENT '删除时间',
|
||||
|
||||
FOREIGN KEY (animal_id) REFERENCES animals(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_animal_id (animal_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='动物认领表';
|
||||
```
|
||||
|
||||
### 4. 旅行计划模块
|
||||
|
||||
#### 4.1 旅行计划表 (travel_plans)
|
||||
```sql
|
||||
CREATE TABLE travel_plans (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '计划ID',
|
||||
title VARCHAR(100) NOT NULL COMMENT '计划标题',
|
||||
destination VARCHAR(100) NOT NULL COMMENT '目的地',
|
||||
description TEXT COMMENT '描述',
|
||||
start_date DATE NOT NULL COMMENT '开始日期',
|
||||
end_date DATE NOT NULL COMMENT '结束日期',
|
||||
max_participants INT DEFAULT 10 COMMENT '最大参与人数',
|
||||
current_participants INT DEFAULT 0 COMMENT '当前参与人数',
|
||||
price_per_person DECIMAL(10,2) NOT NULL COMMENT '每人价格',
|
||||
includes JSON COMMENT '包含项目',
|
||||
excludes JSON COMMENT '不包含项目',
|
||||
itinerary JSON COMMENT '行程安排',
|
||||
images JSON COMMENT '图片',
|
||||
requirements TEXT COMMENT '参与要求',
|
||||
created_by INT NOT NULL COMMENT '创建者ID',
|
||||
status ENUM('draft','published','cancelled','completed') DEFAULT 'draft' COMMENT '状态',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_created_by (created_by),
|
||||
INDEX idx_destination (destination),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_start_date (start_date)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='旅行计划表';
|
||||
```
|
||||
|
||||
#### 4.2 旅行报名表 (travel_registrations)
|
||||
```sql
|
||||
CREATE TABLE travel_registrations (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '报名ID',
|
||||
travel_plan_id INT NOT NULL COMMENT '旅行计划ID',
|
||||
user_id INT NOT NULL COMMENT '用户ID',
|
||||
participants INT DEFAULT 1 COMMENT '参与人数',
|
||||
message TEXT COMMENT '留言',
|
||||
emergency_contact VARCHAR(50) COMMENT '紧急联系人',
|
||||
emergency_phone VARCHAR(20) COMMENT '紧急联系电话',
|
||||
status ENUM('pending','approved','rejected','cancelled') DEFAULT 'pending' COMMENT '状态',
|
||||
reject_reason TEXT COMMENT '拒绝原因',
|
||||
applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间',
|
||||
responded_at TIMESTAMP NULL COMMENT '响应时间',
|
||||
|
||||
FOREIGN KEY (travel_plan_id) REFERENCES travel_plans(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_travel_plan_id (travel_plan_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='旅行报名表';
|
||||
```
|
||||
|
||||
### 5. 花卉产品模块
|
||||
|
||||
#### 5.1 花卉表 (flowers)
|
||||
```sql
|
||||
CREATE TABLE flowers (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '花卉ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '花卉名称',
|
||||
scientific_name VARCHAR(100) COMMENT '学名',
|
||||
category VARCHAR(50) COMMENT '分类',
|
||||
color VARCHAR(30) COMMENT '颜色',
|
||||
bloom_season VARCHAR(50) COMMENT '花期',
|
||||
care_level ENUM('easy','medium','hard') DEFAULT 'medium' COMMENT '养护难度',
|
||||
description TEXT COMMENT '描述',
|
||||
care_instructions TEXT COMMENT '养护说明',
|
||||
image VARCHAR(255) COMMENT '主图片',
|
||||
images JSON COMMENT '图片集',
|
||||
price DECIMAL(8,2) NOT NULL COMMENT '价格',
|
||||
stock_quantity INT DEFAULT 0 COMMENT '库存数量',
|
||||
farmer_id INT COMMENT '农场主ID',
|
||||
status ENUM('available','out_of_stock','discontinued') DEFAULT 'available' COMMENT '状态',
|
||||
seasonal_availability JSON COMMENT '季节性供应',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (farmer_id) REFERENCES users(id) ON DELETE SET NULL,
|
||||
INDEX idx_farmer_id (farmer_id),
|
||||
INDEX idx_category (category),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_price (price)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='花卉产品表';
|
||||
```
|
||||
|
||||
### 6. 订单管理模块
|
||||
|
||||
#### 6.1 订单表 (orders)
|
||||
```sql
|
||||
CREATE TABLE orders (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单ID',
|
||||
order_number VARCHAR(32) UNIQUE NOT NULL COMMENT '订单号',
|
||||
user_id INT NOT NULL COMMENT '用户ID',
|
||||
total_amount DECIMAL(15,2) NOT NULL COMMENT '订单总金额',
|
||||
status ENUM('pending','paid','shipped','delivered','cancelled','refunded') DEFAULT 'pending' COMMENT '订单状态',
|
||||
payment_status ENUM('unpaid','paid','refunded','partial_refund') DEFAULT 'unpaid' COMMENT '支付状态',
|
||||
payment_method VARCHAR(20) COMMENT '支付方式',
|
||||
payment_time TIMESTAMP NULL COMMENT '支付时间',
|
||||
shipping_address JSON COMMENT '收货地址',
|
||||
contact_info JSON COMMENT '联系信息',
|
||||
notes TEXT COMMENT '备注',
|
||||
ordered_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_order_number (order_number),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_payment_status (payment_status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
|
||||
```
|
||||
|
||||
#### 6.2 支付表 (payments)
|
||||
```sql
|
||||
CREATE TABLE payments (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '支付ID',
|
||||
order_id INT NOT NULL COMMENT '订单ID',
|
||||
user_id INT NOT NULL COMMENT '用户ID',
|
||||
amount DECIMAL(15,2) NOT NULL COMMENT '支付金额',
|
||||
payment_method ENUM('wechat','alipay','balance','points') NOT NULL COMMENT '支付方式',
|
||||
status ENUM('pending','success','failed','cancelled','refunded') DEFAULT 'pending' COMMENT '支付状态',
|
||||
transaction_id VARCHAR(100) COMMENT '交易流水号',
|
||||
paid_amount DECIMAL(15,2) COMMENT '实际支付金额',
|
||||
paid_at TIMESTAMP NULL COMMENT '支付时间',
|
||||
|
||||
FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_order_id (order_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_transaction_id (transaction_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付记录表';
|
||||
```
|
||||
|
||||
#### 6.3 退款表 (refunds)
|
||||
```sql
|
||||
CREATE TABLE refunds (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '退款ID',
|
||||
payment_id INT NOT NULL COMMENT '支付ID',
|
||||
user_id INT NOT NULL COMMENT '用户ID',
|
||||
refund_amount DECIMAL(15,2) NOT NULL COMMENT '退款金额',
|
||||
refund_reason VARCHAR(255) NOT NULL COMMENT '退款原因',
|
||||
status ENUM('pending','processing','completed','rejected') DEFAULT 'pending' COMMENT '退款状态',
|
||||
processed_by INT COMMENT '处理人ID',
|
||||
processed_at TIMESTAMP NULL COMMENT '处理时间',
|
||||
process_remark TEXT COMMENT '处理备注',
|
||||
refund_transaction_id VARCHAR(100) COMMENT '退款交易号',
|
||||
refunded_at TIMESTAMP NULL COMMENT '退款完成时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
deleted_at TIMESTAMP NULL COMMENT '删除时间',
|
||||
|
||||
FOREIGN KEY (payment_id) REFERENCES payments(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
INDEX idx_payment_id (payment_id),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='退款记录表';
|
||||
```
|
||||
|
||||
### 7. 系统辅助表
|
||||
|
||||
#### 7.1 邮箱验证表 (email_verifications)
|
||||
```sql
|
||||
CREATE TABLE email_verifications (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '验证ID',
|
||||
email VARCHAR(100) NOT NULL COMMENT '邮箱地址',
|
||||
code VARCHAR(10) NOT NULL COMMENT '验证码',
|
||||
type ENUM('register','reset_password','change_email') NOT NULL COMMENT '验证类型',
|
||||
expires_at TIMESTAMP NOT NULL COMMENT '过期时间',
|
||||
used_at TIMESTAMP NULL COMMENT '使用时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
|
||||
INDEX idx_email (email),
|
||||
INDEX idx_code (code),
|
||||
INDEX idx_expires_at (expires_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邮箱验证表';
|
||||
```
|
||||
|
||||
#### 7.2 密码重置表 (password_resets)
|
||||
```sql
|
||||
CREATE TABLE password_resets (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '重置ID',
|
||||
user_id INT NOT NULL COMMENT '用户ID',
|
||||
token VARCHAR(100) NOT NULL COMMENT '重置令牌',
|
||||
expires_at TIMESTAMP NOT NULL COMMENT '过期时间',
|
||||
used_at TIMESTAMP NULL COMMENT '使用时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
UNIQUE KEY uk_user_interest (user_id, interest_name),
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_interest_type (interest_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户兴趣表';
|
||||
INDEX idx_token (token),
|
||||
INDEX idx_expires_at (expires_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='密码重置表';
|
||||
```
|
||||
|
||||
#### 7.3 登录尝试表 (login_attempts)
|
||||
```sql
|
||||
CREATE TABLE login_attempts (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '尝试ID',
|
||||
identifier VARCHAR(100) NOT NULL COMMENT '标识符(用户名/邮箱/手机)',
|
||||
ip_address VARCHAR(45) NOT NULL COMMENT 'IP地址',
|
||||
user_agent TEXT COMMENT '用户代理',
|
||||
success TINYINT(1) DEFAULT 0 COMMENT '是否成功',
|
||||
failure_reason VARCHAR(100) COMMENT '失败原因',
|
||||
attempted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '尝试时间',
|
||||
|
||||
INDEX idx_identifier (identifier),
|
||||
INDEX idx_ip_address (ip_address),
|
||||
INDEX idx_attempted_at (attempted_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='登录尝试记录表';
|
||||
```
|
||||
|
||||
## 5. 表关系图
|
||||
|
||||
### 5.1 外键关系
|
||||
根据实际数据库结构,以下是表之间的外键关系:
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
users ||--o{ animal_claims : "user_id"
|
||||
users ||--o{ animals : "farmer_id"
|
||||
users ||--o{ flowers : "farmer_id"
|
||||
users ||--o{ merchants : "user_id"
|
||||
users ||--o{ orders : "user_id"
|
||||
users ||--o{ password_resets : "user_id"
|
||||
users ||--o{ payments : "user_id"
|
||||
users ||--o{ refunds : "user_id"
|
||||
users ||--o{ travel_plans : "created_by"
|
||||
users ||--o{ travel_registrations : "user_id"
|
||||
|
||||
animals ||--o{ animal_claims : "animal_id"
|
||||
orders ||--o{ payments : "order_id"
|
||||
payments ||--o{ refunds : "payment_id"
|
||||
travel_plans ||--o{ travel_registrations : "travel_plan_id"
|
||||
```
|
||||
|
||||
### 5.2 核心业务关系说明
|
||||
|
||||
1. **用户中心关系**:
|
||||
- 用户可以认领多个动物 (users → animal_claims)
|
||||
- 用户可以作为农场主管理动物和花卉 (users → animals/flowers)
|
||||
- 用户可以注册为商家 (users → merchants)
|
||||
- 用户可以下订单和支付 (users → orders → payments)
|
||||
|
||||
2. **旅行业务关系**:
|
||||
- 用户创建旅行计划 (users → travel_plans)
|
||||
- 其他用户报名参与旅行 (users → travel_registrations)
|
||||
- 旅行计划与报名记录关联 (travel_plans → travel_registrations)
|
||||
|
||||
3. **交易业务关系**:
|
||||
- 订单关联支付记录 (orders → payments)
|
||||
- 支付记录可以产生退款 (payments → refunds)
|
||||
- 所有交易都关联到用户 (users → orders/payments/refunds)
|
||||
|
||||
### 2. 商家管理模块
|
||||
|
||||
#### 2.1 商家表 (merchants)
|
||||
@@ -480,46 +823,137 @@ CREATE TABLE animal_updates (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='动物更新记录表';
|
||||
```
|
||||
|
||||
### 5. 商品订单模块
|
||||
## 6. 数据库索引优化
|
||||
|
||||
#### 5.1 商品表 (products)
|
||||
```sql
|
||||
CREATE TABLE products (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '商品ID',
|
||||
merchant_id INT NOT NULL COMMENT '商家ID',
|
||||
category_id INT COMMENT '分类ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '商品名称',
|
||||
description TEXT COMMENT '商品描述',
|
||||
price DECIMAL(10,2) NOT NULL COMMENT '商品价格',
|
||||
original_price DECIMAL(10,2) COMMENT '原价',
|
||||
stock INT DEFAULT 0 COMMENT '库存数量',
|
||||
min_order_quantity INT DEFAULT 1 COMMENT '最小起订量',
|
||||
max_order_quantity INT COMMENT '最大订购量',
|
||||
images JSON COMMENT '商品图片数组',
|
||||
specifications JSON COMMENT '商品规格',
|
||||
tags VARCHAR(255) COMMENT '商品标签',
|
||||
weight DECIMAL(8,3) COMMENT '商品重量(公斤)',
|
||||
dimensions VARCHAR(50) COMMENT '商品尺寸',
|
||||
shelf_life INT COMMENT '保质期(天)',
|
||||
storage_conditions TEXT COMMENT '储存条件',
|
||||
delivery_info TEXT COMMENT '配送信息',
|
||||
rating DECIMAL(3,2) DEFAULT 5.00 COMMENT '商品评分',
|
||||
review_count INT DEFAULT 0 COMMENT '评价数量',
|
||||
sales_count INT DEFAULT 0 COMMENT '销售数量',
|
||||
status ENUM('active', 'inactive', 'out_of_stock', 'discontinued') DEFAULT 'active' COMMENT '商品状态',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序权重',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
FOREIGN KEY (merchant_id) REFERENCES merchants(id) ON DELETE CASCADE,
|
||||
INDEX idx_merchant_id (merchant_id),
|
||||
INDEX idx_category_id (category_id),
|
||||
INDEX idx_price (price),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_rating (rating),
|
||||
INDEX idx_sales_count (sales_count)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品信息表';
|
||||
```
|
||||
### 6.1 主要索引策略
|
||||
|
||||
#### 用户表 (users) 索引
|
||||
- 主键索引:`PRIMARY KEY (id)`
|
||||
- 状态索引:`INDEX idx_status (status)` - 用于用户状态筛选
|
||||
- 用户类型索引:`INDEX idx_user_type (user_type)` - 用于用户类型查询
|
||||
- 等级索引:`INDEX idx_level (level)` - 用于用户等级排序
|
||||
- 创建时间索引:`INDEX idx_created_at (created_at)` - 用于时间范围查询
|
||||
|
||||
#### 管理员表 (admins) 索引
|
||||
- 主键索引:`PRIMARY KEY (id)`
|
||||
- 唯一索引:`UNIQUE KEY (username)`, `UNIQUE KEY (email)`
|
||||
- 角色索引:`INDEX idx_role (role)` - 用于权限管理
|
||||
- 状态索引:`INDEX idx_status (status)` - 用于状态筛选
|
||||
|
||||
#### 商家表 (merchants) 索引
|
||||
- 主键索引:`PRIMARY KEY (id)`
|
||||
- 外键索引:`INDEX idx_user_id (user_id)` - 关联用户查询
|
||||
- 状态索引:`INDEX idx_status (status)` - 商家状态筛选
|
||||
- 评分索引:`INDEX idx_rating (rating)` - 评分排序
|
||||
- 地理位置复合索引:`INDEX idx_location (latitude, longitude)` - 地理位置查询
|
||||
|
||||
#### 动物表 (animals) 索引
|
||||
- 主键索引:`PRIMARY KEY (id)`
|
||||
- 外键索引:`INDEX idx_farmer_id (farmer_id)` - 农场主查询
|
||||
- 类型索引:`INDEX idx_type (type)` - 动物类型筛选
|
||||
- 状态索引:`INDEX idx_status (status)` - 动物状态筛选
|
||||
- 价格索引:`INDEX idx_price (price)` - 价格排序
|
||||
|
||||
#### 旅行计划表 (travel_plans) 索引
|
||||
- 主键索引:`PRIMARY KEY (id)`
|
||||
- 外键索引:`INDEX idx_created_by (created_by)` - 创建者查询
|
||||
- 目的地索引:`INDEX idx_destination (destination)` - 目的地搜索
|
||||
- 状态索引:`INDEX idx_status (status)` - 计划状态筛选
|
||||
- 开始日期索引:`INDEX idx_start_date (start_date)` - 日期排序
|
||||
|
||||
#### 订单表 (orders) 索引
|
||||
- 主键索引:`PRIMARY KEY (id)`
|
||||
- 外键索引:`INDEX idx_user_id (user_id)` - 用户订单查询
|
||||
- 订单号唯一索引:`UNIQUE KEY (order_number)` - 订单号查询
|
||||
- 状态索引:`INDEX idx_status (status)` - 订单状态筛选
|
||||
- 支付状态索引:`INDEX idx_payment_status (payment_status)` - 支付状态筛选
|
||||
|
||||
### 6.2 查询优化建议
|
||||
|
||||
1. **分页查询优化**:
|
||||
- 使用 `LIMIT` 和 `OFFSET` 进行分页
|
||||
- 对于大数据量分页,建议使用游标分页
|
||||
|
||||
2. **复合索引使用**:
|
||||
- 按照查询频率和选择性创建复合索引
|
||||
- 遵循最左前缀原则
|
||||
|
||||
3. **避免全表扫描**:
|
||||
- 在 WHERE 条件中使用索引字段
|
||||
- 避免在索引字段上使用函数
|
||||
|
||||
## 7. 数据库安全策略
|
||||
|
||||
### 7.1 访问控制
|
||||
- 使用专用数据库用户,限制权限
|
||||
- 定期更换数据库密码
|
||||
- 启用SSL连接加密
|
||||
|
||||
### 7.2 数据加密
|
||||
- 敏感字段(如密码)使用哈希加密
|
||||
- 个人信息字段考虑加密存储
|
||||
- 传输过程使用HTTPS协议
|
||||
|
||||
### 7.3 备份策略
|
||||
- 每日自动备份数据库
|
||||
- 定期测试备份恢复流程
|
||||
- 异地备份保证数据安全
|
||||
|
||||
## 8. 性能监控与优化
|
||||
|
||||
### 8.1 监控指标
|
||||
- 查询响应时间
|
||||
- 数据库连接数
|
||||
- 慢查询日志分析
|
||||
- 索引使用率统计
|
||||
|
||||
### 8.2 优化策略
|
||||
- 定期分析慢查询并优化
|
||||
- 监控表大小,适时进行分区
|
||||
- 定期更新表统计信息
|
||||
- 合理设置数据库参数
|
||||
|
||||
## 9. 数据库维护
|
||||
|
||||
### 9.1 日常维护
|
||||
- 定期检查数据库状态
|
||||
- 清理过期的临时数据
|
||||
- 监控磁盘空间使用
|
||||
- 更新数据库统计信息
|
||||
|
||||
### 9.2 版本管理
|
||||
- 使用数据库迁移脚本管理结构变更
|
||||
- 记录每次结构变更的版本号
|
||||
- 保持开发、测试、生产环境一致
|
||||
|
||||
## 10. 总结
|
||||
|
||||
本数据库设计文档基于解班客项目的实际需求,涵盖了用户管理、商家管理、动物认领、旅行计划、花卉产品、订单支付等核心业务模块。设计遵循了数据库设计的最佳实践,包括:
|
||||
|
||||
1. **规范化设计**:避免数据冗余,保证数据一致性
|
||||
2. **性能优化**:合理设计索引,优化查询性能
|
||||
3. **扩展性**:预留扩展空间,支持业务发展
|
||||
4. **安全性**:实施访问控制和数据加密
|
||||
5. **可维护性**:清晰的表结构和完善的文档
|
||||
|
||||
### 10.1 当前数据库统计
|
||||
- **总表数**:14张表
|
||||
- **核心业务表**:8张(users, admins, merchants, animals, animal_claims, travel_plans, travel_registrations, flowers, orders, payments, refunds)
|
||||
- **辅助系统表**:3张(email_verifications, password_resets, login_attempts)
|
||||
- **外键关系**:13个外键约束
|
||||
|
||||
### 10.2 后续优化方向
|
||||
1. 根据业务发展需要,考虑添加缓存层
|
||||
2. 对于高频查询表,考虑读写分离
|
||||
3. 监控数据增长,适时进行分库分表
|
||||
4. 完善数据备份和灾难恢复方案
|
||||
|
||||
---
|
||||
|
||||
**文档版本**:v2.0
|
||||
**最后更新**:2024年1月
|
||||
**维护人员**:开发团队
|
||||
**审核状态**:已审核
|
||||
|
||||
#### 5.2 订单表 (orders)
|
||||
```sql
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# 解班客项目系统架构文档
|
||||
# 结伴客项目系统架构文档
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
### 1.1 项目简介
|
||||
解班客是一个综合性的社交旅行平台,融合了结伴旅行和动物认领两大核心功能。项目采用现代化的微服务架构,包含微信小程序、管理后台、官方网站和后端服务四个主要模块。
|
||||
结伴客是一个综合性的社交旅行平台,融合了结伴旅行和动物认领两大核心功能。项目采用现代化的微服务架构,包含微信小程序、管理后台、官方网站和后端服务四个主要模块。
|
||||
|
||||
### 1.2 业务架构
|
||||
```mermaid
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# 解班客项目需求文档
|
||||
# 结伴客项目需求文档
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
### 1.1 项目背景
|
||||
解班客是一个创新的社交旅行平台,专注于为用户提供结伴旅行服务,并融入了独特的动物认领功能。该项目旨在通过结合传统的结伴旅行功能与现代的动物认领体验,为用户创造独特的旅行记忆。
|
||||
结伴客是一个创新的社交旅行平台,专注于为用户提供结伴旅行服务,并融入了独特的动物认领功能。该项目旨在通过结合传统的结伴旅行功能与现代的动物认领体验,为用户创造独特的旅行记忆。
|
||||
|
||||
### 1.2 项目目标
|
||||
- 构建一个完整的社交旅行生态系统
|
||||
|
||||
20
docs/测试文档.md
20
docs/测试文档.md
@@ -1,9 +1,9 @@
|
||||
# 解班客项目测试文档
|
||||
# 结伴客项目测试文档
|
||||
|
||||
## 1. 测试概述
|
||||
|
||||
### 1.1 测试目标
|
||||
确保解班客项目各个模块的功能正确性、性能稳定性、安全可靠性,为产品上线提供质量保障。
|
||||
确保结伴客项目各个模块的功能正确性、性能稳定性、安全可靠性,为产品上线提供质量保障。
|
||||
|
||||
### 1.2 测试范围
|
||||
- **后端API服务**:接口功能、性能、安全测试
|
||||
@@ -183,7 +183,7 @@ describe('旅行结伴页面', () => {
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jmeterTestPlan version="1.2">
|
||||
<hashTree>
|
||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="解班客API压测">
|
||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="结伴客API压测">
|
||||
<elementProp name="TestPlan.arguments" elementType="Arguments" guiclass="ArgumentsPanel">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
@@ -304,7 +304,7 @@ describe('XSS防护测试', () => {
|
||||
### 6.1 测试报告模板
|
||||
|
||||
```markdown
|
||||
# 解班客项目测试报告
|
||||
# 结伴客项目测试报告
|
||||
|
||||
## 测试概要
|
||||
- **测试版本**: v1.0.0
|
||||
@@ -969,8 +969,8 @@ test.describe('动物认领流程', () => {
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jmeterTestPlan version="1.2">
|
||||
<hashTree>
|
||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="解班客性能测试">
|
||||
<stringProp name="TestPlan.comments">解班客系统性能测试计划</stringProp>
|
||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="结伴客性能测试">
|
||||
<stringProp name="TestPlan.comments">结伴客系统性能测试计划</stringProp>
|
||||
<boolProp name="TestPlan.functional_mode">false</boolProp>
|
||||
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
|
||||
<elementProp name="TestPlan.arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量">
|
||||
@@ -1129,7 +1129,7 @@ function htmlReport(data) {
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>解班客性能测试报告</h1>
|
||||
<h1>结伴客性能测试报告</h1>
|
||||
<h2>测试概要</h2>
|
||||
<div class="metric">
|
||||
<strong>总请求数:</strong> ${data.metrics.http_reqs.count}
|
||||
@@ -1311,7 +1311,7 @@ function generateHtmlReport(coverage) {
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>解班客测试覆盖率报告</h1>
|
||||
<h1>结伴客测试覆盖率报告</h1>
|
||||
<div class="summary">
|
||||
<h2>总体覆盖率</h2>
|
||||
<div class="metric ${getColorClass(total.lines.pct)}">
|
||||
@@ -1542,7 +1542,7 @@ jobs:
|
||||
|
||||
## 📚 总结
|
||||
|
||||
本测试文档全面覆盖了解班客项目的测试策略和实施方案,包括:
|
||||
本测试文档全面覆盖了结伴客项目的测试策略和实施方案,包括:
|
||||
|
||||
### 测试体系特点
|
||||
|
||||
@@ -1572,7 +1572,7 @@ jobs:
|
||||
3. 根据业务变化调整测试策略
|
||||
4. 培训团队成员测试最佳实践
|
||||
|
||||
通过完善的测试体系,确保解班客项目的高质量交付和稳定运行。
|
||||
通过完善的测试体系,确保结伴客项目的高质量交付和稳定运行。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# 解班客用户手册文档
|
||||
# 结伴客用户手册文档
|
||||
|
||||
## 1. 文档概述
|
||||
|
||||
### 1.1 文档目的
|
||||
本文档为解班客平台的用户使用手册,包含小程序端用户指南和管理后台操作手册,帮助用户快速上手并充分利用平台功能。
|
||||
本文档为结伴客平台的用户使用手册,包含小程序端用户指南和管理后台操作手册,帮助用户快速上手并充分利用平台功能。
|
||||
|
||||
### 1.2 适用对象
|
||||
- **普通用户**:使用小程序进行旅行结伴和动物认领的用户
|
||||
@@ -33,7 +33,7 @@ graph TB
|
||||
|
||||
#### 2.1.1 首次使用
|
||||
1. **下载安装**
|
||||
- 微信搜索"解班客"小程序
|
||||
- 微信搜索"结伴客"小程序
|
||||
- 或扫描二维码进入小程序
|
||||
|
||||
2. **授权登录**
|
||||
@@ -423,4 +423,4 @@ graph TB
|
||||
|
||||
**文档版本**:v1.0.0
|
||||
**最后更新**:2024-01-15
|
||||
**维护团队**:解班客技术团队
|
||||
**维护团队**:结伴客技术团队
|
||||
1955
docs/管理后台接口设计文档.md
1955
docs/管理后台接口设计文档.md
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,9 @@
|
||||
# 解班客管理后台架构文档
|
||||
# 结伴客管理后台架构文档
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
### 1.1 项目简介
|
||||
解班客管理后台是一个基于Vue.js 3.x + Element Plus的现代化管理系统,为运营人员提供用户管理、内容管理、数据分析等功能。采用前后端分离架构,支持多角色权限管理和实时数据监控。
|
||||
结伴客管理后台是一个基于Vue.js 3.x + Element Plus的现代化管理系统,为运营人员提供用户管理、内容管理、数据分析等功能。采用前后端分离架构,支持多角色权限管理和实时数据监控。
|
||||
|
||||
### 1.2 业务目标
|
||||
- **运营管理**:提供完整的运营管理功能
|
||||
@@ -719,7 +719,7 @@ export function setupRouterGuards(router: Router) {
|
||||
// 全局后置守卫
|
||||
router.afterEach((to) => {
|
||||
// 设置页面标题
|
||||
document.title = `${to.meta.title || '管理后台'} - 解班客`
|
||||
document.title = `${to.meta.title || '管理后台'} - 结伴客`
|
||||
|
||||
// 页面访问统计
|
||||
// analytics.trackPageView(to.path)
|
||||
@@ -2021,12 +2021,12 @@ export default defineConfig({
|
||||
#### 8.1.2 环境配置
|
||||
```typescript
|
||||
// .env.development
|
||||
VITE_APP_TITLE=解班客管理后台
|
||||
VITE_APP_TITLE=结伴客管理后台
|
||||
VITE_API_BASE_URL=http://localhost:8080/api
|
||||
VITE_UPLOAD_URL=http://localhost:8080/upload
|
||||
|
||||
// .env.production
|
||||
VITE_APP_TITLE=解班客管理后台
|
||||
VITE_APP_TITLE=结伴客管理后台
|
||||
VITE_API_BASE_URL=https://api.jiebanke.com
|
||||
VITE_UPLOAD_URL=https://cdn.jiebanke.com/upload
|
||||
```
|
||||
@@ -2561,4 +2561,4 @@ export class Analytics {
|
||||
- 自动化测试
|
||||
- 开发工具链
|
||||
|
||||
通过以上架构设计,解班客管理后台将具备高性能、高可用、易维护的特点,为运营团队提供强大的管理工具,支撑业务的快速发展。
|
||||
通过以上架构设计,结伴客管理后台将具备高性能、高可用、易维护的特点,为运营团队提供强大的管理工具,支撑业务的快速发展。
|
||||
@@ -1,4 +1,4 @@
|
||||
# 解班客项目部署文档
|
||||
# 结伴客项目部署文档
|
||||
|
||||
## 1. 部署概述
|
||||
|
||||
@@ -751,7 +751,7 @@ docker logs -f redis-master
|
||||
|
||||
## 12. 总结
|
||||
|
||||
本部署文档涵盖了解班客项目的完整部署流程,包括:
|
||||
本部署文档涵盖了结伴客项目的完整部署流程,包括:
|
||||
|
||||
- **基础环境**:服务器配置、软件安装
|
||||
- **数据库部署**:MySQL主从、Redis集群
|
||||
|
||||
Reference in New Issue
Block a user