#!/usr/bin/env python3 # -*- coding: utf-8 -*- from fastapi import APIRouter, Request, Depends,Query,HTTPException from database import get_db from sqlalchemy.orm import Session from sqlalchemy import case,or_ from sqlalchemy import text from utils import * from utils.ry_system_util import * from utils.video_util import * from common.security import valid_access_token from fastapi.responses import JSONResponse import traceback from datetime import datetime from common import WRJApi router = APIRouter() # 获取无人机清单 @router.get('/roughTimeStatus') async def roughTimeStatus( db: Session = Depends(get_db), body = Depends(remove_xss_json) ): return { "code": 200, "data": [{ "id": "1789142529854193666", "thirdPartformUavId": "1581F6Q8D241H00C5JV9", # 第三方平台无人机id【sn】 "thirdPartformUId": "c7bc9cccbfac41cbbb0161dcdc010be3", #第三方平台唯一标识 "uavName": "归湖镇无人机机库", "addressLongitude": 116.578580000, # 经度 "addressLatitude": 23.763168000, # 纬度 "realtimeStatus": 1, "thirdPullStreamAddress": "rtmp:#120.198.33.20:11935/drsUav/1581F6Q8D241H00C5JV9", # 第三方拉流地址 "mediaPullStreamAddress": "https:#wrj.gdgov.cn:443/live/1789142529854193666.flv", # 流媒体拉流地址 "popStreamAddress": "rtmp:#210.76.85.75:13101/live/1789142529854193666?token=4cf310ac3578", "constructionModel": 2, # 建设模式 0-财政资金采购 (硬件) 1-财政资金采购 (服务) 2-社会面资源 3-示范地区补点 "dispatchResponseTime": 0, # 调度响应时间 0-半小时内 1-1小时内 2-2小时内 3-4小时内 4-8小时内 5-24小时内 6-24小时外 "orgId": "1677658408929521666", "orgName": "广东泰一高新技术发展有限公司", "orgTypeId": "6", "uavBrand": "AIRace", "uavModel": "开拓者无人机", "residentAddress": "广东省潮州市潮安区归湖镇龙溪村", "timestamp": 1728614706923, "thirdName": "", # 第三方名称 "flyingTime": None, # 飞行时长 "height": None, # 高度 "flyingDistance": None, # 飞行距离 "horizontalSpeed": None, # 水平速度 "verticalSpeed": None, # 垂直速度 "battery": None, # 电池电量 "workRadius": 3, # 工作半径 "optName": None, # 无人机联系人 "phone": None, # 无人机联系方式 "addressAreaId": "445103115208", # 无人机所属区域编码 "altitude": None, # 海拔高度 "pitchAngle": None, # 俯仰⻆ "yawAngle": None, # 偏航⻆ "hangarStatus": None, # 机库状态,机库⽆⼈机必填 :0-离线、1-待命中、2-管制中、3-维护中 "nestOutMediaPullStreamAddress": "https://wrj.gdgov.cn:443/live/1789142529854193666:nest.flv", # 机舱外流媒体拉流地址 "nestOutMediaPullType": "rtmp", # 机舱外流媒体拉流拉流方式:rtmp、rtsp、flv、gb28181 "nestOutMediaChangeType": "1", # 机巢外部视频流媒体网络类型/是否需要转换类型 (0 否 1 是) "thirdNestOutPullStreamAddress": "rtmp://120.198.33.20:11935/drsUav/7CTDM1600B5H66", # 第三方平台机巢外部视频拉流地址 "uavFlyRoute": None, # 无人机当前航线 "path": { "uavBaseInfoId": None, "createTime": None, "updateTime": None, "path": None }, "nestStatus": 1, # 第三方机库的状态 0-离线、1-待命中、2-管制中、3-维护中、4-执行任务 "convertCode": 1, # 第三方机库的状态 0-离线、1-待命中、2-飞行中、3-管制中、4-维护中、5-执行任务 "isHangarControl": 1 # 配置机巢/机库/基站控制 0-否 1-是 }], "msg": "操作成功" } try: data = WRJApi.roughTimeStatus() return { "code": 200, "msg": "操作成功", "data": data } except Exception as e: return { "code": 500, "msg": "操作失败" } # 获取飞行中无人机清单 @router.get('/flyUavInfo') async def flyUavInfo( db: Session = Depends(get_db), body=Depends(remove_xss_json) ): return { "code": 200, "data": [{ "id": "1721437235041120259", # ⽆⼈机ID,⽤于唯⼀标识⼀台⽆⼈机 "uavId": "1720311986430930944", # 三方平台⽆⼈机ID,⽤于唯⼀标识 ⼀台⽆⼈机 "thirdName": None, # 第三方平台名称 "lng": 111.58967074364558, # 当前经度(WGS84) "lat": 21.5870035628497, # 当前纬度(WGS84) "flyingTime": None, # ⻜⾏时⻓(秒) "flyingDistance": 1319.85205078125, # ⻜⾏距离(⽶) "homeDistance": 1319.85205078125, # 无人机离机库直线距离(⽶) "height": 149.9, # 相对⾼度/对地⾼度(⽶) "altitude": 165.49883117675782, # 海拔⾼度(⽶) "realtimeStatus": 2, # 实时状态。 0:离线 1:待命 2:⻜⾏中 "batteryPerce": 66.0, # 电池电量(%) "uavHSpeed": 14.85193590075045, # ⽔平速度(⽶/秒) "uavVSpeed": 0.0, # 垂直速度(⽶/秒) "pitchAngle": -30.0, # 俯仰⻆ "yawAngle": -149.79347930213842, # 偏航⻆ "hangarStatus": 1, # 机库状态,机库无⼈机必填 0:离线 1:在线 "netWorkRate": 560.0, # 第三方无人机与其平台的网络通 信质量(kb/秒) "rainFall": 0, # 无人机所在地天气情况 0:无雨 1: 小雨 2: 中雨 3: 大雨 "windSpeed": None, # 无人机当前接触到的风速(米/ 秒) "nestSpeed": 0.0, # 当前机库所在地风速 "temperature": 34.099998474121094, # 无人机目前舱内温度(unit:℃) "environmentTemperature": 30.4, # 无人机所在地的环境温度(unit: ℃) "upQuality": 80.0, # 无人机与平台的通信质量(unit:%) "downQuality": 80.0, # 平台与无人机的通信质量(unit:%) "statusInfoTime": 1728544749103, # 实时消息对应时间 "thirdPartId": "9b627ed9f7704e109fe22356d72b14ca" # 平台ID,只用于平台内部传值,不用于对外 }], "msg": "操作成功" } try: data = WRJApi.flyUavInfo() return { "code": 200, "msg": "操作成功", "data": data } except Exception as e: return { "code": 500, "msg": "操作失败" } # 获取无人机实时飞行信息 @router.get('/getRealInfo') async def getRealInfo( sn: str, db: Session = Depends(get_db), body = Depends(remove_xss_json) ): return { "code": 200, "data": { "id": "", "thirdPartformUavId": "第三方平台无人机id【sn】", "thirdPlartformId": "第三方平台id", "thirdName": "第三方平台名称", "flyingTime": "飞行时长", "flyingDistance":"飞行距离", "uavName": "无人机名称", "uavBrand": "无人机品牌", "realtimeStatus": "无人机实时状态", "height": "高度", "horizontalSpeed":"水平速度", "verticalSpeed":"垂直速度", "orgId":"所属单位", "orgName":"所属单位名称", "orgPath":"所属单位层级全路径", "orgTypeId":"单位类型id", "orgTypeName":"单位类型名称", "areaId":"所属行政辖区", "areaName":"所属行政辖区名称", "dataSource":"数据来源 1.本地创建 2.第三方平台", "addressLongitude":"常驻地址经度", "addressLatitude":"常驻地址维度", "latitude":"实时纬度", "longitude":"实时经度", "currentLocation":"当前位置信息", "addressLocation":"常驻地位置信息", "constructionModel":"建设模式 0-财政资金采购 (硬件) 1-财政资金采购 (服务) 2-社会资源", "dispatchResponseTime":"调度响应时间 0-15分钟内 1-2小时内 2-半天内 3-1天以上", "isHangarControl":"配置机巢/机库/基站控制 0-否 1-是", "thirdPullStreamAddress":"第三方平台流媒体拉流地址", "mediaPullStreamAddress":"流媒体拉流地址", "mediaPullType":"流媒体拉流方式 (rtmp、rtsp、flv、gb28181)", "nestOutMediaPullStreamAddress":"机舱外流媒体拉流地址", "nestOutMediaPullType": "机舱外流媒体拉流拉流方式:rtmp、rtsp、flv、gb28181", "thirdNestOutPullStreamAddress":"第三方平台机巢外部视频拉流地址" }, "msg": "操作成功" } try: data = WRJApi.getRealInfo(sn) return { "code": 200, "msg": "操作成功", "data": data } except Exception as e: return { "code": 500, "msg": "操作失败" }