wrjvideo.py 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends,Query,HTTPException
  4. from database import get_db
  5. from sqlalchemy.orm import Session
  6. from sqlalchemy import case,or_
  7. from sqlalchemy import text
  8. from utils import *
  9. from utils.ry_system_util import *
  10. from utils.video_util import *
  11. from common.security import valid_access_token
  12. from fastapi.responses import JSONResponse
  13. import traceback
  14. from datetime import datetime
  15. from common import WRJApi
  16. router = APIRouter()
  17. # 获取无人机清单
  18. @router.get('/roughTimeStatus')
  19. async def roughTimeStatus(
  20. db: Session = Depends(get_db),
  21. body = Depends(remove_xss_json)
  22. ):
  23. return {
  24. "code": 200,
  25. "data": [{
  26. "id": "1789142529854193666",
  27. "thirdPartformUavId": "1581F6Q8D241H00C5JV9", # 第三方平台无人机id【sn】
  28. "thirdPartformUId": "c7bc9cccbfac41cbbb0161dcdc010be3", #第三方平台唯一标识
  29. "uavName": "归湖镇无人机机库",
  30. "addressLongitude": 116.578580000, # 经度
  31. "addressLatitude": 23.763168000, # 纬度
  32. "realtimeStatus": 1,
  33. "thirdPullStreamAddress":
  34. "rtmp:#120.198.33.20:11935/drsUav/1581F6Q8D241H00C5JV9", # 第三方拉流地址
  35. "mediaPullStreamAddress":
  36. "https:#wrj.gdgov.cn:443/live/1789142529854193666.flv", # 流媒体拉流地址
  37. "popStreamAddress":
  38. "rtmp:#210.76.85.75:13101/live/1789142529854193666?token=4cf310ac3578",
  39. "constructionModel": 2, # 建设模式 0-财政资金采购 (硬件) 1-财政资金采购 (服务) 2-社会面资源 3-示范地区补点
  40. "dispatchResponseTime": 0, # 调度响应时间 0-半小时内 1-1小时内 2-2小时内 3-4小时内 4-8小时内 5-24小时内 6-24小时外
  41. "orgId": "1677658408929521666",
  42. "orgName": "广东泰一高新技术发展有限公司",
  43. "orgTypeId": "6",
  44. "uavBrand": "AIRace",
  45. "uavModel": "开拓者无人机",
  46. "residentAddress": "广东省潮州市潮安区归湖镇龙溪村",
  47. "timestamp": 1728614706923,
  48. "thirdName": "", # 第三方名称
  49. "flyingTime": None, # 飞行时长
  50. "height": None, # 高度
  51. "flyingDistance": None, # 飞行距离
  52. "horizontalSpeed": None, # 水平速度
  53. "verticalSpeed": None, # 垂直速度
  54. "battery": None, # 电池电量
  55. "workRadius": 3, # 工作半径
  56. "optName": None, # 无人机联系人
  57. "phone": None, # 无人机联系方式
  58. "addressAreaId": "445103115208", # 无人机所属区域编码
  59. "altitude": None, # 海拔高度
  60. "pitchAngle": None, # 俯仰⻆
  61. "yawAngle": None, # 偏航⻆
  62. "hangarStatus": None, # 机库状态,机库⽆⼈机必填 :0-离线、1-待命中、2-管制中、3-维护中
  63. "nestOutMediaPullStreamAddress":
  64. "https://wrj.gdgov.cn:443/live/1789142529854193666:nest.flv", # 机舱外流媒体拉流地址
  65. "nestOutMediaPullType": "rtmp", # 机舱外流媒体拉流拉流方式:rtmp、rtsp、flv、gb28181
  66. "nestOutMediaChangeType": "1", # 机巢外部视频流媒体网络类型/是否需要转换类型 (0 否 1 是)
  67. "thirdNestOutPullStreamAddress":
  68. "rtmp://120.198.33.20:11935/drsUav/7CTDM1600B5H66", # 第三方平台机巢外部视频拉流地址
  69. "uavFlyRoute": None, # 无人机当前航线
  70. "path": {
  71. "uavBaseInfoId": None,
  72. "createTime": None,
  73. "updateTime": None,
  74. "path": None
  75. },
  76. "nestStatus": 1, # 第三方机库的状态 0-离线、1-待命中、2-管制中、3-维护中、4-执行任务
  77. "convertCode": 1, # 第三方机库的状态 0-离线、1-待命中、2-飞行中、3-管制中、4-维护中、5-执行任务
  78. "isHangarControl": 1 # 配置机巢/机库/基站控制 0-否 1-是
  79. }],
  80. "message": "",
  81. "timestamp": "",
  82. "total": 0
  83. }
  84. try:
  85. data = WRJApi.roughTimeStatus()
  86. return {
  87. "code": 200,
  88. "msg": "操作成功",
  89. "data": data
  90. }
  91. except Exception as e:
  92. return {
  93. "code": 500,
  94. "msg": "操作失败"
  95. }
  96. # 获取飞行中无人机清单
  97. @router.get('/flyUavInfo')
  98. async def flyUavInfo(
  99. db: Session = Depends(get_db),
  100. body=Depends(remove_xss_json)
  101. ):
  102. return {
  103. "code": 200,
  104. "data": [{
  105. "id": "1721437235041120259", # ⽆⼈机ID,⽤于唯⼀标识⼀台⽆⼈机
  106. "uavId": "1720311986430930944", # 三方平台⽆⼈机ID,⽤于唯⼀标识 ⼀台⽆⼈机
  107. "thirdName": None, # 第三方平台名称
  108. "lng": 111.58967074364558, # 当前经度(WGS84)
  109. "lat": 21.5870035628497, # 当前纬度(WGS84)
  110. "flyingTime": None, # ⻜⾏时⻓(秒)
  111. "flyingDistance": 1319.85205078125, # ⻜⾏距离(⽶)
  112. "homeDistance": 1319.85205078125, # 无人机离机库直线距离(⽶)
  113. "height": 149.9, # 相对⾼度/对地⾼度(⽶)
  114. "altitude": 165.49883117675782, # 海拔⾼度(⽶)
  115. "realtimeStatus": 2, # 实时状态。 0:离线 1:待命 2:⻜⾏中
  116. "batteryPerce": 66.0, # 电池电量(%)
  117. "uavHSpeed": 14.85193590075045, # ⽔平速度(⽶/秒)
  118. "uavVSpeed": 0.0, # 垂直速度(⽶/秒)
  119. "pitchAngle": -30.0, # 俯仰⻆
  120. "yawAngle": -149.79347930213842, # 偏航⻆
  121. "hangarStatus": 1, # 机库状态,机库无⼈机必填 0:离线 1:在线
  122. "netWorkRate": 560.0, # 第三方无人机与其平台的网络通 信质量(kb/秒)
  123. "rainFall": 0, # 无人机所在地天气情况 0:无雨 1: 小雨 2: 中雨 3: 大雨
  124. "windSpeed": None, # 无人机当前接触到的风速(米/ 秒)
  125. "nestSpeed": 0.0, # 当前机库所在地风速
  126. "temperature": 34.099998474121094, # 无人机目前舱内温度(unit:℃)
  127. "environmentTemperature": 30.4, # 无人机所在地的环境温度(unit: ℃)
  128. "upQuality": 80.0, # 无人机与平台的通信质量(unit:%)
  129. "downQuality": 80.0, # 平台与无人机的通信质量(unit:%)
  130. "statusInfoTime": 1728544749103, # 实时消息对应时间
  131. "thirdPartId": "9b627ed9f7704e109fe22356d72b14ca" # 平台ID,只用于平台内部传值,不用于对外
  132. }],
  133. "message": "",
  134. "timestamp": "",
  135. "total": 0
  136. }
  137. try:
  138. data = WRJApi.flyUavInfo()
  139. return {
  140. "code": 200,
  141. "msg": "操作成功",
  142. "data": data
  143. }
  144. except Exception as e:
  145. return {
  146. "code": 500,
  147. "msg": "操作失败"
  148. }
  149. # 获取无人机实时飞行信息
  150. @router.get('/getRealInfo')
  151. async def getRealInfo(
  152. db: Session = Depends(get_db),
  153. body = Depends(remove_xss_json)
  154. ):
  155. return {
  156. "code": 200,
  157. "data": {
  158. "id": "",
  159. "thirdPartformUavId": "第三方平台无人机id【sn】",
  160. "thirdPlartformId": "第三方平台id",
  161. "thirdName": "第三方平台名称",
  162. "flyingTime": "飞行时长",
  163. "flyingDistance":"飞行距离",
  164. "uavName": "无人机名称",
  165. "uavBrand": "无人机品牌",
  166. "realtimeStatus": "无人机实时状态",
  167. "height": "高度",
  168. "horizontalSpeed":"水平速度",
  169. "verticalSpeed":"垂直速度",
  170. "orgId":"所属单位",
  171. "orgName":"所属单位名称",
  172. "orgPath":"所属单位层级全路径",
  173. "orgTypeId":"单位类型id",
  174. "orgTypeName":"单位类型名称",
  175. "areaId":"所属行政辖区",
  176. "areaName":"所属行政辖区名称",
  177. "dataSource":"数据来源 1.本地创建 2.第三方平台",
  178. "addressLongitude":"常驻地址经度",
  179. "addressLatitude":"常驻地址维度",
  180. "latitude":"实时纬度",
  181. "longitude":"实时经度",
  182. "currentLocation":"当前位置信息",
  183. "addressLocation":"常驻地位置信息",
  184. "constructionModel":"建设模式 0-财政资金采购 (硬件) 1-财政资金采购 (服务) 2-社会资源",
  185. "dispatchResponseTime":"调度响应时间 0-15分钟内 1-2小时内 2-半天内 3-1天以上",
  186. "isHangarControl":"配置机巢/机库/基站控制 0-否 1-是",
  187. "thirdPullStreamAddress":"第三方平台流媒体拉流地址",
  188. "mediaPullStreamAddress":"流媒体拉流地址",
  189. "mediaPullType":"流媒体拉流方式 (rtmp、rtsp、flv、gb28181)",
  190. "nestOutMediaPullStreamAddress":"机舱外流媒体拉流地址",
  191. "nestOutMediaPullType": "机舱外流媒体拉流拉流方式:rtmp、rtsp、flv、gb28181",
  192. "thirdNestOutPullStreamAddress":"第三方平台机巢外部视频拉流地址"
  193. },
  194. "message": "",
  195. "timestamp": "",
  196. "total": 0
  197. }
  198. try:
  199. SN = body['SN']
  200. data = WRJApi.getRealInfo(SN)
  201. return {
  202. "code": 200,
  203. "msg": "操作成功",
  204. "data": data
  205. }
  206. except Exception as e:
  207. return {
  208. "code": 500,
  209. "msg": "操作失败"
  210. }