### 技术栈 前后端分离: **Ruoyi-Vue框架** + Spring Boot3 + Vue3 + Element-Plus + MySQL + Redis + 阿里云OSS ### 项目需求梳理 #### **1. 课程资源分享 (Course Resource Sharing)** **概览:** 这是一个众包式的学习资料分享平台,通过积分和排行榜激励用户贡献高质量内容。 **核心功能:** * **资源上传:** 任何登录用户可以选择特定科目,上传自己整理的关于本科目的学习资料(只能上传压缩包)。上传后必须被专业负责人审核,审核通过后方可被其他用户可见 * **资源展示:** 用户可以按科目浏览、搜索和下载资源。在一份资料(也就是一个用户上传的资料中,需要有一个介绍这个压缩包的简介,这个资源包括什么,由用户自行编写,也就是说用户在上传的时候需要提交一个表单,来阐述这份资源的相关信息,例如:选择科目名称,选择专业,填写资料简介等等) * **精品审核:** “专业负责人”角色需要审核上传的资源,并将优质资源标记为“最佳推荐”。(专业负责人由超级管理员手动指定,不同专业只能有一个负责人) * **积分系统:** * 上传资源:审核通过后获得少量积分(例如:+5分)。 * 资源被评为“最佳”:获得大量积分(例如:+10分)。 * **贡献排行榜:** 根据用户的总积分进行排名,展示贡献最多的用户。 **关键技术点/建议:** * **文件存储:** 使用阿里云OSS存储上传的资源文件。后端提供一个上传接口(依托于Ruoyi-Vue-Plus框架),接收文件后上传至OSS,并将返回的URL存入`resource`表。 * **权限控制:** 利用若依自带的RBAC (基于角色的访问控制),创建“专业负责人”角色,并为他们分配审核资源的权限。 * **积分计算:** 可以使用AOP (面向切面编程) 或在业务逻辑中直接处理。当资源上传或被标记为最佳时,更新用户的总积分并添加一条积分记录。 * **排行榜:** 对用户表的`total_points`字段进行降序排名查询即可。为了性能,可以将排行榜结果缓存到Redis中,定时更新。 --- #### **2. 通知公告 (Announcements)** **概览:** 一个灵活的通知发布系统,支持定向推送、已读/未读跟踪和全文搜索。 **核心功能:** * **发布通知:** 授权用户(如学生工作者)可以通过填写一个表单(需要填写通知日期,事件日期,通知内容,通知对象,附件等)创建通知(支持上传图片、附件),并选择一个或多个“用户组”作为接收对象。 * **定向接收:** 用户只能看到发给自己所在用户组的通知。 * **阅读量:** 用户点开通知详情页阅读量+1(同一用户多次查看不重复计算)。 * **主动已读 (签收):** 用户可以点击“确认已读”按钮,后台记录具体签收人。 * **发布者视图:** 本条通知的发布者可以查看通知的阅读量、具体签收人员列表和未签收人员列表。 * **未读提醒:** 导航栏“小铃铛”显示当前用户的未读通知数量。 * **全文搜索:** 用户可以根据关键词搜索通知的标题和内容。 **关键技术点/建议:** * **用户组:** 紧密依托于若依的“角色”或“部门”功能来模拟用户组,无需额外开发。 * **未读数计算:** “小铃铛”的未读数可以通过查询计算得出:`用户所属组的通知总数 - 该用户在announcement_read_log中的记录数`。 * **已读/未读列表:** 通过`announcement_read_log`表和用户表进行关联查询即可实现。 * **全文搜索:** MySQL 5.6+ 的 `FULLTEXT` 索引可以满足基本需求。PostgreSQL也能更方便地实现全文搜索 --- #### **3. 失物招领 (Lost and Found)** **概览:** 通知公告模块的简化和变种,用于发布和管理失物/拾物信息。 **核心功能:** * **发布:** 用户可以发布失物招领信息(物品描述、图片、联系方式等)。 * **列表展示:** 所有用户都可以看到全部失物招领信息。 * **状态管理:** 发布者可以将自己的帖子状态修改为“已解决”。 * **搜索:** 支持按物品名称、描述等关键词搜索。 **关键技术点/建议:** * **代码复用:** 这个模块的前后端代码结构可以大量复用通知公告模块,只需修改数据模型和部分业务逻辑(如权限控制、状态变更逻辑)。 * **图片上传:** 同样使用阿里云OSS存储用户上传的物品图片。 --- #### **4. 功能房预约 (Function Room Booking)** **概览:** 一个可视化的功能房预约系统,包含甘特图视图、详细日志和排行榜统计。 **核心功能:** * **可视化地图:** 以图形化界面展示楼层功能房的布局和实时状态(可用、占用、已预约)。 * **预约操作:** 用户点击功能房可进行预约、取消预约等操作。必须要提前一天进行预约!预约需要填写一个表单,内容至少包括:预约申请人,使用人(不少于包括申请人在内的三个用户),使用目的,使用时长(不超过三天)(可以设置一个总开关,来控制是否需要相关的管理员进行审核) * **甘特图视图:** 按房间展示预约时间段,直观了解各房间的日程安排。 * **签到签退** 在使用开始时间的前后三小时内,必须提交签到图片,否则预约作废。在使用结束时间的前后三小时类,必须提交签退图片,否则预约申请人14天内不得再次预约。 * **详细日志:** 每次预约都需记录关键信息,可以按照房间,预约申请人来筛选。 * **排行榜:** * 功能房被借用总时长排行。 * 学生借用功能房总时长排行(可由管理员控制是否显示)。 **关键技术点/建议:** * **地图视图:** 前端可以使用 SVG 或简单的 HTML `
` 结合 CSS Grid/Flexbox 布局来绘制地图,并绑定点击事件。 * **甘特图:** Vue有很多成熟的甘特图组件库可以快速实现该功能。 * **预约冲突检测:** 这是核心逻辑。当用户提交预约时,后端必须进行数据库查询,检查该时间段内是否已有其他预约。这个操作需要是**事务性**的,以防在高并发下出现重复预约。 --- #### **5. 事件日历 (Event Calendar)** **概览:** 个人日程管理工具,并与系统内其他模块(预约、通知)深度联动。 **核心功能:** * **个人日程:** 用户可以查看、添加、编辑和删除自己的日历事件。 * **预约联动:** 功能房预约成功后,自动为预约人及所有使用人员的日历添加事件。 * **通知联动:** 带日期的通知可以提供一个“一键添加到日历”的按钮。 * **日程共享与预约:** 用户可以共享自己的日历忙闲状态,方便团队成员寻找共同的空闲时间来发起会议或活动预约。 **关键技术点/建议:** * **日历前端:** 强烈推荐使用成熟的Vue日历组件,如 `FullCalendar` 或 `V-Calendar`,它们提供了丰富的视图和交互功能。 * **联动实现:** * **预约联动:** 在预约成功的业务逻辑中,调用一个`CalendarService`,为参与预约的每个用户创建日历事件。 * **通知联动:** 前端按钮调用一个后端接口,传递通知ID和用户ID,后端根据通知信息创建日历事件。 * **查找空闲时间:** 这是该模块最复杂的功能。实现方式通常是:获取所有相关人员在指定日期范围内的所有已安排事件,将这些时间段合并成一个“忙碌”时间段列表,然后找出其中的“空闲”时间间隙。这个算法需要仔细设计以保证效率。 --- #### **6. 数字图书馆 (Digital Library)** **概览:** 简单的电子书库,提供浏览和下载功能。 **核心功能:** * **图书上传** 用户提交一个表单, 需要至少包括: 书名, 作者, ISBN号(根据这个来唯一去重), 文件 * **图书展示:** 列表或卡片形式展示电子书(封面、书名、作者、简介)。 * **下载功能:** 提供下载按钮,可以是oss直链下载。 * **下载统计:** 记录每本书的被下载次数。 * **排行榜:** 用户上传书本数量排行榜, 书籍下载次数排行榜 --- #### **7. 帖子 (Posts)** **概览:** 一个类似博客或轻论坛的功能,用于用户交流。 **核心功能:** * **发帖:** 用户可以发布带标题和内容的帖子。发布后立即对其他用户可见 (也可以设置白名单/黑名单对应可见/不可见) * **互动:** 其他用户可以对帖子进行点赞、点踩和评论。 * **评论嵌套:** 评论可以支持多级回复(盖楼)。 **关键技术点/建议:** * **富文本编辑器:** 前端需要集成一个富文本编辑器(如 `WangEditor` 或 `TinyMCE`)让用户可以方便地编辑帖子内容。 * **点赞/点踩逻辑:** 使用 `post_interaction` 表来记录,可以轻松实现“每个用户对每个帖子只能点赞或点踩一次”的逻辑。 * **评论展示:** 查询评论时,通过 `parent_comment_id` 字段在后端或前端构建评论树结构。 --- #### **8. 实用功能 - 投票 (Voting)** **概览:** 一个功能完善的投票工具,支持定向、匿名、限时等特性。 **核心功能:** * **创建投票:** 授权用户可以发起投票,设置标题、选项、时间段、权限(指定用户组)以及是否匿名。 * **参与投票:** 在有效期内,被授权的用户可以进行投票。 * **投票逻辑:** * **实名投票:** 记录具体投票人,防止重复投票。 * **匿名投票:** 不记录投票人信息,但仍需防止同一用户重复投票。 * **结果统计与报表:** 投票发起者可以查看实时投票结果(各选项票数、百分比)。对于实名投票,还可以查看已投和未投人员名单。投票结束后可以生成最终报表。 --- #### **9. 实用功能 - 问卷 ** **概览:** 简单的问卷工具, 支持定向、匿名、限时等特性 **核心功能:** * **创建投票:** 授权用户可以发布,设置标题、问题(包括问题是否是必填)、时间段、权限(指定用户组)以及是否匿名。 * **参与投票:** 在有效期内,被授权的用户可以进行提交问卷。 * **投票逻辑:** * **实名投票:** 记录具体提交人,防止重复提交。 * **匿名投票:** 不记录提交人信息,但仍需防止同一用户重复提交。 * **结果统计与报表:** 对于实名问卷,可以查看已提交和未提交人员名单。结束后可以生成最终报表。 --- ### 实现优先级 课程资源分享 >> 通知公告 >> 功能房预约 >>> 数字图书馆 > 失物招领 >>>>>>>> 投票 > 问卷 > 事件日历 >>>>>>>>>>>>>>>>>>>>>>> 帖子 --- ### 角色 - 普通用户: - 拥有课程资源分享, 数字图书馆的上传与下载权限 - 拥有失物招领的发布权限 - 拥有对自己发布的失物招领的修改权限 - 拥有功能房预约的预约, 取消预约,签到签退权限 - 拥有帖子的发布,点赞, 评论权限 - 拥有问卷,投票的填写提交权限 - 学生工作者: - 拥有所有的普通用户权限 - 拥有发布公告的权限 - 拥有删除公告的权限 (仅限自己发布的) - 图书管理员: - 拥有所有的普通用户的权限 - 拥有数字图书馆完整的增删改查权限 - 专业负责人: - 拥有所有的普通用户的权限 - 一共十个, 对应十个不同的专业 - 负责本专业提交的课程资料的审批 - 拥有本专业的, 完整的课程资料的增删改查权限 - 管理员: - 拥有所有的普通用户的权限 - 拥有对所有模块进行增删改查的全年 - 超级管理员: - 拥有整个系统完整的权限 - 包括模块的开启关闭, 用户停用删除更改等等