低空飞行申报与智能审核系统是一套政务类信息管理系统,用于规范和管理民用无人驾驶航空器(无人机)的飞行活动申报与审批流程。系统对标民航局UOM全国无人机综合监管平台,依据《无人驾驶航空器飞行管理暂行条例》及相关国家标准进行设计开发。
| 功能模块 | 功能说明 |
|---|---|
| 用户管理 | 飞手、审核员、管理员三种角色,支持注册、登录、实名认证 |
| 无人机管理 | 依据GB 46761-2025标准进行无人机分类登记管理 |
| 飞行计划申报 | 填写时间、空域、航线、高度、飞行器、用途等信息 |
| 智能合规校验 | 自动校验飞行时间、空域、高度、操控员资质等6大规则 |
| 多级审核流程 | 初审→复审→批准/驳回/退回修改 |
| 申请状态查询 | 实时查看进度、驳回原因、整改要求 |
| 历史记录归档 | 查询历史申请、飞行记录 |
- 《无人驾驶航空器飞行管理暂行条例》(国务院令第761号)
- GB 46761-2025《民用无人驾驶航空器系统分类及分级》
- GB 46750-2025《民用无人驾驶航空器系统运行识别信息》
| 层级 | 技术 | 版本 |
|---|---|---|
| 前端框架 | Vue | 3.4+ |
| UI组件库 | Element Plus | 2.4+ |
| 路由管理 | Vue Router | 4.2+ |
| 状态管理 | Pinia | 2.1+ |
| HTTP客户端 | Axios | 1.6+ |
| 后端框架 | Spring Boot | 3.2+ |
| 安全框架 | Spring Security | 6.2+ |
| ORM框架 | MyBatis-Plus | 3.5+ |
| 数据库 | MySQL | 8.0 |
| 接口文档 | Knife4j (Swagger) | 4.4+ |
┌─────────────────────────────────────────────────────────────────┐
│ 用户层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 飞手端 │ │ 审核员端 │ │ 管理员端 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 前端服务层 │
│ Vue3 + Element Plus + Vue Router │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │登录注册│ │无人机 │ │飞行申报│ │审核管理│ │记录查询│ │
│ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 后端服务层 │
│ SpringBoot 3.x + Spring Security + MyBatis-Plus │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │认证授权│ │业务逻辑│ │合规校验│ │审核流程│ │文件服务│ │
│ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 数据存储层 │
│ MySQL 8.0 + 文件存储 │
└─────────────────────────────────────────────────────────────────┘
UOM/
├── db/ # 数据库脚本
│ ├── init.sql # 建表SQL(8张核心表)
│ └── data.sql # 初始数据(测试用户、无人机、空域等)
│
├── backend/ # 后端SpringBoot项目
│ ├── pom.xml # Maven依赖配置
│ └── src/main/
│ ├── java/com/flight/
│ │ ├── FlightApplication.java # 启动类
│ │ ├── common/ # 通用类
│ │ │ ├── Result.java # 统一响应封装
│ │ │ ├── ResultCode.java # 响应状态码
│ │ │ ├── PageQuery.java # 分页查询基类
│ │ │ └── PageResult.java # 分页结果封装
│ │ ├── config/ # 配置类
│ │ │ ├── SecurityConfig.java # Spring Security配置
│ │ │ ├── MybatisPlusConfig.java
│ │ │ ├── CorsConfig.java # 跨域配置
│ │ │ └── MyMetaObjectHandler.java
│ │ ├── controller/ # 控制器(5个)
│ │ ├── entity/ # 实体类(8个)
│ │ ├── mapper/ # Mapper接口(8个)
│ │ ├── service/ # 服务层
│ │ │ ├── UserService.java
│ │ │ ├── DroneService.java
│ │ │ ├── FlightPlanService.java
│ │ │ ├── AuditService.java
│ │ │ ├── ComplianceService.java
│ │ │ └── impl/ # 服务实现类
│ │ ├── dto/ # 数据传输对象(6个)
│ │ ├── vo/ # 视图对象(7个)
│ │ ├── enums/ # 枚举类(10个)
│ │ ├── security/ # 安全模块
│ │ │ ├── LoginUser.java # 用户详情实现
│ │ │ ├── UserDetailsServiceImpl.java
│ │ │ └── JwtAuthenticationFilter.java
│ │ ├── exception/ # 异常处理
│ │ └── utils/ # 工具类
│ └── resources/
│ └── application.yml # 应用配置
│
└── frontend/ # 前端Vue3项目
├── package.json # 依赖配置
├── vite.config.js # Vite构建配置
├── index.html # 入口HTML
└── src/
├── main.js # 入口JS
├── App.vue # 根组件
├── api/ # API接口(4个)
│ ├── auth.js # 认证接口
│ ├── drone.js # 无人机接口
│ ├── flight.js # 飞行计划接口
│ └── audit.js # 审核接口
├── router/ # 路由配置
├── store/ # 状态管理
│ └── user.js # 用户状态
├── utils/ # 工具函数
│ ├── request.js # Axios封装
│ └── auth.js # Token管理
├── layout/ # 布局组件
│ └── index.vue # 主布局
└── views/ # 页面组件
├── login/ # 登录/注册
├── dashboard/ # 首页仪表盘
├── user/ # 个人中心
├── drone/ # 无人机管理
├── flight/ # 飞行申报
├── audit/ # 审核管理
└── record/ # 历史记录
| 表名 | 说明 | 主要字段 |
|---|---|---|
| sys_user | 用户表 | 用户名、密码、角色、认证状态 |
| pilot_certificate | 操控员资质表 | 执照编号、类型、等级、有效期 |
| drone | 无人机表 | 产品信息、重量、类别、登记状态 |
| flight_plan | 飞行计划表 | 计划信息、航线、状态、校验结果 |
| audit_record | 审核记录表 | 审核类型、操作、意见 |
| attachment | 附件材料表 | 文件信息、类型 |
| airspace | 空域信息表 | 空域类型、坐标、高度限制 |
| message | 消息通知表 | 消息内容、已读状态 |
| 类别 | 空机重量 | 最大起飞重量 | 管理要求 |
|---|---|---|---|
| 微型 | <0.25kg | <0.25kg | 无需登记 |
| 轻型 | ≥0.25kg且<4kg | ≥0.25kg且<7kg | 实名登记 |
| 小型 | ≥4kg且<15kg | ≥7kg且<25kg | 实名登记+责任险 |
| 中型 | ≥15kg且<150kg | ≥25kg且<700kg | 实名登记+责任险+执照 |
| 大型 | ≥150kg | ≥700kg | 实名登记+责任险+执照 |
草稿(DRAFT) → 待审核(PENDING) → 初审中(FIRST_REVIEW) → 复审中(SECOND_REVIEW) → 已通过(APPROVED)
↓ ↓
已驳回(REJECTED) 已驳回(REJECTED)
↓
需修改(REVISION) → 待审核(PENDING) → ...
已通过(APPROVED) → 执行中(IN_FLIGHT) → 已完成(COMPLETED) → 已归档(ARCHIVED)
- 基础路径:
/api/v1 - 认证方式:JWT Token(Header:
Authorization: Bearer <token>) - 响应格式:
{
"code": 200,
"message": "操作成功",
"data": {},
"timestamp": 1705123456789
}| 方法 | 路径 | 说明 | 认证 |
|---|---|---|---|
| POST | /login | 用户登录 | 否 |
| POST | /register | 用户注册 | 否 |
| GET | /me | 获取当前用户信息 | 是 |
| 方法 | 路径 | 说明 | 认证 |
|---|---|---|---|
| POST | / | 新增无人机登记 | 是 |
| GET | /mine | 查询我的无人机 | 是 |
| GET | /{id} | 查询无人机详情 | 是 |
| PUT | /{id} | 更新无人机信息 | 是 |
| DELETE | /{id} | 删除无人机 | 是 |
| 方法 | 路径 | 说明 | 认证 |
|---|---|---|---|
| POST | / | 创建飞行计划 | 是 |
| GET | /mine | 查询我的飞行计划 | 是 |
| GET | /pending | 查询待审核列表 | 审核员 |
| GET | /{id} | 查询飞行计划详情 | 是 |
| PUT | /{id} | 更新飞行计划 | 是 |
| POST | /{id}/submit | 提交审核 | 是 |
| POST | /{id}/cancel | 取消申请 | 是 |
| POST | /{id}/confirm-takeoff | 确认起飞 | 是 |
| POST | /{id}/confirm-landing | 确认降落 | 是 |
| 方法 | 路径 | 说明 | 认证 |
|---|---|---|---|
| POST | /{id}/approve | 审核通过 | 审核员 |
| POST | /{id}/reject | 审核驳回 | 审核员 |
| POST | /{id}/revise | 退回修改 | 审核员 |
| GET | /{id}/records | 获取审核记录 | 是 |
| GET | /history | 获取审核历史 | 审核员 |
| 方法 | 路径 | 说明 | 认证 |
|---|---|---|---|
| POST | /{id}/check | 执行合规校验 | 是 |
| 软件 | 版本要求 | 说明 |
|---|---|---|
| JDK | 17+ | Java开发环境 |
| Node.js | 18+ | 前端运行环境 |
| MySQL | 8.0+ | 数据库 |
| Maven | 3.8+ | 构建工具(可选,IDE可直接运行) |
# 进入MySQL命令行
mysql -u root -proot
# 或者直接执行SQL脚本
mysql -u root -proot < UOM/db/init.sql
mysql -u root -proot < UOM/db/data.sqlUSE lowaltitude_flight;
SHOW TABLES;
-- 应显示8张表
SELECT * FROM sys_user;
-- 应显示6个测试用户- 使用IDE(IntelliJ IDEA)打开
UOM/backend目录 - 等待Maven依赖下载完成
- 运行
FlightApplication.java主类
cd UOM/backend
# 打包(跳过测试)
mvn clean package -DskipTests
# 运行
java -jar target/lowaltitude-flight-1.0.0.jar============================================
低空飞行申报与智能审核系统启动成功!
API文档: http://localhost:8080/doc.html
============================================
cd UOM/frontend
npm installnpm run dev启动成功后访问:http://localhost:3000
npm run build打包产物在 dist 目录,部署到Nginx或任意静态文件服务器。
server {
listen 80;
server_name your-domain.com;
# 前端静态文件
location / {
root /www/lowaltitude-flight/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
# API代理
location /api {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 文件上传大小限制
client_max_body_size 100M;
}| 角色 | 用户名 | 密码 | 说明 |
|---|---|---|---|
| 管理员 | admin | 123456 | 拥有所有权限 |
| 审核员 | auditor1 | 123456 | 审核飞行申请 |
| 审核员 | auditor2 | 123456 | 审核飞行申请 |
| 飞手 | pilot1 | 123456 | 已实名认证,有无人机 |
| 飞手 | pilot2 | 123456 | 已实名认证,有无人机 |
| 飞手 | pilot3 | 123456 | 未实名认证 |
- 登录系统 → 使用飞手账号登录
- 登记无人机 → 无人机管理 → 新增登记
- 新建飞行申报 → 飞行申报 → 新建申报
- 填写申报信息 → 选择无人机、时间、地点、用途
- 提交审核 → 确认信息后提交
- 查看审核进度 → 我的申报 → 查看状态
- 确认起飞 → 审核通过后,执行飞行时确认起飞
- 确认降落 → 飞行结束后确认降落
- 登录系统 → 使用审核员账号登录
- 查看待审核列表 → 审核管理 → 待审核列表
- 审核申请 → 查看详情 → 通过/驳回/退回修改
- 查看审核历史 → 审核管理 → 审核历史
系统自动执行以下6项合规校验:
| 校验项 | 校验规则 | 不通过处理 |
|---|---|---|
| 无人机登记 | 无人机必须已实名登记 | 提示先完成登记 |
| 操控员资质 | 中型及以上需持有效执照 | 提示获取执照 |
| 空域合规 | 禁飞区禁止飞行,管控区需批件 | 提示更换空域 |
| 高度合规 | 不超过无人机类别限制高度 | 提示降低高度 |
| 时间合规 | 6:00-22:00允许飞行 | 提示调整时间 |
| 无人机状态 | 无人机必须状态正常 | 提示检查状态 |
修改 backend/src/main/resources/application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/lowaltitude_flight?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai
username: root
password: root # 修改为实际密码jwt:
secret: LowAltitudeFlight2024SecretKeyForJWTTokenGeneration # 建议修改为自定义密钥
expiration: 7200000 # Token有效期(毫秒)
refresh-expiration: 604800000 # Refresh Token有效期(毫秒)file:
upload-path: ./uploads/ # 文件上传目录修改 frontend/vite.config.js:
server: {
port: 3000, # 前端端口
proxy: {
'/api': {
target: 'http://localhost:8080', # 后端地址
changeOrigin: true
}
}
}问题:数据库连接失败
解决:
- 确认MySQL服务已启动
- 确认数据库账号密码正确
- 确认数据库
lowaltitude_flight已创建
问题:npm install 报错
解决:
# 清除缓存后重试
rm -rf node_modules package-lock.json
npm install问题:Token过期或无效
解决:
- 清除浏览器LocalStorage
- 重新登录
问题:上传大小超限
解决:
- 检查
application.yml中的文件大小配置 - 检查Nginx的
client_max_body_size配置
如需添加新功能,按以下步骤:
- 数据库:在
init.sql中添加新表 - 实体类:在
entity包中创建实体类 - Mapper:在
mapper包中创建Mapper接口 - Service:在
service包中创建服务接口和实现 - Controller:在
controller包中创建控制器 - 前端API:在
api目录中添加接口调用 - 前端页面:在
views目录中添加页面组件 - 路由配置:在
router/index.js中添加路由
- 后端遵循Spring Boot开发规范
- 前端遵循Vue3 + Composition API规范
- 接口遵循RESTful设计规范
- 数据库字段使用下划线命名
- Java类使用驼峰命名
data.sql 中包含以下测试数据:
- 6个用户(1管理员、2审核员、3飞手)
- 3条操控员资质记录
- 6架无人机
- 7个空域(3适飞、2管控、2禁飞)
- 4条飞行计划(含各状态示例)
- 3条审核记录
- 4条消息通知
- 项目设计文档:
UOM/../项目设计文档.md - 数据库脚本:
UOM/db/init.sql、UOM/db/data.sql - API文档:启动后端后访问 http://localhost:8080/doc.html