# pink-springboot **Repository Path**: fs529/pink-springboot ## Basic Information - **Project Name**: pink-springboot - **Description**: Pink后端服务 汇聚原创佳作,可随心发布作品,弹幕评论畅快交流 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-23 - **Last Updated**: 2026-06-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Pink Video > 汇聚原创佳作,随心发布作品,弹幕评论畅快交流 —— 视频分享社区。 [![Java](https://img.shields.io/badge/Java-17-orange.svg)](https://www.oracle.com/java/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.1.0-brightgreen.svg)](https://spring.io/projects/spring-boot) [![MySQL](https://img.shields.io/badge/MySQL-8.0-blue.svg)](https://www.mysql.com/) [![Redis](https://img.shields.io/badge/Redis-7.0-red.svg)](https://redis.io/) [![Elasticsearch](https://img.shields.io/badge/Elasticsearch-8.x-00bfb3.svg)](https://www.elastic.co/) [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) --- ## 项目简介 **Pink Video** 是一个功能完备的原创视频分享平台,用户可以自由上传、发布视频作品,其他用户通过弹幕、评论、点赞、投币、收藏等方式进行互动。配备独立的管理后台,实现内容审核、用户管理、数据统计等全方位运营能力。 ### 核心体验 - **发布创作**:支持视频投稿、分 P 上传、草稿保存,FFmpeg 自动转码为 HLS(m3u8)流媒体格式 - **弹幕互动**:实时弹幕系统,弹幕与视频时间轴精确同步 - **评论交流**:支持多级嵌套评论、点赞/点踩,促进社区深度交流 - **智能推荐**:基于用户兴趣标签的个性化视频推荐 - **实时消息**:SSE 实时推送私聊消息、互动通知 --- ## 技术栈 | 层级 | 技术 | 说明 | |------|------|------| | **后端框架** | Spring Boot 3.1.0 / Java 17 | 主框架,Maven 多模块 | | **ORM** | MyBatis-Plus 3.5.x | 数据访问层 | | **数据库** | MySQL 8.0 | 关系型数据库 | | **缓存** | Redis(Lettuce) | Token 管理、队列、缓存 | | **搜索引擎** | Elasticsearch 8.x | 视频全文搜索(ik_max_word 中文分词) | | **API 文档** | Knife4j 4.1.0(OpenAPI 3) | 接口文档与调试 | | **认证** | JWT(jjwt) | 无状态 Token 认证 | | **视频处理** | FFmpeg | 视频转码(m3u8/ts) | | **云存储** | R2 / OSS / COS | 多存储提供商支持,加权轮询 | | **实时推送** | SSE(Server-Sent Events) | 消息实时推送 | ### 前端项目 | 项目 | 仓库地址 | 说明 | |------|---------|------| | **pink-front-web** | [Gitee](https://gitee.com/fs529/pink-front-web) | 用户前台,Vue 3 + Vite | | **pink-front-admin** | [Gitee](https://gitee.com/fs529/pink-front-admin) | 管理后台,Vue 3 + Vite | --- ## 功能模块 ### 用户端(pinke-web `:7071`) ``` 用户前台 ├── 账户系统 注册 / 登录 / 忘记密码 / 邮箱验证码 ├── 视频浏览 首页推荐 / 分类浏览 / 全文搜索 ├── 视频播放 HLS 流播放 / 弹幕 / 分P切换 ├── 视频投稿 上传 / 分P / 草稿 / 转码 / 审核 ├── 互动系统 点赞 / 投币 / 收藏 / 关注 ├── 评论系统 多级嵌套评论 / 赞踩 ├── 弹幕系统 实时弹幕 / 颜色 / 位置 / 字号 ├── 私聊系统 SSE 实时推送 / 置顶 / 免打扰 / 黑名单 ├── 消息中心 互动通知 / 系统公告 / 已读状态 ├── 个人中心 资料编辑 / 头像上传 / 播放历史 ├── 用户认证 个人 UP 主 / 机构 / 官方认证申请 ├── 表情系统 表情套浏览 / 订阅 / 混合发送 └── 用户设置 消息偏好 / 屏蔽词 / 隐私设置 ``` ### 管理端(pinke-admin `:7070`) ``` 管理后台 ├── 仪表盘 全站数据概览 / 统计图表 ├── 用户管理 用户列表 / 封号 / 角色分配 / 导出 ├── 视频管理 审核 / 删除 / 推荐 / 下架 ├── 评论管理 查看 / 删除 / 批量操作 ├── 弹幕管理 弹幕列表 / 审核 ├── 分类管理 多级分类 CRUD ├── 认证审核 用户认证申请处理 ├── 轮播图管理 Banner 图片配置 ├── 举报处理 用户举报审核 / 处理 ├── 表情管理 表情套 / 表情项 CRUD ├── 路由权限 动态路由配置 / RBAC ├── 存储管理 多存储桶配置 / 提供商切换 ├── 系统设置 注册金币 / 视频大小 / 审核开关 ├── 邮件管理 模板管理 / SMTP 配置 / 发送日志 ├── 文件管理 上传文件浏览管理 ├── 日志管理 操作日志 / 登录日志 / 系统日志 ├── 数据统计 用户分析 / 播放统计 / 定时报表 └── 系统信息 磁盘 / Redis / ES / FFmpeg 状态 ``` --- ## 项目结构 ``` pink-spring-boot ├── pom.xml # 父 POM,聚合模块 ├── README.md ├── db/ │ ├── pink.sql # 初始建库脚本(含数据) │ └── pinkNoData.sql # 仅表结构(无数据) ├── pinke-common/ # 公共模块(实体、Mapper、Service、工具) │ ├── pom.xml │ └── src/main/java/com/pink/ │ ├── component/ # 核心组件(Redis/ES/SSE) │ ├── controller/ # 公共控制器 │ ├── entity/ # 数据库实体(35+ 张表) │ ├── enums/ # 枚举常量 │ ├── exception/ # 异常处理 │ ├── mappers/ # MyBatis Mapper │ ├── annotation/ # 自定义注解(拦截/AOP) │ ├── aspect/ # AOP 切面 │ ├── service/ # 业务接口 │ │ └── impl/ # 业务实现 │ ├── dto/ # 数据传输对象 │ ├── vo/ # 视图对象 │ └── utils/ # 工具类(JWT/FFmpeg/AES等) ├── pinke-web/ # 用户前台(端口 7071,/api) │ ├── pom.xml │ └── src/main/java/com/pink/ │ ├── WebRunApplication.java # 前台启动类 │ ├── controller/ # 前台控制器 │ ├── task/ # 定时任务(转码/邮件队列) │ └── resources/ │ ├── application.yml │ ├── application-dev.yml │ └── application-prod.yml └── pinke-admin/ # 管理后台(端口 7070,/admin) ├── pom.xml └── src/main/java/com/pink/ ├── AdminRunApplication.java # 管理端启动类 ├── controller/ # 管理端控制器 └── resources/ ├── application.yml ├── application-dev.yml └── application-prod.yml ``` --- ## 快速开始 ### 环境要求 | 软件 | 版本要求 | 说明 | |------|---------|------| | **JDK** | 17+ | | | **Maven** | 3.6+ | | | **MySQL** | 8.0+ | 端口 3306 | | **Redis** | 7.0+ | 端口 6379 | | **Elasticsearch** | 8.x | 端口 9200(可选,搜索功能依赖) | | **FFmpeg** | 4.0+ | 视频转码(路径:`E:\ffmpeg\bin\`) | ### 1. 初始化数据库 ```bash # 导入表结构(二选一) mysql -u root -p < db/pinkNoData.sql # 仅表结构 mysql -u root -p < db/pink.sql # 含示例数据的完整库 ``` ### 2. 克隆前端项目 ```bash # 用户前台 git clone https://gitee.com/fs529/pink-front-web.git # 管理后台 git clone https://gitee.com/fs529/pink-front-admin.git ``` ### 3. 配置环境 编辑 `pinke-web/src/main/resources/application-dev.yml` 和 `pinke-admin/src/main/resources/application-dev.yml`,按需调整数据库连接等信息: ```yaml spring: datasource: url: jdbc:mysql://127.0.0.1:3306/pink username: root password: root data: redis: host: 127.0.0.1 port: 6379 ``` ### 4. 启动后端 ```bash # 在项目根目录执行(需要同时启动两个模块) # 终端 1 - 启动管理端 cd pinke-admin mvn spring-boot:run # 终端 2 - 启动用户前台 cd pinke-web mvn spring-boot:run ``` 启动后访问: - **API 文档(Knife4j)**:`http://localhost:7071/api/doc.html` - **管理端 API 文档**:`http://localhost:7070/admin/doc.html` ### 5. 启动前端 ```bash # 用户前台 cd pink-front-web npm install npm run dev # 管理后台 cd pink-front-admin npm install npm run dev ``` --- ## 系统架构 ``` ┌─────────────────────────────────────────────────────────┐ │ Nginx (可选) │ ├──────────────────────┬──────────────────────────────────┤ │ pink-front-web │ pink-front-admin │ │ (Vue 3 + Vite) │ (Vue 3 + Vite) │ ├──────────────────────┼──────────────────────────────────┤ │ pinke-web :7071 │ pinke-admin :7070 │ │ Spring Boot 3.1 │ Spring Boot 3.1 │ ├──────────────────────┴──────────────────────────────────┤ │ pinke-common │ │ 实体 / Mapper / Service / 组件 / 工具 / AOP │ ├─────────────────────────────────────────────────────────┤ │ MySQL 8.0 Redis 7.0 ES 8.x │ ├─────────────────────────────────────────────────────────┤ │ R2 / 阿里云OSS / 腾讯云COS FFmpeg │ └─────────────────────────────────────────────────────────┘ ``` ### 核心设计 - **多模块分层**:`pinke-common` 承载所有业务逻辑,`pinke-web` 和 `pinke-admin` 仅提供控制器层差异 - **JWT 无状态认证**:登录后签发 Token,Redis 管理会话,支持多设备登录限制(最多 3 台) - **AOP 切面增强**:全局登录拦截、操作日志记录、消息通知自动生成 - **队列解耦**:视频转码任务、邮件发送任务通过 Redis 队列异步处理 - **多存储权重轮询**:文件上传按配置权重分配到不同存储桶,支持 R2/OSS/COS/本地 - **动态路由权限**:前端路由表存储在数据库,按角色动态下发,实现精细化菜单权限控制 - **SSE 实时推送**:私聊消息通过 Server-Sent Events 推送,比 WebSocket 更轻量 --- ## 主要数据库表 | 类别 | 表名 | 说明 | |------|------|------| | **核心业务** | `video` / `video_file` | 视频信息 / 分P文件 | | | `video_post` / `video_file_post` | 视频投稿审核 | | | `comments` | 多级嵌套评论 | | | `barrage` | 弹幕数据 | | | `category` | 视频分类 | | | `collection` / `collection_video` | 视频合集 | | | `user_operation` | 互动记录(点赞/投币/收藏) | | **用户系统** | `user` | 用户信息 | | | `user_role` / `user_role_rel` | 角色与权限 | | | `user_tag` | 兴趣标签(自动打标) | | | `user_certification` | 用户认证申请 | | | `user_chat_message` / `user_chat_session` | 私聊消息与会话 | | **消息系统** | `notification` | 互动通知 | | | `sys_notice` / `sys_notice_read` | 系统公告 | | | `user_message_setting` | 消息偏好设置 | | **系统管理** | `setting` | 系统参数配置 | | | `frontend_route` / `role_route` | 动态路由权限 | | | `sys_storage_bucket` | 存储桶配置 | | | `mail_template` / `mail_config` | 邮件模板与配置 | | | `emoji_pack` / `emoji_pack_item` | 表情系统 | | | `login_log` / `operation_log` / `system_log` | 审计日志三层体系 | 完整表结构请参见 `db/pinkNoData.sql`(共 35+ 张表)。 --- ## 存储配置 系统支持四种存储提供商,通过 `sys_storage_bucket` 表配置: | 提供商 | 配置项 | 说明 | |--------|--------|------| | **Cloudflare R2** | endpoint / accessKey / secretKey / bucket | 兼容 S3 协议 | | **阿里云 OSS** | endpoint / accessKey / secretKey / bucket | 国内常用 | | **腾讯云 COS** | region / secretId / secretKey / bucket | 腾讯生态 | | **本地存储** | 文件路径 | 开发测试用 | 支持配置多个存储桶,按权重轮询分配上传。配置缓存在 Redis 中,修改后自动刷新。 --- ## 开发说明 ### IDE 配置 项目使用 **Lombok**,请在 IDE 中安装 Lombok 插件并启用注解处理器: - IntelliJ IDEA:`Settings → Build → Compiler → Annotation Processors → Enable annotation processing` ### 代码规范 - Controller 层:处理请求参数校验和响应封装 - Service 层:核心业务逻辑 - Mapper 层:MyBatis-Plus 数据访问 - Entity 层:数据库实体映射 - DTO/VO 层:数据传输和视图对象 --- ## License MIT License --- ## 致谢 感谢所有为本项目做出贡献的开发者。