1819 lines
66 KiB
Java
1819 lines
66 KiB
Java
package com.example.math.controller;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
import com.aliyun.sts20150401.Client;
|
|
import com.aliyun.sts20150401.models.AssumeRoleRequest;
|
|
import com.aliyun.sts20150401.models.AssumeRoleResponse;
|
|
import com.aliyun.tea.TeaException;
|
|
import com.aliyun.teautil.models.RuntimeOptions;
|
|
import com.example.math.constants.DJICommonConstants;
|
|
import com.example.math.constants.DJIMethonConstants;
|
|
import com.example.math.entity.dto.BreakPoint;
|
|
import com.example.math.entity.dto.ExecutableConditions;
|
|
import com.example.math.entity.dto.FileDto;
|
|
import com.example.math.entity.dto.FlightTask;
|
|
import com.example.math.entity.dto.ReadyConditions;
|
|
import com.example.math.entity.dto.SimulateMission;
|
|
import com.example.math.mqtt.MqttConfig;
|
|
import com.example.math.mqtt.SpringUtil;
|
|
//import com.example.math.task.FirstTask;
|
|
import com.example.math.mqtt.consumer.MqttConsumerCallBack;
|
|
import com.example.math.task.FirstTask;
|
|
import com.example.math.utils.RedisUtils;
|
|
import com.example.math.utils.SslUtils;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.compress.archivers.ArchiveEntry;
|
|
import org.apache.commons.compress.archivers.ArchiveInputStream;
|
|
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
|
|
import org.apache.commons.lang3.ThreadUtils;
|
|
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
|
|
import org.eclipse.paho.client.mqttv3.MqttException;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.File;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.InputStreamReader;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
import java.net.URLConnection;
|
|
import java.sql.Date;
|
|
import java.time.Instant;
|
|
import java.time.LocalDateTime;
|
|
import java.time.ZoneId;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
*
|
|
*
|
|
* http://localhost:9999/operate/debug_mode_open 打开调试模式
|
|
* http://localhost:9999/operate/debug_mode_close 关闭调试模式
|
|
*
|
|
* http://localhost:9999/operate/cover_open 开仓
|
|
* http://localhost:9999/operate/cover_close 关仓
|
|
*
|
|
* http://localhost:9999/operate/drone_open 开机
|
|
* http://localhost:9999/operate/drone_close 关机
|
|
*
|
|
*
|
|
* http://localhost:9999/operate/flighttask_prepare?fid=12345611 下发任务
|
|
* http://localhost:9999/operate/flighttask_execute 执行任务
|
|
*
|
|
*
|
|
* http://localhost:9999/operate/return_home 一键返航
|
|
*
|
|
* http://localhost:9999/operate/live_start_push 开始直播
|
|
*
|
|
* http://localhost:9999/operate/live_start_push1?one=1581F6Q8D248900G5PYE&two=81-0-0&three=normal-0 开始直播
|
|
* http://localhost:9999/operate/live_start_push?one=7CTDM7H00B5EM1&two=165-0-7&three=normal-0
|
|
*
|
|
* live_stop_push
|
|
* http://localhost:9999/operate/live_stop_push?one=7CTDM7H00B5EM1&two=165-0-7&three=normal-0
|
|
*
|
|
* http://localhost:9999/operate/live_stop_push?one=1581F6Q8D248900G5PYE&two=81-0-0&three=normal-0
|
|
*
|
|
* http://localhost:9999/operate/live_lens_change?video_type=normal
|
|
*
|
|
* 控制模式
|
|
* http://localhost:9999/operate/flightAuthorityGrab
|
|
*
|
|
* http://localhost:9999/operate/payloadAuthorityGrab
|
|
*
|
|
* http://localhost:9999/operate/drcModeEnter
|
|
*
|
|
* http://localhost:9999/operate/droneEmergencyStop
|
|
*
|
|
* http://localhost:9999/operate/stickControl?roll=1024&pitch=1024&throttle=1024&yaw=1024&gimbal_pitch=1024
|
|
*Integer roll, Integer pitch, Integer throttle, Integer yaw, Integer gimbal_pitch
|
|
*
|
|
*
|
|
*
|
|
*
|
|
* * @param airPortSn 机场sn号
|
|
* * @param airPortSn 速度 String maxsSpeed
|
|
* * @param height 高度
|
|
* * @param latitude 纬度
|
|
* * @param longitude 经度
|
|
* String airPortSn, String maxsSpeed, String height, String latitude, String longitude
|
|
* String airPortSn, String maxsSpeed, String height, String latitude, String longitude
|
|
* http://localhost:8089/operate/flyToPoint?airPortSn=7CTDM7H00B5EM1&maxsSpeed=10&height=50&latitude=26.927594103004807&longitude=112.62790494935818
|
|
* http://localhost:8089/operate/flyToPoint?airPortSn=7CTDM7H00B5EM1&maxsSpeed=10&height=100&latitude=26.926174098&longitude=112.629257343
|
|
* http://localhost:8089/operate/flyToPoint?airPortSn=7CTDM7H00B5EM1&maxsSpeed=10&height=100&latitude=26.926870569&longitude=112.628649594
|
|
* http://localhost:8089/operate/flyToPoint?airPortSn=7CTDM7H00B5EM1&maxsSpeed=10&height=100&latitude=26.926953317&longitude=112.629688156
|
|
*
|
|
* http://localhost:8089/operate/
|
|
*
|
|
*
|
|
*/
|
|
@RequestMapping(path="/operate")
|
|
@Controller
|
|
@Slf4j
|
|
public class OperateController {
|
|
|
|
|
|
@Autowired
|
|
private MqttConfig providerClient;
|
|
|
|
@RequestMapping("/sendMessage")
|
|
@ResponseBody
|
|
public String sendMessage(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "firsttest";
|
|
}
|
|
if(message == null){
|
|
message = "msg is " + System.currentTimeMillis();
|
|
}
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 开仓
|
|
* @param qos
|
|
* @param retained
|
|
* @param topic
|
|
* @param message
|
|
* @return
|
|
*/
|
|
@RequestMapping("/cover_open")
|
|
@ResponseBody
|
|
public String cover_open(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
content.put("method","cover_open");
|
|
content.put("tid","85e4e49f-526c-4f5d-b307-c5bdf504a635");
|
|
content.put("bid","9163cba9-e2a0-4946-af25-c9f2384c895e");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("data",new HashMap<>());
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 关仓
|
|
* @param qos
|
|
* @param retained
|
|
* @param topic
|
|
* @param message
|
|
* @return
|
|
*/
|
|
@RequestMapping("/cover_close")
|
|
@ResponseBody
|
|
public String cover_close(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
content.put("tid","826ee109-79b0-491f-b9d5-b88ca00bc509");
|
|
content.put("bid","519c2540-ae9f-432c-a899-97053054929b");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("data",new HashMap<>());
|
|
content.put("method","cover_close");
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 开机
|
|
* @param qos
|
|
* @param retained
|
|
* @param topic
|
|
* @param message
|
|
* @return
|
|
*/
|
|
@RequestMapping("/drone_open")
|
|
@ResponseBody
|
|
public String drone_open(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
content.put("tid","826ee109-79b0-491f-b9d5-b88ca00bc509");
|
|
content.put("bid","519c2540-ae9f-432c-a899-97053054929b");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("data",new HashMap<>());
|
|
content.put("method","drone_open");
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 关机
|
|
* @param qos
|
|
* @param retained
|
|
* @param topic
|
|
* @param message
|
|
* @return
|
|
*/
|
|
@RequestMapping("/drone_close")
|
|
@ResponseBody
|
|
public String drone_close(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
content.put("tid","826ee109-79b0-491f-b9d5-b88ca00bc509");
|
|
content.put("bid","519c2540-ae9f-432c-a899-97053054929b");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("data",new HashMap<>());
|
|
content.put("method","drone_close");
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 开启调试模式
|
|
* @param qos
|
|
* @param retained
|
|
* @param topic
|
|
* @param message
|
|
* @return
|
|
*/
|
|
@RequestMapping("/debug_mode_open")
|
|
@ResponseBody
|
|
public String debug_mode_open(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
content.put("tid","");
|
|
content.put("bid","");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","debug_mode_open");
|
|
content.put("data",new HashMap<>());
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 关闭debug模式
|
|
* @param qos
|
|
* @param retained
|
|
* @param topic
|
|
* @param message
|
|
* @return
|
|
*/
|
|
@RequestMapping("/debug_mode_close")
|
|
@ResponseBody
|
|
public String debug_mode_close(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
content.put("tid","");
|
|
content.put("bid","");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","debug_mode_close");
|
|
content.put("data",new HashMap<>());
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping("/return_home")
|
|
@ResponseBody
|
|
public String return_home(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00BXZD1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
content.put("tid","");
|
|
content.put("bid","");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","return_home");
|
|
content.put("data",new HashMap<>());
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static String flight_id = "12345707";
|
|
@RequestMapping("/flighttask_prepare")
|
|
@ResponseBody
|
|
public String flighttask_prepare(Integer qos,Boolean retained,String topic,String message, String fid){
|
|
if(fid == null){
|
|
System.out.println("需要传id");
|
|
}
|
|
flight_id = fid;
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
FileDto file = new FileDto();
|
|
file.setUrl("https://ta-tech-image.oss-cn-shanghai.aliyuncs.com/test_line/50%2B20.kmz");
|
|
file.setFingerprint("5301fac50e52af16c7b6c15e5d4bc41c");
|
|
|
|
ReadyConditions readyConditions = new ReadyConditions();
|
|
readyConditions.setBattery_capacity(30);
|
|
readyConditions.setBegin_time(System.currentTimeMillis() - 300*1000);
|
|
readyConditions.setEnd_time(System.currentTimeMillis() + 300*1000);
|
|
|
|
ExecutableConditions executableConditions = new ExecutableConditions();
|
|
executableConditions.setStorage_capacity(10);
|
|
|
|
BreakPoint breakPoint = new BreakPoint();
|
|
breakPoint.setWayline_id(0);
|
|
breakPoint.setState(0);
|
|
breakPoint.setProgress(0.34);
|
|
breakPoint.setIndex(1);
|
|
|
|
|
|
|
|
SimulateMission simulateMission = new SimulateMission();
|
|
simulateMission.setIs_enable(0);
|
|
simulateMission.setLongitude(112.62790937463406);
|
|
simulateMission.setLatitude(26.9275951462299);
|
|
|
|
FlightTask flightTask = new FlightTask();
|
|
flightTask.setFlight_id(flight_id);
|
|
|
|
|
|
// flightTask.setExecute_time(System.currentTimeMillis()+ 30*1000); //
|
|
flightTask.setTask_type(2); //
|
|
|
|
flightTask.setRth_altitude(60);
|
|
|
|
|
|
flightTask.setRth_mode(1);
|
|
flightTask.setOut_of_control_action(0);
|
|
flightTask.setExit_wayline_when_rc_lost(1);
|
|
flightTask.setWayline_precision_type(1);
|
|
|
|
flightTask.setFile(file);
|
|
flightTask.setReady_conditions(readyConditions);
|
|
flightTask.setExecutable_conditions(executableConditions);
|
|
flightTask.setBreak_point(breakPoint);
|
|
flightTask.setSimulate_mission(simulateMission);
|
|
|
|
String tid = UUID.randomUUID().toString();
|
|
String bid = UUID.randomUUID().toString();
|
|
content.put("tid",tid);
|
|
content.put("bid",bid);
|
|
// content.put("tid","9c69531e-b118-4a31-b586-1f2251ef77f4");
|
|
// content.put("bid","8b46b451-21bd-496e-86a5-d2524fab0fa2");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","flighttask_prepare");
|
|
content.put("data",flightTask);
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 执行任务
|
|
* @param qos
|
|
* @param retained
|
|
* @param topic
|
|
* @param message
|
|
* @return
|
|
*/
|
|
@RequestMapping("/flighttask_execute")
|
|
@ResponseBody
|
|
public String flighttask_execute(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
Map<String,Object> data = new HashMap<>();
|
|
data.put("flight_id",flight_id);
|
|
|
|
String tid = UUID.randomUUID().toString();
|
|
String bid = UUID.randomUUID().toString();
|
|
content.put("tid",tid);
|
|
content.put("bid",bid);
|
|
// content.put("tid","9c69531e-b118-4a31-b586-1f2251ef77f4");
|
|
// content.put("bid","8b46b451-21bd-496e-86a5-d2524fab0fa2");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","flighttask_execute");
|
|
content.put("data",data);
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 取消任务
|
|
* @param qos
|
|
* @param retained
|
|
* @param topic
|
|
* @param message
|
|
* @return
|
|
*/
|
|
@RequestMapping("/flighttask_undo")
|
|
@ResponseBody
|
|
public String flighttask_undo(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
Map<String,Object> data = new HashMap<>();
|
|
data.put("flight_id","xxxxx");
|
|
|
|
content.put("tid","");
|
|
content.put("bid","");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","flighttask_undo");
|
|
content.put("data",new HashMap<>());
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping("/fileupload_list")
|
|
@ResponseBody
|
|
public String fileupload_list(Integer qos,Boolean retained,String topic,String message){
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTXM9Q00B02H2/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
|
|
content.put("tid","");
|
|
content.put("bid","");
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","fileupload_list");
|
|
content.put("data", new HashMap<>());
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping("/live_start_push")
|
|
@ResponseBody
|
|
public String live_start_push(Integer qos,Boolean retained,String topic,String message,
|
|
String one, String two, String three){
|
|
String vid = one + "/" + two + "/" + three;
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
Map<String,Object> data = new HashMap<>();
|
|
data.put("url_type", 1);
|
|
data.put("url", "rtmp://live.push.t-aaron.com/dji/hyslj002");
|
|
data.put("video_quality", 1);
|
|
data.put("video_id", vid);
|
|
|
|
content.put("tid",UUID.randomUUID().toString());
|
|
content.put("bid",UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","live_start_push");
|
|
content.put("data", data);
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping("/live_start_push1")
|
|
@ResponseBody
|
|
public String live_start_push1(Integer qos,Boolean retained,String topic,String message,
|
|
String one, String two, String three){
|
|
String vid = one + "/" + two + "/" + three;
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
Map<String,Object> data = new HashMap<>();
|
|
data.put("url_type", 1);
|
|
data.put("url", "rtmp://live.push.t-aaron.com/dji/hyslj001");
|
|
data.put("video_quality", 3);
|
|
data.put("video_id", vid);
|
|
|
|
content.put("tid",UUID.randomUUID().toString());
|
|
content.put("bid",UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","live_start_push");
|
|
content.put("data", data);
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping("/live_stop_push")
|
|
@ResponseBody
|
|
public String live_stop_push(Integer qos,Boolean retained,String topic,String message,
|
|
String one, String two, String three){
|
|
String vid = one + "/" + two + "/" + three;
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
Map<String,Object> data = new HashMap<>();
|
|
data.put("video_id", vid);
|
|
|
|
content.put("tid",UUID.randomUUID().toString());
|
|
content.put("bid",UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","live_stop_push");
|
|
content.put("data", data);
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
@RequestMapping("/live_set_quality")
|
|
@ResponseBody
|
|
public String live_set_quality(Integer qos,Boolean retained,String topic,String message,int video_quality,
|
|
String one, String two, String three){
|
|
String vid = one + "/" + two + "/" + three;
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
Map<String,Object> data = new HashMap<>();
|
|
data.put("video_id", vid);
|
|
data.put("video_quality", video_quality);
|
|
|
|
content.put("tid",UUID.randomUUID().toString());
|
|
content.put("bid",UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","live_set_quality");
|
|
content.put("data", data);
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@RequestMapping("/live_lens_change")
|
|
@ResponseBody
|
|
public String live_lens_change(Integer qos,Boolean retained,String topic,String message,String video_type,
|
|
String one, String two, String three){
|
|
String vid = one + "/" + two + "/" + three;
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
Map<String,Object> data = new HashMap<>();
|
|
data.put("video_id", vid);
|
|
data.put("video_type", video_type);
|
|
|
|
content.put("tid",UUID.randomUUID().toString());
|
|
content.put("bid",UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","live_lens_change");
|
|
content.put("data", data);
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static int aaa = 1;
|
|
@RequestMapping("/live_camera_change")
|
|
@ResponseBody
|
|
public String live_camera_change(Integer qos,Boolean retained,String topic,String message,
|
|
String one, String two, String three, int aaa){
|
|
String vid = one + "/" + two + "/" + three;
|
|
try {
|
|
if(qos == null){
|
|
qos = 2;
|
|
}
|
|
if(retained == null){
|
|
retained = false;
|
|
}
|
|
if(topic == null){
|
|
topic = "thing/product/7CTDM7H00B5EM1/services";
|
|
}
|
|
|
|
if(message == null){
|
|
Map<String,Object> content = new HashMap<>();
|
|
|
|
Map<String,Object> data = new HashMap<>();
|
|
data.put("video_id", vid);
|
|
data.put("camera_position", aaa);
|
|
|
|
content.put("tid",UUID.randomUUID().toString());
|
|
content.put("bid",UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method","live_camera_change");
|
|
content.put("data", data);
|
|
|
|
message = JSONObject.toJSONString(content);
|
|
|
|
}
|
|
|
|
System.out.println(message);
|
|
providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 一键起飞
|
|
* @param airPortSn 机场sn号
|
|
* @return JsonResult
|
|
*/
|
|
@ResponseBody
|
|
@RequestMapping("/takeoffToPoint")
|
|
public String takeoffToPoint(String airPortSn){
|
|
//获取机场的飞机状态+坐标
|
|
RedisUtils redisUtils = SpringUtil.getBean(RedisUtils.class);
|
|
Map<Object, Object> airportRedis = redisUtils.hmget("DJIAirport" + airPortSn);
|
|
if (CollectionUtils.isEmpty(airportRedis) || Objects.isNull(airportRedis.get("longitude"))){
|
|
}
|
|
try {
|
|
Integer qos = 2;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
String topic = String.format(someTopic, airPortSn);
|
|
//封装数据
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
//坐标
|
|
data.put("target_latitude", Double.parseDouble(airportRedis.get("latitude").toString()));
|
|
data.put("target_longitude", Double.parseDouble(airportRedis.get("longitude").toString()));
|
|
//高度
|
|
data.put("target_height", 50);
|
|
//安全起飞高度
|
|
data.put("security_takeoff_height", 50);
|
|
//返航模式设置值 必填 "0":"智能高度","1":"设定高度"
|
|
data.put("rth_mode", 0);
|
|
//返航高度
|
|
data.put("rth_altitude", 50);
|
|
//"0":"悬停","1":"着陆(降落)","2":"返航"
|
|
data.put("rc_lost_action", 0);
|
|
//【必填】指点飞行失控动作 "0":"继续执行指点飞行任务","1":"退出指点飞行任务,执行普通失控行为"
|
|
data.put("commander_mode_lost_action", 1);
|
|
//【必填】指点飞行模式设置值 "0":"智能高度飞行","1":"设定高度飞行"
|
|
data.put("commander_flight_mode", 1);
|
|
//【必填】指点飞行高度 float
|
|
data.put("commander_flight_height", 50);
|
|
//一键起飞任务 UUID
|
|
data.put("flight_id", UUID.randomUUID().toString());
|
|
//一键起飞的飞行过程中能达到的最大速度
|
|
data.put("max_speed", 20);
|
|
String tid = UUID.randomUUID().toString();
|
|
content.put("tid", tid);
|
|
String bid = UUID.randomUUID().toString();
|
|
content.put("bid", bid);
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method", DJIMethonConstants.TAKEOFF_TO_POINT);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
@Autowired
|
|
private static String airPortSn = "7CTDM7H00BXZD1";
|
|
|
|
/**
|
|
* 飞行控制权抢夺 /flightAuthorityGrab
|
|
* @return JsonResult
|
|
*/
|
|
|
|
@ResponseBody
|
|
@RequestMapping("/flightAuthorityGrab")
|
|
public String flightAuthorityGrab(){
|
|
try {
|
|
Integer qos = 2;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
//TODO 此处用的是无人的SN号 待测试
|
|
String topic = String.format(someTopic, airPortSn);
|
|
//封装数据
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
content.put("tid", UUID.randomUUID().toString());
|
|
content.put("bid", UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method", DJIMethonConstants.FLIGHT_AUTHORITY_GRAB);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 负载控制权抢夺 /payloadAuthorityGrab
|
|
* @return JsonResult
|
|
*/
|
|
@ResponseBody
|
|
@RequestMapping("/payloadAuthorityGrab")
|
|
public String payloadAuthorityGrab(String cameraIndex){
|
|
try {
|
|
Integer qos = 2;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
//TODO 此处用的是无人的SN号 待测试
|
|
String topic = String.format(someTopic, airPortSn);
|
|
//封装数据
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
//负载枚举值 镜头负载
|
|
data.put("payload_index", cameraIndex);
|
|
content.put("tid", UUID.randomUUID().toString());
|
|
content.put("bid", UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method", DJIMethonConstants.PAYLOAD_AUTHORITY_GRAB);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
@Value("${spring.mqtt.username}")
|
|
private String username;
|
|
|
|
@Value("${spring.mqtt.password}")
|
|
private String password;
|
|
|
|
@Value("${spring.mqtt.url}")
|
|
private String address;
|
|
|
|
@Value("${spring.mqtt.newUrl}")
|
|
private String newAddress;
|
|
|
|
@Value("${spring.mqtt.client.id}")
|
|
private String clientId;
|
|
|
|
|
|
|
|
/**
|
|
* DRC心跳
|
|
* @return JsonResult
|
|
*/
|
|
|
|
private static Integer seq = 0;
|
|
|
|
@ResponseBody
|
|
@RequestMapping("/drcOsd")
|
|
public String drcOsd() throws InterruptedException{
|
|
if (true){
|
|
Map<String,Object> content = new HashMap<>();
|
|
HashMap<String, Long> data = new HashMap<>();
|
|
data.put("timestamp", System.currentTimeMillis());
|
|
seq++;
|
|
content.put("method", "heart_beat");
|
|
content.put("data", data);
|
|
content.put("seq", 0);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
Thread.sleep(2000L);
|
|
MqttDeliveryToken publish = providerClient.publish(1, false, "thing/product/8UUXN3500A02BE/drc/down", message);
|
|
}
|
|
return "发送成功";
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 进入指令飞行控制模式
|
|
* @return JsonResult
|
|
*/
|
|
@ResponseBody
|
|
@RequestMapping("/drcModeEnter")
|
|
public String drcModeEnter(){
|
|
try {
|
|
|
|
Integer qos = 1;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
//TODO 此处用的是无人的SN号 待测试
|
|
String topic = String.format(someTopic, airPortSn);
|
|
//封装数据
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
//负载枚举值 镜头负载
|
|
data.put("hsi_frequency", 1);
|
|
|
|
//Broker 连接信息
|
|
Map<String,Object> mqttBroker = new HashMap<>();
|
|
//服务器连接地址
|
|
mqttBroker.put("address", newAddress);
|
|
//客户端ID
|
|
mqttBroker.put("client_id", "DRC-7CTDM7H00BXZD1");
|
|
//enable_tls
|
|
mqttBroker.put("enable_tls", false);
|
|
//expire_time 当前时间+3000秒
|
|
mqttBroker.put("expire_time", System.currentTimeMillis()/1000 + 3600);
|
|
//密码
|
|
mqttBroker.put("password", password);
|
|
//用户名
|
|
mqttBroker.put("username", username);
|
|
data.put("mqtt_broker", mqttBroker);
|
|
//设置 OSD 上报频率 {"max":30,"min":1,"unit_name":"赫兹 / Hz"}
|
|
data.put("osd_frequency", 1);
|
|
|
|
content.put("tid", UUID.randomUUID().toString());
|
|
content.put("bid", UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method", DJIMethonConstants.DRC_MODE_ENTER);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(topic);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 退出指令飞行控制模式
|
|
* @return JsonResult
|
|
*/
|
|
@ResponseBody
|
|
@RequestMapping("/drcModeExit")
|
|
public String drcModeExit(){
|
|
try {
|
|
Integer qos = 1;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
//TODO 此处用的是无人的SN号 待测试
|
|
String topic = String.format(someTopic, airPortSn);
|
|
//封装数据
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
content.put("tid", UUID.randomUUID().toString());
|
|
content.put("bid", UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method", DJIMethonConstants.DRC_MODE_EXIT);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(topic);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping("/droneEmergencyStop")
|
|
public String droneEmergencyStop(){
|
|
try {
|
|
Integer qos = 2;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
//TODO 此处用的是无人的SN号 待测试
|
|
String topic = String.format("thing/product/%s/drc/down", airPortSn);
|
|
//封装数据
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
content.put("method", DJIMethonConstants.DRONE_EMERGENCY_STOP);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(topic);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@RequestMapping("/stickControl")
|
|
public String stickControl(Integer roll, Integer pitch, Integer throttle, Integer yaw, Integer gimbal_pitch){
|
|
Integer seq = 1;
|
|
// for (int i = 0; i < 10; i++) {
|
|
if (!roll.equals(0)){
|
|
roll += 20;
|
|
}
|
|
if (!pitch.equals(0)){
|
|
pitch += 20;
|
|
}
|
|
if (!throttle.equals(0)){
|
|
throttle += 20;
|
|
}
|
|
if (!yaw.equals(0)){
|
|
yaw += 20;
|
|
}
|
|
if (!gimbal_pitch.equals(0)){
|
|
gimbal_pitch += 20;
|
|
}
|
|
seq = seq + 1;
|
|
Integer qos = 2;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号
|
|
//TODO 此处用的是无人的SN号 待测试
|
|
String topic = String.format("thing/product/%s/drc/down", airPortSn);
|
|
//封装数据
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
data.put("roll", roll);
|
|
data.put("pitch", pitch);
|
|
data.put("throttle", throttle);
|
|
data.put("yaw", yaw);
|
|
data.put("gimbal_pitch", gimbal_pitch);
|
|
content.put("method", "stick_control");
|
|
content.put("seq", seq);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
|
|
// }
|
|
return "";
|
|
}
|
|
|
|
|
|
/**
|
|
* @param sn 机场sn号
|
|
* @param flightId 任务id
|
|
* 一键返航
|
|
* @return
|
|
*/
|
|
@RequestMapping("/returnHome")
|
|
public String returnHome(String sn, String flightId){
|
|
try {
|
|
//sn = "7CTDM7H00B5EM1";
|
|
Integer qos = 2;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
String topic = String.format("thing/product/%s/services", sn);
|
|
//参数封装
|
|
Map<String,Object> content = new HashMap<>();
|
|
content.put("tid", UUID.randomUUID().toString());
|
|
content.put("bid", UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method", DJIMethonConstants.RETURN_HOME);
|
|
content.put("data",new HashMap<>());
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
private static String someTopic = "thing/product/%s/services";
|
|
|
|
/**
|
|
* flyto 飞向目标点
|
|
* @param airPortSn 机场sn号
|
|
* @param airPortSn 速度 String maxsSpeed
|
|
* @param height 高度
|
|
* @param latitude 纬度
|
|
* @param longitude 经度
|
|
* @return
|
|
*/
|
|
@ResponseBody
|
|
@RequestMapping("/flyToPoint")
|
|
public String flyToPoint(String airPortSn, Integer maxsSpeed, Integer height, Double latitude, Double longitude){
|
|
try {
|
|
Integer qos = 2;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
String topic = String.format(someTopic, airPortSn);
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
//目标点id
|
|
data.put("fly_to_id", UUID.randomUUID().toString());
|
|
//max_speed flyto 的飞行过程中能达到的最大速度 max":15,"min":0,"unit_name":"米每秒 / m/s"
|
|
data.put("max_speed", maxsSpeed);
|
|
//points 目标点列表
|
|
List<Map<String, Object>> list = new ArrayList<>();
|
|
Map<String, Object> map = new HashMap<>();
|
|
//高度
|
|
map.put("height", height);
|
|
//经度
|
|
map.put("longitude", longitude);
|
|
//纬度
|
|
map.put("latitude", latitude);
|
|
list.add(map);
|
|
data.put("points", list);
|
|
content.put("tid",UUID.randomUUID().toString());
|
|
content.put("bid",UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method", DJIMethonConstants.FLY_TO_POINT);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* flyto 飞向目标点
|
|
* @param airPortSn 机场sn号
|
|
* @param airPortSn 速度 String maxsSpeed
|
|
*/
|
|
@ResponseBody
|
|
@RequestMapping("/flyToPointStop")
|
|
public String flyToPointStop(String airPortSn){
|
|
try {
|
|
Integer qos = 2;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
String topic = String.format(someTopic, airPortSn);
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
content.put("tid",UUID.randomUUID().toString());
|
|
content.put("bid",UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method", DJIMethonConstants.FLY_TO_POINT_STOP);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* flyto 更新 flyto 目标点
|
|
* @param airPortSn 机场sn号
|
|
* @param airPortSn 速度 String maxsSpeed
|
|
* @param height 高度
|
|
* @param latitude 纬度
|
|
* @param longitude 经度
|
|
* @return
|
|
*/
|
|
@ResponseBody
|
|
@RequestMapping("/flyToPointUpdate")
|
|
public String flyToPointUpdate(String airPortSn, String maxsSpeed, String height, String latitude, String longitude){
|
|
try {
|
|
Integer qos = 2;
|
|
Boolean retained = false;
|
|
//topic主题 sn是机场sn号 thing/product/%s/services
|
|
String topic = String.format(someTopic, airPortSn);
|
|
Map<String,Object> content = new HashMap<>();
|
|
Map<String,Object> data = new HashMap<>();
|
|
//max_speed flyto 的飞行过程中能达到的最大速度 max":15,"min":0,"unit_name":"米每秒 / m/s"
|
|
data.put("max_speed", maxsSpeed);
|
|
//points 目标点列表
|
|
List<Map<String, String>> list = new ArrayList<>();
|
|
Map<String, String> map = new HashMap<>();
|
|
//高度
|
|
map.put("height", height);
|
|
//经度
|
|
map.put("longitude", longitude);
|
|
//纬度
|
|
map.put("latitude", latitude);
|
|
list.add(map);
|
|
data.put("points", list);
|
|
content.put("tid",UUID.randomUUID().toString());
|
|
content.put("bid",UUID.randomUUID().toString());
|
|
content.put("timestamp",System.currentTimeMillis());
|
|
content.put("method", DJIMethonConstants.FLY_TO_POINT_UPDATE);
|
|
content.put("data", data);
|
|
String message = com.alibaba.fastjson.JSONObject.toJSONString(content);
|
|
System.out.println(message);
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* flyto 更新 flyto 目标点
|
|
* @return
|
|
*/
|
|
@ResponseBody
|
|
@RequestMapping("/login")
|
|
public String login(){
|
|
|
|
String httpUrl = "http://192.168.50.106:8090/third/getToken";
|
|
//链接
|
|
HttpURLConnection connection = null;
|
|
InputStream is = null;
|
|
BufferedReader br = null;
|
|
StringBuffer result = new StringBuffer();
|
|
try {
|
|
//创建连接
|
|
URL url = new URL(httpUrl);
|
|
if("https".equalsIgnoreCase(url.getProtocol())){
|
|
SslUtils.ignoreSsl();
|
|
}
|
|
connection = (HttpURLConnection) url.openConnection();
|
|
//设置请求方式
|
|
connection.setRequestMethod("GET");
|
|
|
|
connection.setRequestProperty("accept", "*/*");
|
|
connection.setRequestProperty("connection", "Keep-Alive");
|
|
connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
|
|
connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
|
|
connection.setRequestProperty("Authorization", "Basic YWRtaW46cHVibGlj");
|
|
connection.setRequestProperty("Cookie", "jenkins-timestamper-offset=-28800000; order=id%20desc; serverType=nginx; ltd_end=-1; pro_end=-1; memSize=7768; bt_user_info=%7B%22status%22%3Atrue%2C%22msg%22%3A%22%u83B7%u53D6%u6210%u529F%21%22%2C%22data%22%3A%7B%22username%22%3A%22139****4314%22%7D%7D; sites_path=/www/wwwroot; distribution=centos8; p-1=1; lang=en-US; force=0; b6e922e8cf76dea67efb3a9292724aee=acc59469-46e3-4576-b216-81b907d80a7f.rB3Plw7uc301E0qFoEBeoP_fL4w; load_search=undefined; remember-me=YWRtaW46MTY1ODIxMDYwODA2MDoxY2ZhOTBhMzFlN2IzZTg1YzM5MWQ3Y2M4MWEzYzVlZmYzM2UzOGQ4MTVjZDZhNTUwNjQ4YjFhMjVlYTM3NWJj; JSESSIONID.fc8332ab=node01bo1jsydkd8ql1oo3srksa2k6w288.node0; screenResolution=1920x1080; b2651c13496a99bc2899b024b99bca4f=b4e55bb9-4a3e-44b6-ae8b-c054e7115182.SEaDzMgHxI4d2CGoGwNPnj3L2y4; request_token=hH1LwVtazrgz4sMI4CE1SwEVpCYgiQcHNp4EfyvPni9C32PJ; soft_remarks=%7B%22list%22%3A%5B%22%u4F01%u4E1A%u7248%u3001%u4E13%u4E1A%u7248%u63D2%u4EF6%22%2C%2215%u5929%u65E0%u7406%u7531%u9000%u6B3E%22%2C%22%u53EF%u66F4%u6362IP%22%2C%22%u5E74%u4ED8%u8D60%u90012%u5F20SSL%u8BC1%u4E66%22%2C%22%u5E74%u4ED8%u8D60%u90011000%u6761%u77ED%u4FE1%22%2C%22%u4F4E%u81F32.43%u5143/%u5929%22%2C%22%u5546%u7528%u9632%u706B%u5899%u6388%u6743%22%2C%22%u5E74%u4ED8%u53EF%u5165%u4F01%u4E1A%u7248%u670D%u52A1%u7FA4%22%2C%22%u4EA7%u54C1%u6388%u6743%u8BC1%u4E66%22%5D%2C%22pro_list%22%3A%5B%22%u4E13%u4E1A%u7248%u63D2%u4EF6%22%2C%2215%u5929%u65E0%u7406%u7531%u9000%u6B3E%22%2C%22%u53EF%u66F4%u6362IP%22%2C%22%u4F4E%u81F31.18%u5143/%u5929%22%2C%22%u5546%u7528%u9632%u706B%u5899%u6388%u6743%22%2C%22%u4EA7%u54C1%u6388%u6743%u8BC1%u4E66%22%5D%2C%22kfqq%22%3A%223007255432%22%2C%22kf%22%3A%22http%3A//q.url.cn/CDfQPS%3F_type%3Dwpa%26qidian%3Dtrue%22%2C%22qun%22%3A%22%22%2C%22kf_list%22%3A%5B%7B%22qq%22%3A%223007255432%22%2C%22kf%22%3A%22http%3A//q.url.cn/CDfQPS%3F_type%3Dwpa%26qidian%3Dtrue%22%7D%2C%7B%22qq%22%3A%222927440070%22%2C%22kf%22%3A%22http%3A//wpa.qq.com/msgrd%3Fv%3D3%26uin%3D2927440070%26site%3Dqq%26menu%3Dyes%26from%3Dmessage%26isappinstalled%3D0%22%7D%5D%2C%22wx_list%22%3A%5B%7B%22ps%22%3A%22%u552E%u524D%u54A8%u8BE2%22%2C%22kf%22%3A%22https%3A//work.weixin.qq.com/kfid/kfc72fcbde93e26a6f3%22%7D%5D%7D; load_page=null; load_type=null");
|
|
//设置连接超时时间
|
|
connection.setReadTimeout(30000);
|
|
//开始连接
|
|
connection.connect();
|
|
//获取响应数据
|
|
if (connection.getResponseCode() == 200) {
|
|
//获取返回的数据
|
|
is = connection.getInputStream();
|
|
if (null != is) {
|
|
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
|
|
String temp = null;
|
|
while (null != (temp = br.readLine())) {
|
|
result.append(temp);
|
|
}
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
if (null != br) {
|
|
try {
|
|
br.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if (null != is) {
|
|
try {
|
|
is.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
//关闭远程连接
|
|
connection.disconnect();
|
|
}
|
|
return result.toString();
|
|
}
|
|
|
|
|
|
/**
|
|
* 查询日志列表
|
|
* @return
|
|
*/
|
|
@RequestMapping("/fileuploadList")
|
|
public String fileuploadList(String airPortSn, String module) {
|
|
try {
|
|
// 从请求中获取参数,如果没有提供则使用默认值或生成
|
|
|
|
// 构建消息内容
|
|
Map<String, Object> content = new HashMap<>();
|
|
Map<String, Object> data = new HashMap<>();
|
|
|
|
// 构建module_list
|
|
List<String> moduleList = new ArrayList<>();
|
|
// moduleList.add("0");
|
|
// moduleList.add("3");
|
|
moduleList.add(module);
|
|
data.put("module_list", moduleList);
|
|
|
|
content.put("bid", UUID.randomUUID().toString());
|
|
content.put("tid", UUID.randomUUID().toString());
|
|
content.put("timestamp", System.currentTimeMillis());
|
|
content.put("method", "fileupload_list");
|
|
content.put("data", data);
|
|
|
|
// 转换为JSON字符串
|
|
String message = JSONObject.toJSONString(content);
|
|
System.out.println("发送的消息: " + message);
|
|
|
|
// 发布消息
|
|
String topic = String.format(someTopic, airPortSn);
|
|
int qos = 1;
|
|
boolean retained = false;
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
|
|
return "发送成功: " + publish.isComplete();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败: " + e.getMessage();
|
|
}
|
|
}
|
|
|
|
|
|
@ResponseBody
|
|
@RequestMapping("/fileuploadStart")
|
|
public String fileuploadStart(String airPortSn, String type, Integer[] bootIndices, String module) {
|
|
try {
|
|
Integer qos = 1;
|
|
Boolean retained = false;
|
|
String topic = String.format(someTopic, airPortSn);
|
|
|
|
Map<String, Object> content = new HashMap<>();
|
|
Map<String, Object> data = new HashMap<>();
|
|
Map<String, Object> credentials = new HashMap<>();
|
|
Map<String, Object> params = new HashMap<>();
|
|
List<Map<String, Object>> files = new ArrayList<>();
|
|
Map<String, Object> fileEntry = new HashMap<>();
|
|
List<Map<String, Object>> list = new ArrayList<>();
|
|
|
|
|
|
//获取阿里云 OSS对应文件夹的token
|
|
Map<String, String> ossMap = ossToken();
|
|
if (!CollectionUtils.isEmpty(ossMap)) {
|
|
credentials.put("access_key_id", ossMap.get("access_key_id"));
|
|
credentials.put("access_key_secret", ossMap.get("access_key_secret"));
|
|
credentials.put("expire", DJICommonConstants.EXPIRE);
|
|
credentials.put("security_token", ossMap.get("security_token"));
|
|
log.info("获取阿里云上传凭证成功");
|
|
} else {
|
|
log.info("获取阿里云上传凭证失败");
|
|
}
|
|
// Map<String, Object> outputItem = new HashMap<>();
|
|
// outputItem.put("bucket", DJICommonConstants.BUCKET);
|
|
// outputItem.put("endpoint", DJICommonConstants.ENDPOINT);
|
|
// //outputItem.put("object_key_prefix" , DJICommonConstants.OBJECT_KEY_PREFIX);
|
|
// outputItem.put("object_key_prefix", DJICommonConstants.DJI + airPortSn);
|
|
// outputItem.put("provider", DJICommonConstants.PROVIDER);
|
|
// outputItem.put("region", DJICommonConstants.REGION);
|
|
// outputItem.put("credentials", credentials);
|
|
|
|
|
|
// 构建 list 数组
|
|
for (Integer bootIndex : bootIndices) {
|
|
Map<String, Object> item = new HashMap<>();
|
|
item.put("boot_index", bootIndex);
|
|
list.add(item);
|
|
}
|
|
|
|
|
|
|
|
// 构建 fileEntry 对象
|
|
fileEntry.put("list", list);
|
|
fileEntry.put("module", module);
|
|
fileEntry.put("object_key", "7CTDM7H00BXZD1-A");
|
|
|
|
// 构建 files 数组
|
|
files.add(fileEntry);
|
|
|
|
// 构建 params 对象
|
|
params.put("files", files);
|
|
|
|
// 构建 data 对象
|
|
data.put("bucket", DJICommonConstants.BUCKET);
|
|
data.put("credentials", credentials);
|
|
data.put("endpoint", DJICommonConstants.ENDPOINT);
|
|
data.put("params", params);
|
|
data.put("provider", DJICommonConstants.PROVIDER);
|
|
data.put("region", DJICommonConstants.REGION);
|
|
|
|
// 构建 content 对象
|
|
content.put("bid", UUID.randomUUID().toString());
|
|
content.put("data", data);
|
|
content.put("tid", UUID.randomUUID().toString());
|
|
content.put("timestamp", System.currentTimeMillis());
|
|
content.put("method", "fileupload_start");
|
|
|
|
String message = JSONObject.toJSONString(content);
|
|
System.out.println("Sending message: " + message);
|
|
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败: " + e.getMessage();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//http://localhost:9999/operate/otaCreate?airPortSn=7CTXN1E00B06ZR&fileName=DOCK2_10.01.16.12_pro.zip&fileSize=485800158&fileUrl=https://dji-dev.oss-cn-shanghai.aliyuncs.com/firmware/DOCK2_10.01.16.12_pro.zip&firmwareUpgradeType=1&md5=&productVersion=1612&sn=drone_sn&dockFirmwareUpgradeType=3&dockProductVersion=1612&dockSn=dock_sn
|
|
|
|
|
|
@ResponseBody
|
|
@RequestMapping("/otaCreate")
|
|
public String otaCreate(String airPortSn,
|
|
String fileName,
|
|
Long fileSize,
|
|
String fileUrl,
|
|
Integer firmwareUpgradeType,
|
|
String md5,
|
|
String productVersion,
|
|
String sn,
|
|
Integer dockFirmwareUpgradeType,
|
|
String dockProductVersion,
|
|
String dockSn) {
|
|
try {
|
|
Integer qos = 1;
|
|
Boolean retained = false;
|
|
String topic = String.format(someTopic, airPortSn);
|
|
|
|
Map<String, Object> content = new HashMap<>();
|
|
Map<String, Object> data = new HashMap<>();
|
|
List<Map<String, Object>> devices = new ArrayList<>();
|
|
|
|
// 构建无人机设备信息
|
|
Map<String, Object> droneDevice = new HashMap<>();
|
|
droneDevice.put("file_name", fileName);
|
|
droneDevice.put("file_size", fileSize);
|
|
droneDevice.put("file_url", fileUrl);
|
|
droneDevice.put("firmware_upgrade_type", firmwareUpgradeType);
|
|
droneDevice.put("md5", md5);
|
|
droneDevice.put("product_version", productVersion);
|
|
droneDevice.put("sn", sn);
|
|
devices.add(droneDevice);
|
|
|
|
// 构建机场设备信息
|
|
Map<String, Object> dockDevice = new HashMap<>();
|
|
dockDevice.put("firmware_upgrade_type", dockFirmwareUpgradeType);
|
|
dockDevice.put("product_version", dockProductVersion);
|
|
dockDevice.put("sn", dockSn);
|
|
devices.add(dockDevice);
|
|
|
|
// 构建 data 对象
|
|
data.put("devices", devices);
|
|
|
|
// 构建 content 对象
|
|
content.put("bid", UUID.randomUUID().toString());
|
|
content.put("data", data);
|
|
content.put("tid", UUID.randomUUID().toString());
|
|
content.put("timestamp", System.currentTimeMillis());
|
|
content.put("method", "ota_create");
|
|
|
|
String message = JSONObject.toJSONString(content);
|
|
System.out.println("Sending ota_create message: " + message);
|
|
|
|
MqttDeliveryToken publish = providerClient.publish(qos, retained, topic, message);
|
|
|
|
return "发送成功";
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return "发送失败: " + e.getMessage();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* 获取
|
|
*/
|
|
private Map<String, String> ossToken() {
|
|
Map<String, String> ossMap = new HashMap<>();
|
|
String policy = "{\n" +
|
|
" \"Version\": \"1\", \n" +
|
|
" \"Statement\": [\n" +
|
|
" {\n" +
|
|
" \"Action\": [\n" +
|
|
" \"oss:PutObject\"\n" +
|
|
" ], \n" +
|
|
" \"Resource\": [\n" +
|
|
" \"acs:oss:*:*:dji-dev/*\" \n" +
|
|
" ], \n" +
|
|
" \"Effect\": \"Allow\"\n" +
|
|
" }\n" +
|
|
" ]\n" +
|
|
"}";
|
|
|
|
// String roleARN = "acs:ram::1399733914954856:role/ramosstest";
|
|
String roleARN = "acs:ram::1399733914954856:role/oss-role";
|
|
String sessionName = "SessionTest";
|
|
java.util.List<String> args = Arrays.asList();
|
|
Client client = null;
|
|
try {
|
|
client = MqttConsumerCallBack.createClient();
|
|
} catch (Exception e) {
|
|
log.info("获取阿里云token失败");
|
|
}
|
|
AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest()
|
|
.setDurationSeconds(3600L)
|
|
.setPolicy(policy)
|
|
.setRoleArn(roleARN)
|
|
.setRoleSessionName(sessionName);
|
|
try {
|
|
// 复制代码运行请自行打印 API 的返回值
|
|
AssumeRoleResponse assumeRoleResponse = client.assumeRoleWithOptions(assumeRoleRequest, new RuntimeOptions());
|
|
String arn = assumeRoleResponse.getBody().getAssumedRoleUser().getArn();
|
|
String assumedRoleId = assumeRoleResponse.getBody().getAssumedRoleUser().getAssumedRoleId();
|
|
String accessKeyId = assumeRoleResponse.getBody().getCredentials().getAccessKeyId();
|
|
String accessKeySecret = assumeRoleResponse.getBody().getCredentials().getAccessKeySecret();
|
|
String securityToken = assumeRoleResponse.getBody().getCredentials().getSecurityToken();
|
|
String expiration = assumeRoleResponse.getBody().getCredentials().getExpiration();
|
|
log.info(arn);
|
|
log.info(assumedRoleId);
|
|
log.info(accessKeyId);
|
|
log.info(accessKeySecret);
|
|
log.info(securityToken);
|
|
log.info(expiration);
|
|
log.info("a");
|
|
|
|
ossMap.put("access_key_id", accessKeyId);
|
|
ossMap.put("access_key_secret", accessKeySecret);
|
|
ossMap.put("security_token", securityToken);
|
|
return ossMap;
|
|
} catch (TeaException error) {
|
|
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
|
|
// 错误 message
|
|
log.info(error.getMessage());
|
|
// 诊断地址
|
|
log.info(error.getData().get("Recommend") + "");
|
|
com.aliyun.teautil.Common.assertAsString(error.message);
|
|
} catch (Exception _error) {
|
|
TeaException error = new TeaException(_error.getMessage(), _error);
|
|
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
|
|
// 错误 message
|
|
log.info(error.getMessage());
|
|
// 诊断地址
|
|
log.info(error.getData().get("Recommend") + "");
|
|
com.aliyun.teautil.Common.assertAsString(error.message);
|
|
}
|
|
return ossMap;
|
|
}
|
|
|
|
|
|
|
|
// public static void main(String[] args) {
|
|
// String capacityPercent = "32767.00";
|
|
// if(Objects.nonNull(capacityPercent)){
|
|
// double v = Double.parseDouble(capacityPercent.toString());
|
|
// if (v > 100){
|
|
// System.out.printf("++++++"+ capacityPercent);
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
|
|
public static void main(String[] args) {
|
|
// 示例:当前时间戳(秒)
|
|
long timestampInSeconds = System.currentTimeMillis() / 1000;
|
|
timestampInSeconds = 1749403384;
|
|
// 转换为北京时间
|
|
String beijingTime = convertTimestampToBeijingTime(timestampInSeconds);
|
|
|
|
// 输出结果
|
|
System.out.println("北京时间: " + beijingTime);
|
|
}
|
|
|
|
public static String convertTimestampToBeijingTime(long timestamp) {
|
|
ZoneId beijingZone = ZoneId.of("Asia/Shanghai");
|
|
Instant instant = Instant.ofEpochSecond(timestamp); // 使用 ofEpochSecond
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(beijingZone);
|
|
return formatter.format(instant);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |