毕业设计实战:基于SSM的学生宿舍设备报修管理系统设计与实现全攻略

0 阅读12分钟

毕业设计实战:基于SSM的学生宿舍设备报修管理系统设计与实现全攻略

在开发“学生宿舍设备报修管理系统”这套毕设时,我曾因“故障上报与维修派单流程脱节”踩过一个关键坑。初期设计时,我将“学生报修”和“维修人员接单”视为两个独立的模块,导致学生上报故障后,维修人员端收不到通知、维修完成后状态无法同步、学生也无法查看维修进度,整个报修流程断档,数据无法闭环,耗费4天重构了报修流程、引入“待接单→维修中→已维修”的状态流转和通知机制才解决了问题📝。

基于此次实战经验,本文将精简拆解这套涵盖管理员、维修人员、学生三大角色的宿舍设备报修系统,分享核心开发流程与实操细节,为同类报修管理类毕设提供一份可落地的参考。

一、需求分析:聚焦“报修流程”核心,避免功能冗余

很多同学在做报修类系统时,容易陷入“功能堆砌”的误区。我最初也曾想加入一个复杂的“设备资产管理系统”模块,结果因偏离“故障上报、维修派单、进度跟踪”等核心业务,被导师要求删减。

在做这套系统时,我的核心思路是抓住**“故障”这个事件主体,围绕“维修”这个场景,理清“学生(报修人)”“故障(报修内容)”“维修人员(处理人)”**之间的关系,最终形成 “学生报修 → 维修人员接单 → 维修处理 → 完成维修 → 状态同步” 的业务闭环。

1. 核心角色与功能(精简版)

角色核心功能
管理员宿舍管理(楼栋/单元/宿舍号)、宿舍人员管理、故障分类管理、物品分类管理、维修人员管理、学生管理、公告管理、故障上报审核与统计
维修人员查看故障上报列表、接单处理、填写维修结果、更新维修状态(待接单/维修中/已维修)、查看公告
学生故障上报(填写报修位置/故障分类/物品分类/详情)、查看自己的报修记录、查看维修进度、查看宿舍信息、查看宿舍人员、查看公告

2. 需求避坑要点

  • 拒绝空想,模拟流程:在开发前,我邀请了10名学生、3名维修人员和2名宿管模拟了“学生发现宿舍灯坏了→手机端报修→维修人员接单→上门维修→维修完成状态更新→学生确认”的完整流程。发现学生最关心“维修进度”,于是增加了“维修状态跟踪(待接单/维修中/已维修)”功能。
  • 明确约束条件:提前规定“报修单自动生成编号(格式:BX+年月日+流水号)”“报修后状态默认为待接单”“维修人员接单后状态变为维修中”“维修完成后状态变为已维修”“报修位置必须精确到宿舍号”,这些明确的约束为后续系统实现提供了清晰的业务边界。

二、技术选型:稳定框架 + 状态流转,新手友好

这套系统涉及报修单的状态流转,前期我曾尝试使用工作流引擎,结果学习成本高且配置复杂,调试耗时3天。最终我回归了更简单直接的方案:

技术工具选型理由避坑提醒
SSM框架(Spring+SpringMVC+MyBatis)经典成熟的企业级开发框架,文档丰富,适合报修管理类系统的稳定开发重点掌握Spring声明式事务管理;报修单状态更新和维修记录操作必须加事务
Vue.js渐进式前端框架,数据双向绑定让报修单状态展示更直观使用el-tag组件展示不同维修状态(待接单为warning,维修中为primary,已维修为success)
MySQL 5.7存储所有业务数据报修单需要上报编号、故障分类、维修状态等多个状态字段;合理设置索引提升查询效率
Element UI丰富的UI组件库,快速搭建后台管理界面表单校验规则设置好,确保报修信息录入规范

三、数据库设计:业务关联清晰,支撑报修闭环

数据库设计直接影响后续开发效率。前期因未设计“维修状态字段”和“状态流转联动机制”,导致学生报修后维修人员无法确认、维修完成后状态未更新。

