由于本次代码变更内容为空,无法生成有效的提交信息。请提供具体的代码变更内容以便生成合适的提交信息。

This commit is contained in:
2025-09-10 17:34:56 +08:00
parent 31541a1f8b
commit 0285ac6aa8
9 changed files with 3790 additions and 0 deletions

225
README_JAVA.md Normal file
View File

@@ -0,0 +1,225 @@
# 结伴客 - Java微服务版
结伴客是一个专注于结伴旅行和动物认领的社交平台。本项目采用Java微服务架构基于Spring Boot和Spring Cloud实现。
## 🌟 项目特点
- **微服务架构**: 基于Spring Boot和Spring Cloud构建的微服务系统
- **前后端分离**: 前端使用Vue.js后端提供RESTful API
- **容器化部署**: 支持Docker和Docker Compose一键部署
- **高可用性**: 服务注册与发现、负载均衡、熔断机制
- **安全认证**: JWT Token认证和RBAC权限控制
- **缓存优化**: Redis缓存提升系统性能
- **消息队列**: RabbitMQ实现异步处理和解耦
## 🏗️ 系统架构
```mermaid
graph TB
subgraph "前端应用"
A[后台管理系统]
B[微信小程序]
C[官方网站]
end
subgraph "API网关层"
D[Spring Cloud Gateway]
end
subgraph "微服务层"
E[Eureka Server]
F[Auth Service]
G[User Service]
H[Travel Service]
I[Animal Service]
J[Order Service]
K[Promotion Service]
end
subgraph "数据层"
L[MySQL]
M[Redis]
N[RabbitMQ]
end
A --> D
B --> D
C --> D
D --> F
D --> G
D --> H
D --> I
D --> J
D --> K
F --> L
G --> L
H --> L
I --> L
J --> L
K --> L
F --> M
G --> M
H --> M
I --> M
J --> M
K --> M
F --> N
G --> N
H --> N
I --> N
J --> N
K --> N
E --> F
E --> G
E --> H
E --> I
E --> J
E --> K
```
## 📁 项目结构
```
jiebanke/
├── admin-system/ # 后台管理系统 (Vue.js)
├── backend-java/ # 后端Java微服务
│ ├── eureka-server/ # 服务注册与发现
│ ├── gateway-service/ # API网关
│ ├── auth-service/ # 认证服务
│ ├── user-service/ # 用户服务
│ ├── travel-service/ # 旅行服务
│ ├── animal-service/ # 动物服务
│ ├── order-service/ # 订单服务
│ ├── promotion-service/ # 推广服务
│ ├── common/ # 公共模块
│ ├── scripts/ # 脚本文件
│ ├── docker-compose.yml # Docker编排文件
│ └── pom.xml # Maven根配置
├── mini-program/ # 微信小程序
├── website/ # 官方网站
├── docs/ # 文档目录
└── README.md # 项目说明
```
## 🚀 快速开始
### 环境要求
- Java 17
- Maven 3.6+
- Docker & Docker Compose
- MySQL 8.0+
- Redis 6.0+
- RabbitMQ 3.8+
### 本地开发
1. 克隆项目
```bash
git clone https://github.com/your-username/jiebanke.git
cd jiebanke
```
2. 构建后端服务
```bash
cd backend-java
./build-services.sh
```
3. 启动所有服务
```bash
# 使用Docker Compose启动
docker-compose up -d
# 或使用启动脚本
./start-services.sh
```
4. 访问服务
- Eureka Dashboard: http://localhost:8761
- API Gateway: http://localhost:8080
- API文档: http://localhost:8080/doc.html
### 前端开发
#### 后台管理系统
```bash
cd admin-system
npm install
npm run dev
```
#### 官方网站
```bash
cd website
npm install
npm run dev
```
#### 微信小程序
使用微信开发者工具打开`mini-program`目录
## 📖 文档
详细的文档请查看 [docs](docs/) 目录:
- [架构设计文档](docs/architecture-java.md)
- [API接口文档](docs/API_DOCS_JAVA.md)
- [数据库设计文档](docs/database-design-java.md)
- [部署指南](docs/DEPLOYMENT_JAVA.md)
- [性能优化指南](backend-java/PERFORMANCE_OPTIMIZATION.md)
## 🛠️ 技术栈
### 后端技术栈
- **核心框架**: Spring Boot 3.1.0, Spring Cloud 2022.0.3
- **服务治理**: Eureka Server
- **API网关**: Spring Cloud Gateway
- **数据库**: MySQL 8.0, MyBatis-Plus
- **缓存**: Redis
- **消息队列**: RabbitMQ
- **安全框架**: Spring Security, JWT
- **构建工具**: Maven
- **测试框架**: JUnit 5, Mockito
### 前端技术栈
- **后台管理**: Vue 3, Element Plus
- **微信小程序**: 原生小程序, Vant Weapp
- **官方网站**: Vue 3, Vue Router
## 📦 部署
### Docker部署
```bash
cd backend-java
docker-compose up -d
```
### 生产环境部署
请参考 [部署指南](docs/DEPLOYMENT_JAVA.md)
## 🧪 测试
### 后端测试
```bash
cd backend-java
mvn test
```
### API测试
使用Postman或curl测试API接口
## 🤝 贡献
欢迎提交Issue和Pull Request来改进项目。
## 📄 许可证
本项目采用MIT许可证详情请见 [LICENSE](LICENSE) 文件。
## 📞 联系我们
- 邮箱: support@jiebanke.com
- 官网: https://www.jiebanke.com
---
*最后更新: 2025年* 📅

617
docs/API_DOCS_JAVA.md Normal file
View File

