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()); } }

相关新闻

5大实用技巧:开源智能睡眠管理器SleeperX完全使用手册

5大实用技巧:开源智能睡眠管理器SleeperX完全使用手册

5大实用技巧:开源智能睡眠管理器SleeperX完全使用手册 【免费下载链接】SleeperX MacBook prevent idle/lid sleep! Hackintosh sleep on low battery capacity. 项目地址: https://gitcode.com/gh_mirrors/sl/SleeperX 还在为MacBook电量管理烦恼吗&#xf…

2026/9/10 12:17:49 阅读更多 →
终极音频格式转换指南:FlicFlac免费便携工具完全解析

终极音频格式转换指南:FlicFlac免费便携工具完全解析

终极音频格式转换指南:FlicFlac免费便携工具完全解析 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 还在为不同设备间的音频格式兼容性而烦…

2026/10/9 17:19:49 阅读更多 →
FlicFlac音频转换工具:Windows上7种音频格式的免费转换方案

FlicFlac音频转换工具:Windows上7种音频格式的免费转换方案

FlicFlac音频转换工具:Windows上7种音频格式的免费转换方案 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 在数字音频处理领域,…

2026/10/11 10:08:06 阅读更多 →

最新新闻

RFM分群字段的时间窗口与空值校验

RFM分群字段的时间窗口与空值校验

RFM 模型几乎是所有用户分群方案的起点。Arthur Hughes 在 20 世纪 90 年代提出这个模型以来,它一直是商业领域应用最广泛的用户价值分析框架。但我见过太多团队跑完 RFM 直接用,结果分出来的"重要价值客户"其实是一批从没下过单的空值记录。问…

2026/10/15 4:06:46 阅读更多 →
GPT-6 开始为回答生成界面:拆解 OpenAI 最新 Intelligent UI 的原理与前景

GPT-6 开始为回答生成界面:拆解 OpenAI 最新 Intelligent UI 的原理与前景

GPT-6 开始为回答生成界面:拆解 OpenAI 最新 Intelligent UI 的原理与前景 2026 年 10 月 7 日,GPT-6 的对话产品引入了 Intelligent UI。回答可以包含文字、图形、按钮、表单和交互体验,呈现方式由问题决定。 这件事值得关注的地方&#x…

2026/10/15 4:06:46 阅读更多 →
三、C++系列之类和对象

三、C++系列之类和对象

1、面向对象编程的特征截止到目前,本人已接触了很多编程语言。例如java、C、C、python、php汇编等。其中C和汇编是面向过程编程,C、python、php等都是面向对象编程,在面向对象编程中,C是效率最高的,没有之一。提到面向…

2026/10/15 4:06:46 阅读更多 →
【VR】【Unity】AI 代理能直接改 Unity 工程了,VR 开发会被替代吗

【VR】【Unity】AI 代理能直接改 Unity 工程了,VR 开发会被替代吗

文章目录 本篇主旨 官方插件能做什么 对 VR 开发者的影响 先确认三件事 可以交给代理的杂活 必须人来判断的部分 实用总结 参考资料 本篇主旨 Unity 给编码代理出了官方插件,代理不光能写 C#,还能动编辑器里的对象、场景和资源。我关心的问题是:装包、查碰撞这些事能不能交…

2026/10/15 4:06:46 阅读更多 →
人机协同下的注意力分配,AI是帮手还是负担?

人机协同下的注意力分配,AI是帮手还是负担?

1. 质检员的"视觉疲劳"困境 在服装质检行业,AI 的引入被寄予厚望——它似乎能不知疲倦地盯着流水线,识别瑕疵,解放人力。然而,现实远比想象复杂。AI 并非完全取代质检员,而是与质检员形成一种人机协同的工作…

2026/10/15 4:06:46 阅读更多 →
律师智能办案系统有哪些法律ai推荐?先看你的年预算在哪一档

律师智能办案系统有哪些法律ai推荐?先看你的年预算在哪一档

这个问题被问得很多,但脱离预算谈推荐没有意义。同样一支团队,年预算五千和年预算十万,答案完全不同。按三档来说。第一档:年预算基本为零这一档的现实约束是"能用免费的先用免费"。可关注的:通义法睿&#…

2026/10/15 4:05:46 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →