# tanhua
**Repository Path**: Dlow71/tanhua
## Basic Information
- **Project Name**: tanhua
- **Description**: 微服务架构社交平台,集成智能推荐、即时通讯、LBS定位,采用MongoDB+MySQL混合存储。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 0
- **Created**: 2023-09-19
- **Last Updated**: 2025-10-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Dubbo, MongoDB
## README
# DLove
一个基于微服务架构的现代化社交婚恋平台,提供智能推荐、即时通讯、动态分享等功能
[](https://spring.io/projects/spring-boot)
[](https://spring.io/projects/spring-cloud)
[](https://www.apache.org/licenses/LICENSE-2.0.html)
## 📖 项目简介
DLove 是一款基于微服务架构的现代化社交婚恋平台,致力于为单身用户提供智能、便捷的交友体验。项目采用前后端分离架构,后端使用 Spring Cloud Alibaba 微服务技术栈,集成了多种第三方服务,实现了智能推荐、即时通讯、动态分享、小视频等核心功能。
## ✨ 核心功能
### 🎯 用户模块
- **手机登录注册**:基于阿里云短信服务的验证码登录
- **用户信息管理**:头像上传、个人资料完善
- **人脸识别**:集成百度AI实现头像人脸检测
### 💝 交友推荐
- **今日佳人**:基于推荐算法展示最佳匹配用户
- **推荐列表**:分页展示推荐好友,支持性别、年龄筛选
- **匹配卡片**:类似Tinder的左滑右滑交友方式
- **陌生人问题**:破冰功能,回复问题后可添加好友
- **搜附近**:基于地理位置的附近用户搜索(LBS)
### 📱 社交动态
- **动态发布**:支持图文、视频动态发布
- **内容审核**:集成阿里云内容安全,自动审核违规内容
- **好友动态**:查看好友发布的动态
- **推荐动态**:基于用户兴趣推荐动态内容
- **互动功能**:点赞、评论、喜欢等社交互动
- **访客记录**:记录谁看过我的主页
### 🎬 小视频
- **视频发布**:支持小视频上传和发布
- **视频列表**:瀑布流展示小视频内容
- **关注功能**:关注/取消关注视频作者
### 💬 即时通讯
- **环信IM集成**:实现实时聊天功能
- **好友管理**:添加好友、好友列表查询
- **消息推送**:系统消息推送
### 🛡️ 系统功能
- **JWT认证**:基于Token的用户认证机制
- **网关鉴权**:统一的API网关权限校验
- **统一异常处理**:优雅的异常处理机制
- **用户冻结**:管理员可冻结违规用户
## 🏗️ 技术架构
### 架构设计
```
┌─────────────┐
│ Gateway │ Spring Cloud Gateway 网关层
└──────┬──────┘
│
├─────────────────────────────┬─────────────────────┐
│ │ │
┌──────▼──────┐ ┌────────▼────────┐ ┌───────▼────────┐
│ App Server │ │ Recommend Server│ │ Admin Server │
│ 应用服务 │ │ 推荐服务 │ │ 管理后台 │
└──────┬──────┘ └─────────────────┘ └────────────────┘
│
│ Dubbo RPC
│
┌──────▼──────────────────────────────┐
│ Dubbo Services │
│ ┌─────────┐ ┌──────────┐ │
│ │ DB API │ │ Mongo API│ │
│ └─────────┘ └──────────┘ │
└─────────────────────────────────────┘
│ │
│ │
┌──────▼──────┐ ┌──────▼──────┐
│ MySQL │ │ MongoDB │
└─────────────┘ └─────────────┘
```
### 技术栈
#### 后端核心框架
- **Spring Boot 2.3.9**:应用开发框架
- **Spring Cloud Hoxton.SR10**:微服务框架
- **Spring Cloud Alibaba 2.2.5**:微服务组件
- **Apache Dubbo**:高性能RPC框架
#### 微服务组件
- **Nacos**:服务注册与配置中心
- **Spring Cloud Gateway**:API网关
- **RabbitMQ**:消息队列,实现异步处理和解耦
#### 数据存储
- **MySQL 5.x**:关系型数据库,存储用户基础数据
- **MongoDB 4.0.5**:NoSQL数据库,存储社交数据(动态、评论等)
- **Redis**:缓存中间件,存储验证码、Token等
- **FastDFS**:分布式文件系统
#### 持久层
- **MyBatis-Plus 3.4.1**:持久层框架,简化CRUD操作
#### 第三方服务集成
- **阿里云OSS**:对象存储服务,存储图片视频
- **阿里云短信服务**:验证码发送
- **阿里云内容安全**:违规内容审核
- **百度AI开放平台**:人脸识别
- **环信IM**:即时通讯服务
#### 工具库
- **Lombok**:简化Java代码
- **Hutool 5.4.3**:Java工具类库
- **FastJSON 1.2.8**:JSON处理
- **JWT**:Token生成与验证
## 📦 项目结构
```
tanhua
├── tanhua-app-server # 应用服务模块(对外提供REST API)
│ ├── controller # 控制器层
│ ├── service # 业务逻辑层
│ ├── interceptor # 拦截器(Token验证、用户信息存储)
│ └── exception # 异常处理
├── tanhua-dubbo # Dubbo服务提供者模块
│ ├── tanhua-dubbo-interface # Dubbo接口定义
│ ├── tanhua-dubbo-db # MySQL数据库服务实现
│ └── tanhua-dubbo-mongo # MongoDB数据库服务实现
├── tanhua-gateway # 网关模块(统一入口、鉴权)
│ └── filters # 网关过滤器
├── tanhua-model # 数据模型模块
│ ├── domain # MySQL实体类
│ ├── mongo # MongoDB实体类
│ ├── vo # 视图对象
│ ├── dto # 数据传输对象
│ └── enums # 枚举类
├── tanhua-autoconfig # 自动配置模块
│ ├── template # 第三方服务模板类
│ └── properties # 配置属性类
├── tanhua-commons # 公共工具模块
│ └── utils # 工具类(JWT、常量等)
└── tanhua-recommend # 推荐服务模块
└── listener # 消息监听器(用户行为分析)
```
## 🚀 核心技术亮点
### 1. 微服务架构设计
- 采用Spring Cloud Alibaba微服务架构,服务独立部署、独立扩展
- Nacos作为服务注册与配置中心,实现配置统一管理
- Dubbo实现服务间高性能RPC调用
- Spring Cloud Gateway统一网关,实现路由转发和权限校验
### 2. 智能推荐系统
- 基于用户行为评分的推荐算法
- 通过RabbitMQ异步收集用户行为数据(浏览、点赞、评论等)
- 实时计算用户互动评分,动态调整推荐权重
- 支持动态推荐和视频推荐
**评分规则**:
```java
发布动态:基础5分 + 图片数 + 文本长度分
浏览动态:1分
点赞:5分
喜欢:8分
评论:10分
取消点赞:-5分
取消喜欢:-8分
```
### 3. 异步消息处理
- RabbitMQ实现消息的异步处理和服务解耦
- 用户行为日志异步记录,不影响主业务流程
- 动态审核异步处理,提升用户体验
- 推荐评分异步计算,实时更新推荐结果
### 4. 数据存储优化
- **读写分离**:MySQL存储用户基础数据,MongoDB存储高并发社交数据
- **Redis缓存**:验证码、Token等高频访问数据缓存
- **MongoDB优势**:
- 灵活的文档结构,适合社交数据的复杂关系
- 高并发读写性能
- 支持地理位置查询(附近的人功能)
### 5. 统一认证鉴权
- JWT实现无状态Token认证
- Gateway网关统一鉴权,避免每个服务重复校验
- ThreadLocal存储用户信息,避免参数传递
- 拦截器自动解析Token并注入用户信息
### 6. 第三方服务集成
- **阿里云OSS**:分布式存储图片视频,CDN加速
- **百度AI人脸识别**:头像质量检测,提升用户信息真实性
- **阿里云内容安全**:自动识别违规内容,降低运营风险
- **环信IM**:成熟的即时通讯解决方案,稳定可靠
### 7. 异常处理机制
- 统一异常处理器,优雅处理各类异常
- 自定义业务异常类,清晰的错误码和错误信息
- 避免敏感信息泄露,提供友好的错误提示
### 8. LBS地理位置服务
- MongoDB GeoJSON支持,实现附近的人功能
- 基于经纬度的距离计算
- 支持按距离和性别筛选附近用户
## 🔧 环境要求
- **JDK**: 1.8+
- **Maven**: 3.6+
- **MySQL**: 5.7+
- **MongoDB**: 4.0+
- **Redis**: 5.0+
- **RabbitMQ**: 3.8+
- **Nacos**: 1.4+
- **FastDFS**: 5.0+
## 📝 快速开始
### 1. 克隆项目
```bash
git clone https://gitee.com/Dlow71/tanhua
```
### 2. 初始化数据库
#### MySQL数据库
项目使用MySQL存储用户基础数据,执行以下步骤初始化:
```bash
# 方式一:使用MySQL命令行导入
mysql -u root -p < docs/sql/tanhua.sql
# 方式二:在MySQL客户端中导入
mysql -u root -p
source /path/to/tanhua/docs/sql/tanhua.sql
```
**包含的数据表**:
- `tb_user` - 用户表
- `tb_user_info` - 用户信息表
- `tb_question` - 陌生人问题表
- `tb_settings` - 用户设置表
- `tb_black_list` - 黑名单表
- `tb_admin` - 管理员表
- `tb_log` - 日志表
- `tb_analysis` - 数据分析表
**默认账号**:
- 管理员:`admin` / `admin123`
- 测试用户:`13800138000` ~ `13800138004` / `123456`
#### MongoDB数据库
项目使用MongoDB存储社交数据(动态、评论、推荐等),执行以下步骤初始化:
```bash
# 方式一:使用mongo shell执行脚本
mongo tanhua < docs/sql/mongodb_init.js
# 方式二:在mongo shell中手动执行
mongo
use tanhua
# 然后复制粘贴 docs/sql/mongodb_init.js 中的命令
```
**包含的集合**:
- `movement` - 动态表
- `comment` - 评论互动表
- `video` - 小视频表
- `user_location` - 用户位置表(支持GeoJSON地理查询)
- `friend` - 好友关系表
- `focus_user` - 关注用户表
- `user_like` - 用户喜欢表
- `visitors` - 访客表
- `movement_timeline` - 动态时间线表
- `recommend_user` - 推荐用户表
- `recomment_movement_score` - 动态评分表
- `recomment_video_score` - 视频评分表
- `sequence` - 序列表(用于自增ID)
详细的MongoDB集合说明请查看:[MongoDB初始化文档](docs/sql/mongodb_init.md)
#### 验证数据库初始化
执行验证脚本检查数据库是否正确初始化:
```bash
# 运行验证脚本
./docs/sql/check_database.sh
# 或者手动验证
# MySQL验证
mysql -u root -p -e "USE tanhua; SHOW TABLES;"
# MongoDB验证
mongo tanhua --eval "db.getCollectionNames()"
```
### 3. 修改配置文件
修改各模块的 `application.yml` 配置文件:
- **数据库配置**:MySQL连接信息
- **MongoDB配置**:MongoDB连接URI
- **Redis配置**:Redis地址和端口
- **Nacos配置**:Nacos服务地址
- **RabbitMQ配置**:RabbitMQ连接信息
- **第三方服务配置**:
- 阿里云OSS(AccessKey、SecretKey、Endpoint)
- 阿里云短信(AccessKey、SecretKey、签名、模板)
- 百度AI(AppId、ApiKey、SecretKey)
- 环信IM(AppKey、ClientId、ClientSecret)
### 4. 启动服务
按以下顺序启动各个服务:
```bash
# 1. 启动基础服务
# - Nacos
# - MySQL
# - MongoDB
# - Redis
# - RabbitMQ
# - FastDFS
# 2. 启动Dubbo服务提供者
cd tanhua-dubbo/tanhua-dubbo-db
mvn spring-boot:run
cd tanhua-dubbo/tanhua-dubbo-mongo
mvn spring-boot:run
# 3. 启动推荐服务
cd tanhua-recommend
mvn spring-boot:run
# 4. 启动应用服务
cd tanhua-app-server
mvn spring-boot:run
# 5. 启动网关服务
cd tanhua-gateway
mvn spring-boot:run
```
### 5. 访问应用
- **应用服务**: http://localhost:18080
- **网关服务**: http://localhost:8888(具体端口见配置)
- **Nacos控制台**: http://localhost:8848/nacos
## 📚 API文档
### 用户模块
#### 发送验证码
```
POST /user/login
Content-Type: application/json
{
"phone": "13800138000"
}
```
#### 登录验证
```
POST /user/loginVerification
Content-Type: application/json
{
"phone": "13800138000",
"verificationCode": "123456"
}
```
### 交友推荐模块
#### 今日佳人
```
GET /tanhua/todayBest
Authorization: Bearer {token}
```
#### 推荐列表
```
GET /tanhua/recommendation?page=1&pagesize=10&gender=女&age=20
Authorization: Bearer {token}
```
#### 匹配卡片
```
GET /tanhua/cards
Authorization: Bearer {token}
```
#### 喜欢
```
GET /tanhua/{id}/love
Authorization: Bearer {token}
```
#### 搜附近
```
GET /tanhua/search?gender=女&distance=2000
Authorization: Bearer {token}
```
### 动态模块
#### 发布动态
```
POST /movements
Content-Type: multipart/form-data
Authorization: Bearer {token}
textContent: 动态内容
latitude: 纬度
longitude: 经度
imageContent: [文件1, 文件2]
```
#### 推荐动态
```
GET /movements/recommend?page=1&pagesize=10
Authorization: Bearer {token}
```
#### 点赞
```
GET /movements/{id}/like
Authorization: Bearer {token}
```
### 小视频模块
#### 发布视频
```
POST /smallVideos
Content-Type: multipart/form-data
Authorization: Bearer {token}
videoTanhuaNail: 封面图
videoFile: 视频文件
```
#### 视频列表
```
GET /smallVideos?page=1&pagesize=10
Authorization: Bearer {token}
```
更多API请参考在线文档或导入Postman集合。
## 🎯 后续规划
- [ ] 引入Elasticsearch实现全文搜索
- [ ] 集成Spark实现更复杂的推荐算法
- [ ] 增加实时音视频通话功能
- [ ] 优化性能,引入缓存预热、限流等机制
- [ ] 完善监控体系,集成Skywalking或Prometheus
- [ ] 增加单元测试和集成测试
- [ ] Docker容器化部署
- [ ] K8S编排支持
## 📄 许可证
本项目采用 [Apache License 2.0](LICENSE) 开源协议
## 🤝 贡献指南
欢迎提交Issue和Pull Request!
1. Fork本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交Pull Request
## 🙏 致谢
感谢以下开源项目和服务提供商:
- Spring Boot & Spring Cloud
- Apache Dubbo
- Alibaba Nacos
- 阿里云服务
- 百度AI开放平台
- 环信即时通讯云
---
⭐ 如果这个项目对你有帮助,请给一个Star支持一下!
Made with ❤️ by DLove Team