1. 核心表结构(精选核心表)

  • 学生表(xuesheng)idusername(学号)、passwordxuesheng_uuid_number(学号)、xuesheng_namesex_types(性别)、xuesheng_id_number(身份证号)、xuesheng_phonexuesheng_photo
  • 维修人员表(weixiuyuan)idusername(账号)、passwordweixiuyuan_uuid_number(工号)、weixiuyuan_namesex_typesweixiuyuan_nianxian(工作年限)、weixiuyuan_phoneweixiuyuan_photoweixiuyuan_content(介绍)。
  • 宿舍表(sushe)idloudong_types(楼栋)、danyuan_types(单元)、sushe_uuid_number(宿舍号)、sushe_address(宿舍位置)、juzhu_number(最大居住人数)、sushe_content(宿舍详情)。
  • 宿舍人员表(susherenshu)idsushe_idxuesheng_idinsert_time(入住时间)。
  • 故障上报表(guzhangshangbao)这是核心业务表。包含guzhangshangbao_uuid_number(上报编号)、xuesheng_id(报修学生)、weixiuyuan_id(接单维修人员)、wupin_types(物品分类)、guzhangshangbao_types(故障分类)、guzhangshangbao_address(报修位置)、insert_time(上报时间)、forum_content(上报详情)、weixiuzhuangtai_types(维修状态:1待接单/2维修中/3已维修)。
  • 公告表(gonggao)idgonggao_namegonggao_photogonggao_typesinsert_timegonggao_content
  • 字典表(dictionary):用于维护楼栋、单元、物品分类、故障分类、维修状态等枚举数据。

2. 关键业务SQL示例

示例SQL(查询学生的完整报修记录及维修进度):

-- 查询学生“张三”的所有报修单及维修进度
SELECT 
    b.guzhangshangbao_uuid_number AS report_no,
    b.guzhangshangbao_address AS location,
    b.forum_content AS detail,
    b.insert_time AS report_time,
    w.wupin_types AS item_category,
    g.guzhangshangbao_types AS fault_category,
    b.weixiuzhuangtai_types AS repair_status,  -- 待接单/维修中/已维修
    wei.weixiuyuan_name AS repairer_name,
    wei.weixiuyuan_phone AS repairer_phone
FROM guzhangshangbao b
LEFT JOIN wupin_types w ON b.wupin_types = w.code_index
LEFT JOIN guzhangshangbao_types g ON b.guzhangshangbao_types = g.code_index
LEFT JOIN weixiuyuan wei ON b.weixiuyuan_id = wei.id
LEFT JOIN xuesheng x ON b.xuesheng_id = x.id
WHERE x.xuesheng_name = '张三'
ORDER BY b.insert_time DESC;

关键避坑

  • 状态流转:报修表的状态(待接单→维修中→已维修)必须按顺序流转,不可跳跃。
  • 数据一致性:涉及报修单状态更新、维修人员接单、维修记录创建的多表操作,务必使用事务注解 @Transactional
  • 上报编号唯一性:使用时间戳+随机数生成,确保全局唯一。

四、核心功能实现:6大模块满足答辩需求

这套系统功能点清晰,答辩时只需讲清楚核心业务流程即可。以下6个模块是重中之重,也是答辩评委最可能提问的地方。

1. 宿舍管理与宿舍人员管理(基础信息模块)

  • 核心逻辑:管理员维护宿舍信息(楼栋、单元、宿舍号、位置、最大居住人数);管理员将学生分配到宿舍,生成宿舍人员记录。
  • 页面设计:宿舍列表支持按楼栋筛选;宿舍人员管理界面可查看每个宿舍的入住学生名单。
  • 代码要点
@Service
@Transactional
public void addSushe(Sushe sushe) {
    // 校验宿舍号是否重复
    SusheExample example = new SusheExample();
    example.createCriteria().andSusheUuidNumberEqualTo(sushe.getSusheUuidNumber());
    List<Sushe> list = susheMapper.selectByExample(example);
    if (!list.isEmpty()) {
        throw new RuntimeException("宿舍号已存在");
    }
    sushe.setInsertTime(new Date());
    sushe.setCreateTime(new Date());
    susheMapper.insert(sushe);
    log.info("管理员添加宿舍 {}", sushe.getSusheUuidNumber());
}

2. 故障上报管理(核心业务流程 - 学生端)

  • 核心逻辑:学生发现设备故障→选择物品分类和故障分类→填写报修位置和详情→提交报修单(状态:待接单)。
  • 页面设计:报修表单支持下拉选择分类;报修位置需填写完整宿舍号;详情支持文字描述和图片上传。
  • 代码要点
