诉求处理系统
创建于 2025 年 8 月 4 日
项目介绍
诉求处理系统是一个面向政务或企业内部”诉求收集—审核办理—结果公示”场景的轻量业务系统,项目于 2025-08-04 基于若依 RuoYi 3.9.0 前后端分离脚手架开发完成。核心业务表 app_submit(诉求信息)记录诉求分类、详细信息、联系方式、附件、处理状态与处理结果,配合若依内置的用户、角色、菜单、字典、操作日志等基础设施,在一天内完成了从建表、代码生成到角色权限隔离的完整落地。
系统围绕诉求的生命周期组织页面:首页(ruoyi-ui/src/views/index.vue)被改造为”结果公示”大厅,默认只展示已办结(status=3)的诉求列表,并开放”发起诉求”入口;普通登录用户在”个人中心”(app/me)提交、检索与撤回自己的诉求;办事员在”诉求审核”(app/audit)中办理全部诉求,可将诉求退回或办结并填写处理结果。三个页面配合后端 /system/submit 下的 list、listByUserId、export 等接口,构成了完整的业务闭环。
项目架构
项目沿用若依 RuoYi 3.9.0 经典的前后端分离多模块结构:
| 模块 | 说明 |
|---|---|
ruoyi-admin | Web 启动模块,含业务控制器 AppSubmitController(/system/submit 的列表、按用户列表、导出、详情、新增、修改、删除接口) |
ruoyi-system | 业务与系统模块,AppSubmit 实体、IAppSubmitService / AppSubmitServiceImpl、AppSubmitMapper 及 mapper/system/AppSubmitMapper.xml 动态 SQL |
ruoyi-framework / ruoyi-common | 框架核心:Spring Security 安全认证、权限注解 @PreAuthorize、日志注解 @Log、PageHelper 分页、POI Excel 工具等 |
ruoyi-generator / ruoyi-quartz | 代码生成器与 Quartz 定时任务(本次业务由代码生成器导入 app_submit 表生成 CRUD 后二次改造,gen_table 中留有完整生成配置) |
ruoyi-ui | 前端:Vue 2.6.12 + Element UI 2.15.14,业务页面位于 src/views/app/{me,audit} 与改造后的 src/views/index.vue,接口封装在 src/api/system/submit.js |
后端技术栈为 Java 8 + Spring Boot 2.5.15 + Spring Framework 5.3.39 + Spring Security 5.7.12 + MyBatis + PageHelper 1.4.7 + Druid 1.2.23,数据库为 MySQL(utf8mb4),并集成 kaptcha 验证码、Swagger 接口文档与 POI 4.1.2 导出。
业务开发严格遵循若依的”设计表 → 代码生成导入 → 实体/Mapper/Service/Controller/Vue/JS 落位 → 创建菜单”流水线(项目 README 亦如此说明):先建 app_submit 表,再由代码生成器导入生成 CRUD,随后在生成代码之上进行业务改造。开发过程的操作日志(sys_oper_log)完整记录了关键演进:10:17 建立 app_dir 诉求分类字典,10:27 创建”个人中心”与”诉求审核”菜单,10:30 导入代码生成,11:04 修复了初始列名 desc 为 MySQL 保留字导致的 SQLSyntaxErrorException(后改为 content 列),11:36 验证撤回、13:36 验证退回与办结、19:20 验证附件上传。
核心功能
结果公示大厅与在线发起。 系统首页被改造为诉求”结果公示”页:查询参数默认携带 status: "3",仅列出已办结诉求,点击行弹出诉求详情(getSubmit 拉取详情后以字典标签渲染分类名称,发起人与联系方式统一打码为 ***,附件以链接形式展示,已办结诉求展示处理结果)。页面右上角提供”发起诉求”入口,表单校验包含诉求分类必选、诉求内容长度 5-2000 字、联系方式按 ^1[3-9]\d{9}$ 手机号正则校验,附件上传限定 png/xlsx/docx 类型。
个人中心与数据隔离。 “个人中心”(app/me/index.vue)调用专用的 listByUserId 接口——后端通过 SecurityUtils.getUserId() 强制将当前登录人 ID 注入查询条件,从数据层保证普通用户只能看到本人提交的诉求,前端同时隐藏了修改、删除、导出按钮。页面支持按诉求分类、联系方式、创建时间检索,提供新增诉求表单与”撤回”操作:撤回按钮仅对办理中(status=0)诉求启用,点击后将该诉求状态置为 1(已撤回)并提示”撤回成功”。
诉求审核办理。 办事员在”诉求审核”(app/audit/index.vue)中通过 list 接口查看全部诉求,支持按诉求分类、联系方式、提交人用户名、创建时间区间(params.beginCreateTime / endCreateTime)组合检索,列表联表 sys_user 展示提交人账号与昵称。处理弹窗对诉求分类、详细信息、联系方式、附件全部置为只读,仅允许选择状态(办理中 0 / 退回 2 / 办结 3)并填写处理结果(result 必填校验),“处理”按钮仅对办理中状态启用,防止对已办结诉求的重复操作。
状态机与数据闭环。 诉求状态为 0=办理中、1=已撤回、2=已退回、3=已办结:新增诉求时 AppSubmitServiceImpl.insertAppSubmit 自动写入当前登录用户 ID、创建时间并默认置为”办理中”;修改时自动刷新 update_time。AppSubmitMapper.xml 提供动态条件查询:分类等值匹配,详细信息、联系方式、提交人用户名模糊匹配(like concat('%', #{...}, '%')),创建时间按 date_format 天级区间过滤,全程支持若依 PageHelper 分页。
导出与审计。 诉求列表支持按当前筛选条件一键导出 Excel(POST /system/submit/export,基于实体 @Excel 注解与 POI 生成 诉求信息数据 工作簿);新增、修改、删除、导出等操作均带 @Log 注解写入操作日志,关键操作全程留痕;管理员还可在系统菜单中维护”诉求管理”菜单树(个人中心、诉求审核),通过角色菜单授权控制普通角色仅可访问个人中心。
功能截图
暂无运行截图。
快速上手
-
准备数据库:执行
sql/250804-suqiu.sql(框架表 +app_submit业务表 + 菜单/字典/演示数据,含 8 条覆盖各状态的诉求记录)、sql/ry_20250522.sql与sql/quartz.sql,并修改ruoyi-admin下application-druid.yml的数据库连接信息。 -
启动后端:
cd ruoyi-admin
mvn spring-boot:run # 或 mvn package 后 java -jar ruoyi-admin.jar
- 启动前端:
cd ruoyi-ui
npm install
npm run dev # http://localhost:8080,默认账号 admin / admin123
-
体验流程:登录后在首页”结果公示”查看已办结诉求或点击”发起诉求”提交新诉求 → 在”诉求管理-个人中心”查看本人诉求并对办理中的诉求执行撤回 → 使用具备审核权限的账号在”诉求审核”中按条件检索诉求,办理退回或办结并填写处理结果 → 回到首页查看结果公示与处理结果。
-
二次开发参考 README 流水线:设计
app_submit新表 → 系统工具-代码生成导入 → 将实体/Mapper/Service/Controller/Vue/JS 导入对应文件夹 → 创建菜单。
总结
诉求处理系统是一个典型的”表单驱动 + 状态流转”型若依实战项目,虽然业务模型简单,但完整走通了脚手架项目的落地链路:数据字典驱动分类、代码生成器快速出码、desc 保留字踩坑修复、按当前登录人注入条件的接口级数据隔离、首页改造为业务公示大厅、审核表单只读防篡改、状态机驱动按钮可用性控制,以及角色菜单权限对普通用户与管理员的差异化隔离。对于想学习如何在若依(Spring Boot + MyBatis + Vue 2 + Element UI)上快速搭建一个可用的业务管理闭环、并理解”代码生成 — 二次改造 — 权限隔离”完整流程的开发者,这是一个小而完整的参考案例。