1. 校园宿舍报修系统开发全记录
1.1 项目背景与需求分析
去年12月,我和同学接到学校宿管长的委托,开发一个校园宿舍报修系统小程序。这个需求源于传统报修方式的诸多不便:学生需要到宿管办公室填写纸质表格,维修进度无法实时查询,而宿管人员也经常因为信息传递不及时被投诉。
经过需求调研,我们确定了以下核心功能模块:
- 学生端:在线提交报修单、上传故障照片、查看处理进度、评价服务
- 维修工端:接收工单、更新状态、上传维修结果照片
- 宿管端:工单分配、数据统计、导出报表
技术选型方面,考虑到学校IT基础设施的限制和小程序的普及性,我们选择了微信小程序作为前端,后端采用Node.js + MySQL组合。这个方案的优势在于:
- 微信小程序无需安装,学生使用门槛低
- Node.js轻量高效,适合处理高并发的报修请求
- MySQL关系型数据库能很好地处理工单的状态流转
1.2 开发过程中的技术挑战
在实现工单状态机时,我们遇到了状态流转的复杂性问题。最初的设计过于简单,没有考虑维修工拒单、学生取消等异常情况。经过三次迭代,最终采用了有限状态机模式:
javascript复制// 工单状态定义
const STATUS = {
PENDING: 1, // 待接单
ACCEPTED: 2, // 已接单
REJECTED: 3, // 已拒单
PROCESSING: 4, // 处理中
COMPLETED: 5, // 已完成
CANCELLED: 6 // 已取消
};
// 状态转移规则
const TRANSITIONS = {
[STATUS.PENDING]: [STATUS.ACCEPTED, STATUS.REJECTED, STATUS.CANCELLED],
[STATUS.ACCEPTED]: [STATUS.PROCESSING, STATUS.CANCELLED],
// ...其他状态转移规则
};
另一个难点是图片上传与压缩。学生上传的故障照片往往体积过大,我们通过以下方案优化:
- 前端使用canvas进行图片压缩(质量降至70%)
- 后端使用sharp库进行二次压缩
- 将图片存储在七牛云而非本地服务器