@Service
@Transactional
public void addReport(Guzhangshangbao report) {
    // 自动生成上报编号 BX+年月日+流水号
    String uuid = "BX" + LocalDate.now().toString().replace("-", "") 
                  + String.format("%04d", getTodayCount() + 1);
    report.setGuzhangshangbaoUuidNumber(uuid);
    report.setInsertTime(new Date());
    report.setWeixiuzhuangtaiTypes(1); // 1=待接单
    report.setCreateTime(new Date());
    guzhangshangbaoMapper.insert(report);
    log.info("学生 {} 提交报修单,编号:{}", report.getXueshengId(), uuid);
}

3. 故障上报管理(核心业务流程 - 维修人员端)

  • 核心逻辑:维修人员查看待接单列表→选择报修单接单→状态变为“维修中”→维修完成后填写维修结果→状态变为“已维修”。
  • 代码要点(接单与维修完成)
// 维修人员接单
@Service
@Transactional
public void acceptOrder(Integer reportId, Integer weixiuyuanId) {
    Guzhangshangbao report = guzhangshangbaoMapper.selectByPrimaryKey(reportId);
    if (report.getWeixiuzhuangtaiTypes() != 1) {
        throw new RuntimeException("该报修单已被接单或已完成");
    }
    report.setWeixiuyuanId(weixiuyuanId);
    report.setWeixiuzhuangtaiTypes(2); // 2=维修中
    guzhangshangbaoMapper.updateByPrimaryKey(report);
    log.info("维修工 {} 接单,报修编号:{}", weixiuyuanId, report.getGuzhangshangbaoUuidNumber());
}

// 维修完成
@Transactional
public void completeRepair(Integer reportId, String repairRemark) {
    Guzhangshangbao report = guzhangshangbaoMapper.selectByPrimaryKey(reportId);
    if (report.getWeixiuzhuangtaiTypes() != 2) {
        throw new RuntimeException("该报修单未处于维修中状态");
    }
    report.setWeixiuzhuangtaiTypes(3); // 3=已维修
    report.setRepairRemark(repairRemark);
    guzhangshangbaoMapper.updateByPrimaryKey(report);
    log.info("报修单 {} 已完成维修", report.getGuzhangshangbaoUuidNumber());
}

4. 公告管理(信息发布模块)

  • 核心逻辑:管理员发布宿舍相关公告(维修通知、水电提醒等)→学生和维修人员可在首页查看公告列表和详情。
  • 页面设计:公告列表按发布时间倒序排列;支持公告类型分类展示。
  • 代码要点
@Service
@Transactional
public void addGonggao(Gonggao gonggao) {
    gonggao.setInsertTime(new Date());
    gonggao.setCreateTime(new Date());
    gonggaoMapper.insert(gonggao);
    log.info("管理员发布公告 {}", gonggao.getGonggaoName());
}

5. 学生与维修人员管理(用户管理模块)

  • 核心逻辑:管理员管理学生和维修人员信息(增删改查);学生信息包括学号、姓名、身份证号、手机号;维修人员信息包括工号、姓名、工作年限、联系方式。
  • 代码要点
public void addStudent(Xuesheng student) {
    // 校验学号是否重复
    XueshengExample example = new XueshengExample();
    example.createCriteria().andXueshengUuidNumberEqualTo(student.getXueshengUuidNumber());
    List<Xuesheng> list = xueshengMapper.selectByExample(example);
    if (!list.isEmpty()) {
        throw new RuntimeException("学号已存在");
    }
    student.setCreateTime(new Date());
    xueshengMapper.insert(student);
}

6. 宿舍信息与学生报修记录查看(学生端)

  • 核心逻辑:学生登录后可查看自己所在宿舍的详细信息,以及同宿舍的其他人员;可查看自己提交的所有报修单及维修进度。
  • 页面设计:宿舍详情页展示宿舍位置、最大居住人数、同宿舍人员列表;报修记录列表按时间倒序,维修状态用标签展示。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、宿舍设备报修管理系统特色功能设计(关键加分项)

这套系统的核心在于“报修流程的完整闭环”,以下几个特色设计能让你的毕设脱颖而出:

