基于SpringBoot2+vue2的公寓报修管理系统
温馨提示:
本文最后更新于 2026年05月28日,已超过 13 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
1. 资源
浏览全文可获取
2. 项目简介
本项目为“公寓报修管理系统”,基于Spring Boot框架与Vue前端技术栈开发,旨在为公寓住户、维修人员及管理员提供一个线上报修、维修分配、维修记录跟踪及评价反馈的综合管理平台。系统支持住户在线提交维修申请、查看维修进度、支付维修费用并给予评价;维修人员可接收分配任务、申请请假或改派;管理员则负责基础数据配置(房间信息、物品信息、维修分类等)、维修申请的审核与分配、改派申请的审批以及请假信息管理等功能。系统通过角色权限控制(管理员、住户、维修人员)实现不同用户的操作隔离与数据安全。
3. 技术栈
| 层面 | 技术 |
|---|---|
| 后端框架 | Spring Boot 2.2.2.RELEASE |
| 持久层 | MyBatis Plus 2.3 + MyBatis Spring Boot Starter 2.1.1 |
| 数据库 | MySQL 5.7.31 |
| 安全与认证 | Apache Shiro 1.3.2 + 自定义Token拦截器 |
| 前端框架 | Vue 2.x + Element UI |
| 路由 | Vue Router (hash模式) |
| HTTP客户端 | Axios |
| 工具库 | Hutool、Fastjson、Apache Commons Lang3、POI (Excel) |
| 邮件服务 | Spring Boot Starter Mail (QQ邮箱SMTP) |
4. 详细介绍
4.1 功能模块
系统根据用户角色分为三个主要端:
4.1.1 管理员端
- 住户管理:对住户账号进行增删改查,维护住户基本信息(账号、姓名、手机、身份证、邮箱等)。
- 房间信息管理:维护公寓房间的编号、名称、类型、位置,并关联住户账号及住户信息。
- 维修人员管理:管理维修人员账号、姓名、联系电话、身份证号及擅长的维修分类。
- 维修分类管理:定义维修的类别(如电工、水工等)。
- 物品信息管理:登记维修相关物品(如配件、工具)的编号、名称、数量及详情。
- 维修申请管理:查看住户提交的维修申请,进行审核(通过/驳回),审核通过后可执行“维修分配”操作。
- 维修分配管理:将已审核的维修申请指派给具体的维修人员,记录分配时间。
- 改派申请管理:审批维修人员提交的改派申请,确认后变更维修任务的执行人。
- 请假信息管理:审核维修人员的请假申请,支持导入/导出功能。
- 维修记录管理:查看所有已完成维修任务的记录(含费用、结果),支持导出。
- 维修评价管理:查看住户对维修服务的评价内容。
4.1.2 住户端
- 房间信息查看:查看本人所居住房间的详细信息。
- 维修申请:在线提交维修申请,填写物品名称、维修分类、维修内容、是否优先、要求备注,并上传图片。
- 维修记录查看与支付:查看自己的维修历史记录,对于待支付的维修记录可进行在线支付。
- 维修评价:对已完成维修的服务进行评价(评分/文字评价)。
4.1.3 维修人员端
- 维修分配查看:查看管理员分配给自己的维修任务,可发起“改派申请”或查看维修费用缴纳情况。
- 改派申请:若无法执行任务,可提交改派申请并说明原因。
- 请假信息:提交请假申请(请假日期、天数、原因),并查看审核结果。
- 维修记录查看:查看自己完成的历史维修任务。
- 维修评价查看:查看住户对自己服务的评价。
4.2 核心业务逻辑
- 报修流程:住户填写维修申请 → 管理员审核通过 → 管理员分配维修人员 → 维修人员上门维修 → 维修人员填写维修结果及费用 → 生成维修记录 → 住户支付费用 → 住户评价。
- 改派流程:维修人员提交改派申请 → 管理员审核 → 若同意,系统重新分配原维修申请给其他维修人员,原分配记录保留但任务转移。
- 请假流程:维修人员提交请假申请 → 管理员审核 → 请假期间系统可能不分配新任务。
- 用户注册:住户通过邮箱验证码完成注册(系统使用QQ邮箱发送验证码)。
- 权限控制:所有接口除登录、注册、部分公开查询外,均需携带Token访问,Token由后端生成并存入
token表,有效期1小时。
4.3 数据库表结构(主要表)
zhuhu:住户表(账号、密码、姓名、手机、身份证、邮箱等)weixiurenyuan:维修人员表(账号、密码、姓名、联系电话、维修分类等)fangjianxinxi:房间信息表(房间号、名称、类型、位置、关联住户)weixiushenqing:维修申请表(维修编号、物品名称、分类、内容、图片、是否优先、要求备注、房间信息、住户信息、审核状态等)weixiufenpei:维修分配表(关联维修申请,记录分配的维修人员及分配时间)weixiujilu:维修记录表(包含维修结果、费用、是否支付等)weixiupingjia:维修评价表(关联维修记录,存储评价内容及时间)gaipaishenqing:改派申请表(申请原因、审核状态)qingjiaxinxi:请假信息表(请假日期、天数、原因、审核状态)emailregistercode:邮箱验证码表(存储注册用验证码)users:管理员表(用户名、密码、角色)token:用户Token表
5. 部分代码
5.1 登录Token生成(TokenServiceImpl.java)
@Override
public String generateToken(Long userid, String username, String tableName, String role) {
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>()
.eq("userid", userid).eq("role", role));
String token = CommonUtil.getRandomString(32);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.HOUR_OF_DAY, 1); // 有效期1小时
if(tokenEntity != null) {
tokenEntity.setToken(token);
tokenEntity.setExpiratedtime(cal.getTime());
this.updateById(tokenEntity);
} else {
this.insert(new TokenEntity(userid, username, tableName, role, token, cal.getTime()));
}
return token;
}
5.2 维修申请控制器(WeixiushenqingController.java)分页查询
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, WeixiushenqingEntity weixiushenqing,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("zhuhu")) {
weixiushenqing.setZhuhuzhanghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<WeixiushenqingEntity> ew = new EntityWrapper<WeixiushenqingEntity>();
PageUtils page = weixiushenqingService.queryPage(params,
MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, weixiushenqing), params), params));
return R.ok().put("data", page);
}
5.3 前端路由配置(router-static.js)片段
import weixiurenyuan from '@/views/modules/weixiurenyuan/list'
import weixiushenqing from '@/views/modules/weixiushenqing/list'
// ... 省略其他导入
const routes = [{
path: '/index',
name: '首页',
component: Index,
children: [
{ path: '/', name: '首页', component: Home },
{ path: '/updatePassword', name: '修改密码', component: UpdatePassword },
{ path: '/weixiurenyuan', name: '维修人员', component: weixiurenyuan },
{ path: '/weixiushenqing', name: '维修申请', component: weixiushenqing },
// ... 更多子路由
]
}]
5.4 邮箱验证码发送(ZhuhuController.java)
@IgnoreAuth
@RequestMapping("/sendemail")
public R sendemail(@RequestParam String email){
String code = CommonUtil.getRandomNumber(4);
EmailregistercodeEntity emailregistercode = new EmailregistercodeEntity();
emailregistercode.setCode(code);
emailregistercode.setRole("用户");
emailregistercode.setEmail(email);
emailregistercodeService.insert(emailregistercode);
CommonUtil.sendEmail(email, "用户注册",
"您的注册验证码是【"+code+"】,请不要把验证码泄漏给其他人,如非本人请勿操作。");
return R.ok();
}
5.5 前端菜单权限配置(menu.js)片段
const menu = {
list() {
return [
{ roleName: "管理员", backMenu: [ ... ] },
{ roleName: "住户", backMenu: [
{ child: [{ menu: "房间信息", tableName: "fangjianxinxi" }] },
{ child: [{ menu: "维修申请", tableName: "weixiushenqing" }] },
{ child: [{ menu: "维修记录", tableName: "weixiujilu", buttons: ["查看","支付","评价"] }] },
{ child: [{ menu: "维修评价", tableName: "weixiupingjia" }] }
] },
{ roleName: "维修人员", backMenu: [ ... ] }
]
}
}
6. 部分截图

























