Skip to content

方案设计:应急抢修调度

← 返回场景概览 | 上一阶段:需求探索 → | 下一阶段:开发资产 →


方案概览

本方案设计了一套高效的应急抢修调度系统,通过智能派单、实时定位、紧急响应机制,解决应急抢修响应时间长、调度规则不清晰、资源管理混乱等痛点,实现应急抢修的快速响应和高效调度。

1. 应急事件分级

1.1 紧急程度分级

紧急程度典型场景要求响应时间要求完成时间通知方式
一级(危急)电梯困人、消防报警、天然气泄漏5 分钟30 分钟广播通知+电话+短信
二级(紧急)水管爆裂、电路跳闸、空调故障(夏季)15 分钟2 小时推送通知+短信
三级(重要)门禁故障、灯具损坏30 分钟4 小时推送通知
四级(普通)墙面污损、设施老化2 小时24 小时推送通知

1.2 事件上报流程

2. 智能派单规则

2.1 派单维度

派单考虑因素:

  1. 紧急程度:一级危急优先,二级紧急次之
  2. 技能匹配:根据故障类型匹配有相应技能的师傅
  3. 距离优先:优先派给距离最近的师傅
  4. 负载均衡:优先派给当前工作量较少的师傅
  5. 班次考虑:夜间只派给值班师傅
  6. 工具设备:需要特殊工具的,优先派给有工具的师傅

2.2 派单算法

评分计算:

typescript
function calculateDispatchScore(
  worker: Worker,
  task: EmergencyTask,
  options: DispatchOptions
): number {
  // 1. 紧急程度得分(0-100分)
  const urgencyScore = task.urgency === 'critical' ? 100 : 
                       task.urgency === 'urgent' ? 80 : 
                       task.urgency === 'important' ? 60 : 40;
  
  // 2. 技能匹配度(0-100分)
  const skillMatchScore = worker.skills.includes(task.skillType) ? 100 : 0;
  
  // 3. 距离得分(0-100分,距离越近得分越高)
  const distance = calculateDistance(worker.location, task.location);
  const distanceScore = Math.max(0, 100 - (distance / 1000) * 20); // 每公里扣20分
  
  // 4. 工作量得分(0-100分,工作量越少得分越高)
  const currentTasks = worker.currentTasks.length;
  const maxTasks = worker.maxConcurrentTasks || 3;
  const workloadScore = Math.max(0, 100 - (currentTasks / maxTasks) * 100);
  
  // 5. 班次得分(0-100分)
  const shiftScore = isInShift(worker, task.time) ? 100 : 0;
  
  // 6. 工具匹配度(0-100分)
  const toolMatchScore = hasRequiredTools(worker, task.requiredTools) ? 100 : 0;
  
  // 7. 加权计算总分
  const totalScore = 
    urgencyScore * 0.2 +
    skillMatchScore * 0.25 +
    distanceScore * 0.25 +
    workloadScore * 0.15 +
    shiftScore * 0.1 +
    toolMatchScore * 0.05;
  
  return totalScore;
}

2.3 一级危急事件处理

处理规则:

  • 立即广播通知所有在线师傅
  • 支持抢单模式:师傅抢单后立即派单
  • 支持指派模式:系统自动指派最近的师傅
  • 如果 2 分钟内无人接单,自动升级通知主管
  • 主管可以强制指派师傅

3. 实时状态管理

3.1 师傅状态

状态定义:

  • 在线空闲:在线,无任务,可以接单
  • 在线忙碌:在线,有任务,可以接新任务(如果允许)
  • 在线不可用:在线,但不可接单(如休息中)
  • 离线:不在线,不可接单

状态更新:

  • 师傅手动更新状态
  • 系统根据任务状态自动更新
  • 位置实时更新(GPS定位)

3.2 任务状态

状态流转:

待派单 → 已派单 → 已接单 → 前往现场 → 处理中 → 已完成

       已拒绝(师傅拒单)

       重新派单

3.3 超时处理

超时规则:

  • 一级危急:5 分钟未接单,自动升级通知主管
  • 二级紧急:15 分钟未接单,自动升级通知主管
  • 三级重要:30 分钟未接单,提醒调度员
  • 四级普通:2 小时未接单,提醒调度员

4. 资源管理

4.1 师傅技能管理

技能分类:

  • 电工:电路故障、电气设备维修
  • 水工:水管维修、水暖设备维修
  • 电梯工:电梯故障、电梯维护
  • 空调工:空调故障、空调维护
  • 综合维修:一般维修、杂项维修

