diff --git a/README_JAVA.md b/README_JAVA.md new file mode 100644 index 0000000..c41e5f7 --- /dev/null +++ b/README_JAVA.md @@ -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年* 📅 \ No newline at end of file diff --git a/docs/API_DOCS_JAVA.md b/docs/API_DOCS_JAVA.md new file mode 100644 index 0000000..067d5cc --- /dev/null +++ b/docs/API_DOCS_JAVA.md @@ -0,0 +1,617 @@ +# 📚 结伴客Java微服务API接口文档 + +## 📋 文档说明 +本文档详细描述了结伴客项目Java微服务架构的所有API接口,包括请求参数、响应格式和错误代码。结伴客是一个专注于结伴旅行和动物认领的社交平台。 + +## 🔐 认证方式 + +### JWT Token 认证 +所有需要认证的API必须在请求头中携带Token: +``` +Authorization: Bearer +``` + +### 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 +``` + +**响应示例:** +```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 +``` + +**请求参数:** +```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 +``` + +**查询参数:** +``` +?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 +``` + +**请求参数:** +```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 +``` + +**请求参数:** +```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 +``` + +**请求参数:** +```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 +``` + +**请求参数:** +```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 " +``` + +### 使用Postman测试 +1. 导入Postman集合文件 +2. 设置环境变量(base_url, token等) +3. 运行测试用例 + +## 📝 更新日志 + +### v1.0.0 (2025-09-10) +- 微信用户登录接口 +- 旅行结伴管理接口 +- 动物认领管理接口 +- 送花服务接口 +- 推广活动接口 +- 基础认证系统 + +--- +*最后更新: 2025年* 📅 \ No newline at end of file diff --git a/docs/CHANGELOG_JAVA.md b/docs/CHANGELOG_JAVA.md new file mode 100644 index 0000000..8b278bb --- /dev/null +++ b/docs/CHANGELOG_JAVA.md @@ -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日* 📅 \ No newline at end of file diff --git a/docs/DEPLOYMENT_JAVA.md b/docs/DEPLOYMENT_JAVA.md new file mode 100644 index 0000000..ace0261 --- /dev/null +++ b/docs/DEPLOYMENT_JAVA.md @@ -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 +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 +``` + +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 + +# 重新构建容器 +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年* 📅 \ No newline at end of file diff --git a/docs/DEVELOPMENT_GUIDE_JAVA.md b/docs/DEVELOPMENT_GUIDE_JAVA.md new file mode 100644 index 0000000..b528600 --- /dev/null +++ b/docs/DEVELOPMENT_GUIDE_JAVA.md @@ -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 +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 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> response = restTemplate.getForEntity( + "/api/users/1", + new ParameterizedTypeReference>() {} + ); + + // 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 +# 提交信息格式 +(): + +# 示例 +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 +``` + +### 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年* 📅 \ No newline at end of file diff --git a/docs/PERFORMANCE_OPTIMIZATION_JAVA.md b/docs/PERFORMANCE_OPTIMIZATION_JAVA.md new file mode 100644 index 0000000..95b1993 --- /dev/null +++ b/docs/PERFORMANCE_OPTIMIZATION_JAVA.md @@ -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 redisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate 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 redisTemplate; + + // 本地缓存(Caffeine) + private Cache 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 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 + + + + logs/application.log + + logs/application.%d{yyyy-MM-dd}.%i.log + + 100MB + + 30 + 10GB + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + + +``` + +## 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年* 📅 \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..3694c12 --- /dev/null +++ b/docs/README.md @@ -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日* 📅 \ No newline at end of file diff --git a/docs/architecture-java.md b/docs/architecture-java.md new file mode 100644 index 0000000..8421a85 --- /dev/null +++ b/docs/architecture-java.md @@ -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 ` +- **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年* 📅 \ No newline at end of file diff --git a/docs/database-design-java.md b/docs/database-design-java.md new file mode 100644 index 0000000..a71361b --- /dev/null +++ b/docs/database-design-java.md @@ -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年* 📅 \ No newline at end of file