返回作品

综合办公系统(文档/论坛/投票/日历/会议/新闻)

创建于 2025 年 2 月 27 日

标签
  • Java 8
  • Spring Boot 2.5.15
  • RuoYi 3.8.7
  • Flowable 6.8.0
  • EasyQuery
  • MyBatis-Plus
  • Druid
  • Redis
  • MySQL
  • Vue 2.6
  • Element UI
  • FullCalendar
  • bpmn-js

项目介绍

综合办公系统是一套以若依 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-adminSpring Boot、EasyQuery启动与控制器层,新增包 com.ruoyi.app(文档/论坛)、calendar(日历)、meeting(会议)、news(新闻)、vote(投票)
ricci.l-system / l-common / l-frameworkMyBatis-Plus、Spring Security用户、角色、部门、菜单、字典、日志等系统管理能力与公共工具
ricci.l-flowableFlowable 6.8.0工作流引擎封装,流程模型/表单/任务中心,前端 views/flowable 配套 bpmn-js 流程设计
ricci.l-quartz / l-generatorQuartz、Velocity定时任务与代码生成器
ruoyi-uiVue 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.sqlMySQL全量脚本: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/fenleineirong 则承担后台的分类与内容管理。

功能截图

暂无运行截图。

快速上手

  1. 创建数据库并导入全量脚本(含 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
  1. 修改后端 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
  1. 启动管理后台前端:
cd ruoyi-ui && npm install && npm run dev
  1. 使用预置账号(admin / admin123)登录,在左侧菜单即可体验六大应用:文档管理(目录树 + 文件上传)、论坛(发帖/点赞/评论)、投票管理(发布投票并在投票大厅参与)、日历模块(FullCalendar 任务 + 计划管理)、会议管理(会议室与会议信息)、新闻管理(分类与内容维护,新闻展示页面查看门户首页);“流程管理”菜单保留了 RuoYi-Flowable 的流程设计器与任务中心能力。

总结

这套综合办公系统是一次典型的”框架 + 业务”快速交付实践:底座复用了若依成熟的组织权限、代码生成与 RuoYi-Flowable 的工作流能力,六个办公应用则在 ricci.l-admin 中按功能分包独立开发,全部采用 EasyQuery 强类型 API 编写,表结构围绕 app_* 前缀清晰划分,配合全量 SQL 与使用文档,导入即可运行。从代码中还能看到不少值得借鉴的细节:文档目录树用 idTree 路径与递归构建简化层级查询,论坛的点赞用独立表 + 计数自增保证防重与性能平衡,投票在提交接口内完成有效期、防重复与票数累计的事务性校验,会议通过中间表维护参会人关系并直接联表查询即将参加的会议。对于想在若依基础上扩展办公应用、或学习 EasyQuery 替换传统 MyBatis 写法的开发者,这套项目的模块划分与控制器风格都是一份不错的参考。