SpringBoot与微信小程序构建校园设备报修系统 1. 项目概述学校设备报修系统是校园信息化建设中的重要一环。传统的纸质报修流程存在效率低下、进度不透明、统计困难等问题。基于SpringBoot和微信小程序的报修系统能够实现以下核心价值师生可随时随地进行设备报修维修人员能实时接收工单通知管理人员可监控维修进度和统计分析实现报修流程的数字化和可视化这个毕业设计项目采用前后端分离架构前端微信小程序使用uni-app框架开发后端SpringBoot 2.7 MySQL 8.0接口RESTful API设计2. 技术选型解析2.1 后端技术栈选择SpringBoot作为后端框架主要基于以下考虑快速开发自动配置、起步依赖简化了SSM框架的整合生态丰富Spring生态有完善的解决方案易于部署内嵌Tomcat打包即运行适合教学社区资源丰富便于学生理解关键依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version2.2.2/version /dependency2.2 前端技术方案采用uni-app开发微信小程序的优势跨平台一套代码可编译到多个平台开发效率基于Vue语法学习成本低组件丰富uni-ui提供大量现成组件调试方便HBuilderX提供完善工具链小程序页面结构示例pages/ index/ // 首页 repair/ // 报修页 my/ // 个人中心 components/ // 公共组件3. 数据库设计3.1 核心表结构用户表(user)CREATE TABLE user ( id int NOT NULL AUTO_INCREMENT, openid varchar(50) DEFAULT NULL COMMENT 微信openid, username varchar(20) DEFAULT NULL, role tinyint DEFAULT 0 COMMENT 0-学生 1-维修员 2-管理员, phone varchar(11) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY idx_openid (openid) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;报修单表(repair_order)CREATE TABLE repair_order ( id int NOT NULL AUTO_INCREMENT, user_id int DEFAULT NULL, device_type varchar(20) DEFAULT NULL COMMENT 设备类型, location varchar(50) DEFAULT NULL COMMENT 故障地点, description text COMMENT 故障描述, images varchar(255) DEFAULT NULL COMMENT 图片URL多个用逗号分隔, status tinyint DEFAULT 0 COMMENT 0-待处理 1-已接单 2-已完成 3-已评价, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;3.2 索引优化为提高查询效率需要建立以下索引报修单状态索引ALTER TABLE repair_order ADD INDEX idx_status (status);用户报修记录索引ALTER TABLE repair_order ADD INDEX idx_user (user_id);4. 核心功能实现4.1 微信登录流程前端获取codeuni.login({ provider: weixin, success: function (res) { console.log(res.code); } });后端处理登录PostMapping(/login) public Result login(String code) { // 1. 使用code获取openid String openid wechatService.getOpenid(code); // 2. 查询或创建用户 User user userService.findOrCreate(openid); // 3. 生成JWT token String token JwtUtil.generate(user.getId()); return Result.success(token); }4.2 报工单提交前端表单关键代码template view uni-forms :modelform uni-forms-item label设备类型 namedeviceType uni-data-select v-modelform.deviceType :localdatadeviceTypes/ /uni-forms-item uni-forms-item label故障描述 namedescription textarea v-modelform.description/ /uni-forms-item uni-file-picker limit3 successuploadSuccess/ /uni-forms /view /template后端接口实现PostMapping(/repair) public Result submitRepair(RequestBody RepairDTO dto, RequestHeader(Authorization) String token) { // 1. 验证token Integer userId JwtUtil.verify(token); // 2. 构建工单实体 RepairOrder order new RepairOrder(); order.setUserId(userId); order.setDeviceType(dto.getDeviceType()); order.setDescription(dto.getDescription()); order.setImages(String.join(,, dto.getImages())); // 3. 保存到数据库 repairService.save(order); // 4. 通知维修人员 notifyService.sendNewOrderNotice(order.getId()); return Result.success(); }5. 系统特色功能5.1 维修进度推送采用微信订阅消息实现状态变更通知配置消息模板用户提交报修时订阅消息状态变更时触发推送后端推送实现public void sendStatusChangeNotice(Integer orderId) { RepairOrder order repairService.getById(orderId); String openid userService.getOpenid(order.getUserId()); WxMpTemplateMessage message WxMpTemplateMessage.builder() .toUser(openid) .templateId(TEMPLATE_ID) .data(Arrays.asList( new WxMpTemplateData(thing1, order.getDeviceType()), new WxMpTemplateData(phrase2, getStatusText(order.getStatus())), new WxMpTemplateData(date3, new SimpleDateFormat(yyyy-MM-dd HH:mm).format(new Date())) )) .build(); wxMpService.getTemplateMsgService().sendTemplateMsg(message); }5.2 数据统计看板管理员后台使用ECharts实现数据可视化按设备类型统计故障分布按时间维度统计报修量维修员接单响应时间分析关键SQL-- 按周统计报修量 SELECT DATE_FORMAT(create_time,%Y-%u) AS week, COUNT(*) AS count FROM repair_order GROUP BY week ORDER BY week;6. 部署方案6.1 后端部署推荐使用Docker部署SpringBoot应用FROM openjdk:11-jre COPY target/repair-system.jar /app.jar EXPOSE 8080 ENTRYPOINT [java,-jar,/app.jar]启动命令docker build -t repair-system . docker run -d -p 8080:8080 --name repair repair-system6.2 小程序发布流程开发环境配置{ miniprogramRoot: ./unpackage/dist/dev/mp-weixin, appid: 你的小程序APPID, setting: { urlCheck: false } }生产环境构建npm run build:mp-weixin通过微信开发者工具上传代码7. 常见问题解决7.1 微信登录失败可能原因及解决方案AppID配置错误检查application.yml中的wechat配置确保小程序后台配置的服务器域名正确code失效确保前端获取code后立即调用后端接口code有效期5分钟不可重复使用7.2 图片上传问题典型错误处理大小限制小程序端限制单张图片不超过2M可使用uni.compressImage压缩图片格式问题只允许jpg/png格式前端需做格式校验uni.chooseImage({ count: 3, sizeType: [compressed], sourceType: [album, camera], success: (res) { // 处理选中的图片 } });8. 项目扩展方向智能分配根据维修员位置和技能自动分配工单知识库建立常见故障解决方案库评价系统增加维修服务评价机制数据大屏可视化展示全校设备运行状况实现自动分配的逻辑示例public void autoAssignOrder(Integer orderId) { RepairOrder order getById(orderId); // 1. 获取附近维修员 ListRepairman repairmen repairmanService.findNearby( order.getLocation(), 1000); // 1公里范围内 // 2. 筛选有相关技能的维修员 repairmen repairmen.stream() .filter(r - r.getSkills().contains(order.getDeviceType())) .sorted(Comparator.comparing(Repairman::getCurrentOrders)) .collect(Collectors.toList()); // 3. 分配工单 if(!repairmen.isEmpty()) { assignOrder(orderId, repairmen.get(0).getId()); } }