开发资产:物业报修巡检系统
概述
在开发这个场景的过程中,我们沉淀了以下可复用的开发资产:
- Cursor Skill - 智能派单业务规则
- PROMPT 模板 - 工单状态流转逻辑生成
- 实施指南 - 如何快速复现这个场景
这些资产可以帮助快速复用这个场景的开发经验。
1. Cursor Skill:智能派单规则
使用场景
当你需要开发类似的"任务分配/派单"场景时,可以使用这个 Skill 让 AI 理解业务规则。
Skill 内容
markdown
# 智能派单业务规则
## 业务场景
物业报修、维修服务、上门服务等场景中,需要根据多个维度智能分配任务给最合适的工作人员。
## 核心业务规则
### 1. 派单维度
派单需要考虑以下维度:
- **类型匹配**:任务类型与工作人员技能匹配
- **地理位置**:优先分配给距离最近的工作人员
- **工作量均衡**:优先分配给当前工作量较少的工作人员
- **紧急程度**:紧急任务优先分配给在线且有时间的员工
### 2. 评分算法
```typescript
// 派单评分计算
function calculateDispatchScore(
worker: Worker,
task: Task,
options: DispatchOptions
): number {
// 1. 类型匹配度(0-100分)
const typeMatchScore = worker.skills.includes(task.type) ? 100 : 0;
// 2. 距离得分(0-100分,距离越近得分越高)
const distance = calculateDistance(worker.location, task.location);
const distanceScore = Math.max(0, 100 - (distance / 1000) * 10); // 每公里扣10分
// 3. 工作量得分(0-100分,工作量越少得分越高)
const currentWorkload = worker.currentTasks.length;
const maxWorkload = worker.maxConcurrentTasks || 5;
const workloadScore = Math.max(0, 100 - (currentWorkload / maxWorkload) * 100);
// 4. 响应速度得分(0-100分,历史平均响应时间越短得分越高)
const avgResponseTime = worker.avgResponseTime || 30; // 分钟
const responseScore = Math.max(0, 100 - (avgResponseTime / 60) * 100);
// 5. 加权计算总分
const totalScore =
typeMatchScore * 0.3 +
distanceScore * 0.3 +
workloadScore * 0.2 +
responseScore * 0.2;
return totalScore;
}3. 派单流程
typescript
async function dispatchTask(task: Task): Promise<Worker> {
// 1. 筛选候选工作人员
const candidates = await getAvailableWorkers({
projectId: task.projectId,
skills: [task.type],
status: 'online'
});
// 2. 计算每个候选人的评分
const scoredWorkers = candidates.map(worker => ({
worker,
score: calculateDispatchScore(worker, task, {})
}));
// 3. 按评分排序
scoredWorkers.sort((a, b) => b.score - a.score);
// 4. 选择评分最高的
const selectedWorker = scoredWorkers[0].worker;
// 5. 分配任务
await assignTask(task.id, selectedWorker.id);
// 6. 通知工作人员
await notifyWorker(selectedWorker.id, {
type: 'NEW_TASK',
taskId: task.id,
taskInfo: task
});
return selectedWorker;
}4. 紧急任务处理
typescript
// 紧急任务优先处理
if (task.urgency === 'urgent') {
// 紧急任务:优先分配给在线且有时间的员工
const urgentCandidates = candidates.filter(worker =>
worker.status === 'online' &&
worker.currentTasks.length < worker.maxConcurrentTasks
);
if (urgentCandidates.length > 0) {
// 从在线员工中选择评分最高的
const urgentScored = urgentCandidates.map(worker => ({
worker,
score: calculateDispatchScore(worker, task, {})
}));
urgentScored.sort((a, b) => b.score - a.score);
return urgentScored[0].worker;
}
}5. 超时处理
typescript
// 任务超时自动升级
async function checkTaskTimeout() {
const overdueTasks = await getOverdueTasks();
for (const task of overdueTasks) {
if (task.urgency === 'urgent') {
// 紧急任务超时:通知管理员
await notifyAdmin({
type: 'URGENT_TASK_TIMEOUT',
taskId: task.id
});
} else {
// 普通任务超时:自动升级为紧急
await updateTask(task.id, { urgency: 'urgent' });
await notifyWorker(task.assignedWorkerId, {
type: 'TASK_UPGRADED',
taskId: task.id
});
}
}
}数据模型
任务(Task)
typescript
interface Task {
id: string;
type: string; // 任务类型
urgency: 'urgent' | 'normal' | 'low';
location: Location; // 任务位置
assignedWorkerId?: string; // 分配的工作人员
status: string; // 任务状态
createdAt: Date;
deadline?: Date; // 截止时间
}工作人员(Worker)
typescript
interface Worker {
id: string;
name: string;
skills: string[]; // 技能列表
location: Location; // 当前位置
currentTasks: Task[]; // 当前任务列表
maxConcurrentTasks: number; // 最大并发任务数
avgResponseTime: number; // 平均响应时间(分钟)
status: 'online' | 'offline' | 'busy';
}开发注意事项
- 评分权重可配置:不要硬编码权重,支持运营人员配置
- 距离计算优化:使用缓存或地理编码服务优化距离计算性能
- 实时位置更新:工作人员位置需要实时更新(GPS/手动更新)
- 任务状态同步:任务状态变更需要实时通知相关人员
- 超时监控:需要定时任务监控任务超时情况
相似场景复用
这个规则可以复用到:
- 维修服务派单:家电维修、设备维修
- 上门服务派单:家政服务、护理服务
- 配送任务分配:外卖配送、物流配送
- 巡检任务分配:安全巡检、设备巡检
### 如何使用这个 Skill
**步骤 1:保存为文件**
将上述内容保存为 `.cursorrules` 文件或在项目中创建 `docs/business-rules/smart-dispatch.md`
**步骤 2:在 Cursor 中引用**在开发派单功能时,告诉 AI: "参考 smart-dispatch.md 中的业务规则, 实现智能派单逻辑"
**步骤 3:AI 会理解并生成代码**
AI 会基于这个规则生成准确的派单逻辑、评分算法等。
---
## 2. PROMPT 模板:工单状态流转逻辑
### 使用场景
当需要快速生成类似的"工单状态流转"代码时,使用这个 PROMPT 模板。
### PROMPT 模板
```text
你是一个业务逻辑开发专家。请根据以下业务规则,生成完整的工单状态流转逻辑代码。
## 业务场景
[描述你的具体场景,例如:物业报修工单状态流转]
## 工单状态定义
[列出所有状态,例如:
- 待受理
- 待派单
- 待接单
- 待到达
- 处理中
- 待确认
- 已完成
- 已拒绝
- 已取消
]
## 状态流转规则
[描述状态之间的流转规则,例如:
1. 待受理 → 待派单(客服受理)
2. 待派单 → 待接单(系统/手动派单)
3. 待接单 → 待到达(维修工接单)
4. 待到达 → 处理中(维修工到达现场)
5. 处理中 → 待确认(维修工完成维修)
6. 待确认 → 已完成(业主确认)
7. 待确认 → 待派单(业主不满意,重新派单)
]
## 权限控制
[描述不同角色的操作权限,例如:
- 客服:可以受理、派单
- 维修工:可以接单、到达、完成
- 业主:可以确认、评价
]
## 输出要求
1. TypeScript 代码实现
2. 包含完整的状态机逻辑
3. 包含权限验证
4. 包含状态变更通知
5. 包含单元测试用例
6. 包含注释说明
请生成代码。使用示例
输入 PROMPT:
text
你是一个业务逻辑开发专家。请根据以下业务规则,生成完整的工单状态流转逻辑代码。
## 业务场景
物业报修工单状态流转
## 工单状态定义
- 待受理:业主已提交,等待客服受理
- 待派单:已受理,等待派单
- 待接单:已派单,等待维修工接单
- 待到达:已接单,维修工前往现场
- 处理中:维修工正在维修
- 待确认:维修完成,等待业主确认
- 已完成:业主确认,工单完成
- 已拒绝:工单被拒绝
- 已取消:工单被取消
## 状态流转规则
1. 待受理 → 待派单(客服受理)
2. 待派单 → 待接单(系统/手动派单)
3. 待接单 → 待到达(维修工接单)
4. 待到达 → 处理中(维修工到达现场)
5. 处理中 → 待确认(维修工完成维修)
6. 待确认 → 已完成(业主确认)
7. 待确认 → 待派单(业主不满意,重新派单)
## 权限控制
- 客服:可以受理、派单
- 维修工:可以接单、到达、完成
- 业主:可以确认、评价
## 输出要求
1. TypeScript 代码实现
2. 包含完整的状态机逻辑
3. 包含权限验证
4. 包含状态变更通知
5. 包含单元测试用例
6. 包含注释说明
请生成代码。3. 实施指南
快速复现步骤
如果你需要在新项目中实现类似的场景,按照以下步骤:
步骤 1:需求确认(1 小时)
- [ ] 确认任务类型和工作人员技能要求
- [ ] 确认派单规则(评分权重、紧急处理)
- [ ] 确认工单状态流转规则
- [ ] 确认通知方式(微信/短信/系统内消息)
步骤 2:数据库设计(30 分钟)
sql
-- 工单表
CREATE TABLE repair_orders (
id VARCHAR(50) PRIMARY KEY,
order_no VARCHAR(50) UNIQUE,
project_id VARCHAR(50),
building VARCHAR(100),
room VARCHAR(100),
contact_name VARCHAR(100),
contact_phone VARCHAR(20),
repair_type VARCHAR(50),
urgency VARCHAR(20),
description TEXT,
status VARCHAR(30),
assigned_worker_id VARCHAR(50),
accept_time TIMESTAMP,
arrive_time TIMESTAMP,
start_time TIMESTAMP,
complete_time TIMESTAMP,
confirm_time TIMESTAMP,
created_at TIMESTAMP,
updated_at TIMESTAMP
);
-- 工作人员表
CREATE TABLE workers (
id VARCHAR(50) PRIMARY KEY,
name VARCHAR(100),
phone VARCHAR(20),
skills JSON, -- 技能列表
location_lat DECIMAL(10,6),
location_lng DECIMAL(10,6),
max_concurrent_tasks INT DEFAULT 5,
avg_response_time INT, -- 平均响应时间(分钟)
status VARCHAR(20),
created_at TIMESTAMP,
updated_at TIMESTAMP
);步骤 3:开发派单逻辑(2 小时)
使用上述 Cursor Skill 和 PROMPT 模板,快速生成派单逻辑代码。
步骤 4:开发状态流转(2 小时)
使用 PROMPT 模板生成状态流转逻辑。
步骤 5:集成通知(1 小时)
- 微信公众号模板消息
- 企业微信机器人
- 短信通知(备用)
步骤 6:测试(2 小时)
- 派单逻辑测试
- 状态流转测试
- 通知功能测试
- 边界值测试
总开发时间:约 8-10 小时
关键代码片段
后端 API 示例:
typescript
// POST /api/repair-orders/dispatch
router.post('/dispatch', async (req, res) => {
const { orderId } = req.body;
// 1. 获取工单信息
const order = await getRepairOrder(orderId);
// 2. 智能派单
const worker = await dispatchTask(order);
// 3. 更新工单状态
await updateOrder(orderId, {
status: '待接单',
assignedWorkerId: worker.id
});
// 4. 通知维修工
await notifyWorker(worker.id, {
type: 'NEW_ORDER',
orderId: order.id,
orderInfo: order
});
res.json({ success: true, worker });
});下一步
查看 系统落地 → 了解这个场景在完整系统中的实现。