7. 项目总结
- 功能完整性:系统覆盖了公寓报修管理的全生命周期,从住户申请、管理员审核派单、维修人员执行、费用支付到最终评价,流程清晰,各角色分工明确。
- 技术实践性:采用主流Spring Boot + MyBatis Plus + Vue技术栈,实现了前后端分离;使用Token进行无状态认证;集成邮箱服务用于注册验证;提供百度AI人脸比对接口(预留);具备Excel导入导出、ECharts图表、地图API等扩展能力。
- 权限控制:通过Shiro + 自定义拦截器实现了基于角色和URL的访问控制,且菜单权限使用前端配置文件
menu.js动态渲染,支持按钮级权限判断。 - 数据库设计:表结构规范,主键使用自增或时间戳+随机数;关键字段(如维修编号)唯一索引;使用
addtime作为自动创建时间;支持审核状态字段(sfsh)及回复字段。 - 可维护性:代码分层清晰(Controller、Service、Dao、Entity),MyBatis Plus简化了CRUD;通用工具类(
CommonUtil、MPUtil、PageUtils等)提高开发效率;前端组件化(文件上传、富文本编辑器、Excel上传等)便于复用。
总体而言,该项目是一个较为完整的企业级报修管理系统,适用于学习或二次开发,具备实际部署的可行性。
正文到此结束
- 本文标签: Java Spring Boot 毕业设计
- 本文链接: https://blog.xiaobias.com/article/15
- 版权声明: 本文由十五喵原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
