本地同城无人机作业接单系统源码:架构拆解与抢单调度实现
本地同城无人机作业接单系统源码,本质是一套面向同城无人机作业场景的多端协同接单与调度系统。它通常包含用户端、飞手端、管理后台,后台采用 Spring Boot + MyBatis Plus + MySQL,用户端采用 UniApp(Vue 语法),管理后台采用 Vue + Element UI。核心能力是订单发布、飞手接单或平台派单、作业执行、轨迹与成果回传、状态确认。下面从源码结构、状态机、抢单调度、部署与二次开发几个方面拆解。
一、系统角色与源码模块划分
一套可运行的本地同城无人机作业接单系统源码,一般会按角色拆成四类端:
-
用户端:发布无人机作业需求,选择作业类型、地址、时间窗口,查看飞手位置与订单进度。
-
飞手端:维护无人机设备与资质,附近订单池,抢单或接收派单,上报作业轨迹与成果文件。
-
管理后台:用户与飞手审核,订单调度,异常干预,服务类型管理,数据看板。
-
调度服务:订单匹配、距离计算、消息推送、状态流转。
后台模块可以按 Maven 多模块或单体包结构组织:
```text
drone-order-server
├── common // 统一返回、异常、工具类
├── auth // 登录、JWT、角色权限
├── order // 订单创建、状态机、查询
├── dispatch // 抢单、派单、GeoHash、调度规则
├── pilot // 飞手资质、设备、服务范围
├── track // 轨迹点、成果文件、回传记录
├── message // WebSocket、站内信、模板消息
└── admin // 管理后台接口
```
用户端用 UniApp 可以同时编译 Android、iOS、H5,适合本地同城场景下的多端覆盖。管理后台使用 Vue + Element UI,便于快速实现订单表格、地图选点、审核流和权限菜单。
二、订单状态机与数据模型
无人机作业接单和普通同城跑腿的差异在于:作业类型多、设备绑定强、执行过程需要轨迹与成果回传。因此订单状态机要足够清晰,避免飞手端和管理后台各自维护一套状态。
建议状态定义如下:
```java
public enum DroneOrderStatus {
WAIT_AUDIT(0), // 待审核
WAIT_ACCEPT(1), // 待接单
ACCEPTED(2), // 已接单
WORKING(3), // 作业中
WAIT_CONFIRM(4), // 待用户确认
FINISHED(5), // 已完成
CANCELED(6); // 已取消
private final int code;
DroneOrderStatus(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
```
状态流转要放在服务层统一校验,例如只有 `WAIT_ACCEPT` 可以抢单,只有 `ACCEPTED` 可以开始作业,只有 `WORKING` 可以提交成果。不要让前端直接改状态字段。
核心表可以这样设计:
```sql
CREATE TABLE drone_order (
id BIGINT NOT NULL AUTO_INCREMENT,
order_no VARCHAR(64) NOT NULL,
user_id BIGINT NOT NULL,
pilot_id BIGINT DEFAULT NULL,
service_type VARCHAR(32) NOT NULL,
status TINYINT NOT NULL DEFAULT 0,
city_code VARCHAR(12) DEFAULT NULL,
lng DECIMAL(10,7) DEFAULT NULL,
lat DECIMAL(10,7) DEFAULT NULL,
address VARCHAR(255) DEFAULT NULL,
appointment_time DATETIME DEFAULT NULL,
work_params JSON DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_order_no (order_no),
KEY idx_status_city (status, city_code),
KEY idx_pilot_status (pilot_id, status)
);
```
`work_params` 用 JSON 保存不同作业类型的动态参数,例如植保面积、巡检线路、航拍时长、测绘范围。这样新增作业类型时,不需要频繁改表结构。
三、抢单、派单与实时通信实现
本地同城无人机作业接单系统源码中,调度是技术重点。常见做法是"订单池 + 飞手位置 + 原子抢单 + 实时推送"。
飞手位置可以用 Redis GeoHash 存储:
```java
redis