SCHED-002: 跨区域调度
优先级: 🟡 中 (16.0分) | 实施周期: 2-3周
客户原话
"我们是跨区作业的服务站,每年麦收、秋收的时候,要从河南跑到河北、山东,几百台机器分散在好几个省。不知道哪台机器在哪里,哪台机器有活干,哪台机器闲着。有时候这边的机器忙不过来,那边的机器却闲着,调不过来。转场也是问题,不知道该往哪里转,转过去有没有活。想要个系统能看到所有机器的位置和状态,哪里缺机器就往哪里调,统一调度,提高效率。"
—— 某农机服务站站长
客户类型需求差异
农机合作社(10-50台,本地作业)
需求程度: ⭐⭐ 较低
核心需求:
- 本地作业为主,偶尔跨县作业
- 简单的跨区域订单管理
- 转场路线规划
关键功能:
- 跨县订单管理
- 简单路线规划
- 转场成本计算
农机服务站(跨区作业)
需求程度: ⭐⭐⭐⭐⭐ 必需
核心需求:
- 跨省作业,机器分散
- 实时掌握机器位置和状态
- 跨区域订单统一调度
- 转场路线优化
- 多地协同管理
关键功能:
- 跨区域机器监控
- 订单区域分配
- 转场路线规划
- 多地协同调度
- 区域负责人管理
大型农场(自有农机队)
需求程度: ⭐⭐ 较低
核心需求:
- 主要在农场内作业
- 偶尔支援其他农场
- 简单的跨区域协调
关键功能:
- 农场间协调
- 设备调拨
- 成本核算
农机租赁公司(租赁+作业)
需求程度: ⭐⭐⭐⭐ 重要
核心需求:
- 租赁设备跨区域流动
- 设备位置实时监控
- 跨区域租赁管理
- 设备调配优化
关键功能:
- 设备位置监控
- 跨区域租赁
- 设备调配
- 利用率优化
业务场景描述
典型场景
场景1: 跨省作业机器调度
- 河南麦收结束,机器空闲
- 河北麦收开始,机器不足
- 系统显示:河南有50台空闲收割机
- 调度员决定:调30台到河北
- 系统规划:转场路线和时间
- 机手确认:收到转场通知,开始转场
场景2: 区域订单分配
- 接到100个订单,分布在3个省
- 系统分析:每个省的机器数量和订单量
- 自动分配:河南30单,河北40单,山东30单
- 区域负责人:查看本区域订单
- 区域调度:在区域内进行二次调度
- 开始作业:各区域按计划执行
场景3: 转场路线优化
- 机器从河南转场到河北
- 系统规划:最优路线,避开拥堵
- 计算成本:过路费、油费、时间
- 推荐路线:高速直达,预计4小时
- 机手导航:按推荐路线行驶
- 到达目的地:开始接单作业
场景4: 多地协同调度
- 河北订单激增,机器不足
- 系统提示:河南有空闲机器
- 跨区域调度:从河南调10台到河北
- 协调沟通:两地负责人确认
- 转场安排:机器开始转场
- 到达后:立即投入作业
场景5: 区域作业进度监控
- 总部监控:查看各区域作业进度
- 河南进度:80%,接近完成
- 河北进度:50%,需要支援
- 山东进度:60%,正常进行
- 调度决策:从河南调机器支援河北
- 实时调整:优化跨区域资源配置
核心痛点
- 机器位置不明 - 不知道机器在哪里,无法统一调度
- 区域信息不通 - 各区域信息不共享,资源浪费
- 转场路线不优 - 转场路线不合理,成本高时间长
- 协调沟通困难 - 多地协调靠电话,效率低易出错
- 调度数据缺失 - 无法分析跨区域调度效率
业务流程图
当前人工流程
系统化流程
用户故事
故事1: 总部调度员跨区域调度
作为 总部调度员 我想要 查看所有区域的机器和订单情况 以便 进行跨区域资源调配
验收标准:
- 查看地图上所有机器位置
- 按区域查看机器数量和状态
- 查看各区域订单量
- 识别资源不平衡的区域
- 制定跨区域调度方案
故事2: 区域负责人管理本区域
作为 区域负责人 我想要 管理本区域的机器和订单 以便 高效完成本区域作业
验收标准:
- 查看本区域所有机器
- 查看本区域所有订单
- 在区域内进行调度
- 向总部申请支援
- 上报区域作业进度
故事3: 机手接收转场通知
作为 机手 我想要 收到转场通知和路线 以便 快速转场到新区域
验收标准:
- 收到转场通知
- 查看目的地和距离
- 查看推荐路线
- 查看预计时间和成本
- 一键导航到目的地
故事4: 系统优化转场路线
作为 系统 我想要 规划最优转场路线 以便 降低转场成本和时间
验收标准:
- 计算多条可选路线
- 对比距离、时间、费用
- 推荐最优路线
- 考虑实时路况
- 提供备选方案
故事5: 管理员分析跨区域数据
作为 管理员 我想要 分析跨区域调度数据 以便 优化跨区域调度策略
验收标准:
- 查看跨区域调度统计
- 分析转场成本
- 分析区域资源利用率
- 识别优化空间
- 制定改进措施
数据模型
核心实体
1. 跨区域调度任务 (CrossRegionDispatch)
interface CrossRegionDispatch {
id: string
dispatchNo: string
// 源区域
sourceRegion: {
regionId: string
regionName: string
province: string
city: string
}
// 目标区域
targetRegion: {
regionId: string
regionName: string
province: string
city: string
}
// 调度信息
machines: {
machineId: string
machineName: string
operatorId: string
operatorName: string
}[]
// 转场信息
transferRoute: {
startLocation: Coordinate
endLocation: Coordinate
distance: number
estimatedDuration: number
estimatedCost: number
route: Coordinate[]
tollFee: number
fuelCost: number
}
// 时间信息
plannedDepartureTime: Date
plannedArrivalTime: Date
actualDepartureTime?: Date
actualArrivalTime?: Date
// 状态
status: 'planned' | 'transferring' | 'arrived' | 'cancelled'
// 审批
approvedBy?: string
approvedAt?: Date
createdAt: Date
updatedAt: Date
}2. 区域 (Region)
interface Region {
id: string
name: string
province: string
city: string
district?: string
// 区域范围
boundary: Coordinate[]
centerPoint: Coordinate
// 区域负责人
managerId: string
managerName: string
managerPhone: string
// 资源统计
totalMachines: number
availableMachines: number
workingMachines: number
// 订单统计
totalOrders: number
pendingOrders: number
completedOrders: number
// 状态
isActive: boolean
createdAt: Date
updatedAt: Date
}3. 转场路线 (TransferRoute)
interface TransferRoute {
id: string
routeName: string
startLocation: Coordinate
endLocation: Coordinate
// 路线信息
distance: number
estimatedDuration: number
waypoints: Coordinate[]
// 费用信息
tollFee: number
fuelCost: number
totalCost: number
// 路况信息
roadCondition: 'good' | 'normal' | 'poor'
trafficStatus: 'smooth' | 'slow' | 'congested'
// 推荐度
recommendScore: number
createdAt: Date
updatedAt: Date
}接口设计
1. 查询区域资源
GET /api/regions/{regionId}/resources
Response:
{
code: 0,
message: "success",
data: {
region: Region,
machines: Machine[],
orders: Order[],
statistics: {
machineUtilization: number,
orderCompletionRate: number,
averageResponseTime: number
}
}
}2. 创建跨区域调度
POST /api/cross-region-dispatches
Request:
{
sourceRegionId: string,
targetRegionId: string,
machineIds: string[],
plannedDepartureTime: Date
}
Response:
{
code: 0,
message: "success",
data: {
dispatchId: string,
dispatchNo: string,
transferRoute: TransferRoute,
estimatedCost: number
}
}3. 规划转场路线
POST /api/transfer-routes/plan
Request:
{
startLocation: Coordinate,
endLocation: Coordinate,
vehicleType: string
}
Response:
{
code: 0,
message: "success",
data: {
routes: TransferRoute[],
recommended: TransferRoute
}
}4. 查询跨区域调度
GET /api/cross-region-dispatches?status={status}&startDate={startDate}
Response:
{
code: 0,
message: "success",
data: {
total: number,
list: CrossRegionDispatch[]
}
}5. 更新转场状态
PUT /api/cross-region-dispatches/{dispatchId}/status
Request:
{
status: string,
location?: Coordinate,
notes?: string
}
Response:
{
code: 0,
message: "success",
data: {
dispatchId: string,
status: string,
updatedAt: Date
}
}关键业务规则
1. 跨区域调度规则
- 优先调度距离近的机器
- 考虑转场成本和时间
- 确保目标区域有足够订单
- 避免频繁跨区域调度
2. 转场路线规则
- 优先推荐高速公路
- 避开拥堵路段
- 考虑过路费和油费
- 提供多条备选路线
3. 区域协调规则
- 跨区域调度需双方负责人确认
- 记录调度原因和依据
- 转场费用由目标区域承担
- 机器到达后优先完成目标区域订单
技术实现要点
1. 路线规划算法
function planTransferRoute(
start: Coordinate,
end: Coordinate
): TransferRoute[] {
// 调用地图API规划路线
const routes = await mapAPI.planRoute(start, end, {
alternatives: 3,
avoidTolls: false,
avoidHighways: false
});
// 计算费用
for (const route of routes) {
route.tollFee = calculateTollFee(route);
route.fuelCost = calculateFuelCost(route.distance);
route.totalCost = route.tollFee + route.fuelCost;
route.recommendScore = calculateRouteScore(route);
}
// 按推荐度排序
routes.sort((a, b) => b.recommendScore - a.recommendScore);
return routes;
}2. 区域资源平衡算法
function balanceRegionalResources(regions: Region[]): DispatchPlan {
// 计算各区域资源供需比
const imbalances = regions.map(region => ({
region,
supplyDemandRatio: region.availableMachines / region.pendingOrders,
surplus: region.availableMachines - region.pendingOrders * 0.8
}));
// 识别资源过剩和不足的区域
const surplus = imbalances.filter(r => r.surplus > 5);
const shortage = imbalances.filter(r => r.surplus < -5);
// 生成调度方案
const plan: DispatchPlan = [];
for (const target of shortage) {
for (const source of surplus) {
if (source.surplus > 0) {
const transferCount = Math.min(
Math.abs(target.surplus),
source.surplus
);
plan.push({
sourceRegion: source.region,
targetRegion: target.region,
machineCount: transferCount
});
source.surplus -= transferCount;
target.surplus += transferCount;
}
}
}
return plan;
}实施建议
第一阶段: 基础功能(1周)
- [ ] 区域管理
- [ ] 跨区域调度任务管理
- [ ] 转场路线规划
- [ ] 区域资源查询
第二阶段: 优化功能(1周)
- [ ] 区域资源平衡算法
- [ ] 转场成本优化
- [ ] 多地协同管理
- [ ] 跨区域数据分析
第三阶段: 持续优化(持续)
- [ ] 用户反馈收集
- [ ] 算法优化
- [ ] 功能完善
成功案例
案例1: 某农机服务站跨区作业管理
实施前:
- 机器分散在3个省,位置不明
- 跨区域调度靠电话,效率低
- 转场路线不优,成本高
实施后:
- 实时掌握所有机器位置
- 跨区域调度系统化,效率高
- 转场路线优化,成本降低
关键数据:
- 调度效率提升: 70%
- 转场成本降低: 30%
- 机器利用率提升: 40%
案例2: 某大型农机服务平台
实施前:
- 1000台机器,跨10个省作业
- 区域信息不通,资源浪费
- 协调困难,效率低
实施后:
- 统一平台管理所有区域
- 区域资源实时共享
- 跨区域协调顺畅
关键数据:
- 区域资源利用率: 提升35%
- 跨区域调度次数: 增加50%
- 整体作业量: 增长40%
相关场景
- SCHED-001 作业调度: 区域内订单调度
- SCHED-003 应急调度: 跨区域应急支援
- OPER-004 作业记录: 转场轨迹记录
常见问题
Q1: 跨区域调度会增加成本吗?
A: 短期看转场有成本,但通过优化资源配置,整体效率和收入会提升,长期看是划算的。
Q2: 如何确保转场路线最优?
A: 系统调用地图API规划路线,综合考虑距离、时间、费用,推荐最优方案。
Q3: 区域负责人权限如何划分?
A: 区域负责人管理本区域资源,跨区域调度需总部审批。
Q4: 转场费用谁承担?
A: 通常由目标区域承担,具体可根据实际情况协商。
Q5: 如何避免频繁跨区域调度?
A: 系统会评估跨区域调度的必要性,只有在资源严重不平衡时才建议跨区域调度。
本场景文档版本: v2.0 | 最后更新: 2024-03-07