综合办公系统(文档/论坛/投票/日历/会议/新闻)
创建于 2025 年 2 月 27 日
项目介绍
综合办公系统是一套以若依 RuoYi-Flowable 为底座二次开发的企业协同办公平台,在保留了 RuoYi 的系统管理、权限体系与 Flowable 6.8 工作流能力之外,新增了六个贴近日常办公的应用模块:个人文档、论坛、投票、日历、会议与新闻。仓库内 ruoyi-vue-文档-论坛-投票-日历-会议-新闻 为 Spring Boot 多模块后端,ruoyi-ui 为 Vue 2 管理后台前端,另附 ry20250227.sql(约 1.3MB,含 Flowable 引擎表、RuoYi 系统表、全部 app_* 业务表及示例数据)、flow-ry.sql 工作流脚本、使用文档.pdf(53MB)与两份源码备份压缩包。
一个有意思的细节是:项目的新增功能没有沿用 RuoYi 传统的 MyBatis XML 模式,而是统一改用 EasyQuery 的强类型 EntityQuery API 编写(控制器直接注入 EasyEntityQuery 完成增删改查与连表查询),sys_oper_log 里还完整保留了 2025 年 2 月底到 3 月初开发调试的过程记录(如新增新闻内容时因 news_content 字段无默认值而报错、随后补全字段成功提交),可以看到一个真实项目从搭建到收尾的演进痕迹。
项目架构
项目基于 RuoYi 3.8.7(Spring Boot 2.5.15、JDK 8)多模块结构,新增业务按功能分包放在 ricci.l-admin 中,主要组成如下:
| 模块 | 技术栈 | 说明 |
|---|---|---|
| ricci.l-admin | Spring Boot、EasyQuery | 启动与控制器层,新增包 com.ruoyi.app(文档/论坛)、calendar(日历)、meeting(会议)、news(新闻)、vote(投票) |
| ricci.l-system / l-common / l-framework | MyBatis-Plus、Spring Security | 用户、角色、部门、菜单、字典、日志等系统管理能力与公共工具 |
| ricci.l-flowable | Flowable 6.8.0 | 工作流引擎封装,流程模型/表单/任务中心,前端 views/flowable 配套 bpmn-js 流程设计 |
| ricci.l-quartz / l-generator | Quartz、Velocity | 定时任务与代码生成器 |
| ruoyi-ui | Vue 2.6、Element UI 2.15、FullCalendar 6.1、bpmn-js 17 | 管理后台前端,views/luntan 论坛、views/app/doc 文档、views/app/vote 投票、views/app/meeting 会议、views/news 新闻、views/rili 日历 |
| ry20250227.sql | MySQL | 全量脚本:act_* Flowable 引擎表、sys_* 系统表、app_* 六大业务表与示例数据、菜单(文档管理 2075、论坛管理 2078、投票管理 2079、新闻管理 2082、日历模块 2088、会议管理 2091) |
业务数据模型围绕六张主表展开:app_user_doc(个人文档目录树)、app_forum_board / post / comment / post_like / comment_like(论坛)、app_vote_category / topic / option / feedback(投票)、app_calendar_plan / task(日历)、app_meeting_room / topic / topic_user(会议)、app_news_category / content(新闻)。业务控制器绝大多数直接基于 EasyEntityQuery 编写,风格统一、无 XML 映射文件。
核心功能
个人文档中心。 AppUserDocController 提供 /app/doc/* 接口:listDocDirs 一次性查出当前用户全部文档记录后按 pid 递归组装成多级目录树,addDir 新建目录时通过父目录的 idTree 拼接出路径前缀(根目录为 “0”),updateDir 只更新名称字段,文件上传复用 RuoYi 的 FileUploadUtils 写到 RuoYiConfig.getProfile() 配置的上传目录,文件列表按 isFolder 排序、文件夹在前。前端 views/app/doc/doc/index.vue 采用左侧 el-tree 目录树 + 右侧文件列表的布局,支持右键菜单新建目录、重命名、删除目录与文件下载,所有操作均以 userId 过滤,实现用户级数据隔离;AppUserDocConfig 则提供文档相关配置项的维护。
论坛。 板块(AppForumBoard)支持图标、排序、描述与帖子数统计,列表按 sort 排序组装成树。帖子(AppForumPost)使用富文本内容,发帖时校验板块存在性并初始化 viewCount / likeCount / commentCount 为零,同时 post_count 自增;查看详情时浏览数 +1,列表接口还会查询当前用户的点赞记录为每篇帖子标记 isLiked。点赞与取消点赞(AppForumLikeController)通过 app_forum_post_like 表防重复,并同步 likeCount 增减;评论支持嵌套回复(replyTo),且帖子的修改、删除均校验 userId 归属,只允许作者操作。前端 views/luntan 提供帖子列表(板块筛选、分页、作者操作按钮)、详情页(作者信息、点赞、评论与子评论)与板块管理三张页面。
投票。 投票主题(VoteTopic)挂分类、标题、描述、起止时间与状态(0 未开始 / 1 进行中 / 2 已结束),选项(VoteOption)支持单选(radio)与多选(checkbox)两种 controlType,投票反馈表还预留了评分值 scoreValue 与文本反馈 textFeedback 字段。VoteFeedbackController.submitVote 是核心逻辑:先校验主题存在、当前时间在起止区间内,再查 app_vote_feedback 防止同一用户重复投票,通过后逐项写入反馈并执行 voteCount().increment(1) 累加选项票数;/stats/{voteId} 接口按选项计算投票比例并返回 totalVotes,前端投票大厅以表格展示统计结果。
日历与会议。 日历分为计划与任务两张表:计划(CalendarPlan)按创建人过滤,支持计划类型(工作/个人/会议/其他)、优先级(高/中/低)、负责人、参与人、公开状态等字段与导出;任务(CalendarTask)带起止时间、全天标记与提醒时间,前端 views/rili/renwuguanli/index.vue 用 FullCalendar 6 以月/周/日视图展示,可在日历上直接添加任务。会议模块包含会议室资源(名称、位置、容量、设施、状态)与会议信息(MeetingTopic:标题、会议室、起止时间、会议链接、会议类型),新增/编辑会议时通过 joinUserIds 批量写入 app_meeting_topic_user 关联参会人,MeetingTopicUserController 提供”即将参加的会议”查询(联表后过滤 endTime > now 并按开始时间升序),方便用户查看日程内的会议安排。
新闻。 新闻分类(NewsCategory)与内容(NewsContent)提供常规 CRUD,内容表包含富文本正文、封面图、来源、作者、置顶 isTop、推荐 is_recommend、浏览量以及审核人/审核意见/审核时间等字段,具备内容审核的雏形。前端 views/news/home 是门户式首页:el-carousel 轮播图(api/news/carousel.js 当前为模拟数据)、左侧头条新闻、右侧”着重关注”与”置顶”榜单,点击标题在弹窗中渲染 newsContent 详情;views/news/fenlei 与 neirong 则承担后台的分类与内容管理。
功能截图
暂无运行截图。
快速上手
- 创建数据库并导入全量脚本(含 Flowable 引擎表、RuoYi 系统表与六大业务表示例数据):
mysql -u root -p -e "CREATE DATABASE ry20250227 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p ry20250227 < ry20250227.sql
- 修改后端
ruoyi-vue-文档-论坛-投票-日历-会议-新闻/ricci.l-admin/src/main/resources/application-druid.yml中的 MySQL 连接与application.yml中的 Redis 配置,然后启动:
cd ruoyi-vue-文档-论坛-投票-日历-会议-新闻
mvn clean package -DskipTests
java -jar ricci.l-admin/target/ricci.l-admin.jar # http://localhost:8080
- 启动管理后台前端:
cd ruoyi-ui && npm install && npm run dev
- 使用预置账号(admin / admin123)登录,在左侧菜单即可体验六大应用:文档管理(目录树 + 文件上传)、论坛(发帖/点赞/评论)、投票管理(发布投票并在投票大厅参与)、日历模块(FullCalendar 任务 + 计划管理)、会议管理(会议室与会议信息)、新闻管理(分类与内容维护,新闻展示页面查看门户首页);“流程管理”菜单保留了 RuoYi-Flowable 的流程设计器与任务中心能力。
总结
这套综合办公系统是一次典型的”框架 + 业务”快速交付实践:底座复用了若依成熟的组织权限、代码生成与 RuoYi-Flowable 的工作流能力,六个办公应用则在 ricci.l-admin 中按功能分包独立开发,全部采用 EasyQuery 强类型 API 编写,表结构围绕 app_* 前缀清晰划分,配合全量 SQL 与使用文档,导入即可运行。从代码中还能看到不少值得借鉴的细节:文档目录树用 idTree 路径与递归构建简化层级查询,论坛的点赞用独立表 + 计数自增保证防重与性能平衡,投票在提交接口内完成有效期、防重复与票数累计的事务性校验,会议通过中间表维护参会人关系并直接联表查询即将参加的会议。对于想在若依基础上扩展办公应用、或学习 EasyQuery 替换传统 MyBatis 写法的开发者,这套项目的模块划分与控制器风格都是一份不错的参考。