1. 项目概述
这个基于SpringBoot的学生宿舍维修申报与处理系统,是我去年指导的一个计算机专业毕业设计项目。系统主要解决高校宿舍管理中维修申报流程繁琐、响应不及时、维修记录难以追踪等痛点问题。整套系统包含学生端、维修工端和管理员端三个角色模块,实现了从报修申请到维修完成的闭环管理。
在实际开发过程中,我们采用了SpringBoot 2.7.3作为基础框架,配合MyBatis-Plus 3.5.1进行数据持久化操作,前端使用Thymeleaf模板引擎。系统最大的特色是将传统的纸质报修流程完全数字化,通过微信小程序和Web端双渠道接入,维修响应时间从原来的平均48小时缩短至12小时以内。
2. 系统核心功能设计
2.1 学生报修模块
学生用户通过统一身份认证登录后,可以:
- 提交维修申请:选择宿舍号、故障类型(水电/家具/网络等),上传现场照片
- 实时查看维修进度:包括"待接单"、"处理中"、"已完成"三种状态
- 对已完成维修进行满意度评价
这里特别要注意照片上传功能的设计。我们采用阿里云OSS对象存储服务,前端通过Base64编码压缩图片,后端接口接收后生成唯一文件名存储。关键代码片段:
java复制@PostMapping("/upload")
public Result upload(@RequestParam("file") MultipartFile file) {
String fileName = UUID.randomUUID() + ".jpg";
String url = ossClient.upload(file, fileName);
return Result.success(url);
}
2.2 维修工处理模块
维修工端主要功能包括:
- 工单智能分配:系统根据维修工专业技能标签自动分配匹配工单
- 移动端接单:通过企业微信接收推送通知
- 维修过程记录:可上传维修中的过程照片
- 材料消耗登记:关联学校后勤库存系统
我们在数据库设计时特别建立了工单状态流转表:
sql复制CREATE TABLE `repair_status` (
`id` int NOT NULL AUTO_INCREMENT,
`order_id` int NOT NULL COMMENT '工单ID',
`status` tinyint NOT NULL COMMENT '1待接单 2处理中 3已完成',
`operator` int NOT NULL COMMENT '操作人',
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.3 管理员后台模块
管理员后台采用RBAC权限模型,主要功能:
- 数据看板:实时显示各宿舍楼报修统计
- 工单分配管理:支持手动调整分配
- 维修工绩效统计:基于完成数量、学生评价等维度
- 故障类型分析:生成月度报表
3. 关键技术实现细节
3.1 SpringBoot多环境配置
我们使用Profile功能实现开发、测试、生产环境隔离:
yaml复制# application-dev.yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/dorm_repair_dev
username: dev_user
password: dev123
# application-prod.yml
spring:
datasource:
url: jdbc:mysql://prod-mysql:3306/dorm_repair
username: ${DB_USER}
password: ${DB_PASSWORD}
3.2 微信小程序对接
学生端小程序采用uniapp框架开发,与后端通过JWT鉴权。关键接口设计:
code复制POST /api/login 微信code登录
GET /api/orders 获取我的报修单
POST /api/order 提交新报修单
3.3 定时任务设计
系统每天凌晨1点自动统计前一日数据并发送邮件报表:
java复制@Scheduled(cron = "0 0 1 * * ?")
public void dailyReport() {
// 查询统计逻辑
emailService.sendReport(...);
}
4. 开发中的典型问题与解决方案
4.1 并发接单问题
初期出现多个维修工同时抢单导致的数据冲突。最终解决方案:
- 数据库添加version字段实现乐观锁
- 前端接单按钮点击后禁用3秒
- 后端使用@Transactional保证原子性
4.2 照片上传性能优化
大文件上传时出现超时问题,通过以下方式优化:
- 前端分片上传(每片2MB)
- 后端使用异步处理
- 添加MD5校验避免重复上传
4.3 微信模板消息推送
模板消息接口调用频率受限,解决方案:
- 使用Redis消息队列缓冲
- 合并相同类型的通知
- 失败消息重试机制
5. 项目部署方案
5.1 服务器环境要求
- 最低配置:2核4G内存
- 推荐配置:4核8G内存(日均1000+工单)
- 必须组件:JDK8+、MySQL5.7+、Redis5+
5.2 Docker部署示例
dockerfile复制FROM openjdk:8-jdk
COPY target/dorm-repair.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
启动命令:
bash复制docker run -d -p 8080:8080 \
-e SPRING_PROFILES_ACTIVE=prod \
-e DB_USER=admin \
-e DB_PASSWORD=123456 \
dorm-repair
6. 毕业设计文档要点
完整的毕业设计文档应包含:
- 需求分析:功能需求、非功能需求
- 系统设计:架构图、ER图、接口设计
- 核心代码说明:关键算法、特色实现
- 测试报告:单元测试、压力测试
- 使用说明:各角色操作手册
特别提醒:数据库设计文档需要包含所有表的字段说明、索引设计,这是答辩时老师重点检查的部分。
我在实际开发中发现,使用Swagger UI自动生成API文档可以节省大量时间,推荐在pom.xml中添加:
xml复制<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
7. 项目扩展方向
这个基础系统还可以进一步扩展:
- 智能派单算法:根据维修工位置、技能、当前负载优化分配
- 物联网集成:对接智能水电表实现故障预警
- 语音报修:接入语音识别接口
- AR远程指导:维修工通过AR眼镜获取专家支持
最近有学生尝试加入了维修知识库功能,使用Elasticsearch实现故障解决方案的智能推荐,效果很不错。如果时间充裕,这个方向值得深入。
