# 结伴客系统数据库设计文档 ## 1. 数据库概览 ### 1.1 数据库配置 #### 测试环境 - **主机**: 192.168.0.240 - **端口**: 3306 - **用户名**: root - **密码**: aiot$Aiot123 - **数据库**: jiebandata #### 生产环境 - **主机**: 129.211.213.226 - **端口**: 9527 - **用户名**: root - **密码**: aiotAiot123! - **数据库**: jiebandata ### 1.2 ER图 ```mermaid erDiagram USERS ||--o{ TRAVEL_PLANS : creates USERS ||--o{ ANIMAL_CLAIMS : claims USERS ||--o{ MESSAGES : sends USERS ||--o{ ORDERS : places USERS ||--o{ REVIEWS : writes MERCHANTS ||--o{ PRODUCTS : sells MERCHANTS ||--o{ ORDERS : processes MERCHANTS ||--o{ ACTIVITIES : organizes MERCHANTS ||--o{ ANIMALS : manages TRAVEL_PLANS ||--o{ TRAVEL_MATCHES : matches ANIMALS ||--o{ ANIMAL_CLAIMS : claimed ANIMALS ||--o{ ANIMAL_UPDATES : updates PRODUCTS ||--o{ ORDER_ITEMS : contains ORDERS ||--o{ ORDER_ITEMS : contains ORDERS ||--o{ PAYMENTS : has ACTIVITIES ||--o{ ACTIVITY_REGISTRATIONS : registers ADMINS ||--o{ ADMIN_LOGS : creates USERS { int id PK string openid string nickname string avatar string gender date birthday string phone string email datetime created_at datetime updated_at } ADMINS { int id PK string username string password string email string nickname string avatar enum role tinyint status timestamp last_login timestamp created_at timestamp updated_at } MERCHANTS { int id PK int user_id FK string merchant_type string business_name string business_license string contact_person string contact_phone string address string description string status datetime created_at datetime updated_at } TRAVEL_PLANS { int id PK int user_id FK string destination date start_date date end_date decimal budget string interests string visibility datetime created_at datetime updated_at } ANIMALS { int id PK int merchant_id FK string name string species string breed date birth_date string personality string farm_location decimal price string status datetime created_at datetime updated_at } ORDERS { int id PK int user_id FK int merchant_id FK string order_number decimal total_amount string status string delivery_address datetime ordered_at datetime completed_at } PRODUCTS { int id PK int merchant_id FK string name string description decimal price string image_url string category string status datetime created_at datetime updated_at } ``` ## 2. 核心表结构设计 ### 2.1 用户表 (users) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 用户ID | | openid | VARCHAR(64) | UNIQUE, NOT NULL | 微信openid | | nickname | VARCHAR(50) | NOT NULL | 用户昵称 | | avatar | VARCHAR(255) | | 用户头像URL | | gender | ENUM('male', 'female', 'other') | | 性别 | | birthday | DATE | | 生日 | | phone | VARCHAR(20) | UNIQUE | 手机号码 | | email | VARCHAR(100) | UNIQUE | 邮箱地址 | | travel_count | INT | DEFAULT 0 | 旅行结伴次数 | | animal_claim_count | INT | DEFAULT 0 | 动物认领次数 | | created_at | DATETIME | NOT NULL | 创建时间 | | updated_at | DATETIME | NOT NULL | 更新时间 | ### 2.2 管理员表 (admins) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 管理员ID | | username | VARCHAR(50) | UNIQUE, NOT NULL | 管理员用户名 | | password | VARCHAR(255) | NOT NULL | 密码(bcrypt加密) | | email | VARCHAR(100) | UNIQUE | 邮箱地址 | | nickname | VARCHAR(100) | | 昵称 | | avatar | VARCHAR(255) | | 头像URL | | role | ENUM('super_admin', 'admin', 'operator') | NOT NULL | 角色 | | status | TINYINT | DEFAULT 1 | 状态(1:启用, 0:禁用) | | last_login | TIMESTAMP | | 最后登录时间 | | created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 | | updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | **注意**: 管理员默认密码为 'admin123',使用 bcrypt 加密存储 ### 2.3 商家表 (merchants) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 商家ID | | user_id | INT | FOREIGN KEY, NOT NULL | 关联的用户ID | | merchant_type | ENUM('flower_shop', 'activity_organizer', 'farm_owner') | NOT NULL | 商家类型 | | business_name | VARCHAR(100) | NOT NULL | 商家名称 | | business_license | VARCHAR(255) | | 营业执照图片URL | | contact_person | VARCHAR(50) | NOT NULL | 联系人 | | contact_phone | VARCHAR(20) | NOT NULL | 联系电话 | | address | VARCHAR(255) | | 地址 | | description | TEXT | | 商家介绍 | | status | ENUM('pending', 'approved', 'rejected', 'suspended') | NOT NULL | 商家状态 | | created_at | DATETIME | NOT NULL | 创建时间 | | updated_at | DATETIME | NOT NULL | 更新时间 | ### 2.4 订单表 (orders) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 订单ID | | user_id | INT | FOREIGN KEY, NOT NULL | 用户ID | | merchant_id | INT | FOREIGN KEY, NOT NULL | 商家ID | | order_number | VARCHAR(50) | UNIQUE, NOT NULL | 订单编号 | | total_amount | DECIMAL(10,2) | NOT NULL | 订单总金额 | | status | ENUM('pending', 'paid', 'shipped', 'completed', 'cancelled') | NOT NULL | 订单状态 | | delivery_address | VARCHAR(255) | | 配送地址 | | ordered_at | DATETIME | NOT NULL | 下单时间 | | completed_at | DATETIME | | 完成时间 | ### 2.5 商品表 (products) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 商品ID | | merchant_id | INT | FOREIGN KEY, NOT NULL | 商家ID | | name | VARCHAR(100) | NOT NULL | 商品名称 | | description | TEXT | | 商品描述 | | price | DECIMAL(10,2) | NOT NULL | 商品价格 | | image_url | VARCHAR(255) | | 商品图片URL | | category | VARCHAR(50) | NOT NULL | 商品分类 | | status | ENUM('active', 'inactive', 'deleted') | NOT NULL | 商品状态 | | created_at | DATETIME | NOT NULL | 创建时间 | | updated_at | DATETIME | NOT NULL | 更新时间 | ### 2.6 动物表 (animals) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 动物ID | | merchant_id | INT | FOREIGN KEY, NOT NULL | 关联的农场商家ID | | name | VARCHAR(50) | NOT NULL | 动物名称 | | species | VARCHAR(50) | NOT NULL | 动物种类 | | breed | VARCHAR(50) | | 品种 | | birth_date | DATE | | 出生日期 | | personality | TEXT | | 性格特点 | | farm_location | VARCHAR(255) | | 农场位置 | | images | JSON | | 动物图片列表 | | price | DECIMAL(10,2) | NOT NULL | 认领价格 | | claim_count | INT | DEFAULT 0 | 认领次数 | | status | ENUM('available', 'claimed', 'unavailable') | NOT NULL | 状态 | | created_at | DATETIME | NOT NULL | 创建时间 | | updated_at | DATETIME | NOT NULL | 更新时间 | ### 2.7 动物认领表 (animal_claims) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 认领ID | | user_id | INT | FOREIGN KEY, NOT NULL | 用户ID | | animal_id | INT | FOREIGN KEY, NOT NULL | 动物ID | | price_paid | DECIMAL(10,2) | NOT NULL | 支付金额 | | agreement_url | VARCHAR(255) | | 电子协议URL | | status | ENUM('active', 'ended', 'cancelled') | NOT NULL | 认领状态 | | claimed_at | DATETIME | NOT NULL | 认领时间 | | ended_at | DATETIME | | 结束时间 | ### 2.8 送花商品表 (flower_products) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 商品ID | | merchant_id | INT | FOREIGN KEY, NOT NULL | 商家ID | | name | VARCHAR(100) | NOT NULL | 商品名称 | | description | TEXT | | 商品描述 | | price | DECIMAL(10,2) | NOT NULL | 商品价格 | | original_price | DECIMAL(10,2) | | 原价 | | images | JSON | | 商品图片列表 | | category | VARCHAR(50) | NOT NULL | 商品分类 | | sales_count | INT | DEFAULT 0 | 销售数量 | | rating | DECIMAL(3,2) | DEFAULT 0 | 评分 | | status | ENUM('active', 'inactive', 'deleted') | NOT NULL | 商品状态 | | created_at | DATETIME | NOT NULL | 创建时间 | | updated_at | DATETIME | NOT NULL | 更新时间 | ### 2.9 送花订单表 (flower_orders) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 订单ID | | user_id | INT | FOREIGN KEY, NOT NULL | 用户ID | | product_id | INT | FOREIGN KEY, NOT NULL | 商品ID | | order_number | VARCHAR(50) | UNIQUE, NOT NULL | 订单编号 | | quantity | INT | NOT NULL | 数量 | | total_amount | DECIMAL(10,2) | NOT NULL | 订单总金额 | | recipient_info | JSON | | 收花人信息 | | delivery_date | DATE | | 配送日期 | | message | VARCHAR(500) | | 祝福语 | | status | ENUM('pending', 'paid', 'shipped', 'completed', 'cancelled') | NOT NULL | 订单状态 | | created_at | DATETIME | NOT NULL | 创建时间 | | updated_at | DATETIME | NOT NULL | 更新时间 | ### 2.10 旅行邀请表 (travel_invitations) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 邀请ID | | travel_plan_id | INT | FOREIGN KEY, NOT NULL | 旅行计划ID | | inviter_id | INT | FOREIGN KEY, NOT NULL | 邀请人ID | | invitee_id | INT | FOREIGN KEY, NOT NULL | 被邀请人ID | | message | VARCHAR(500) | | 邀请消息 | | status | ENUM('pending', 'accepted', 'rejected', 'cancelled') | NOT NULL | 邀请状态 | | created_at | DATETIME | NOT NULL | 创建时间 | | updated_at | DATETIME | NOT NULL | 更新时间 | ### 2.11 旅行匹配表 (travel_matches) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 匹配ID | | plan_id | INT | FOREIGN KEY, NOT NULL | 旅行计划ID | | matched_plan_id | INT | FOREIGN KEY, NOT NULL | 匹配的旅行计划ID | | match_score | DECIMAL(5,4) | NOT NULL | 匹配分数 | | created_at | DATETIME | NOT NULL | 创建时间 | ### 2.12 旅行计划表 (travel_plans) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 计划ID | | user_id | INT | FOREIGN KEY, NOT NULL | 用户ID | | destination | VARCHAR(100) | NOT NULL | 目的地 | | start_date | DATE | NOT NULL | 开始日期 | | end_date | DATE | NOT NULL | 结束日期 | | budget | DECIMAL(10,2) | NOT NULL | 预算 | | interests | TEXT | | 兴趣偏好 | | visibility | ENUM('public', 'friends', 'private') | NOT NULL | 可见范围 | | created_at | DATETIME | NOT NULL | 创建时间 | | updated_at | DATETIME | NOT NULL | 更新时间 | ## 3. 后台管理系统API接口规范 ### 3.1 接口统一格式 #### 请求格式 - **Base URL**: https://www.jiebanke.com/api/v1 - **认证**: Bearer Token (需要认证的接口) - **Content-Type**: application/json #### 响应格式 ```json { "success": true, "code": 200, "message": "操作成功", "data": { // 具体数据 }, "pagination": { // 分页信息(列表接口) } } ``` ### 3.2 通用状态码 | 状态码 | 描述 | |--------|------| | 200 | 成功 | | 400 | 请求参数错误 | | 401 | 未授权 | | 403 | 权限不足 | | 404 | 资源不存在 | | 500 | 服务器内部错误 | ### 3.3 管理员接口 #### 3.3.1 管理员登录 - **Endpoint**: POST /admin/auth/login - **认证要求**: 无 - **请求体**: ```json { "username": "admin", "password": "password123" } ``` #### 3.3.2 获取管理员信息 - **Endpoint**: GET /admin/auth/profile - **认证要求**: Bearer Token #### 3.3.3 更新管理员信息 - **Endpoint**: PUT /admin/auth/profile - **认证要求**: Bearer Token #### 3.3.4 修改密码 - **Endpoint**: PUT /admin/auth/password - **认证要求**: Bearer Token ### 3.4 用户管理接口 #### 3.4.1 获取用户列表 - **Endpoint**: GET /admin/users - **认证要求**: Bearer Token - **查询参数**: page, limit, username, user_type, status #### 3.4.2 获取用户详情 - **Endpoint**: GET /admin/users/{id} - **认证要求**: Bearer Token #### 3.4.3 更新用户状态 - **Endpoint**: PUT /admin/users/{id}/status - **认证要求**: Bearer Token ### 2.13 管理员操作日志表 (admin_operation_logs) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 日志ID | | admin_id | INT | FOREIGN KEY REFERENCES admins(id), NOT NULL | 操作管理员ID | | admin_name | VARCHAR(50) | NOT NULL | 管理员名称 | | action_type | VARCHAR(50) | NOT NULL | 操作类型 | | target_type | VARCHAR(50) | | 目标类型 | | target_id | INT | | 目标ID | | target_name | VARCHAR(100) | | 目标名称 | | old_value | TEXT | | 操作前值 | | new_value | TEXT | | 操作后值 | | ip_address | VARCHAR(45) | | 操作IP地址 | | user_agent | VARCHAR(500) | | 用户代理信息 | | created_at | DATETIME | NOT NULL | 创建时间 | ### 2.14 管理员权限表 (admin_permissions) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 权限ID | | code | VARCHAR(50) | UNIQUE, NOT NULL | 权限代码 | | name | VARCHAR(100) | NOT NULL | 权限名称 | | description | VARCHAR(255) | | 权限描述 | | created_at | DATETIME | NOT NULL | 创建时间 | | updated_at | DATETIME | NOT NULL | 更新时间 | ### 2.15 管理员角色权限关联表 (admin_role_permissions) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 关联ID | | admin_id | INT | FOREIGN KEY REFERENCES admins(id), NOT NULL | 管理员ID | | permission_code | VARCHAR(50) | FOREIGN KEY REFERENCES admin_permissions(code), NOT NULL | 权限代码 | | created_at | DATETIME | NOT NULL | 创建时间 | ### 3.5 商家管理接口 #### 3.5.1 获取商家列表 - **Endpoint**: GET /admin/merchants - **认证要求**: Bearer Token - **查询参数**: page, limit, business_name, status #### 3.5.2 审核商家申请 - **Endpoint**: PUT /admin/merchants/{id}/approve - **认证要求**: Bearer Token #### 3.5.3 拒绝商家申请 - **Endpoint**: PUT /admin/merchants/{id}/reject - **认证要求**: Bearer Token ### 3.6 订单管理接口 #### 3.6.1 获取订单列表 - **Endpoint**: GET /admin/orders - **认证要求**: Bearer Token - **查询参数**: page, limit, order_no, status #### 3.6.2 更新订单状态 - **Endpoint**: PUT /admin/orders/{id}/status - **认证要求**: Bearer Token ## 4. 数据库初始化脚本 ### 4.1 创建管理员用户 ```sql INSERT INTO admins (username, password, email, nickname, role, status) VALUES ('superadmin', '$2b$10$rOzJq...', 'superadmin@jiebanke.com', '超级管理员', 'super_admin', 1), ('admin', '$2b$10$rOzJq...', 'admin@jiebanke.com', '管理员', 'admin', 1), ('operator', '$2b$10$rOzJq...', 'operator@jiebanke.com', '操作员', 'operator', 1); ``` ### 4.2 创建测试用户 ```sql INSERT INTO users (openid, nickname, gender, phone, email) VALUES ('wx1234567890', '测试用户1', 'male', '13800138000', 'test1@jiebanke.com'), ('wx0987654321', '测试用户2', 'female', '13800138001', 'test2@jiebanke.com'); ``` ### 4.3 创建测试商家 ```sql INSERT INTO merchants (user_id, merchant_type, business_name, contact_person, contact_phone, status) VALUES (1, 'flower_shop', '鲜花小店', '张老板', '13800138002', 'approved'), (2, 'farm_owner', '快乐农场', '李农场主', '13800138003', 'approved'); ``` ## 5. 数据库维护 ### 5.1 备份策略 - 每日全量备份 - 每小时增量备份 - 备份保留30天 ### 5.2 性能优化 - 为常用查询字段创建索引 - 定期分析慢查询日志 - 数据库连接池配置优化 ### 5.3 安全措施 - 定期更换数据库密码 - 限制数据库访问IP - 启用SSL加密连接