技能标签:

  • 每个师傅可以有多个技能标签
  • 技能等级:初级、中级、高级
  • 技能认证:持证上岗

4.2 工具设备管理

工具登记:

  • 师傅携带的工具清单
  • 工具状态:可用、维修中、缺失
  • 特殊工具:需要特殊工具的故障,优先派给有工具的师傅

4.3 班次管理

班次类型:

  • 白班:8:00-18:00
  • 夜班:18:00-次日8:00
  • 值班:24小时待命

班次规则:

  • 夜间只派给值班师傅
  • 非值班师傅夜间不接单
  • 班次排班可配置

5. 数据模型设计

5.1 应急任务(EmergencyTask)

typescript
interface EmergencyTask {
  id: string;
  taskNo: string;               // 任务编号
  projectId: string;           // 项目ID
  urgency: 'critical' | 'urgent' | 'important' | 'normal';
  taskType: string;            // 任务类型(电梯、水管、电路等)
  skillType: string;           // 所需技能
  location: {                  // 位置
    lat: number;
    lng: number;
    address: string;
  };
  description: string;          // 问题描述
  reportedBy: string;          // 上报人
  reportedTime: Date;          // 上报时间
  assignedWorkerId?: string;   // 分配的师傅
  assignedTime?: Date;          // 派单时间
  acceptTime?: Date;            // 接单时间
  arriveTime?: Date;           // 到达时间
  startTime?: Date;            // 开始时间
  completeTime?: Date;         // 完成时间
  status: 'pending' | 'assigned' | 'accepted' | 'in-progress' | 'completed' | 'rejected';
  requiredTools?: string[];    // 所需工具
  createdAt: Date;
  updatedAt: Date;
}

5.2 师傅信息(Worker)

typescript
interface Worker {
  id: string;
  name: string;
  phone: string;
  skills: string[];            // 技能列表
  skillLevels: {               // 技能等级
    [skill: string]: 'junior' | 'intermediate' | 'senior';
  };
  location: {                   // 当前位置
    lat: number;
    lng: number;
  };
  status: 'online-idle' | 'online-busy' | 'online-unavailable' | 'offline';
  currentTasks: string[];      // 当前任务列表
  maxConcurrentTasks: number;   // 最大并发任务数
  tools: string[];             // 携带工具
  shift: 'day' | 'night' | 'on-call';  // 班次
  avgResponseTime: number;      // 平均响应时间(分钟)
  createdAt: Date;
  updatedAt: Date;
}

6. 权限设计

6.1 角色定义

角色权限
超级管理员所有权限
调度主管查看所有数据、统计数据、强制派单
调度员派单、查看任务、手动调整
维修师傅查看自己的任务、接单、完成任务
上报人员上报事件、查看事件进度

7. 技术架构

7.1 前端

  • 上报端:微信小程序(快速上报)
  • 师傅端:移动 App(接单、定位、完成任务)
  • 调度端:Web 后台(派单、监控、统计)

7.2 后端

  • API 服务:RESTful API
  • 实时通信:WebSocket(实时位置、状态更新)
  • 消息推送:任务通知、状态变更通知

7.3 核心功能模块

  1. 事件管理模块:事件上报、确认、分级
  2. 智能派单模块:派单算法、任务分配
  3. 实时定位模块:GPS定位、位置更新
  4. 资源管理模块:师傅管理、技能管理、工具管理
  5. 统计分析模块:响应时间统计、完成率统计

8. 关键业务规则总结

8.1 派单规则

  • 紧急程度优先:一级危急 > 二级紧急 > 三级重要 > 四级普通
  • 智能派单:技能匹配 → 距离优先 → 负载均衡 → 班次考虑
  • 一级危急:广播通知+抢单/指派

8.2 响应时间要求

  • 一级危急:5 分钟内响应
  • 二级紧急:15 分钟内响应
  • 三级重要:30 分钟内响应
  • 四级普通:2 小时内响应

8.3 超时处理

  • 一级危急:5 分钟未接单,自动升级
  • 二级紧急:15 分钟未接单,自动升级
  • 其他:超时提醒调度员

下一步:开发资产

在开发资产阶段,我们将:

  1. 创建 Cursor Skills(业务规则、数据模型)
  2. 创建 PROMPT 模板(需求调研、方案设计)
  3. 创建代码模板(API 接口、前端组件)

查看开发资产 →


相关链接

基于 AI 辅助开发,快速、灵活、可靠