1. 维修进度可视化

在学生的报修记录列表中,用进度条或标签清晰展示报修单状态:

  • 待接单:显示“等待维修人员接单”提示,可取消报修
  • 维修中:显示“维修师傅已接单,预计XX小时内上门”提示
  • 已维修:显示“维修已完成”提示,可查看维修结果

2. 报修统计分析

-- 统计各楼栋报修数量排行
SELECT 
    d.loudong_types AS building,
    COUNT(b.id) AS repair_count,
    SUM(CASE WHEN b.weixiuzhuangtai_types = 3 THEN 1 ELSE 0 END) AS completed_count
FROM guzhangshangbao b
LEFT JOIN xuesheng x ON b.xuesheng_id = x.id
LEFT JOIN susherenshu s ON x.id = s.xuesheng_id
LEFT JOIN sushe su ON s.sushe_id = su.id
LEFT JOIN loudong_types d ON su.loudong_types = d.code_index
GROUP BY d.loudong_types
ORDER BY repair_count DESC;

在管理员后台展示报修统计报表,按楼栋统计报修数量、完成率,辅助宿舍管理决策。

3. 维修人员绩效统计

-- 统计维修人员接单量及完成率
SELECT 
    w.weixiuyuan_name,
    w.weixiuyuan_nianxian,
    COUNT(b.id) AS total_orders,
    SUM(CASE WHEN b.weixiuzhuangtai_types = 3 THEN 1 ELSE 0 END) AS completed_orders,
    ROUND(SUM(CASE WHEN b.weixiuzhuangtai_types = 3 THEN 1 ELSE 0 END) * 100.0 / COUNT(b.id), 2) AS completion_rate
FROM weixiuyuan w
LEFT JOIN guzhangshangbao b ON w.id = b.weixiuyuan_id
GROUP BY w.id
ORDER BY completion_rate DESC;

4. 常见故障分类统计

在管理员后台统计各类故障的报修频率,为宿舍设备维护提供数据支持,如“灯管损坏”报修最多,可提前备货。

六、测试与答辩:流程演示为主,突出报修闭环

1. 核心测试用例

测试场景操作步骤预期结果
学生报修全流程学生登录→新增报修→填写信息→提交报修单生成,状态为“待接单”
维修人员接单维修人员登录→查看待接单列表→接单报修单状态变为“维修中”,关联维修人员
维修完成维修人员登录→维修完成→填写结果报修单状态变为“已维修”
学生查看进度学生登录→查看报修记录报修单状态正确显示(待接单/维修中/已维修)
宿舍人员管理管理员添加宿舍人员→学生登录查看宿舍人员列表正确显示

2. 答辩准备技巧

  • 演示流程分角色演示,强调闭环
    1. 管理员端:展示添加宿舍、添加学生、添加维修人员、发布公告。
    2. 学生端:展示注册登录、提交报修单、查看报修进度。
    3. 维修人员端:展示接单、维修完成。
    4. 最终展示:在学生端查看报修单状态已更新为“已维修”,强调完整的报修处理闭环。
  • 业务讲解:准备一页PPT展示系统业务流程图,从“学生报修”到“维修完成”的全过程。
  • 技术亮点
    • 状态机设计:如何用枚举或常量管理报修单状态(待接单/维修中/已维修)。
    • 事务一致性:接单操作和状态更新的事务管理。
    • 统计报表:报修数量统计、维修人员绩效统计的实现。
  • 突出问题解决讲清楚“如何保证报修单状态正确流转”(状态机)“如何防止重复接单”(状态校验)“如何实现报修位置精确管理”(宿舍-人员关联)

结语

本文核心是“聚焦宿舍设备报修核心业务、实现完整的报修处理闭环、设计一套实用的报修管理系统”。毕设无需追求技术多炫酷,把学生(报修人)故障(报修内容)、**维修人员(处理人)**之间的业务逻辑讲透,实现一个功能完整、流程闭环的系统,就足以成为答辩中的亮点。

若需完整项目源码(带详细注释)、测试数据SQL脚本、以及报修状态流转的完整代码,可在评论区留言“宿舍设备报修管理系统”获取;开发中遇问题(如状态流转、事务一致性、报修统计),也可留言咨询~ 祝毕设顺利!🎉