尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

微信小程序+Flask实现医院设备报修系统开发实践

微信小程序+Flask实现医院设备报修系统开发实践 1. 项目背景与核心需求医院设备报修管理一直是医疗后勤工作中的痛点。传统模式下医护人员发现设备故障后往往需要通过电话或纸质单据层层上报维修响应慢、状态跟踪难、数据统计不便。某三甲医院的后勤主任曾向我吐槽上周CT机报修单被夹在病历本里三天后才被发现期间耽误了86例检查。这套微信小程序Python Flask的系统正是为解决这些问题而生。其核心价值在于移动化报修医护人员通过微信小程序随时提交报修支持拍照上传故障现象全流程追踪从报修提交、工单分配、维修处理到验收评价的完整闭环数据可视化自动生成设备故障率、维修时效等管理报表关键设计原则操作流程必须比打电话报修更简单否则推广使用时会遇到阻力。实测表明熟练用户完成报修仅需15秒。2. 技术架构设计2.1 整体技术栈采用前后端分离架构微信小程序前端 ↓ HTTPS → Python Flask后端API ↓ MySQL工单数据 ↓ Redis消息队列2.2 微信小程序关键实现导航栏适配方案// 获取系统状态栏高度 const systemInfo wx.getSystemInfoSync() this.setData({ statusBarHeight: systemInfo.statusBarHeight, navBarHeight: systemInfo.platform android ? 48 : 44 })图片上传优化wx.chooseImage({ count: 3, sizeType: [compressed], // 压缩模式 success: (res) { res.tempFilePaths.forEach((path) { wx.uploadFile({ url: https://yourdomain.com/upload, filePath: path, name: file, formData: {type: repair}, success: (res) console.log(JSON.parse(res.data)) }) }) } })2.3 Flask后端设计要点采用工厂模式创建应用典型目录结构/hospital_repair ├── app/ │ ├── __init__.py │ ├── api/ │ │ ├── repair.py # 报修接口 │ │ └── stats.py # 统计接口 │ ├── models.py # 数据模型 │ └── extensions.py # 扩展库 ├── config.py └── run.py数据库模型示例SQLAlchemyclass RepairOrder(db.Model): __tablename__ repair_orders id db.Column(db.Integer, primary_keyTrue) device_id db.Column(db.String(20), indexTrue) reporter db.Column(db.String(50)) # 报修人工号 description db.Column(db.Text) images db.Column(db.JSON) # 存储图片URL数组 status db.Column(db.Integer, default0) # 0-待处理 1-处理中 2-已完成 created_at db.Column(db.DateTime, defaultdatetime.now)3. 核心功能实现细节3.1 工单状态机设计状态流转逻辑是系统的核心graph TD A[待处理] --|分配工程师| B[处理中] B --|维修完成| C[待验收] C --|用户确认| D[已完成] C --|用户驳回| B A --|紧急工单| E[加急处理]对应Flask实现app.route(/order/int:order_id/status, methods[PUT]) def change_status(order_id): order RepairOrder.query.get_or_404(order_id) new_status request.json.get(status) # 状态校验逻辑 if new_status 1 and order.status ! 0: abort(400, description只能从待处理状态转为处理中) elif new_status 2 and order.status ! 1: abort(400, description只能从处理中状态转为待验收) order.status new_status db.session.commit() return jsonify({message: 状态更新成功})3.2 消息推送机制采用微信模板消息Redis队列实现实时通知# 消息生产者 def push_notification(user_openid, template_id, data): msg { openid: user_openid, template_id: template_id, data: data, timestamp: int(time.time()) } redis_client.rpush(notification_queue, json.dumps(msg)) # 消费者进程 def consume_notifications(): while True: msg_json redis_client.blpop(notification_queue, timeout30) if msg_json: msg json.loads(msg_json[1]) wx_api.send_template_message(msg) # 调用微信接口4. 性能优化实践4.1 图片处理方案对比方案优点缺点适用场景直接存储原图实现简单存储成本高小规模应用七牛云OSS自动缩略图需要备案中大型项目自建MinIO集群完全可控维护成本高私有化部署最终选择方案小程序端压缩七牛云存储关键配置QINIU_ACCESS_KEY os.getenv(QINIU_AK) QINIU_SECRET_KEY os.getenv(QINIU_SK) QINIU_BUCKET hospital-repair QINIU_DOMAIN https://img.yourdomain.com4.2 数据库查询优化慢查询案例设备故障统计报表-- 优化前执行时间2.3s SELECT device_id, COUNT(*) FROM repair_orders WHERE created_at BETWEEN 2023-01-01 AND 2023-12-31 GROUP BY device_id; -- 优化后0.15s CREATE INDEX idx_device_created ON repair_orders(device_id, created_at); SELECT device_id, COUNT(*) FROM repair_orders USE INDEX(idx_device_created) WHERE created_at BETWEEN 2023-01-01 AND 2023-12-31 GROUP BY device_id;5. 安全防护措施5.1 接口安全设计HTTPS强制启用app.before_request def force_https(): if not request.is_secure and not app.debug: return redirect(request.url.replace(http://, https://), code301)参数校验装饰器def validate_json(schema): def decorator(f): wraps(f) def wrapper(*args, **kwargs): try: jsonschema.validate(request.json, schema) except jsonschema.ValidationError as e: abort(400, descriptionstr(e)) return f(*args, **kwargs) return wrapper return decorator # 使用示例 repair_schema { type: object, properties: { device_id: {type: string, minLength: 5}, description: {type: string, minLength: 10} }, required: [device_id] }5.2 小程序安全实践敏感数据保护不直接暴露数据库ID使用UUID作为对外标识用户手机号通过微信加密接口获取防刷单机制from flask_limiter import Limiter limiter Limiter( app, key_funclambda: request.headers.get(X-Real-IP), default_limits[200 per day, 50 per hour] ) app.route(/api/repair, methods[POST]) limiter.limit(10 per minute) def create_repair(): # 报修接口限流6. 部署与监控6.1 服务器部署方案推荐使用Docker Compose部署version: 3 services: web: image: your-repo/hospital-repair:1.0 ports: - 5000:5000 environment: - FLASK_ENVproduction depends_on: - redis - db redis: image: redis:6-alpine volumes: - redis_data:/data db: image: mysql:5.7 environment: - MYSQL_ROOT_PASSWORDyourpassword volumes: - db_data:/var/lib/mysql volumes: redis_data: db_data:6.2 Prometheus监控配置通过prometheus_client暴露指标from prometheus_client import Counter, generate_latest REQUESTS_COUNTER Counter( http_requests_total, Total HTTP Requests, [method, endpoint, http_status] ) app.after_request def after_request(response): REQUESTS_COUNTER.labels( request.method, request.path, response.status_code ).inc() return response app.route(/metrics) def metrics(): return generate_latest()7. 典型问题排查实录7.1 微信iOS视频播放问题现象iOS设备播放维修指导视频时出现MEDIA_ERR_NETWORK错误排查过程检查HTTPS证书链完整度验证视频Range请求支持发现Nginx配置缺少视频MIME类型解决方案location ~ \.(mp4|mov)$ { add_header Content-Type video/mp4; add_header Accept-Ranges bytes; root /var/www/videos; }7.2 高德地图集成问题小程序使用高德地图API时需注意必须配置合法域名白名单iOS和Android的key需要分开申请真机调试时关闭域名校验// app.js wx.startAccelerometer({ success: () console.log(准备调试), fail: (err) console.error(err) })8. 项目演进方向智能派单算法基于工程师位置、技能标签和历史完成时间自动分配工单AR远程指导通过小程序AR功能实现专家远程协作维修预测性维护结合设备IoT数据预测潜在故障实际落地案例在某医院放射科试点期间平均维修响应时间从4.2小时缩短至38分钟设备利用率提升17%。特别在DR设备维修场景中通过视频指导功能使50%的简单故障实现现场快速解决。
返回列表