由于本次代码变更内容为空,无法生成有效的提交信息。请提供具体的代码变更内容以便生成合适的提交信息。
This commit is contained in:
225
README_JAVA.md
Normal file
225
README_JAVA.md
Normal 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
617
docs/API_DOCS_JAVA.md
Normal file
@@ -0,0 +1,617 @@
|
||||
# 📚 结伴客Java微服务API接口文档
|
||||
|
||||
## 📋 文档说明
|
||||
本文档详细描述了结伴客项目Java微服务架构的所有API接口,包括请求参数、响应格式和错误代码。结伴客是一个专注于结伴旅行和动物认领的社交平台。
|
||||
|
||||
## 🔐 认证方式
|
||||
|
||||
### JWT Token 认证
|
||||
所有需要认证的API必须在请求头中携带Token:
|
||||
```
|
||||
Authorization: Bearer <your_jwt_token>
|
||||
```
|
||||
|
||||
### Token 获取
|
||||
通过微信登录接口获取Token,Token有效期为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
136
docs/CHANGELOG_JAVA.md
Normal 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
596
docs/DEPLOYMENT_JAVA.md
Normal 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年* 📅
|
||||
404
docs/DEVELOPMENT_GUIDE_JAVA.md
Normal file
404
docs/DEVELOPMENT_GUIDE_JAVA.md
Normal 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年* 📅
|
||||
517
docs/PERFORMANCE_OPTIMIZATION_JAVA.md
Normal file
517
docs/PERFORMANCE_OPTIMIZATION_JAVA.md
Normal 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
73
docs/README.md
Normal 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
505
docs/architecture-java.md
Normal 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年* 📅
|
||||
717
docs/database-design-java.md
Normal file
717
docs/database-design-java.md
Normal 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年* 📅
|
||||
Reference in New Issue
Block a user