1. 项目概述
校园后勤维修管理一直是高校管理中的痛点问题。传统电话报修方式存在信息记录不全、进度跟踪困难、维修效率低下等问题。这个基于SpringBoot的报修平台项目,正是为了解决这些实际问题而设计的现代化解决方案。
作为一个前后端分离的工单系统,它实现了从故障上报、工单分配、维修处理到反馈评价的全流程数字化管理。我在实际开发过程中发现,系统不仅大幅提升了维修响应效率,还通过数据分析功能帮助后勤部门优化资源配置。对于计算机专业毕业生而言,这个项目能全面锻炼SpringBoot全栈开发能力,同时具备很强的实用价值。
2. 核心需求解析
2.1 用户角色划分
系统需要支持三类核心用户:
- 学生用户:通过Web/APP提交报修申请,查看处理进度,进行服务评价
- 维修人员:接收工单通知,更新维修状态,上传维修凭证
- 后勤管理员:分配工单,监控整体进度,管理基础数据
2.2 关键业务流程
典型报修流程包含以下环节:
- 学生提交报修单(含故障描述、位置、图片等)
- 系统自动分类并通知对应维修组
- 维修组长分配具体维修人员
- 维修人员接单处理并更新状态
- 学生验收并评价服务
- 系统生成维修档案
3. 技术架构设计
3.1 后端技术栈
采用SpringBoot 2.7作为核心框架,主要考虑因素包括:
- 内嵌Tomcat简化部署
- 自动配置减少样板代码
- 丰富的Starter依赖库
- 与前端Vue.js完美配合
数据库选用MySQL 8.0,关键设计点:
- 工单表设计状态机字段(0-待分配,1-已分配,2-处理中,3-已完成)
- 采用JSON类型存储图片等附件信息
- 建立维修人员技能标签表实现智能派单
3.2 前端技术方案
Vue 3 + Element Plus组合提供:
- 响应式布局适配多端
- 可视化工单状态看板
- 拖拽式图片上传组件
- 实时消息通知机制
特别优化移动端体验:
- 基于Geolocation API自动获取报修位置
- 调用相机API实现即拍即传
- 扫码快速定位宿舍房间
4. 核心功能实现
4.1 工单状态管理
采用状态模式设计工单流转:
java复制public interface RepairState {
void handle(RepairOrder order);
}
// 具体状态实现
@Component
@Scope("prototype")
public class PendingState implements RepairState {
@Override
public void handle(RepairOrder order) {
// 通知后勤管理员
notificationService.notifyAdmin(order);
}
}
状态变更时自动触发:
- 数据库审计日志记录
- 微信模板消息推送
- 看板数据实时刷新
4.2 智能派单算法
基于维修人员负载和技能匹配:
java复制public Technician assignTechnician(RepairOrder order) {
return technicianRepository.findAll()
.stream()
.filter(t -> t.getSkills().contains(order.getType()))
.sorted(comparing(Technician::getCurrentWorkload))
.findFirst()
.orElseThrow(() -> new NoAvailableTechnicianException());
}
4.3 实时消息推送
采用WebSocket+STOMP协议:
javascript复制// 前端订阅消息
stompClient.subscribe('/topic/notifications', (message) => {
this.$notify({
title: '新工单通知',
message: JSON.parse(message.body).content,
type: 'warning'
});
});
5. 系统安全设计
5.1 认证授权方案
JWT + Spring Security实现:
- 学生:基础认证
- 维修工:工单相关权限
- 管理员:RBAC动态权限
关键配置:
java复制@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/api/orders/**").hasAnyRole("TECHNICIAN", "ADMIN")
.antMatchers("/api/technicians").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager()));
}
5.2 数据安全措施
- 敏感字段AES加密存储
- 接口参数XSS过滤
- 定期备份策略
- 操作日志审计
6. 项目部署方案
6.1 基础设施要求
推荐配置:
- 服务器:2核4G(学生版可用1核2G)
- 数据库:MySQL 8.0+(需开启JSON支持)
- 缓存:Redis 6.x(用于会话和消息队列)
6.2 容器化部署
Docker Compose编排示例:
yaml复制version: '3'
services:
backend:
image: repair-backend:1.0
ports:
- "8080:8080"
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
redis:
image: redis:6-alpine
7. 开发经验分享
7.1 调试技巧
推荐Postman测试方案:
- 创建环境变量(base_url, token等)
- 编写测试集合(按业务流顺序)
- 使用Tests脚本自动获取token
javascript复制pm.test("Login Success", function() {
var jsonData = pm.response.json();
pm.environment.set("access_token", jsonData.access_token);
});
7.2 性能优化
实测有效的优化手段:
- 工单列表分页缓存(Redis)
- 使用Projection减少查询字段
- 批量状态更新接口
- 异步日志记录
7.3 常见问题解决
- 跨域问题:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*");
}
}
- 文件上传大小限制:
properties复制spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=20MB
- 时区问题:
properties复制spring.jpa.properties.hibernate.jdbc.time_zone=Asia/Shanghai
8. 项目扩展方向
在实际部署后,可以考虑以下增强功能:
- 维修知识库建设(常见问题自助解决)
- 设备二维码标签管理(扫码快速报修)
- 维修质量评价体系(星级评分影响绩效)
- 大数据分析看板(故障热点区域分析)
我在开发过程中特别推荐使用Lombok减少样板代码,同时合理设计DTO转换层能显著提升前后端协作效率。对于状态流转复杂的业务,一定要绘制状态机图明确各环节约束条件