# music-parent **Repository Path**: frontier_group/music-parent ## Basic Information - **Project Name**: music-parent - **Description**: 闻声音乐 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-10-30 - **Last Updated**: 2025-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 闻声音乐 - 项目架构设计文档 ## 1. 项目概述 ### 1.1 项目简介 “闻声音乐”是一个现代化的音乐流媒体平台,旨在为用户提供高品质的音乐播放、发现和社交体验。项目采用前后端分离的微服务架构,支持Web端和管理后台,并具备未来扩展至移动端(如HarmonyOS)的能力。 ### 1.2 技术选型 | 类别 | 技术栈 | 说明 | | :--------- |:------------------------|:-------------------------| | **后端** | Java 17 | 主语言,LTS版本,性能优越 | | | Spring Boot 3.x | 微服务基础框架 | | | Spring Cloud Alibaba | 微服务全家桶,包含Nacos, Gateway等 | | | Nacos | 服务注册与发现、配置中心 | | | Spring Cloud Gateway | API网关,统一入口 | | | Redis | 缓存、Session共享、热点数据存储 | | | RabbitMQ | 消息队列,服务间异步通信 | | | JWT | 无状态身份认证 | | | MyBatis-Plus | 数据访问层,简化CRUD | | | Elasticsearch | 搜索引擎,提供全文检索 | | | Hutool | Java工具类库,提升开发效率 | | | 阿里云OSS | 对象存储,存放音频、图片等文件 || | | Canal | 检测MySQL BinLog数据 || | | Kafka | 将接受的数据写入Kafka,并消费数据进行处理。 | | | Sentinel | 数据流控制 | | | Seata | 分布式事务解决方案 | | **数据库** | MySQL 8.0 | 主业务数据库 | | | Elasticsearch 7.x | 搜索数据库 | | **前端** | TypeScript | 增强类型安全,提升代码健壮性 | | | Vue 3 (Composition API) | 前端框架,响应式系统 | | | Vite | 极速的前端构建工具 | | | Element Plus | B端UI组件库 | | | Pinia | 状态管理库 | | | Axios | HTTP客户端 | | | Vue Router | 路由管理 | | | ECharts / DataV | 数据可视化,用于运营后台 | | **工具** | Maven | 项目构建与依赖管理 | | | Gitee | 版本控制与代码托管 | --- ## 2. 整体架构设计 系统采用经典的微服务架构,通过API网关对外暴露服务,前后端完全解耦。 后期补一张模块关系图 --- ## 3. 业务分层与微服务设计 ### 3.1 用户中心服务(music-authcenter) * **端口**: `8001` * **职责**: 管理平台所有用户的账户、身份和权限。 * **核心功能**: * C端:用户注册、登录(手机/邮箱)、个人信息管理、JWT签发与验证。 * B端:管理员账户管理、角色管理、菜单管理(RBAC权限模型)。 * **数据库**: `wensheng_user_center` ### 3.2 内容中心服务(music-singer) * **端口**: `8002` * **职责**: 管理平台所有核心内容资产,是音乐数据的基石。 * **核心功能**: * 分类(标签)管理。 * 歌手信息管理。 * 专辑信息管理。 * **数据同步**: 当内容发生增删改时,通过RabbitMQ发送消息,通知搜索服务更新Elasticsearch索引。 * **数据库**: `wensheng_content_center` ### 3.3 互动服务(music-interaction) * **端口**: `8003` * **职责**: 处理用户与内容、用户与用户之间的所有互动行为。 * **核心功能**: * 用户自建歌单(音乐盒)管理。 * 收藏(歌曲、专辑、歌单)。 * 喜欢(歌曲)。 * 播放历史记录。 * 评论系统(可扩展)。 * **数据库**: `wensheng_interaction` ### 3.4 搜索服务(music-search) * **端口**: `8004` * **职责**: 提供高性能、高相关的站内搜索能力。 * **核心功能**: * 对歌曲、歌手、专辑、歌单进行全文检索。 * 支持搜索结果排序、高亮、聚合分类。 * **技术栈**: Spring Boot + Spring Data Elasticsearch * **数据源**: Elasticsearch * **接口**: * 通过id查询角色 * 方法名字:/sysRole/RoleById * 参数: id * 返回类型: Optional * 返回数据示例: { "id": 39, "roleName": "lk", "roleCode": "lk", "createTime": "2025-10-21 00:00:00", "updateTime": "2025-10-21 00:00:00" } * 通过name查询角色 * 方法名字:/sysRole/RoleByName * 参数: name * 返回类型: List * 返回类型数据示例: [ { "id": 42, "roleName": "李", "roleCode": "lk", "createTime": "2025-10-21 00:00:00", "updateTime": "2025-10-21 00:00:00" }, { "id": 41, "roleName": "李孝", "roleCode": "lk", "createTime": "2025-10-21 00:00:00", "updateTime": "2025-10-21 00:00:00" }, { "id": 40, "roleName": "李孝辉", "roleCode": "lk", "createTime": "2025-10-21 00:00:00", "updateTime": "2025-10-21 00:00:00" } ] ### 3.5 运营管理服务(music-home) * **端口**: `8005` * **职责**: 为运营人员提供配置C端展示内容的能力。 * **核心功能**: * 首页轮播图管理。 * 官方推荐歌单管理。 * 首页“热门歌单”、“新歌推荐”等模块内容配置。 * **数据库**: `wensheng_operation` ### 3.6 文件服务(music-oss) * **端口**: `8006` * **职责**: 统一处理所有文件的上传和下载。 * **核心功能**: * 提供文件上传接口,内部调用阿里云OSS SDK。 * 生成带签名的下载URL,确保安全。 * 图片处理(如裁剪、加水印,可由OSS完成)。 * **注意**: 此服务不存储文件本身,只做中转和凭证管理。 ### 3.7 音乐核心(music-musiclib) - **端口**:8007 - **职责:** 管理所有的歌曲信息 - 核心功能 - 音乐创建、上传 - 歌曲元数据管理(不含播放流)。 ### 3.8 网关(music-gateway) - **端口**:10000 - **职责:** 后台统一化入口 ### 3.9 通用核心(music-common) - **职责:**公用化封装,模块用到的通用工具类,用来简化代码量 ### 3.10 程序服务 #### 3.10.1 Nacos 服务 - **端口**:8848 - **职责:** Nacos 服务 #### 3.10.2 Redis 服务 - **端口**:6379 - **职责:** Redis 服务 #### 3.10.3 Mysql 服务 - **端口**:3306 - **职责:** Mysql 服务 #### 3.10.4 Elasticsearch 服务 - **端口**:9200 - **职责:** Elasticsearch 服务 #### 3.10.5 RabbitMQ 服务 - **端口**:5672 - **控制台端口**:15672 - **职责:** RabbitMQ 服务 #### 3.10.6 Kafka 服务 - **端口**:9092 - **职责:** Kafka 服务 #### 3.10.7 Canal 服务 - **端口**:11111 - **职责:** Canal 服务 #### 3.10.8 Sentinel 服务 - **端口**:8081 - **职责:** Sentinel 服务 #### 3.10.9 Seata 服务 - **端口**:8091 - **职责:** Seata 服务 --- ## 4. 数据库表设计 ### 4.1 用户中心数据库 (`wensheng_user_center`) #### `uc_sys_user` (系统用户表 - B端管理员) | 字段名 | 类型 | 注释 | | :---------- | :----------- | :-------------------- | | id | bigint | 主键ID | | username | varchar(50) | 用户名 | | password | varchar(255) | 密码 | | nickname | varchar(50) | 昵称 | | avatar | varchar(255) | 头像URL | | status | tinyint | 状态 (0:禁用, 1:正常) | | create_time | datetime | 创建时间 | | update_time | datetime | 更新时间 | #### `uc_user` (用户表 - C端用户) | 字段名 | 类型 | 注释 | | :-------------- | :----------- | :------------------- | | id | bigint | 主键ID | | phone | varchar(20) | 手机号 | | email | varchar(100) | 邮箱 | | nickname | varchar(50) | 昵称 | | avatar | varchar(255) | 头像URL | | password | varchar(255) | 密码 | | is_vip | tinyint | 是否VIP (0:否, 1:是) | | vip_expire_time | datetime | VIP过期时间 | | create_time | datetime | 创建时间 | | update_time | datetime | 更新时间 | #### `uc_sys_role` (角色表) | 字段名 | 类型 | 注释 | | :---------- | :---------- | :--------------------------------- | | id | bigint | 主键ID | | role_name | varchar(50) | 角色名称 (如:超级管理员, 内容运营) | | role_key | varchar(50) | 角色权限字符串 | | create_time | datetime | 创建时间 | #### `uc_sys_menu` (菜单表) | 字段名 | 类型 | 注释 | | :--------- | :----------- | :------------------------------ | | id | bigint | 主键ID | | menu_name | varchar(50) | 菜单名称 | | parent_id | bigint | 父菜单ID | | path | varchar(200) | 路由地址 | | component | varchar(255) | 组件路径 | | perms | varchar(100) | 权限标识 | | menu_type | char(1) | 菜单类型 (M:目录 C:菜单 F:按钮) | | sort_order | int | 显示顺序 | #### `uc_sys_user_role` (用户角色关联表) | 字段名 | 类型 | 注释 | | :------ | :----- | :----- | | user_id | bigint | 用户ID | | role_id | bigint | 角色ID | #### `uc_sys_role_menu` (角色菜单关联表) | 字段名 | 类型 | 注释 | | :------ | :----- | :----- | | role_id | bigint | 角色ID | | menu_id | bigint | 菜单ID | ### 4.2 内容中心数据库 (`wensheng_content_center`) #### `cc_category` (分类表) | 字段名 | 类型 | 注释 | | :---------- | :----------- | :----------------- | | id | bigint | 主键ID | | pid | bigint | 父分类ID (0为顶级) | | name | varchar(50) | 分类名称 | | description | varchar(255) | 分类描述 | | sort_order | int | 排序 | #### `cc_artist` (歌手表) | 字段名 | 类型 | 注释 | | :---------- | :----------- | :---------- | | id | bigint | 主键ID | | name | varchar(100) | 歌手名 | | avatar | varchar(255) | 歌手头像URL | | description | text | 歌手描述 | | create_time | datetime | 创建时间 | #### `cc_album` (专辑表) | 字段名 | 类型 | 注释 | | :----------- | :----------- | :---------- | | id | bigint | 主键ID | | name | varchar(100) | 专辑名 | | cover_image | varchar(255) | 专辑封面URL | | artist_id | bigint | 歌手ID | | release_date | date | 发行日期 | | create_time | datetime | 创建时间 | #### `cc_song` (歌曲表) | 字段名 | 类型 | 注释 | | :---------- | :----------- | :------------------------------ | | id | bigint | 主键ID | | name | varchar(100) | 歌曲名 | | cover_image | varchar(255) | 歌曲封面URL (通常取自专辑) | | artist_id | bigint | 歌手ID | | album_id | bigint | 专辑ID | | duration | int | 时长 (秒) | | is_vip | tinyint | 是否VIP歌曲 (0:否, 1:是) | | quality | varchar(20) | 音质 (standard, high, lossless) | | oss_key | varchar(255) | 音频文件在OSS的Key | | play_count | bigint | 播放量 | | create_time | datetime | 创建时间 | ### 4.3 互动服务数据库 (`wensheng_interaction`) #### `inter_playlist` (歌单表 - 用户自建) | 字段名 | 类型 | 注释 | | :---------- | :----------- | :------------------------ | | id | bigint | 主键ID | | name | varchar(100) | 歌单名 | | cover_image | varchar(255) | 歌单封面URL | | user_id | bigint | 创建人ID | | is_public | tinyint | 是否公开 (0:私有, 1:公开) | | create_time | datetime | 创建时间 | #### `inter_playlist_song` (歌单歌曲关联表) | 字段名 | 类型 | 注释 | | :---------- | :------- | :------- | | id | bigint | 主键ID | | playlist_id | bigint | 歌单ID | | song_id | bigint | 歌曲ID | | added_at | datetime | 添加时间 | #### `inter_user_favorite` (用户收藏表) | 字段名 | 类型 | 注释 | | :---------- | :---------- | :------------------------ | | id | bigint | 主键ID | | user_id | bigint | 用户ID | | target_id | bigint | 目标ID (歌曲/专辑/歌单ID) | | target_type | varchar(20) | 目标类型 | | create_time | datetime | 收藏时间 | #### `inter_user_like` (用户喜欢表 - 针对歌曲) | 字段名 | 类型 | 注释 | | :---------- | :------- | :------- | | id | bigint | 主键ID | | user_id | bigint | 用户ID | | song_id | bigint | 歌曲ID | | create_time | datetime | 喜欢时间 | #### `inter_play_history` (播放历史表) | 字段名 | 类型 | 注释 | | :-------- | :------- | :------- | | id | bigint | 主键ID | | user_id | bigint | 用户ID | | song_id | bigint | 歌曲ID | | played_at | datetime | 播放时间 | ### 4.4 运营管理数据库 (`wensheng_operation`) #### `oper_banner` (轮播图表) | 字段名 | 类型 | 注释 | | :--------- | :----------- | :-------------------- | | id | bigint | 主键ID | | title | varchar(100) | 标题 | | image_url | varchar(255) | 图片URL | | target_url | varchar(255) | 跳转链接 | | sort_order | int | 排序 | | status | tinyint | 状态 (0:禁用, 1:启用) | #### `oper_recommend_playlist` (官方推荐歌单表) | 字段名 | 类型 | 注释 | | :----------- | :----------- | :-------------------- | | id | bigint | 主键ID | | name | varchar(100) | 歌单名 | | cover_image | varchar(255) | 封面URL | | category_ids | varchar(255) | 分类ID列表 (逗号分隔) | | song_ids | text | 歌曲ID列表 (逗号分隔) | | creator | varchar(50) | 创建人 (运营人员) | | sort_order | int | 排序 | ### 4.2 Nacos中心数据库(`nacos`) #### `config_info` (配置信息表) | 字段名 | 类型 | 注释 | |:-------------|:-----------------|:----------------------| | id | bigint | id | | data_id | varchar(255) | data_id | | group_id | varchar(128) | group_id | | content | longtext | content | | md5 | varchar(32) | md5 | | gmt_create | datetime | 创建时间 | | gmt_modified | datetime | 修改时间 | | src_user | text | source user | | src_ip | varchar(50) | source ip | | app_name | varchar(128) | app_name | | tenant_id | varchar(128) | 租户字段 | | c_desc | varchar(256) | configuration description | | c_use | varchar(64) | configuration usage | | effect | varchar(64) | 配置生效的描述 | | type | varchar(64) | 配置的类型 | | c_schema | text | 配置的模式 | | encrypted_data_key | varchar(1024) | 密钥 | #### `config_info_gray` (灰度配置信息表) | 字段名 | 类型 | 注释 | |:-------------|:--------------|:----------------------| | id | bigint | id | | data_id | varchar(255) | data_id | | group_id | varchar(128) | group_id | | content | longtext | content | | md5 | varchar(32) | md5 | | src_user | text | source user | | src_ip | varchar(50) | source ip | | gmt_create | datetime | 创建时间 | | gmt_modified | datetime | 修改时间 | | app_name | varchar(128) | app_name | | tenant_id | varchar(128) | 租户字段 | | gray_name | varchar(128) | gray_name | | gray_rule | text | gray_rule | | encrypted_data_key | varchar(256) | encrypted_data_key | #### `config_tags_relation` (配置标签关系表) | 字段名 | 类型 | 注释 | |:-------------|:-------------|:-----------------------| | id | bigint(20) | id | | tag_name | varchar(128) | tag_name | | tag_type | varchar(64) | tag_type | | data_id | varchar(255) | data_id | | group_id | varchar(28) | group_id | | tenant_id | varchar(128) | tenant_id | | nid | bigint(20) | nid | #### `group_capacity` (集群、各Group容量信息表) | 字段名 | 类型 | 注释 | |:-------------|:-------------|:------------------------------| | id | bigint(20) | id | | group_id | varchar(128) | Group ID,空字符表示整个集群 | | quota | int(10) | 配额,0表示使用默认值 | | usage | int(10) | 使用量 | | max_size | int(10) | 单个配置大小上限,单位为字节,0表示使用默认值 | | max_aggr_count | int(10) | 聚合子配置最大个数,,0表示使用默认值 | | max_aggr_size | int(10) | 单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值 | | max_history_count | int(10) | 最大变更历史数量 | | gmt_create | datetime | 创建时间 | | gmt_modified | datetime | 修改时间 | #### `his_config_info` (多租户改造) | 字段名 | 类型 | 注释 | |:-------------|:--------------|:----------------------| | id | bigint(20) | id | | nid | bigint(20) | nid, 自增标识 | | data_id | varchar(255) | data_id | | group_id | varchar(128) | group_id | | app_name | varchar(128) | app_name | | content | longtext | content | | md5 | varchar(32) | md5 | | gmt_create | datetime | 创建时间 | | gmt_modified | datetime | 修改时间 | | src_user | text | source user | | src_ip | varchar(50) | source ip | | op_type | char(10) | operation type | | tenant_id | varchar(128) | 租户字段 | | encrypted_data_key | varchar(1024) | 密钥 | | publish_type | varchar(50) | publish type gray or formal | | gray_name | varchar(50) | gray name | | ext_info | longtext | ext info | #### `tenant_capacity` (租户容量信息表) | 字段名 | 类型 | 注释 | |:-------------|:--------------|:----------------------| | id | bigint(20) | 主键ID | | tenant_id | varchar(128) | Tenant ID | | quota | int(10) | 配额,0表示使用默认值 | | usage | int(10) | 使用量 | | max_size | int(10) | 单个配置大小上限,单位为字节,0表示使用默认值 | | max_aggr_count | int(10) | 聚合子配置最大个数 | | max_aggr_size | int(10) | 单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值 | | max_history_count | int(10) | 最大变更历史数量 | | gmt_create | datetime | 创建时间 | | gmt_modified | datetime | 修改时间 | #### `tenant_info` (tenant_info) | 字段名 | 类型 | 注释 | |:-------------|:--------------|:----------------------| | id | bigint(20) | 主键ID | | kp | varchar(128) | kp | | tenant_id | varchar(128) | tenant_id | | tenant_name | varchar(128) | tenant_name | | tenant_desc | varchar(256) | tenant_desc | | create_source | varchar(32) | create_source | | gmt_create | bigint(20) | 创建时间 | | gmt_modified | bigint(20) | 修改时间 | #### `users` (用户信息表) | 字段名 | 类型 | 注释 | |:-------------|:-------------|:----------------------| | username | varchar(50) | username | | password | varchar(500) | password | | enabled | boolean | enabled | #### `roles` (角色信息表) | 字段名 | 类型 | 注释 | |:-------------|:------------|:----------------------| | username | varchar(50) | username | | role | varchar(50) | role | #### `permissions` (权限信息表) | 字段名 | 类型 | 注释 | |:-------------|:-------------|:----------------------| | role | varchar(50) | role | | resource | varchar(128) | resource | | action | varchar(8) | action | --- ## 5. 客户端应用设计 ### 5.1 C端应用 (Vue 3 + TS + Vite[music-home-web]) * **路由结构**: * `/`: 首页 * `/singer`: 歌手列表/详情页 * `/playlist`: 歌单列表/详情页 * `/profile`: 个人中心 * `/profile/info`: 个人信息 * `/profile/favorites`: 我的收藏 * `/profile/likes`: 我的喜欢 * **核心组件**: * `TheHeader.vue`: 顶部导航,含搜索框。 * `ThePlayer.vue`: 底部播放器,全局状态管理。 * `SongList.vue`: 歌曲列表组件。 * `PlaylistCard.vue`: 歌单卡片。 * **状态管理**: * `useUserStore`: 管理用户登录状态、信息、VIP状态。 * `usePlayerStore`: 管理播放器状态(当前歌曲、播放列表、播放状态、进度等)。 ### 5.2 B端应用 (Vue 3 + TS + Element Plus) * **路由结构 (基于RBAC动态生成【music-admin-web】)**: * `/login`: 登录页 * `/dashboard`: 数据概览页 * `/content`: 内容管理 * `/content/song`: 歌单管理 * `/content/artist`: 歌手管理 * `/content/album`: 专辑管理 * `/content/category`: 分类管理 * `/interaction`: 互动管理 * `/interaction/playlist`: 用户歌单审核 * `/interaction/comment`: 评论管理 * `/operation`: 运营管理 * `/operation/banner`: 轮播图配置 * `/operation/recommend`: 推荐歌单配置 * `/system`: 系统管理 * `/system/user`: 用户管理 * `/system/role`: 角色管理 * `/system/menu`: 菜单管理 * **核心功能**: * **动态路由**: 根据用户角色从后端获取菜单数据,动态生成可访问的路由。 * **权限指令**: 使用自定义指令(如 `v-permission`)控制按钮的显示与隐藏。 * **数据看板**: 使用 ECharts 展示用户增长、播放量、付费转化等核心指标。 --- ## 6. 开发流程建议 1. **环境搭建**: 搭建Nacos, Redis, RabbitMQ, MySQL, ES, Kafka, Sentinel等基础环境。 2. **后端优先**: * 先搭建 **用户中心服务** 和 **API网关**,实现基础的认证授权。 * 开发 **内容中心服务**,完成歌曲、歌手等核心数据的CRUD接口。 * 开发 **文件服务**,打通文件上传流程。 3. **前端并行**: * **B端后台**: 在用户中心和内容中心接口完成后,优先开发B端的内容管理模块,方便运营录入数据。 * **C端应用**: 开发首页、播放器、登录等核心页面,与后端接口联调。 4. **迭代开发**: * 依次开发 **互动服务**、**搜索服务**、**运营管理服务**。 * 前端同步开发歌单、个人中心、搜索等功能。 5. **部署与运维**: 使用Docker容器化各微服务,通过Jenkins或GitLab CI/CD实现自动化部署。 ## 7. 运行环境 ![a.png](image/a.png) ![l.png](image/l.png) ![d.png](image/d.png) ![f.png](image/f.png) ![h.png](image/h.png) ![c.png](image/c.png) ![t.png](image/t.png) ![i.png](image/i.png) ![k.png](image/k.png) ![j.png](image/j.png) ![s.png](image/s.png) ![b.png](image/b.png) ![m.png](image/m.png) ![q.png](image/q.png) ![n.png](image/n.png) ![o.png](image/o.png) ![p.png](image/p.png) ![r.png](image/r.png) ![g.png](image/g.png) ![e.png](image/e.png) 歌曲、歌手、专辑:10.2.22.218:3306 音乐核心数据库:10.2.22.75:3306 歌单、收藏、播放记录:10.2.22.25:3306 RBAC:10.2.22.146:3306 轮播图:10.2.22.254:3306