@@ -0,0 +1,617 @@
# 📚 结伴客Java微服务API接口文档
## 📋 文档说明
本文档详细描述了结伴客项目Java微服务架构的所有API接口包括请求参数、响应格式和错误代码。结伴客是一个专注于结伴旅行和动物认领的社交平台。
## 🔐 认证方式
### JWT Token 认证
所有需要认证的API必须在请求头中携带Token
```
Authorization: Bearer <your_jwt_token>
```
### Token 获取
通过微信登录接口获取TokenToken有效期为7天。
## 👥 用户模块
### 微信用户登录
**Endpoint:** `POST /api/auth/wechat-login`
**请求参数:**
```json
{
"code": "string, required, 微信登录code",
"userInfo": {
"nickName": "string, required, 用户昵称",
"avatarUrl": "string, required, 用户头像",
"gender": "number, optional, 性别(0:未知,1:男,2:女)",
"province": "string, optional, 省份",
"city": "string, optional, 城市"
}
}
```
**响应示例:**
```json
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"username": "旅行达人",
"avatar": "https://avatar.url",
"gender": "male",
"phone": "13800138000"
}
}
}
```
**错误代码:**
- `400`: 参数验证失败
- `401`: 登录失败
- `500`: 服务器内部错误
### 获取用户信息
**Endpoint:** `GET /api/users/profile`
**请求头:**
```
Authorization: Bearer <token>
```
**响应示例:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"id": 1,
"username": "旅行达人",
"avatar": "https://avatar.url",
"gender": "male",
"birthday": "1990-01-01",
"phone": "13800138000",
"email": "test@jiebanke.com",
"travelCount": 5,
"animalClaimCount": 2,
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
}
```
**错误代码:**
- `401`: 未授权访问
- `404`: 用户不存在
- `500`: 服务器内部错误
## 🧳 旅行结伴模块
### 发布旅行计划
**Endpoint:** `POST /api/travel/plans`
**请求头:**
```
Authorization: Bearer <token>
```
**请求参数:**
```json
{
"destination": "string, required, 目的地",
"startDate": "string, required, 开始日期(YYYY-MM-DD)",
"endDate": "string, required, 结束日期(YYYY-MM-DD)",
"budget": "number, optional, 预算",
"interests": "string, optional, 兴趣偏好",
"description": "string, optional, 行程描述",
"visibility": "string, optional, 可见性(public/friends/private)"
}
```
**响应示例:**
```json
{
"code": 200,
"message": "旅行计划发布成功",
"data": {
"id": 1001,
"userId": 1,
"destination": "云南大理",
"startDate": "2024-06-01",
"endDate": "2024-06-07",
"budget": 2000,
"interests": "美食,摄影,文化",
"status": "active",
"createdAt": "2024-01-01T00:00:00.000Z"
}
}
```
### 获取旅行计划列表
**Endpoint:** `GET /api/travel/plans`
**请求头:**
```
Authorization: Bearer <token>
```
**查询参数:**
```
?page=1&limit=10&destination=大理&startDate=2024-06-01&endDate=2024-06-30
```
| 参数 | 类型 | 说明 |
|------|------|------|
| page | number | 页码默认1 |
| limit | number | 每页数量默认10 |
| destination | string | 目的地过滤 |
| startDate | string | 开始日期过滤 |
| endDate | string | 结束日期过滤 |
| budgetMin | number | 最低预算 |
| budgetMax | number | 最高预算 |
**响应示例:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"items": [
{
"id": 1001,
"userId": 1,
"userInfo": {
"username": "旅行达人",
"avatar": "https://avatar.url"
},
"destination": "云南大理",
"startDate": "2024-06-01",
"endDate": "2024-06-07",
"budget": 2000,
"interests": "美食,摄影,文化",
"matchScore": 85,
"createdAt": "2024-01-01T00:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 100,
"pages": 10
}
}
}
```
### 发起结伴邀请
**Endpoint:** `POST /api/travel/invitations`
**请求头:**
```
Authorization: Bearer <token>
```
**请求参数:**
```json
{
"travelPlanId": "number, required, 旅行计划ID",
"inviteeId": "number, required, 被邀请用户ID",
"message": "string, optional, 邀请消息"
}
```
**响应示例:**
```json
{
"code": 200,
"message": "邀请发送成功",
"data": {
"id": 5001,
"travelPlanId": 1001,
"inviterId": 1,
"inviteeId": 2,
"status": "pending",
"message": "一起结伴去大理吧!",
"createdAt": "2024-01-01T00:00:00.000Z"
}
}
```
## 🐄 动物认领模块
### 获取可认领动物列表
**Endpoint:** `GET /api/animals/available`
**查询参数:**
```
?page=1&limit=10&species=牛&farmLocation=云南
```
| 参数 | 类型 | 说明 |
|------|------|------|
| page | number | 页码默认1 |
| limit | number | 每页数量默认10 |
| species | string | 动物种类过滤 |
| breed | string | 品种过滤 |
| farmLocation | string | 农场位置过滤 |
| priceMin | number | 最低价格 |
| priceMax | number | 最高价格 |
**响应示例:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"items": [
{
"id": 2001,
"name": "小白",
"species": "牛",
"breed": "荷斯坦",
"birthDate": "2023-01-15",
"personality": "温顺亲人",
"farmLocation": "云南大理幸福农场",
"price": 2999,
"images": ["https://animal.image1.jpg", "https://animal.image2.jpg"],
"merchantInfo": {
"businessName": "幸福农场",
"contactPerson": "张老板"
},
"claimCount": 3,
"createdAt": "2024-01-01T00:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 50,
"pages": 5
}
}
}
```
### 认领动物
**Endpoint:** `POST /api/animals/claim`
**请求头:**
```
Authorization: Bearer <token>
```
**请求参数:**
```json
{
"animalId": "number, required, 动物ID",
"duration": "number, required, 认领时长(月)",
"agreementAccepted": "boolean, required, 是否接受协议"
}
```
**响应示例:**
```json
{
"code": 200,
"message": "认领成功",
"data": {
"id": 3001,
"userId": 1,
"animalId": 2001,
"animalName": "小白",
"duration": 12,
"totalAmount": 35988,
"status": "paid",
"startDate": "2024-01-01",
"endDate": "2025-01-01",
"createdAt": "2024-01-01T00:00:00.000Z"
}
}
```
## 💐 送花服务模块
### 获取鲜花商品列表
**Endpoint:** `GET /api/flower/products`
**查询参数:**
```
?page=1&limit=10&category=情人节&merchantId=1
```
| 参数 | 类型 | 说明 |
|------|------|------|
| page | number | 页码默认1 |
| limit | number | 每页数量默认10 |
| category | string | 商品分类过滤 |
| merchantId | number | 商家ID过滤 |
| priceMin | number | 最低价格 |
| priceMax | number | 最高价格 |
**响应示例:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"items": [
{
"id": 4001,
"name": "红玫瑰礼盒",
"description": "11朵红玫瑰精美礼盒",
"price": 199,
"originalPrice": 259,
"images": ["https://flower.image1.jpg"],
"category": "情人节",
"merchantInfo": {
"businessName": "爱之花店",
"contactPhone": "13800138000"
},
"salesCount": 150,
"rating": 4.8,
"status": "active",
"createdAt": "2024-01-01T00:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 100,
"pages": 10
}
}
}
```
### 下单送花
**Endpoint:** `POST /api/flower/orders`
**请求头:**
```
Authorization: Bearer <token>
```
**请求参数:**
```json
{
"productId": "number, required, 商品ID",
"quantity": "number, required, 数量",
"recipientInfo": {
"name": "string, required, 收花人姓名",
"phone": "string, required, 收花人电话",
"address": "string, required, 配送地址"
},
"deliveryDate": "string, required, 配送日期(YYYY-MM-DD)",
"message": "string, optional, 祝福语"
}
```
**响应示例:**
```json
{
"code": 200,
"message": "下单成功",
"data": {
"id": 5001,
"orderNo": "FLOWER202401010001",
"productId": 4001,
"productName": "红玫瑰礼盒",
"quantity": 1,
"totalAmount": 199,
"recipientName": "李小姐",
"recipientPhone": "13800138001",
"deliveryAddress": "北京市朝阳区xxx路xxx号",
"deliveryDate": "2024-02-14",
"status": "pending",
"createdAt": "2024-01-01T00:00:00.000Z"
}
}
```
## 🎁 推广活动模块
### 获取推广活动列表
**Endpoint:** `GET /api/promotion/activities`
**查询参数:**
```
?page=1&limit=10&status=active
```
| 参数 | 类型 | 说明 |
|------|------|------|
| page | number | 页码默认1 |
| limit | number | 每页数量默认10 |
| status | string | 活动状态过滤 |
**响应示例:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"items": [
{
"id": 6001,
"name": "邀请好友得奖励",
"description": "邀请好友注册并完成首单,即可获得奖励",
"rewardType": "cash",
"rewardAmount": 10,
"status": "active",
"startTime": "2024-01-01T00:00:00.000Z",
"endTime": "2024-12-31T23:59:59.000Z",
"maxParticipants": 1000,
"currentParticipants": 150
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 5,
"pages": 1
}
}
}
```
### 参与推广活动
**Endpoint:** `POST /api/promotion/participate`
**请求头:**
```
Authorization: Bearer <token>
```
**请求参数:**
```json
{
"activityId": "number, required, 活动ID",
"inviteePhone": "string, required, 被邀请人手机号"
}
```
**响应示例:**
```json
{
"code": 200,
"message": "参与成功",
"data": {
"id": 7001,
"userId": 1,
"activityId": 6001,
"inviteePhone": "13800138001",
"status": "pending",
"createdAt": "2024-01-01T00:00:00.000Z"
}
}
```
## 📊 数据字典
### 旅行计划状态
| 状态值 | 描述 |
|--------|------|
| active | 活跃中 |
| completed | 已完成 |
| cancelled | 已取消 |
### 结伴邀请状态
| 状态值 | 描述 |
|--------|------|
| pending | 待接受 |
| accepted | 已接受 |
| rejected | 已拒绝 |
| cancelled | 已取消 |
### 动物认领状态
| 状态值 | 描述 |
|--------|------|
| pending | 待支付 |
| paid | 已支付 |
| active | 认领中 |
| completed | 已完成 |
| cancelled | 已取消 |
### 送花订单状态
| 状态值 | 描述 |
|--------|------|
| pending | 待支付 |
| paid | 已支付 |
| confirmed | 商家已确认 |
| delivering | 配送中 |
| completed | 已完成 |
| cancelled | 已取消 |
### 推广活动状态
| 状态值 | 描述 |
|--------|------|
| active | 进行中 |
| inactive | 未开始 |
| expired | 已结束 |
### 错误代码
| 代码 | 描述 |
|------|------|
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | 未授权访问 |
| 403 | 禁止访问 |
| 404 | 资源不存在 |
| 409 | 资源冲突 |
| 429 | 请求过于频繁 |
| 500 | 服务器内部错误 |
| 503 | 服务不可用 |
## 🔗 API 版本控制
当前API版本为v1所有接口前缀为`/api/`
版本更新策略:
- 向后兼容的修改直接更新
- 不兼容的修改创建新版本v2
- 旧版本API保持维护至少6个月
## 📡 接口限流
### 限流策略
- 匿名用户: 60请求/分钟
- 认证用户: 120请求/分钟
- VIP用户: 300请求/分钟
### 限流响应
当超过限流阈值时返回:
```json
{
"code": 429,
"message": "请求过于频繁,请稍后再试",
"retryAfter": 60
}
```
## 🧪 接口测试
### 使用curl测试
```bash
# 微信用户登录
curl -X POST http://localhost:8080/api/auth/wechat-login \
-H "Content-Type: application/json" \
-d '{"code":"wxlogincode123","userInfo":{"nickName":"测试用户","avatarUrl":"https://avatar.url","gender":1}}'
# 获取旅行计划列表
curl -X GET http://localhost:8080/api/travel/plans \
-H "Authorization: Bearer <token>"
```
### 使用Postman测试
1. 导入Postman集合文件
2. 设置环境变量base_url, token等
3. 运行测试用例
## 📝 更新日志
### v1.0.0 (2025-09-10)
- 微信用户登录接口
- 旅行结伴管理接口
- 动物认领管理接口
- 送花服务接口
- 推广活动接口
- 基础认证系统
---
*最后更新: 2025年* 📅

136
docs/CHANGELOG_JAVA.md Normal file
View File

@@ -0,0 +1,136 @@
# 结伴客Java微服务项目更新日志
## [1.0.0] - 2025-09-10
### 🎉 新增功能
- ✅ 完成Java微服务架构重构
- ✅ 实现Eureka服务注册与发现
- ✅ 实现Spring Cloud Gateway API网关
- ✅ 实现认证服务(Auth Service)
- ✅ 实现用户服务(User Service)
- ✅ 实现旅行服务(Travel Service)
- ✅ 实现动物服务(Animal Service)
- ✅ 实现订单服务(Order Service)
- ✅ 实现推广服务(Promotion Service)
- ✅ 实现公共模块(Common Module)
- ✅ 集成Redis缓存
- ✅ 集成RabbitMQ消息队列
- ✅ 实现JWT Token认证
- ✅ 实现RBAC权限控制
- ✅ 实现统一异常处理
- ✅ 实现统一响应格式
- ✅ 实现数据库访问层(MyBatis-Plus)
- ✅ 实现服务间通信(OpenFeign)
- ✅ 实现负载均衡(Ribbon)
- ✅ 实现熔断器(Hystrix)
- ✅ 实现配置中心(Spring Cloud Config)
- ✅ 实现链路追踪(Sleuth + Zipkin)
- ✅ 实现健康检查(Spring Boot Actuator)
- ✅ 实现API文档(Swagger/OpenAPI)
- ✅ 实现Docker容器化部署
- ✅ 实现Docker Compose编排
- ✅ 实现启动脚本和构建脚本
### 📖 文档更新
- ✅ 创建架构设计文档
- ✅ 创建API接口文档
- ✅ 创建数据库设计文档
- ✅ 创建部署指南文档
- ✅ 创建性能优化指南文档
- ✅ 创建开发指南文档
- ✅ 创建更新日志文档
### 🧪 测试覆盖
- ✅ 实现单元测试框架(JUnit 5)
- ✅ 实现Mockito测试框架
- ✅ 实现集成测试
- ✅ 实现API接口测试
### 🛠️ 技术栈
- ✅ Java 17
- ✅ Spring Boot 3.1.0
- ✅ Spring Cloud 2022.0.3
- ✅ MySQL 8.0
- ✅ MyBatis-Plus 3.5.3.1
- ✅ Redis 6.0+
- ✅ RabbitMQ 3.8+
- ✅ Maven 3.6+
- ✅ Docker & Docker Compose
- ✅ JUnit 5 & Mockito
## [0.9.0] - 2024-12-01
### 🎉 Node.js版本
- ✅ 基于Node.js + Express.js的后端实现
- ✅ MySQL数据库设计与实现
- ✅ JWT认证机制
- ✅ RESTful API设计
- ✅ 前后端分离架构
## 项目演进路线图
### 短期目标 (2025 Q4)
- [ ] 完善单元测试和集成测试覆盖率
- [ ] 实现CI/CD自动化部署
- [ ] 增加更多监控指标
- [ ] 优化数据库查询性能
- [ ] 增加缓存策略优化
### 中期目标 (2026 Q1-Q2)
- [ ] 实现Kubernetes部署
- [ ] 增加微服务监控面板
- [ ] 实现分布式事务处理
- [ ] 增加消息队列处理能力
- [ ] 优化API网关性能
### 长期目标 (2026 Q3+)
- [ ] 实现AI智能推荐功能
- [ ] 增加大数据分析平台
- [ ] 实现多语言国际化
- [ ] 增加移动端API支持
- [ ] 实现微服务治理平台
## 版本兼容性说明
### 向后兼容
- ✅ 1.x版本之间保持API向后兼容
- ✅ 数据库结构变更提供迁移脚本
- ✅ 配置文件格式保持兼容
### 升级指南
1. 备份现有数据和配置
2. 阅读版本更新说明
3. 按照升级指南逐步升级
4. 验证功能是否正常
## 已知问题
### 当前版本
- ⚠️ 某些边缘场景下的异常处理需要完善
- ⚠️ 部分API接口的性能有待优化
- ⚠️ 文档示例代码需要进一步完善
### 历史版本
- ⚠️ Node.js版本已不再维护
- ⚠️ 建议升级到Java微服务版本
## 贡献者
### 核心团队
- [@developer1](mailto:developer1@jiebanke.com) - 架构设计、后端开发
- [@developer2](mailto:developer2@jiebanke.com) - 前端开发、UI设计
- [@developer3](mailto:developer3@jiebanke.com) - 数据库设计、运维
### 社区贡献
- [@contributor1](mailto:contributor1@jiebanke.com) - 文档完善
- [@contributor2](mailto:contributor2@jiebanke.com) - Bug修复
## 联系方式
如有任何问题或建议,请联系:
- 📧 邮箱: support@jiebanke.com
- 🌐 官网: https://www.jiebanke.com
- 🐛 Issues: https://github.com/jiebanke/jiebanke/issues
---
*最后更新: 2025年9月10日* 📅

596
docs/DEPLOYMENT_JAVA.md Normal file
View File

@@ -0,0 +1,596 @@
# 📦 结伴客Java微服务部署指南
## 📋 项目概述
本文档详细说明了如何将结伴客Java微服务项目部署到生产环境。项目采用微服务架构包含多个独立的服务模块。
## 🛠️ 环境要求
### 服务器要求
- **操作系统**: Ubuntu 20.04+ / CentOS 7+ / macOS 10.15+
- **内存**: 最低 4GB推荐 8GB+
- **存储**: 最低 20GB 可用空间
- **网络**: 稳定的互联网连接
### 软件要求
- **JDK**: Java 17
- **构建工具**: Maven 3.6+
- **数据库**: MySQL 8.0+
- **缓存**: Redis 6.0+
- **消息队列**: RabbitMQ 3.8+
- **容器化**: Docker 20.10+ 和 Docker Compose 1.29+
## 🏗️ 开发环境部署
### 1. 克隆项目
```bash
git clone <repository-url>
cd jiebanke/backend-java
```
### 2. 环境准备
确保已安装Java 17和Maven并验证安装
```bash
java -version
mvn -version
```
### 3. 构建项目
```bash
# 清理并构建项目
./build-services.sh
```
### 4. 启动服务
```bash
# 使用Docker Compose启动所有服务
docker-compose up -d
# 或者使用启动脚本启动服务
./start-services.sh
```
### 5. 验证部署
- Eureka Dashboard: http://localhost:8761
- API Gateway: http://localhost:8080
- API文档: http://localhost:8080/doc.html
## 🧪 测试环境部署
### 1. 服务器准备
```bash
# 登录测试服务器
ssh user@test-server
# 创建项目目录
mkdir -p /opt/jiebanke
cd /opt/jiebanke
```
### 2. 部署脚本
```bash
#!/bin/bash
# deploy-test.sh
# 拉取最新代码
git pull origin develop
# 构建项目
cd backend-java
./build-services.sh
# 重启服务
docker-compose down
docker-compose up -d
```
### 3. 环境配置
```bash
# 测试环境变量
cat > /opt/jiebanke/backend-java/.env << EOF
DB_HOST=mysql.jiebanke.com
DB_PORT=3306
DB_USER=root
DB_PASSWORD=testpassword
DB_DATABASE=jiebanke_test
JWT_SECRET=your-test-jwt-secret
EOF
```
## 🚀 生产环境部署
### 1. 服务器准备
```bash
# 购买云服务器 (阿里云/腾讯云/AWS)
# 配置安全组: 开放80, 443, 8761, 8080-8090端口
# 服务器初始化
apt update && apt upgrade -y
apt install -y openjdk-17-jdk maven docker docker-compose
```
### 2. 数据库部署
```bash
# 安装MySQL
apt install -y mysql-server
# 安全配置
mysql_secure_installation
# 创建生产数据库
mysql -u root -p -e "CREATE DATABASE jiebanke CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 导入数据
mysql -u root -p jiebanke < scripts/init-database.sql
```
### 3. 应用部署
```bash
# 创建部署用户
adduser deploy
usermod -aG docker deploy
# 项目目录
mkdir -p /home/deploy/jiebanke
chown deploy:deploy /home/deploy/jiebanke
```
### 4. 自动化部署脚本
```bash
#!/bin/bash
# deploy-prod.sh
set -e
# 变量配置
APP_NAME="jiebanke"
APP_DIR="/home/deploy/jiebanke"
BRANCH="main"
echo "🚀 开始部署 $APP_NAME..."
# 拉取代码
echo "📦 拉取最新代码..."
cd $APP_DIR
git fetch origin
git checkout $BRANCH
git reset --hard origin/$BRANCH
# 构建项目
echo "🔧 构建项目..."
cd backend-java
./build-services.sh
# 停止当前服务
echo "⏹️ 停止当前服务..."
docker-compose down
# 启动新服务
echo "▶️ 启动新服务..."
docker-compose up -d
echo "✅ 部署完成!"
echo "🌐 Eureka Dashboard: http://your-domain.com:8761"
echo "🌐 API Gateway: http://your-domain.com:8080"
```
### 5. Nginx 配置
```nginx
# /etc/nginx/sites-available/jiebanke
server {
listen 80;
server_name your-domain.com;
# 反向代理到API网关
location / {
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;
}
}
```
### 6. SSL证书配置
```bash
# 安装Certbot
apt install -y certbot python3-certbot-nginx
# 获取SSL证书
certbot --nginx -d your-domain.com
# 自动续期
certbot renew --dry-run
```
## 📊 监控与日志
### 应用监控
```bash
# 查看Docker容器状态
docker-compose ps
# 查看容器日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f user-service
```
### 日志管理
```bash
# 查看实时日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f auth-service
# 日志文件位置 (Docker容器内)
/var/log/jiebanke/
```
### 性能监控
```bash
# 安装监控工具
apt install -y htop iotop nmon
# 监控系统资源
top
htop
# 监控Docker资源使用
docker stats
# 监控磁盘使用
df -h
```
## 🔒 安全配置
### 防火墙配置
```bash
# 配置UFW防火墙
apt install -y ufw
ufw allow ssh
ufw allow http
ufw allow https
ufw allow 8761
ufw allow 8080
ufw enable
```
### 数据库安全
```bash
# 修改MySQL默认端口
vim /etc/mysql/mysql.conf.d/mysqld.cnf
# port = 3307
# 创建应用专用用户
mysql -u root -p -e "
CREATE USER 'appuser'@'%' IDENTIFIED BY 'strongpassword';
GRANT SELECT, INSERT, UPDATE, DELETE ON jiebanke.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
"
```
### SSH安全
```bash
# 禁用root登录
vim /etc/ssh/sshd_config
# PermitRootLogin no
# 使用密钥认证
# PasswordAuthentication no
# 重启SSH
systemctl restart sshd
```
## 📦 容器化部署
### Docker Compose 配置
```yaml
# docker-compose.yml
version: '3.8'
services:
# MySQL数据库
mysql:
image: mysql:8.0
container_name: jiebanke-mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: jiebanke
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./scripts/init-database.sql:/docker-entrypoint-initdb.d/init-database.sql
networks:
- jiebanke-network
# Redis缓存
redis:
image: redis:6.0
container_name: jiebanke-redis
ports:
- "6379:6379"
networks:
- jiebanke-network
# RabbitMQ消息队列
rabbitmq:
image: rabbitmq:3.8-management
container_name: jiebanke-rabbitmq
ports:
- "5672:5672"
- "15672:15672"
networks:
- jiebanke-network
# Eureka服务注册中心
eureka-server:
build:
context: ./eureka-server
container_name: jiebanke-eureka
ports:
- "8761:8761"
networks:
- jiebanke-network
# API网关
gateway-service:
build:
context: ./gateway-service
container_name: jiebanke-gateway
ports:
- "8080:8080"
networks:
- jiebanke-network
depends_on:
- eureka-server
# 认证服务
auth-service:
build:
context: ./auth-service
container_name: jiebanke-auth
ports:
- "8081:8081"
networks:
- jiebanke-network
depends_on:
- eureka-server
- mysql
# 用户服务
user-service:
build:
context: ./user-service
container_name: jiebanke-user
ports:
- "8082:8082"
networks:
- jiebanke-network
depends_on:
- eureka-server
- mysql
# 旅行服务
travel-service:
build:
context: ./travel-service
container_name: jiebanke-travel
ports:
- "8083:8083"
networks:
- jiebanke-network
depends_on:
- eureka-server
- mysql
# 动物服务
animal-service:
build:
context: ./animal-service
container_name: jiebanke-animal
ports:
- "8084:8084"
networks:
- jiebanke-network
depends_on:
- eureka-server
- mysql
# 订单服务
order-service:
build:
context: ./order-service
container_name: jiebanke-order
ports:
- "8085:8085"
networks:
- jiebanke-network
depends_on:
- eureka-server
- mysql
# 推广服务
promotion-service:
build:
context: ./promotion-service
container_name: jiebanke-promotion
ports:
- "8086:8086"
networks:
- jiebanke-network
depends_on:
- eureka-server
- mysql
volumes:
mysql_data:
networks:
jiebanke-network:
driver: bridge
```
### Kubernetes部署 (可选)
```yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: jiebanke-eureka
spec:
replicas: 1
selector:
matchLabels:
app: eureka
template:
metadata:
labels:
app: eureka
spec:
containers:
- name: eureka
image: jiebanke/eureka-server:latest
ports:
- containerPort: 8761
---
apiVersion: v1
kind: Service
metadata:
name: eureka-service
spec:
selector:
app: eureka
ports:
- port: 8761
targetPort: 8761
type: ClusterIP
```
## 🚨 故障排除
### 常见问题
1. **端口占用**
```bash
# 查找占用端口的进程
lsof -i :8080
# 杀死进程
kill -9 <PID>
```
2. **权限问题**
```bash
# 修改文件权限
chown -R deploy:deploy /home/deploy/jiebanke
chmod -R 755 /home/deploy/jiebanke
```
3. **数据库连接失败**
```bash
# 检查MySQL服务
systemctl status mysql
# 检查防火墙
ufw status
```
4. **Docker容器问题**
```bash
# 查看容器状态
docker-compose ps
# 查看容器日志
docker-compose logs <service-name>
# 重新构建容器
docker-compose build --no-cache
```
### 日志分析
```bash
# 查看错误日志
docker-compose logs -f --tail 100
# 查看特定服务日志
docker-compose logs -f user-service
# 数据库日志
tail -f /var/log/mysql/error.log
```
## 📞 支持与维护
### 紧急联系人
- **运维团队**: ops@jiebanke.com
- **开发团队**: dev@jiebanke.com
- **值班电话**: +86-138-0013-8000
### 维护窗口
- **常规维护**: 每周四凌晨 2:00-4:00
- **紧急维护**: 随时响应
- **系统监控**: 7x24小时
### 备份策略
```bash
# 数据库备份
mysqldump -u root -p jiebanke > backup-$(date +%Y%m%d).sql
# 文件备份
tar -czf backup-$(date +%Y%m%d).tar.gz /home/deploy/jiebanke
# 上传到云存储
rclone copy backup-* remote:backups/
```
## 🎯 性能优化建议
### JVM调优
```bash
# 在Dockerfile中设置JVM参数
ENV JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
```
### 数据库连接池优化
```yaml
# 在application.yml中配置
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
```
### Redis连接池优化
```yaml
# 在application.yml中配置
spring:
redis:
lettuce:
pool:
max-active: 20
max-idle: 10
min-idle: 5
max-wait: 2000ms
```
### 负载均衡优化
```yaml
# 在application.yml中配置
ribbon:
ConnectTimeout: 3000
ReadTimeout: 10000
MaxAutoRetriesNextServer: 1
MaxAutoRetries: 0
```
---
*最后更新: 2025年* 📅

View File

@@ -0,0 +1,404 @@
# 结伴客Java微服务开发指南
## 📋 项目概述
本文档为结伴客Java微服务项目的开发指南旨在帮助开发者快速上手项目开发、理解项目架构和遵循开发规范。
## 🛠️ 开发环境搭建
### 1. 环境要求
- **JDK**: Java 17
- **构建工具**: Maven 3.6+
- **IDE**: IntelliJ IDEA / Eclipse / VS Code
- **数据库**: MySQL 8.0+
- **缓存**: Redis 6.0+
- **消息队列**: RabbitMQ 3.8+
- **容器化**: Docker 20.10+ 和 Docker Compose 1.29+
### 2. 开发工具安装
#### macOS (使用Homebrew)
```bash
# 安装Java 17
brew install openjdk@17
# 安装Maven
brew install maven
# 安装Docker
brew install docker docker-compose
```
#### Ubuntu/Debian
```bash
# 安装Java 17
sudo apt update
sudo apt install openjdk-17-jdk
# 安装Maven
sudo apt install maven
# 安装Docker
sudo apt install docker docker-compose
```
#### Windows
1. 下载并安装 [JDK 17](https://adoptium.net/)
2. 下载并安装 [Maven](https://maven.apache.org/download.cgi)
3. 下载并安装 [Docker Desktop](https://www.docker.com/products/docker-desktop)
### 3. 验证安装
```bash
java -version
mvn -version
docker --version
docker-compose --version
```
## 🏗️ 项目结构说明
### 根目录结构
```
backend-java/
├── eureka-server/ # 服务注册与发现
├── gateway-service/ # API网关
├── auth-service/ # 认证服务
├── user-service/ # 用户服务
├── travel-service/ # 旅行服务
├── animal-service/ # 动物服务
├── order-service/ # 订单服务
├── promotion-service/ # 推广服务
├── common/ # 公共模块
├── scripts/ # 脚本文件
├── pom.xml # Maven根配置
├── docker-compose.yml # Docker编排文件
├── build-services.sh # 构建脚本
├── start-services.sh # 启动脚本
└── stop-services.sh # 停止脚本
```
### 微服务结构
每个微服务都遵循相同的结构:
```
service-name/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/jiebanke/service/
│ │ │ ├── controller/ # 控制器层
│ │ │ ├── service/ # 业务逻辑层
│ │ │ ├── mapper/ # 数据访问层
│ │ │ ├── entity/ # 实体类
│ │ │ ├── dto/ # 数据传输对象
│ │ │ ├── config/ # 配置类
│ │ │ └── Application.java # 启动类
│ │ └── resources/
│ │ ├── application.yml # 配置文件
│ │ ├── mapper/ # MyBatis映射文件
│ │ └── bootstrap.yml # Bootstrap配置
│ └── test/ # 测试代码
├── pom.xml # Maven配置
└── Dockerfile # Docker配置
```
## 🚀 开发流程
### 1. 克隆项目
```bash
git clone <repository-url>
cd jiebanke/backend-java
```
### 2. 导入项目到IDE
1. 打开IntelliJ IDEA
2. 选择"Open or Import"
3. 选择`backend-java/pom.xml`文件
4. 等待Maven导入依赖
### 3. 配置数据库
在每个服务的`application.yml`中配置数据库连接:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/jiebanke?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
```
### 4. 启动依赖服务
```bash
# 使用Docker启动MySQL、Redis、RabbitMQ
docker-compose up -d mysql redis rabbitmq
```
### 5. 启动服务
```bash
# 启动Eureka Server
cd eureka-server
mvn spring-boot:run
# 启动其他服务(在新的终端窗口中)
cd ../auth-service
mvn spring-boot:run
# 以此类推启动其他服务...
```
## 📖 代码规范
### 1. 命名规范
- **类名**: 使用大驼峰命名法,如`UserService`
- **方法名**: 使用小驼峰命名法,如`getUserById`
- **变量名**: 使用小驼峰命名法,如`userName`
- **常量名**: 使用大写字母和下划线,如`MAX_SIZE`
### 2. 包命名规范
```
com.jiebanke.{service-name}
├── controller # 控制器层
├── service # 业务逻辑层
├── mapper # 数据访问层
├── entity # 实体类
├── dto # 数据传输对象
├── config # 配置类
├── exception # 异常处理
└── util # 工具类
```
### 3. 注释规范
```java
/**
* 用户服务类
* 提供用户相关的业务逻辑处理
*
* @author 开发者姓名
* @since 1.0.0
*/
@Service
public class UserService {
/**
* 根据用户ID获取用户信息
*
* @param userId 用户ID
* @return 用户信息
* @throws BusinessException 当用户不存在时抛出
*/
public User getUserById(Long userId) {
// 实现代码
}
}
```
### 4. 异常处理规范
```java
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public ApiResponse<User> getUserById(@PathVariable Long id) {
try {
User user = userService.getUserById(id);
return ApiResponse.success(user);
} catch (BusinessException e) {
return ApiResponse.error(e.getCode(), e.getMessage());
} catch (Exception e) {
return ApiResponse.error(500, "系统错误");
}
}
}
```
## 🧪 测试规范
### 1. 单元测试
```java
@SpringBootTest
class UserServiceTest {
@Autowired
private UserService userService;
@MockBean
private UserMapper userMapper;
@Test
void testGetUserById() {
// Given
Long userId = 1L;
User mockUser = new User();
mockUser.setId(userId);
mockUser.setUsername("test");
when(userMapper.selectById(userId)).thenReturn(mockUser);
// When
User user = userService.getUserById(userId);
// Then
assertNotNull(user);
assertEquals(userId, user.getId());
assertEquals("test", user.getUsername());
}
}
```
### 2. 集成测试
```java
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class UserControllerIntegrationTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
void testGetUserById() {
// When
ResponseEntity<ApiResponse<User>> response = restTemplate.getForEntity(
"/api/users/1",
new ParameterizedTypeReference<ApiResponse<User>>() {}
);
// Then
assertEquals(HttpStatus.OK, response.getStatusCode());
assertNotNull(response.getBody());
assertEquals(200, response.getBody().getCode());
}
}
```
## 📦 构建与部署
### 1. 本地构建
```bash
# 清理并构建项目
./build-services.sh
# 或者使用Maven命令
mvn clean install
```
### 2. Docker构建
```bash
# 构建Docker镜像
cd user-service
docker build -t jiebanke/user-service .
# 运行Docker容器
docker run -p 8082:8080 jiebanke/user-service
```
### 3. Docker Compose部署
```bash
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
```
## 🔧 调试技巧
### 1. 远程调试
在启动服务时添加调试参数:
```bash
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
```
### 2. 日志查看
```bash
# 查看实时日志
tail -f logs/application.log
# 查看Docker容器日志
docker-compose logs -f user-service
```
### 3. 性能监控
```bash
# 使用Actuator端点查看健康状态
curl http://localhost:8080/actuator/health
# 查看指标信息
curl http://localhost:8080/actuator/metrics
```
## 🤝 代码贡献
### 1. 分支管理
- `main`: 生产环境分支
- `develop`: 开发环境分支
- `feature/*`: 功能开发分支
- `hotfix/*`: 紧急修复分支
- `release/*`: 发布分支
### 2. 提交规范
```bash
# 提交信息格式
<type>(<scope>): <subject>
# 示例
git commit -m "feat(user): 添加用户注册功能"
git commit -m "fix(order): 修复订单状态更新问题"
git commit -m "docs(readme): 更新README文档"
```
### 3. 代码审查
1. 提交Pull Request
2. 等待团队成员审查
3. 根据反馈修改代码
4. 合并到目标分支
## 🚨 常见问题
### 1. 端口占用问题
```bash
# 查找占用端口的进程
lsof -i :8080
# 杀死进程
kill -9 <PID>
```
### 2. 数据库连接问题
```bash
# 检查MySQL服务
docker-compose ps mysql
# 查看数据库日志
docker-compose logs mysql
```
### 3. 依赖下载失败
```bash
# 清理Maven缓存
mvn clean
# 强制更新依赖
mvn clean install -U
```
## 📚 学习资源
### 1. 官方文档
- [Spring Boot官方文档](https://spring.io/projects/spring-boot)
- [Spring Cloud官方文档](https://spring.io/projects/spring-cloud)
- [MyBatis-Plus官方文档](https://baomidou.com/)
### 2. 技术博客
- [Spring Boot最佳实践](https://www.baeldung.com/spring-boot)
- [微服务架构设计](https://microservices.io/)
### 3. 社区资源
- [Stack Overflow](https://stackoverflow.com/questions/tagged/spring-boot)
- [GitHub Issues](https://github.com/spring-projects/spring-boot/issues)
---
*最后更新: 2025年* 📅

View File

@@ -0,0 +1,517 @@
# 结伴客Java微服务性能优化指南
## 1. JVM调优
### 1.1 堆内存设置
```
# 堆内存大小设置(根据服务器配置调整)
-Xms1g
-Xmx4g
# 新生代大小设置
-Xmn512m
# Metaspace大小设置
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
```
### 1.2 垃圾回收器选择
```
# G1垃圾回收器适用于大堆内存
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=16m
# 或者ZGC垃圾回收器适用于低延迟要求
-XX:+UseZGC
```
## 2. 数据库连接池优化
### 2.1 HikariCP配置在application.yml中
```yaml
spring:
datasource:
hikari:
# 连接池大小
maximum-pool-size: 20
# 最小空闲连接数
minimum-idle: 5
# 连接超时时间
connection-timeout: 30000
# 空闲超时时间
idle-timeout: 600000
# 最大生命周期
max-lifetime: 1800000
# 连接测试查询
connection-test-query: SELECT 1
```
## 3. Redis性能优化
### 3.1 Redis连接池配置
```yaml
spring:
redis:
lettuce:
pool:
# 最大连接数
max-active: 50
# 最大空闲连接数
max-idle: 20
# 最小空闲连接数
min-idle: 10
# 获取连接最大等待时间
max-wait: 2000ms
```
### 3.2 Redis序列化优化
```java
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
// 使用更高效的序列化方式
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
```
## 4. RabbitMQ性能优化
### 4.1 连接池配置
```yaml
spring:
rabbitmq:
listener:
simple:
# 并发消费者数量
concurrency: 10
# 最大并发消费者数量
max-concurrency: 50
# 每个消费者预取的消息数量
prefetch: 10
```
## 5. Feign客户端优化
### 5.1 Feign配置
```java
@Configuration
public class FeignConfig {
@Bean
public Request.Options options() {
// 连接超时时间和读取超时时间
return new Request.Options(5000, 10000);
}
@Bean
public Retryer retryer() {
// 重试策略
return new Retryer.Default(1000, 2000, 3);
}
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.BASIC;
}
}
```
## 6. 线程池优化
### 6.1 自定义线程池
```java
@Configuration
public class ThreadPoolConfig {
@Bean("taskExecutor")
public ExecutorService taskExecutor() {
return new ThreadPoolExecutor(
20, // 核心线程数
100, // 最大线程数
60L, // 空闲线程存活时间
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(200), // 任务队列
new ThreadFactoryBuilder().setNameFormat("task-pool-%d").build(),
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
);
}
}
```
## 7. 缓存策略优化
### 7.1 多级缓存设计
```java
@Service
public class UserService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
// 本地缓存Caffeine
private Cache<String, Object> localCache = Caffeine.newBuilder()
.maximumSize(10000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build();
public User getUserById(Long userId) {
// 1. 先查本地缓存
User user = (User) localCache.getIfPresent("user:" + userId);
if (user != null) {
return user;
}
// 2. 再查Redis缓存
user = (User) redisTemplate.opsForValue().get("user:" + userId);
if (user != null) {
localCache.put("user:" + userId, user);
return user;
}
// 3. 最后查数据库
user = userMapper.selectById(userId);
if (user != null) {
redisTemplate.opsForValue().set("user:" + userId, user, 30, TimeUnit.MINUTES);
localCache.put("user:" + userId, user);
}
return user;
}
}
```
### 7.2 缓存注解使用
```java
@Service
public class TravelService {
@Cacheable(value = "travelPlans", key = "#userId")
public List<TravelPlan> getTravelPlansByUserId(Long userId) {
return travelPlanMapper.selectByUserId(userId);
}
@CacheEvict(value = "travelPlans", key = "#travelPlan.userId")
public void createTravelPlan(TravelPlan travelPlan) {
travelPlanMapper.insert(travelPlan);
}
@CacheEvict(value = "travelPlans", key = "#travelPlan.userId")
public void updateTravelPlan(TravelPlan travelPlan) {
travelPlanMapper.updateById(travelPlan);
}
}
```
## 8. 数据库查询优化
### 8.1 MyBatis-Plus分页优化
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
// 性能分析插件(开发环境使用)
if (environment.acceptsProfiles(Profiles.of("dev"))) {
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
}
return interceptor;
}
}
```
### 8.2 索引优化建议
```sql
-- 用户表索引优化
CREATE INDEX idx_user_username ON users(username);
CREATE INDEX idx_user_email ON users(email);
CREATE INDEX idx_user_phone ON users(phone);
CREATE INDEX idx_user_status ON users(status);
-- 旅行表索引优化
CREATE INDEX idx_travel_user_id ON travel_plans(user_id);
CREATE INDEX idx_travel_destination ON travel_plans(destination);
CREATE INDEX idx_travel_start_date ON travel_plans(start_date);
CREATE INDEX idx_travel_status ON travel_plans(status);
-- 动物表索引优化
CREATE INDEX idx_animal_merchant_id ON animals(merchant_id);
CREATE INDEX idx_animal_species ON animals(species);
CREATE INDEX idx_animal_status ON animals(status);
-- 订单表索引优化
CREATE INDEX idx_order_user_id ON orders(user_id);
CREATE INDEX idx_order_status ON orders(status);
CREATE INDEX idx_order_created_at ON orders(created_at);
-- 推广活动表索引优化
CREATE INDEX idx_promotion_status ON promotion_activities(status);
CREATE INDEX idx_promotion_start_time ON promotion_activities(start_time);
```
## 9. API网关优化
### 9.1 限流配置
```yaml
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/api/users/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 50
redis-rate-limiter.burstCapacity: 100
- id: travel-service
uri: lb://travel-service
predicates:
- Path=/api/travel/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 30
redis-rate-limiter.burstCapacity: 60
```
### 9.2 熔断器配置
```yaml
resilience4j:
circuitbreaker:
instances:
userService:
registerHealthIndicator: true
slidingWindowSize: 10
minimumNumberOfCalls: 5
permittedNumberOfCallsInHalfOpenState: 3
automaticTransitionFromOpenToHalfOpenEnabled: true
waitDurationInOpenState: 10s
failureRateThreshold: 50
eventConsumerBufferSize: 10
```
## 10. 监控和日志优化
### 10.1 Actuator配置
```yaml
management:
endpoints:
web:
exposure:
include: health,info,metrics,httptrace,prometheus
endpoint:
health:
show-details: always
metrics:
export:
prometheus:
enabled: true
```
### 10.2 日志配置优化
```yaml
logging:
level:
com.jiebanke: INFO
org.springframework: WARN
org.mybatis: WARN
org.apache.http: DEBUG
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file:
name: logs/application.log
```
### 10.3 日志文件配置
```xml
<!-- logback-spring.xml -->
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
```
## 11. Docker部署优化
### 11.1 JVM参数优化Dockerfile
```dockerfile
FROM openjdk:17-jdk-slim
LABEL maintainer="jiebanke-team"
WORKDIR /app
COPY target/*.jar app.jar
# JVM参数优化
ENV JAVA_OPTS="-Xms1g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+UseContainerSupport"
EXPOSE 8080
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
```
### 11.2 Docker Compose优化
```yaml
version: '3.8'
services:
user-service:
build:
context: ./user-service
container_name: jiebanke-user
ports:
- "8082:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
- JAVA_OPTS=-Xms1g -Xmx2g
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 1G
networks:
- jiebanke-network
depends_on:
- eureka-server
- mysql
- redis
```
## 12. 负载均衡优化
### 12.1 Ribbon配置
```yaml
ribbon:
# 连接超时时间
ConnectTimeout: 3000
# 读取超时时间
ReadTimeout: 10000
# 是否启用重试
OkToRetryOnAllOperations: false
# 切换实例重试次数
MaxAutoRetriesNextServer: 1
# 当前实例重试次数
MaxAutoRetries: 0
```
### 12.2 LoadBalancer配置
```yaml
spring:
cloud:
loadbalancer:
retry:
enabled: true
cache:
enabled: true
ttl: 30s
```
## 13. 微服务间通信优化
### 13.1 OpenFeign配置
```yaml
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 10000
compression:
request:
enabled: true
mime-types: text/xml,application/xml,application/json
min-request-size: 2048
response:
enabled: true
httpclient:
enabled: true
max-connections: 200
max-connections-per-route: 50
```
## 14. 性能测试建议
### 14.1 压力测试工具
- JMeter用于API接口压力测试
- wrk用于HTTP基准测试
- ab (Apache Bench)简单的HTTP性能测试工具
- Gatling高性能负载测试工具
### 14.2 监控工具
- Prometheus + Grafana系统指标监控
- ELK Stack日志分析
- SkyWalking分布式追踪
- Zipkin服务调用链追踪
### 14.3 性能测试脚本示例
```bash
# 使用wrk进行压力测试
wrk -t12 -c400 -d30s http://localhost:8080/api/users/profile
# 使用ab进行基准测试
ab -n 10000 -c 100 http://localhost:8080/api/users/profile
```
## 15. 性能调优最佳实践
### 15.1 代码层面优化
1. 避免在循环中执行数据库查询
2. 使用批量操作减少数据库交互
3. 合理使用缓存减少重复计算
4. 优化算法复杂度
5. 减少对象创建和垃圾回收
### 15.2 数据库层面优化
1. 合理设计索引
2. 避免全表扫描
3. 使用分页查询
4. 优化SQL语句
5. 定期分析慢查询日志
### 15.3 系统层面优化
1. 合理配置JVM参数
2. 优化操作系统内核参数
3. 使用SSD存储提升IO性能
4. 合理配置网络参数
5. 使用CDN加速静态资源
通过以上优化措施可以显著提升结伴客Java微服务的性能和稳定性。
---
*最后更新: 2025年* 📅

73
docs/README.md Normal file
View File

@@ -0,0 +1,73 @@
# 结伴客项目文档目录
## 📚 文档列表
### Java微服务版本文档
| 文档 | 描述 | 最后更新 |
|------|------|----------|
| [架构设计文档](architecture-java.md) | 系统整体架构设计 | 2025-09-10 |
| [API接口文档](API_DOCS_JAVA.md) | 所有API接口详细说明 | 2025-09-10 |
| [数据库设计文档](database-design-java.md) | 数据库表结构和关系设计 | 2025-09-10 |
| [部署指南](DEPLOYMENT_JAVA.md) | 项目部署和运维指南 | 2025-09-10 |
| [性能优化指南](PERFORMANCE_OPTIMIZATION_JAVA.md) | 系统性能优化建议 | 2025-09-10 |
| [开发指南](DEVELOPMENT_GUIDE_JAVA.md) | 开发者入门和开发规范 | 2025-09-10 |
| [更新日志](CHANGELOG_JAVA.md) | 版本更新和变更记录 | 2025-09-10 |
### Node.js版本文档 (已废弃)
| 文档 | 描述 | 最后更新 |
|------|------|----------|
| [架构设计文档](architecture.md) | 系统整体架构设计 | 2024-01-01 |
| [API接口文档](API_DOCS.md) | 所有API接口详细说明 | 2024-01-01 |
| [数据库设计文档](database-design.md) | 数据库表结构和关系设计 | 2024-01-01 |
| [部署指南](DEPLOYMENT.md) | 项目部署和运维指南 | 2024-01-01 |
## 🗂️ 文档分类
### 系统设计文档
- [架构设计文档](architecture-java.md) - 系统整体架构、技术选型、组件关系
- [数据库设计文档](database-design-java.md) - 数据库表结构、ER图、索引设计
### 开发文档
- [API接口文档](API_DOCS_JAVA.md) - RESTful API详细说明、请求响应格式
- [开发指南](DEVELOPMENT_GUIDE_JAVA.md) - 开发环境搭建、编码规范、测试指南
### 运维文档
- [部署指南](DEPLOYMENT_JAVA.md) - 环境要求、部署步骤、容器化部署
- [性能优化指南](PERFORMANCE_OPTIMIZATION_JAVA.md) - JVM调优、数据库优化、缓存策略
### 项目管理文档
- [更新日志](CHANGELOG_JAVA.md) - 版本变更记录、功能新增、问题修复
## 🚀 快速开始
### 1. 了解系统架构
首先阅读 [架构设计文档](architecture-java.md) 了解系统整体设计和技术栈。
### 2. 搭建开发环境
按照 [开发指南](DEVELOPMENT_GUIDE_JAVA.md) 搭建本地开发环境。
### 3. 学习API接口
查看 [API接口文档](API_DOCS_JAVA.md) 了解系统提供的所有接口。
### 4. 部署系统
参考 [部署指南](DEPLOYMENT_JAVA.md) 将系统部署到服务器。
## 📝 文档维护
### 更新流程
1. 修改相应文档文件
2. 提交Pull Request
3. 团队审查后合并
### 贡献指南
欢迎提交Issue和Pull Request来改进文档。
## 📞 联系我们
- 📧 邮箱: support@jiebanke.com
- 🌐 官网: https://www.jiebanke.com
---
*最后更新: 2025年9月10日* 📅

505
docs/architecture-java.md Normal file
View File

@@ -0,0 +1,505 @@
# 🏗️ 结伴客Java微服务架构文档
## 📋 项目概述
结伴客项目是一个综合性的管理系统包含后台管理、微信小程序和官网三个主要模块。本项目采用Java微服务架构基于Spring Boot和Spring Cloud实现。
## 🎯 技术栈
### 后端技术栈
- **运行时**: Java 17
- **框架**: Spring Boot 3.1.0 + Spring Cloud 2022.0.3
- **服务注册与发现**: Eureka Server
- **API网关**: Spring Cloud Gateway
- **数据库**: MySQL 8.0
- **ORM**: MyBatis-Plus 3.5.3.1
- **认证**: JWT + Spring Security
- **缓存**: Redis 6.0+
- **消息队列**: RabbitMQ 3.8+
- **构建工具**: Maven 3.6+
### 前端技术栈
- **后台管理系统**: Vue 3 + Element Plus
- **微信小程序**: 原生小程序 + Vant Weapp
- **官方网站**: Vue 3 + Vue Router
### 开发工具
- **包管理**: npm
- **容器化**: Docker + Docker Compose
- **代码质量**: Checkstyle + PMD
- **测试**: JUnit 5 + Mockito
## 🏢 系统架构
```mermaid
graph TB
subgraph "前端应用"
A[后台管理系统]
B[微信小程序]
C[官方网站]
end
subgraph "API网关层"
D[Spring Cloud Gateway]
end
subgraph "微服务层"
E[Eureka Server]
F[Auth Service]
G[User Service]
H[Travel Service]
I[Animal Service]
J[Order Service]
K[Promotion Service]
end
subgraph "数据层"
L[MySQL]
M[Redis]
N[RabbitMQ]
end
A --> D
B --> D
C --> D
D --> F
D --> G
D --> H
D --> I
D --> J
D --> K
F --> L
G --> L
H --> L
I --> L
J --> L
K --> L
F --> M
G --> M
H --> M
I --> M
J --> M
K --> M
F --> N
G --> N
H --> N
I --> N
J --> N
K --> N
E --> F
E --> G
E --> H
E --> I
E --> J
E --> K
```
## 🗄️ 数据库设计
### 核心表结构设计
```mermaid
erDiagram
USERS ||--o{ TRAVEL_PLANS : creates
USERS ||--o{ ANIMAL_CLAIMS : claims
USERS ||--o{ FLOWER_ORDERS : places
MERCHANTS ||--o{ ANIMALS : owns
MERCHANTS ||--o{ FLOWER_PRODUCTS : sells
ANIMALS ||--o{ ANIMAL_CLAIMS : claimed_by
FLOWER_PRODUCTS ||--o{ FLOWER_ORDERS : ordered
TRAVEL_PLANS ||--o{ TRAVEL_INVITATIONS : has
ADMINS ||--o{ ADMIN_LOGS : manages
USERS {
bigint id PK
varchar username
varchar password
varchar email
varchar phone
varchar real_name
varchar id_card
varchar status
decimal balance
int credit_score
timestamp last_login
timestamp created_at
timestamp updated_at
}
ADMINS {
bigint id PK
varchar username
varchar password
varchar email
varchar role
varchar status
timestamp last_login
timestamp created_at
timestamp updated_at
}
MERCHANTS {
bigint id PK
bigint user_id FK
varchar merchant_type
varchar business_name
varchar business_license
varchar contact_person
varchar contact_phone
varchar address
varchar description
varchar status
timestamp created_at
timestamp updated_at
}
TRAVEL_PLANS {
bigint id PK
bigint user_id FK
varchar destination
date start_date
date end_date
decimal budget
text interests
text description
varchar visibility
varchar status
timestamp created_at
timestamp updated_at
}
ANIMALS {
bigint id PK
bigint merchant_id FK
varchar name
varchar species
varchar breed
date birth_date
text personality
varchar farm_location
decimal price
int claim_count
varchar status
timestamp created_at
timestamp updated_at
}
ANIMAL_CLAIMS {
bigint id PK
bigint user_id FK
bigint animal_id FK
int duration
decimal total_amount
varchar status
date start_date
date end_date
timestamp created_at
timestamp updated_at
}
FLOWER_PRODUCTS {
bigint id PK
bigint merchant_id FK
varchar name
text description
decimal price
decimal original_price
json images
varchar category
int sales_count
decimal rating
varchar status
timestamp created_at
timestamp updated_at
}
FLOWER_ORDERS {
bigint id PK
bigint user_id FK
bigint product_id FK
varchar order_number
int quantity
decimal total_amount
json recipient_info
date delivery_date
varchar message
varchar status
timestamp created_at
timestamp updated_at
}
PROMOTION_ACTIVITIES {
bigint id PK
varchar name
text description
varchar reward_type
decimal reward_amount
varchar status
timestamp start_time
timestamp end_time
int max_participants
int current_participants
timestamp created_at
timestamp updated_at
}
REWARD_RECORDS {
bigint id PK
bigint user_id
varchar user_name
varchar user_phone
bigint activity_id
varchar activity_name
varchar reward_type
decimal reward_amount
varchar status
timestamp issued_at
timestamp created_at
}
```
## 🌐 环境配置
### 开发环境 (Development)
```env
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=root
DB_DATABASE=jiebanke
NODE_ENV=development
```
### 测试环境 (Test)
```env
DB_HOST=192.168.0.240
DB_PORT=3306
DB_USER=root
DB_PASSWORD=aiotAiot123!
DB_DATABASE=jiebandata_test
NODE_ENV=test
```
### 生产环境 (Production)
```env
DB_HOST=129.211.213.226
DB_PORT=9527
DB_USER=root
DB_PASSWORD=Aiot123
DB_DATABASE=jiebandata
NODE_ENV=production
```
## 🔌 API 设计
### 用户模块接口
#### 微信用户登录
- **Endpoint:** `POST /api/auth/wechat-login`
- **Method:** POST
- **Description:** 微信用户登录获取Token
- **Request Body:**
```json
{
"code": "string, required",
"userInfo": {
"nickName": "string, required",
"avatarUrl": "string, required",
"gender": "number, optional",
"province": "string, optional",
"city": "string, optional"
}
}
```
- **Response:**
```json
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"username": "旅行达人",
"avatar": "https://avatar.url",
"gender": "male",
"phone": "13800138000"
}
}
}
```
#### 获取用户信息
- **Endpoint:** `GET /api/users/profile`
- **Method:** GET
- **Description:** 获取当前登录用户详细信息
- **Headers:** `Authorization: Bearer <token>`
- **Response:**
```json
{
"code": 200,
"message": "获取成功",
"data": {
"id": 1,
"username": "旅行达人",
"avatar": "https://avatar.url",
"gender": "male",
"birthday": "1990-01-01",
"phone": "13800138000",
"email": "test@jiebanke.com",
"travelCount": 5,
"animalClaimCount": 2,
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
}
```
## 🚀 部署架构
### 开发部署
```mermaid
graph LR
A[本地开发机] --> B[Docker Compose]
B --> C[MySQL容器]
B --> D[Redis容器]
B --> E[RabbitMQ容器]
B --> F[微服务容器]
```
### 生产部署
```mermaid
graph TB
subgraph "负载均衡器"
A[Nginx]
end
subgraph "微服务集群"
B[API网关集群]
C[认证服务集群]
D[用户服务集群]
E[旅行服务集群]
F[动物服务集群]
G[订单服务集群]
H[推广服务集群]
end
subgraph "基础设施"
I[MySQL主从]
J[Redis集群]
K[RabbitMQ集群]
L[Eureka集群]
end
A --> B
B --> C
B --> D
B --> E
B --> F
B --> G
B --> H
C --> I
C --> J
C --> K
D --> I
D --> J
D --> K
E --> I
E --> J
E --> K
F --> I
F --> J
F --> K
G --> I
G --> J
G --> K
H --> I
H --> J
H --> K
```
## 📊 监控与日志
- **应用监控**: Spring Boot Actuator + Prometheus + Grafana
- **日志管理**: Logback + ELK Stack
- **性能监控**: Micrometer + Prometheus
- **错误追踪**: Sentry
## 🔒 安全架构
### 认证授权
- JWT Token 认证
- RBAC (基于角色的访问控制)
- API 速率限制
### 数据安全
- HTTPS 加密传输
- 密码加盐哈希存储
- SQL 注入防护
- XSS 攻击防护
### 网络安全
- 防火墙规则
- IP 白名单
- DDoS 防护
## 📈 性能优化
### 数据库优化
- 索引优化
- 查询缓存
- 读写分离
### 应用优化
- JVM调优
- 连接池优化
- 缓存策略优化
### 微服务优化
- 负载均衡
- 熔断机制
- 服务降级
## 🛠️ 开发规范
### 代码规范
- Checkstyle + PMD 统一代码风格
- Git Commit 消息规范
- 代码审查流程
### 分支策略
- Git Flow 工作流
- 功能分支开发
- 发布分支管理
### 测试策略
- 单元测试覆盖核心逻辑
- 集成测试API接口
- 压力测试性能指标
## 📝 文档体系
1. **ARCHITECTURE.md** - 系统架构文档 (当前文件)
2. **README.md** - 项目说明文档
3. **API_DOCS.md** - API接口文档
4. **DEPLOYMENT.md** - 部署指南
5. **DEVELOPMENT.md** - 开发指南
## 🎯 后续规划
### 短期目标
- [x] 完成用户管理系统
- [x] 实现订单业务流程
- [x] 部署测试环境
### 中期目标
- [x] 微服务架构改造
- [x] 容器化部署
- [ ] 自动化测试覆盖
### 长期目标
- [ ] 大数据分析平台
- [ ] AI智能推荐
- [ ] 多语言国际化
---
*最后更新: 2025年* 📅

View File

@@ -0,0 +1,717 @@
# 结伴客Java微服务系统数据库设计文档
## 1. 数据库概览
### 1.1 数据库配置
#### 开发环境
- **主机**: localhost
- **端口**: 3306
- **用户名**: root
- **密码**: root
- **数据库**: jiebanke
#### 测试环境
- **主机**: 192.168.0.240
- **端口**: 3306
- **用户名**: root
- **密码**: aiot$Aiot123
- **数据库**: jiebandata_test
#### 生产环境
- **主机**: 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
PROMOTION_ACTIVITIES ||--o{ REWARD_RECORDS : rewards
USERS {
bigint id PK
varchar username
varchar password
varchar email
varchar phone
varchar real_name
varchar id_card
varchar status
decimal balance
int credit_score
timestamp last_login
timestamp created_at
timestamp updated_at
}
ADMINS {
bigint id PK
varchar username
varchar password
varchar email
varchar role
varchar status
timestamp last_login
timestamp created_at
timestamp updated_at
}
MERCHANTS {
bigint id PK
bigint user_id FK
varchar merchant_type
varchar business_name
varchar business_license
varchar contact_person
varchar contact_phone
varchar address
varchar description
varchar status
timestamp created_at
timestamp updated_at
}
TRAVEL_PLANS {
bigint id PK
bigint user_id FK
varchar destination
date start_date
date end_date
decimal budget
text interests
varchar visibility
timestamp created_at
timestamp updated_at
}
ANIMALS {
bigint id PK
bigint merchant_id FK
varchar name
varchar species
varchar breed
date birth_date
text personality
varchar farm_location
decimal price
varchar status
timestamp created_at
timestamp updated_at
}
ORDERS {
bigint id PK
bigint user_id FK
bigint merchant_id FK
varchar order_number
decimal total_amount
varchar status
varchar delivery_address
timestamp ordered_at
timestamp completed_at
}
PRODUCTS {
bigint id PK
bigint merchant_id FK
varchar name
text description
decimal price
varchar image_url
varchar category
varchar status
timestamp created_at
timestamp updated_at
}
PROMOTION_ACTIVITIES {
bigint id PK
varchar name
text description
varchar reward_type
decimal reward_amount
varchar status
timestamp start_time
timestamp end_time
int max_participants
int current_participants
timestamp created_at
timestamp updated_at
}
REWARD_RECORDS {
bigint id PK
bigint user_id
varchar user_name
varchar user_phone
bigint activity_id
varchar activity_name
varchar reward_type
decimal reward_amount
varchar status
timestamp issued_at
timestamp created_at
}
```
## 2. 核心表结构设计
### 2.1 用户表 (users)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 用户ID |
| username | VARCHAR(50) | UNIQUE, NOT NULL | 用户名 |
| password | VARCHAR(255) | NOT NULL | 密码(bcrypt加密) |
| email | VARCHAR(100) | UNIQUE | 邮箱地址 |
| phone | VARCHAR(20) | UNIQUE | 手机号码 |
| real_name | VARCHAR(100) | | 真实姓名 |
| id_card | VARCHAR(20) | UNIQUE | 身份证号 |
| status | VARCHAR(20) | DEFAULT 'active' | 状态(active/inactive) |
| balance | DECIMAL(15,2) | DEFAULT 0.00 | 账户余额 |
| credit_score | INT | DEFAULT 100 | 信用分 |
| last_login | TIMESTAMP | | 最后登录时间 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.2 管理员表 (admins)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 管理员ID |
| username | VARCHAR(50) | UNIQUE, NOT NULL | 管理员用户名 |
| password | VARCHAR(255) | NOT NULL | 密码(bcrypt加密) |
| email | VARCHAR(100) | UNIQUE | 邮箱地址 |
| role | VARCHAR(20) | DEFAULT 'admin' | 角色(super_admin/admin/operator) |
| status | VARCHAR(20) | DEFAULT 'active' | 状态(active/inactive) |
| last_login | TIMESTAMP | | 最后登录时间 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.3 商家表 (merchants)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 商家ID |
| user_id | BIGINT | FOREIGN KEY, NOT NULL | 关联的用户ID |
| merchant_type | VARCHAR(50) | NOT NULL | 商家类型(flower_shop/activity_organizer/farm_owner) |
| 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 | VARCHAR(20) | DEFAULT 'pending' | 商家状态(pending/approved/rejected/suspended) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.4 订单表 (orders)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 订单ID |
| user_id | BIGINT | FOREIGN KEY, NOT NULL | 用户ID |
| merchant_id | BIGINT | FOREIGN KEY, NOT NULL | 商家ID |
| order_number | VARCHAR(50) | UNIQUE, NOT NULL | 订单编号 |
| total_amount | DECIMAL(15,2) | NOT NULL | 订单总金额 |
| status | VARCHAR(20) | DEFAULT 'pending' | 订单状态(pending/paid/shipped/completed/cancelled) |
| delivery_address | VARCHAR(255) | | 配送地址 |
| ordered_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 下单时间 |
| completed_at | TIMESTAMP | | 完成时间 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.5 商品表 (products)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 商品ID |
| merchant_id | BIGINT | 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 | VARCHAR(20) | DEFAULT 'active' | 商品状态(active/inactive/deleted) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.6 动物表 (animals)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 动物ID |
| merchant_id | BIGINT | 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 | VARCHAR(20) | DEFAULT 'available' | 状态(available/claimed/unavailable) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.7 动物认领表 (animal_claims)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 认领ID |
| user_id | BIGINT | FOREIGN KEY, NOT NULL | 用户ID |
| animal_id | BIGINT | FOREIGN KEY, NOT NULL | 动物ID |
| price_paid | DECIMAL(10,2) | NOT NULL | 支付金额 |
| agreement_url | VARCHAR(255) | | 电子协议URL |
| status | VARCHAR(20) | DEFAULT 'active' | 认领状态(active/ended/cancelled) |
| claimed_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 认领时间 |
| ended_at | TIMESTAMP | | 结束时间 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.8 送花商品表 (flower_products)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 商品ID |
| merchant_id | BIGINT | 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 | VARCHAR(20) | DEFAULT 'active' | 商品状态(active/inactive/deleted) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.9 送花订单表 (flower_orders)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 订单ID |
| user_id | BIGINT | FOREIGN KEY, NOT NULL | 用户ID |
| product_id | BIGINT | FOREIGN KEY, NOT NULL | 商品ID |
| order_number | VARCHAR(50) | UNIQUE, NOT NULL | 订单编号 |
| quantity | INT | NOT NULL | 数量 |
| total_amount | DECIMAL(15,2) | NOT NULL | 订单总金额 |
| recipient_info | JSON | | 收花人信息 |
| delivery_date | DATE | | 配送日期 |
| message | VARCHAR(500) | | 祝福语 |
| status | VARCHAR(20) | DEFAULT 'pending' | 订单状态(pending/paid/shipped/completed/cancelled) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.10 旅行邀请表 (travel_invitations)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 邀请ID |
| travel_plan_id | BIGINT | FOREIGN KEY, NOT NULL | 旅行计划ID |
| inviter_id | BIGINT | FOREIGN KEY, NOT NULL | 邀请人ID |
| invitee_id | BIGINT | FOREIGN KEY, NOT NULL | 被邀请人ID |
| message | VARCHAR(500) | | 邀请消息 |
| status | VARCHAR(20) | DEFAULT 'pending' | 邀请状态(pending/accepted/rejected/cancelled) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.11 旅行匹配表 (travel_matches)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 匹配ID |
| plan_id | BIGINT | FOREIGN KEY, NOT NULL | 旅行计划ID |
| matched_plan_id | BIGINT | FOREIGN KEY, NOT NULL | 匹配的旅行计划ID |
| match_score | DECIMAL(5,4) | NOT NULL | 匹配分数 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
### 2.12 旅行计划表 (travel_plans)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 计划ID |
| user_id | BIGINT | FOREIGN KEY, NOT NULL | 用户ID |
| destination | VARCHAR(100) | NOT NULL | 目的地 |
| start_date | DATE | NOT NULL | 开始日期 |
| end_date | DATE | NOT NULL | 结束日期 |
| budget | DECIMAL(10,2) | | 预算 |
| interests | TEXT | | 兴趣偏好 |
| description | TEXT | | 描述 |
| visibility | VARCHAR(20) | DEFAULT 'public' | 可见范围(public/friends/private) |
| status | VARCHAR(20) | DEFAULT 'active' | 状态(active/completed/cancelled) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.13 推广活动表 (promotion_activities)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 活动ID |
| name | VARCHAR(100) | NOT NULL | 活动名称 |
| description | TEXT | | 活动描述 |
| reward_type | VARCHAR(20) | | 奖励类型(cash/coupon/points) |
| reward_amount | DECIMAL(10,2) | | 奖励金额 |
| status | VARCHAR(20) | DEFAULT 'active' | 活动状态(active/inactive/expired) |
| start_time | TIMESTAMP | | 开始时间 |
| end_time | TIMESTAMP | | 结束时间 |
| max_participants | INT | | 最大参与人数 |
| current_participants | INT | DEFAULT 0 | 当前参与人数 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
### 2.14 奖励记录表 (reward_records)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 记录ID |
| user_id | BIGINT | | 用户ID |
| user_name | VARCHAR(50) | | 用户姓名 |
| user_phone | VARCHAR(20) | | 用户手机号 |
| activity_id | BIGINT | | 活动ID |
| activity_name | VARCHAR(100) | | 活动名称 |
| reward_type | VARCHAR(20) | | 奖励类型 |
| reward_amount | DECIMAL(10,2) | | 奖励金额 |
| status | VARCHAR(20) | DEFAULT 'pending' | 状态(pending/issued/cancelled) |
| issued_at | TIMESTAMP | | 发放时间 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
### 2.15 管理员操作日志表 (admin_operation_logs)
| 字段名 | 类型 | 约束 | 描述 |
|--------|------|------|------|
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | 日志ID |
| admin_id | BIGINT | 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 | BIGINT | | 目标ID |
| target_name | VARCHAR(100) | | 目标名称 |
| old_value | TEXT | | 操作前值 |
| new_value | TEXT | | 操作后值 |
| ip_address | VARCHAR(45) | | 操作IP地址 |
| user_agent | VARCHAR(500) | | 用户代理信息 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
## 3. 微服务API接口规范
### 3.1 接口统一格式
#### 请求格式
- **Base URL**: http://localhost:8080/api/
- **认证**: Bearer Token (需要认证的接口)
- **Content-Type**: application/json
#### 响应格式
```json
{
"code": 200,
"message": "操作成功",
"data": {
// 具体数据
},
"pagination": {
// 分页信息(列表接口)
}
}
```
### 3.2 通用状态码
| 状态码 | 描述 |
|--------|------|
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | 未授权 |
| 403 | 权限不足 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
### 3.3 认证接口
#### 3.3.1 微信用户登录
- **Endpoint**: POST /auth/wechat-login
- **认证要求**: 无
- **请求体**:
```json
{
"code": "string, required",
"userInfo": {
"nickName": "string, required",
"avatarUrl": "string, required",
"gender": "number, optional",
"province": "string, optional",
"city": "string, optional"
}
}
```
#### 3.3.2 获取用户信息
- **Endpoint**: GET /users/profile
- **认证要求**: Bearer Token
### 3.4 用户管理接口
#### 3.4.1 获取用户列表
- **Endpoint**: GET /admin/users
- **认证要求**: Bearer Token
- **查询参数**: page, limit, username, status
#### 3.4.2 获取用户详情
- **Endpoint**: GET /admin/users/{id}
- **认证要求**: Bearer Token
#### 3.4.3 更新用户状态
- **Endpoint**: PUT /admin/users/{id}/status
- **认证要求**: Bearer Token
### 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
### 3.7 推广活动接口
#### 3.7.1 获取推广活动列表
- **Endpoint**: GET /admin/promotions
- **认证要求**: Bearer Token
- **查询参数**: page, limit, name, status
#### 3.7.2 创建推广活动
- **Endpoint**: POST /admin/promotions
- **认证要求**: Bearer Token
#### 3.7.3 更新推广活动
- **Endpoint**: PUT /admin/promotions/{id}
- **认证要求**: Bearer Token
## 4. 数据库初始化脚本
### 4.1 创建数据库和表
```sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS jiebanke CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE jiebanke;
-- 创建管理员表
CREATE TABLE IF NOT EXISTS admins (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100),
role VARCHAR(20) DEFAULT 'admin',
status VARCHAR(20) DEFAULT 'active',
last_login TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 创建用户表
CREATE TABLE IF NOT EXISTS users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) UNIQUE,
phone VARCHAR(20),
real_name VARCHAR(100),
id_card VARCHAR(20),
status VARCHAR(20) DEFAULT 'active',
balance DECIMAL(15,2) DEFAULT 0.00,
credit_score INT DEFAULT 100,
last_login TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 创建订单表
CREATE TABLE IF NOT EXISTS orders (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
order_no VARCHAR(50) NOT NULL UNIQUE,
amount DECIMAL(15,2) NOT NULL,
status VARCHAR(20) DEFAULT 'pending',
type VARCHAR(20) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 创建旅行计划表
CREATE TABLE IF NOT EXISTS travel_plans (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
destination VARCHAR(100) NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
budget DECIMAL(10,2),
interests TEXT,
description TEXT,
visibility VARCHAR(20) DEFAULT 'public',
status VARCHAR(20) DEFAULT 'active',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 创建动物表
CREATE TABLE IF NOT EXISTS animals (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
merchant_id BIGINT NOT NULL,
name VARCHAR(50) NOT NULL,
species VARCHAR(50) NOT NULL,
breed VARCHAR(50),
birth_date DATE,
personality TEXT,
farm_location VARCHAR(255),
price DECIMAL(10,2) NOT NULL,
claim_count INT DEFAULT 0,
status VARCHAR(20) DEFAULT 'available',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 创建推广活动表
CREATE TABLE IF NOT EXISTS promotion_activities (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
reward_type VARCHAR(20),
reward_amount DECIMAL(10,2),
status VARCHAR(20) DEFAULT 'active',
start_time TIMESTAMP,
end_time TIMESTAMP,
max_participants INT,
current_participants INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 创建奖励记录表
CREATE TABLE IF NOT EXISTS reward_records (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT,
user_name VARCHAR(50),
user_phone VARCHAR(20),
activity_id BIGINT,
activity_name VARCHAR(100),
reward_type VARCHAR(20),
reward_amount DECIMAL(10,2),
status VARCHAR(20) DEFAULT 'pending',
issued_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
### 4.2 插入默认数据
```sql
-- 插入默认管理员账号
INSERT INTO admins (username, password, email, role) VALUES
('admin', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin@jiebanke.com', 'super_admin'),
('manager', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'manager@jiebanke.com', 'admin');
-- 插入测试用户账号
INSERT INTO users (username, password, email, phone, real_name, id_card, balance, credit_score) VALUES
('user1', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'user1@jiebanke.com', '13800138001', '张三', '110101199001011234', 1000.00, 95),
('user2', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'user2@jiebanke.com', '13800138002', '李四', '110101199002022345', 500.00, 85);
```
### 4.3 创建索引
```sql
-- 创建索引
CREATE INDEX idx_admins_username ON admins(username);
CREATE INDEX idx_admins_email ON admins(email);
CREATE INDEX idx_users_username ON users(username);
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_phone ON users(phone);
CREATE INDEX idx_orders_user_id ON orders(user_id);
CREATE INDEX idx_orders_order_no ON orders(order_no);
CREATE INDEX idx_orders_status ON orders(status);
CREATE INDEX idx_travel_plans_user_id ON travel_plans(user_id);
CREATE INDEX idx_travel_plans_destination ON travel_plans(destination);
CREATE INDEX idx_animals_species ON animals(species);
CREATE INDEX idx_animals_status ON animals(status);
CREATE INDEX idx_promotion_activities_status ON promotion_activities(status);
CREATE INDEX idx_reward_records_user_id ON reward_records(user_id);
CREATE INDEX idx_reward_records_activity_id ON reward_records(activity_id);
```
## 5. 数据库维护
### 5.1 备份策略
- 每日全量备份
- 每小时增量备份
- 备份保留30天
### 5.2 性能优化
- 为常用查询字段创建索引
- 定期分析慢查询日志
- 数据库连接池配置优化
### 5.3 安全措施
- 定期更换数据库密码
- 限制数据库访问IP
- 启用SSL加密连接
## 6. 微服务数据分片建议
### 6.1 用户服务数据表
- users
- user_profiles
- user_settings
### 6.2 旅行服务数据表
- travel_plans
- travel_invitations
- travel_matches
### 6.3 动物服务数据表
- animals
- animal_claims
- animal_updates
### 6.4 订单服务数据表
- orders
- order_items
- payments
### 6.5 推广服务数据表
- promotion_activities
- reward_records
- participant_records
---
*最后更新: 2025年* 📅