添加一键起飞功能
This commit is contained in:
parent
7d632576ea
commit
fb387aaa1e
|
|
@ -1,6 +1,5 @@
|
||||||
package com.ruoyi.device.controller;
|
package com.ruoyi.device.controller;
|
||||||
|
|
||||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
|
||||||
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.R;
|
||||||
import com.ruoyi.common.core.web.controller.BaseController;
|
import com.ruoyi.common.core.web.controller.BaseController;
|
||||||
import com.ruoyi.device.api.domain.*;
|
import com.ruoyi.device.api.domain.*;
|
||||||
|
|
@ -11,8 +10,7 @@ import com.ruoyi.device.domain.impl.machine.command.CommandResult;
|
||||||
import com.ruoyi.device.domain.impl.machine.command.CommandType;
|
import com.ruoyi.device.domain.impl.machine.command.CommandType;
|
||||||
import com.ruoyi.device.domain.impl.machine.state.MachineStates;
|
import com.ruoyi.device.domain.impl.machine.state.MachineStates;
|
||||||
import com.ruoyi.device.service.FlightService;
|
import com.ruoyi.device.service.FlightService;
|
||||||
import com.ruoyi.task.api.RemoteTaskService;
|
import com.ruoyi.task.api.enums.StatusEnum;
|
||||||
import com.ruoyi.task.api.domain.TaskDTO;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
@ -20,7 +18,6 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
@ -237,7 +234,7 @@ public class AircraftFlyController extends BaseController
|
||||||
}
|
}
|
||||||
|
|
||||||
//从配置文件获取
|
//从配置文件获取
|
||||||
private String airlineFileUrl = "";
|
private final static String airlineFileUrl = "https://minio-dx.t-aaron.com:2443/th-airport/testFile/191ec54c-062c-4828-aab6-cefc901add78.waypoints";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 无人机一键起飞
|
* 无人机一键起飞
|
||||||
|
|
@ -250,33 +247,34 @@ public class AircraftFlyController extends BaseController
|
||||||
public R<String> takeoff(@RequestBody DroneTakeoffRequest request)
|
public R<String> takeoff(@RequestBody DroneTakeoffRequest request)
|
||||||
{
|
{
|
||||||
|
|
||||||
flightService.onClickTakeOff(request.getSn(),airlineFileUrl);
|
Long taskId = flightService.createClickTakeOffTask(request.getSn(),airlineFileUrl);
|
||||||
|
log.info("一键起飞,生成一键起飞任务");
|
||||||
|
if(true){
|
||||||
|
return R.ok("OK");
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("收到无人机起飞请求: sn={} ", request.getSn());
|
||||||
log.info("收到无人机起飞请求: sn={}, messageID={}", request.getSn(), request.getMessageID());
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
java.util.Map<String, Object> params = new java.util.HashMap<>();
|
java.util.Map<String, Object> params = new java.util.HashMap<>();
|
||||||
if(Objects.isNull(request.getMessageID())){
|
params.put("airlineFileUrl", airlineFileUrl);
|
||||||
|
|
||||||
params.put("messageID", UUID.randomUUID().toString());
|
|
||||||
}else {
|
|
||||||
params.put("messageID", request.getMessageID());
|
|
||||||
}
|
|
||||||
params.put("airlineFileUrl", request.getAirlineFileUrl());
|
|
||||||
params.put("flyBatteryMin", request.getFlyBatteryMin());
|
params.put("flyBatteryMin", request.getFlyBatteryMin());
|
||||||
|
params.put("messageID", taskId);
|
||||||
CompletableFuture<CommandResult> future = machineCommandManager.executeCommand(request.getSn(), CommandType.TAKE_OFF, params);
|
CompletableFuture<CommandResult> future = machineCommandManager.executeCommand(request.getSn(), CommandType.TAKE_OFF, params);
|
||||||
CommandResult result = future.get();
|
CommandResult result = future.get();
|
||||||
|
|
||||||
if (result.isSuccess()) {
|
if (result.isSuccess()) {
|
||||||
log.info("无人机起飞成功: sn={}", request.getSn());
|
log.info("无人机起飞成功: sn={}", request.getSn());
|
||||||
|
flightService.updateFlightStatus(taskId, StatusEnum.RUNNING);
|
||||||
return R.ok("起飞命令执行成功");
|
return R.ok("起飞命令执行成功");
|
||||||
} else {
|
} else {
|
||||||
log.error("无人机起飞失败: sn={}, reason={}", request.getSn(), result.getErrorMessage());
|
log.error("无人机起飞失败: sn={}, reason={}", request.getSn(), result.getErrorMessage());
|
||||||
|
flightService.updateFlightStatus(taskId, StatusEnum.FAILED);
|
||||||
return R.fail("起飞命令执行失败: " + result.getErrorMessage());
|
return R.fail("起飞命令执行失败: " + result.getErrorMessage());
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("无人机起飞异常: sn={}", request.getSn(), e);
|
log.error("无人机起飞异常: sn={}", request.getSn(), e);
|
||||||
|
flightService.updateFlightStatus(taskId, StatusEnum.FAILED);
|
||||||
return R.fail("起飞命令执行异常: " + e.getMessage());
|
return R.fail("起飞命令执行异常: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.ruoyi.device.service;
|
package com.ruoyi.device.service;
|
||||||
|
|
||||||
import com.ruoyi.device.mapper.entity.FlightEntity;
|
import com.ruoyi.device.mapper.entity.FlightEntity;
|
||||||
|
import com.ruoyi.task.api.enums.StatusEnum;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -13,7 +14,7 @@ import java.util.Map;
|
||||||
public interface FlightService
|
public interface FlightService
|
||||||
{
|
{
|
||||||
|
|
||||||
public Long onClickTakeOff(String sn,String url);
|
public Long createClickTakeOffTask(String sn, String url);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取或创建飞行记录(通过messageID匹配)
|
* 获取或创建飞行记录(通过messageID匹配)
|
||||||
|
|
@ -24,7 +25,7 @@ public interface FlightService
|
||||||
* @param messageId 消息ID(对应flightIdExternal)
|
* @param messageId 消息ID(对应flightIdExternal)
|
||||||
* @return 飞行记录
|
* @return 飞行记录
|
||||||
*/
|
*/
|
||||||
FlightEntity getOrCreateFlightByMessageId(String deviceSn, String messageId);
|
// FlightEntity getOrCreateFlightByMessageId(String deviceSn, String messageId);
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
// * 获取最新的飞行记录(包括已返航的)
|
// * 获取最新的飞行记录(包括已返航的)
|
||||||
|
|
@ -50,7 +51,7 @@ public interface FlightService
|
||||||
* @param flightId 飞行ID
|
* @param flightId 飞行ID
|
||||||
* @param status 状态:自检中、飞行中、已返航
|
* @param status 状态:自检中、飞行中、已返航
|
||||||
*/
|
*/
|
||||||
void updateFlightStatus(Long flightId, String status);
|
void updateFlightStatus(Long flightId, StatusEnum status);
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
// * 更新返航时间
|
// * 更新返航时间
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import com.ruoyi.device.mapper.entity.FlightEntity;
|
||||||
import com.ruoyi.device.mapper.entity.FlightLogEntity;
|
import com.ruoyi.device.mapper.entity.FlightLogEntity;
|
||||||
import com.ruoyi.device.mapper.entity.PreCheckLogEntity;
|
import com.ruoyi.device.mapper.entity.PreCheckLogEntity;
|
||||||
import com.ruoyi.device.service.FlightService;
|
import com.ruoyi.device.service.FlightService;
|
||||||
|
import com.ruoyi.task.api.enums.StatusEnum;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
@ -66,13 +67,13 @@ public class FlightEventCallback implements IAirportFlyControlCallback, IAirport
|
||||||
log.info("【FlightEventCallback】处理control消息: deviceSn={}, action={}, messageID={}", deviceSn, action, messageID);
|
log.info("【FlightEventCallback】处理control消息: deviceSn={}, action={}, messageID={}", deviceSn, action, messageID);
|
||||||
|
|
||||||
if ("airlineFlight".equals(action) && messageID != null && !messageID.isEmpty()) {
|
if ("airlineFlight".equals(action) && messageID != null && !messageID.isEmpty()) {
|
||||||
// 创建飞行记录(如果不存在)
|
// // 创建飞行记录(如果不存在)
|
||||||
flightService.getOrCreateFlightByMessageId(deviceSn, messageID);
|
// flightService.getOrCreateFlightByMessageId(deviceSn, messageID);
|
||||||
log.info("【FlightEventCallback】创建/获取飞行记录: deviceSn={}, messageID={}", deviceSn, messageID);
|
// log.info("【FlightEventCallback】创建/获取飞行记录: deviceSn={}, messageID={}", deviceSn, messageID);
|
||||||
} else if ("immediateReturn".equals(action) && messageID != null && !messageID.isEmpty()) {
|
} else if ("immediateReturn".equals(action) && messageID != null && !messageID.isEmpty()) {
|
||||||
FlightEntity flight = flightService.getOrCreateFlightByMessageId(deviceSn, messageID);
|
// FlightEntity flight = flightService.getOrCreateFlightByMessageId(deviceSn, messageID);
|
||||||
flightService.updateFlightStatus(flight.getFlightId(), "RETURNING");
|
// flightService.updateFlightStatus(flight.getFlightId(), "RETURNING");
|
||||||
log.info("【FlightEventCallback】更新飞行状态为RETURNING: deviceSn={}, flightId={}", deviceSn, flight.getFlightId());
|
// log.info("【FlightEventCallback】更新飞行状态为RETURNING: deviceSn={}, flightId={}", deviceSn, flight.getFlightId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -90,49 +91,51 @@ public class FlightEventCallback implements IAirportFlyControlCallback, IAirport
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 通过 messageID 获取飞行记录
|
Long taskId = Long.valueOf(messageID);
|
||||||
FlightEntity flight = flightService.getOrCreateFlightByMessageId(deviceSn, messageID);
|
//
|
||||||
if (flight == null) {
|
// // 通过 messageID 获取飞行记录
|
||||||
log.error("【FlightEventCallback】获取飞行记录失败: deviceSn={}, messageID={}", deviceSn, messageID);
|
// FlightEntity flight = flightService.getOrCreateFlightByMessageId(deviceSn, messageID);
|
||||||
return;
|
// if (flight == null) {
|
||||||
}
|
// log.error("【FlightEventCallback】获取飞行记录失败: deviceSn={}, messageID={}", deviceSn, messageID);
|
||||||
|
// return;
|
||||||
log.info("【FlightEventCallback】处理control/data消息: deviceSn={}, flightId={}, messageID={}, msg={}, code={}",
|
// }
|
||||||
deviceSn, flight.getFlightId(), messageID, msg, code);
|
//
|
||||||
|
// log.info("【FlightEventCallback】处理control/data消息: deviceSn={}, flightId={}, messageID={}, msg={}, code={}",
|
||||||
|
// deviceSn, flight.getFlightId(), messageID, msg, code);
|
||||||
|
|
||||||
// 判断是否为 [地面站]无人机起飞成功
|
// 判断是否为 [地面站]无人机起飞成功
|
||||||
if (msg != null && msg.contains("[地面站]无人机起飞成功")) {
|
if (msg != null && msg.contains("[地面站]无人机起飞成功")) {
|
||||||
// 起飞成功,存到 device_flight_log
|
// 起飞成功,存到 device_flight_log
|
||||||
handleFlightLog(deviceSn, msg, flight);
|
handleFlightLog(deviceSn, msg, taskId);
|
||||||
// 更新状态为 FLYING
|
// 更新状态为 FLYING
|
||||||
log.info("【FlightEventCallback】检测到起飞成功,更新状态为FLYING: deviceSn={}, flightId={}", deviceSn, flight.getFlightId());
|
log.info("【FlightEventCallback】检测到起飞成功,更新状态为FLYING: deviceSn={}, flightId={}", deviceSn, taskId);
|
||||||
flightService.updateFlightStatus(flight.getFlightId(), "FLYING");
|
flightService.updateFlightStatus(taskId, StatusEnum.RUNNING);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查 device_flight_log 是否有数据,判断是否已起飞
|
// 检查 device_flight_log 是否有数据,判断是否已起飞
|
||||||
boolean hasTakenOff = flightService.hasFlightLog(flight.getFlightId());
|
boolean hasTakenOff = flightService.hasFlightLog(taskId);
|
||||||
|
|
||||||
if (hasTakenOff) {
|
if (hasTakenOff) {
|
||||||
// 已起飞,所有消息存到 device_flight_log
|
// 已起飞,所有消息存到 device_flight_log
|
||||||
log.info("【FlightEventCallback】已起飞,存入飞行日志: deviceSn={}, flightId={}, msg={}", deviceSn, flight.getFlightId(), msg);
|
log.info("【FlightEventCallback】已起飞,存入飞行日志: deviceSn={}, flightId={}, msg={}", deviceSn, taskId, msg);
|
||||||
handleFlightLog(deviceSn, msg, flight);
|
handleFlightLog(deviceSn, msg, taskId);
|
||||||
|
|
||||||
// 检查是否任务完成
|
// 检查是否任务完成
|
||||||
String dataContent = data.getString("data");
|
String dataContent = data.getString("data");
|
||||||
if ("操作成功".equals(msg) && "[地面站]任务飞行完成".equals(dataContent)) {
|
if ("操作成功".equals(msg) && "[地面站]任务飞行完成".equals(dataContent)) {
|
||||||
log.info("【FlightEventCallback】检测到任务完成,更新状态为HOME: deviceSn={}, flightId={}", deviceSn, flight.getFlightId());
|
log.info("【FlightEventCallback】检测到任务完成,更新状态为HOME: deviceSn={}, flightId={}", deviceSn, taskId);
|
||||||
flightService.updateFlightStatus(flight.getFlightId(), "HOME");
|
flightService.updateFlightStatus(taskId, StatusEnum.COMPLETED);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 未起飞,所有消息存到 device_pre_check_log
|
// 未起飞,所有消息存到 device_pre_check_log
|
||||||
log.info("【FlightEventCallback】未起飞,存入自检日志: deviceSn={}, flightId={}, msg={}, code={}", deviceSn, flight.getFlightId(), msg, code);
|
log.info("【FlightEventCallback】未起飞,存入自检日志: deviceSn={}, flightId={}, msg={}, code={}", deviceSn, taskId, msg, code);
|
||||||
handlePreCheckLog(deviceSn, msg, code, flight);
|
handlePreCheckLog(deviceSn, msg, code, taskId);
|
||||||
|
|
||||||
// 检查是否自检失败(code=1 表示失败)
|
// 检查是否自检失败(code=1 表示失败)
|
||||||
if (code != null && (code == 1 || code == -1)) {
|
if (code != null && (code == 1 || code == -1)) {
|
||||||
log.info("【FlightEventCallback】检测到自检失败(code=1),更新状态为ERROR: deviceSn={}, flightId={}", deviceSn, flight.getFlightId());
|
log.info("【FlightEventCallback】检测到自检失败(code=1),更新状态为ERROR: deviceSn={}, flightId={}", deviceSn, taskId);
|
||||||
flightService.updateFlightStatus(flight.getFlightId(), "ERROR");
|
flightService.updateFlightStatus(taskId, StatusEnum.FAILED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -141,57 +144,57 @@ public class FlightEventCallback implements IAirportFlyControlCallback, IAirport
|
||||||
* 保存自检日志
|
* 保存自检日志
|
||||||
* @param code 0=成功,1=失败
|
* @param code 0=成功,1=失败
|
||||||
*/
|
*/
|
||||||
private void handlePreCheckLog(String deviceSn, String msg, Integer code, FlightEntity flight) {
|
private void handlePreCheckLog(String deviceSn, String msg, Integer code, Long taskId) {
|
||||||
if (flight == null) {
|
// if (flight == null) {
|
||||||
log.error("【FlightEventCallback】飞行记录为空,无法保存自检日志: deviceSn={}, msg={}", deviceSn, msg);
|
// log.error("【FlightEventCallback】飞行记录为空,无法保存自检日志: deviceSn={}, msg={}", deviceSn, msg);
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
log.info("【FlightEventCallback】准备保存自检日志: deviceSn={}, flightId={}, msg={}, code={}",
|
// log.info("【FlightEventCallback】准备保存自检日志: deviceSn={}, flightId={}, msg={}, code={}",
|
||||||
deviceSn, flight.getFlightId(), msg, code);
|
// deviceSn, flight.getFlightId(), msg, code);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// code=0 表示成功,code=1 表示失败
|
// code=0 表示成功,code=1 表示失败
|
||||||
Boolean success = (code != null && code == 0);
|
Boolean success = (code != null && code == 0);
|
||||||
|
|
||||||
PreCheckLogEntity logEntity = new PreCheckLogEntity();
|
PreCheckLogEntity logEntity = new PreCheckLogEntity();
|
||||||
logEntity.setFlightId(flight.getFlightId());
|
logEntity.setFlightId(taskId);
|
||||||
logEntity.setLogContent(msg);
|
logEntity.setLogContent(msg);
|
||||||
logEntity.setSuccess(success);
|
logEntity.setSuccess(success);
|
||||||
|
|
||||||
flightService.insertPreCheckLog(logEntity);
|
flightService.insertPreCheckLog(logEntity);
|
||||||
|
|
||||||
log.info("【FlightEventCallback】成功保存自检日志: deviceSn={}, flightId={}, logId={}, msg={}, code={}, success={}",
|
log.info("【FlightEventCallback】成功保存自检日志: deviceSn={}, flightId={}, logId={}, msg={}, code={}, success={}",
|
||||||
deviceSn, flight.getFlightId(), logEntity.getLogId(), msg, code, success);
|
deviceSn, taskId, logEntity.getLogId(), msg, code, success);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("【FlightEventCallback】保存自检日志失败: deviceSn={}, flightId={}, msg={}, error={}",
|
log.error("【FlightEventCallback】保存自检日志失败: deviceSn={}, flightId={}, msg={}, error={}",
|
||||||
deviceSn, flight.getFlightId(), msg, e.getMessage(), e);
|
deviceSn, taskId, msg, e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存飞行日志
|
* 保存飞行日志
|
||||||
*/
|
*/
|
||||||
private void handleFlightLog(String deviceSn, String message, FlightEntity flight) {
|
private void handleFlightLog(String deviceSn, String message, Long taskId) {
|
||||||
if (flight == null) {
|
// if (flight == null) {
|
||||||
log.error("【FlightEventCallback】飞行记录为空,无法保存飞行日志: deviceSn={}, message={}", deviceSn, message);
|
// log.error("【FlightEventCallback】飞行记录为空,无法保存飞行日志: deviceSn={}, message={}", deviceSn, message);
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
log.info("【FlightEventCallback】准备保存飞行日志: deviceSn={}, flightId={}, message={}", deviceSn, flight.getFlightId(), message);
|
log.info("【FlightEventCallback】准备保存飞行日志: deviceSn={}, flightId={}, message={}", deviceSn, taskId, message);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
FlightLogEntity logEntity = new FlightLogEntity();
|
FlightLogEntity logEntity = new FlightLogEntity();
|
||||||
logEntity.setFlightId(flight.getFlightId());
|
logEntity.setFlightId(taskId);
|
||||||
logEntity.setLogContent(message);
|
logEntity.setLogContent(message);
|
||||||
|
|
||||||
flightService.insertFlightLog(logEntity);
|
flightService.insertFlightLog(logEntity);
|
||||||
|
log.info("【FlightEventCallback】成功保存飞行日志: deviceSn={}, taskId={}, logId={}, message={}",
|
||||||
|
deviceSn, taskId, logEntity.getLogId(), message);
|
||||||
|
|
||||||
log.info("【FlightEventCallback】成功保存飞行日志: deviceSn={}, flightId={}, logId={}, message={}",
|
|
||||||
deviceSn, flight.getFlightId(), logEntity.getLogId(), message);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("【FlightEventCallback】保存飞行日志失败: deviceSn={}, flightId={}, message={}, error={}",
|
log.error("【FlightEventCallback】保存飞行日志失败: deviceSn={}, taskId={}, message={}, error={}",
|
||||||
deviceSn, flight.getFlightId(), message, e.getMessage(), e);
|
deviceSn, taskId, message, e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import com.ruoyi.device.mapper.entity.FlightEntity;
|
||||||
import com.ruoyi.device.mapper.entity.FlightLogEntity;
|
import com.ruoyi.device.mapper.entity.FlightLogEntity;
|
||||||
import com.ruoyi.device.mapper.entity.PreCheckLogEntity;
|
import com.ruoyi.device.mapper.entity.PreCheckLogEntity;
|
||||||
import com.ruoyi.device.service.FlightService;
|
import com.ruoyi.device.service.FlightService;
|
||||||
|
import com.ruoyi.task.api.enums.StatusEnum;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
@ -64,17 +65,19 @@ public class FlightLogCallback implements IDroneRealTimeCallback {
|
||||||
log.info("【FlightLogCallback】开始处理自检日志: deviceSn={}, messageId={}, jianchaJson={}", deviceSn, messageID, jianchaJson);
|
log.info("【FlightLogCallback】开始处理自检日志: deviceSn={}, messageId={}, jianchaJson={}", deviceSn, messageID, jianchaJson);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
FlightEntity flight;
|
|
||||||
|
|
||||||
if (messageID != null && !messageID.isEmpty()) {
|
Long taskId = Long.valueOf(messageID);
|
||||||
log.info("【FlightLogCallback】通过messageId获取飞行记录: deviceSn={}, messageId={}", deviceSn, messageID);
|
// FlightEntity flight;
|
||||||
flight = flightService.getOrCreateFlightByMessageId(deviceSn, messageID);
|
//
|
||||||
} else {
|
// if (messageID != null && !messageID.isEmpty()) {
|
||||||
log.warn("【FlightLogCallback】获取当前飞行记录: deviceSn={} messageID为空", deviceSn);
|
// log.info("【FlightLogCallback】通过messageId获取飞行记录: deviceSn={}, messageId={}", deviceSn, messageID);
|
||||||
return;
|
// flight = flightService.getOrCreateFlightByMessageId(deviceSn, messageID);
|
||||||
}
|
// } else {
|
||||||
|
// log.warn("【FlightLogCallback】获取当前飞行记录: deviceSn={} messageID为空", deviceSn);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
log.info("【FlightLogCallback】获取到飞行记录: deviceSn={}, flightId={}, status={}", deviceSn, flight.getFlightId(), flight.getStatus());
|
// log.info("【FlightLogCallback】获取到飞行记录: deviceSn={}, flightId={}, status={}", deviceSn, flight.getFlightId(), flight.getStatus());
|
||||||
|
|
||||||
JSONArray checkItems = JSON.parseArray(jianchaJson);
|
JSONArray checkItems = JSON.parseArray(jianchaJson);
|
||||||
if (checkItems == null || checkItems.isEmpty()) {
|
if (checkItems == null || checkItems.isEmpty()) {
|
||||||
|
|
@ -82,12 +85,12 @@ public class FlightLogCallback implements IDroneRealTimeCallback {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("【FlightLogCallback】解析到{}个自检项: deviceSn={}, flightId={}", checkItems.size(), deviceSn, flight.getFlightId());
|
// log.info("【FlightLogCallback】解析到{}个自检项: deviceSn={}, flightId={}", checkItems.size(), deviceSn, flight.getFlightId());
|
||||||
|
|
||||||
for (int i = 0; i < checkItems.size(); i++) {
|
for (int i = 0; i < checkItems.size(); i++) {
|
||||||
JSONObject item = checkItems.getJSONObject(i);
|
JSONObject item = checkItems.getJSONObject(i);
|
||||||
PreCheckLogEntity logEntity = new PreCheckLogEntity();
|
PreCheckLogEntity logEntity = new PreCheckLogEntity();
|
||||||
logEntity.setFlightId(flight.getFlightId());
|
logEntity.setFlightId(taskId);
|
||||||
|
|
||||||
String check = item.getString("check");
|
String check = item.getString("check");
|
||||||
String value = item.getString("value");
|
String value = item.getString("value");
|
||||||
|
|
@ -97,22 +100,22 @@ public class FlightLogCallback implements IDroneRealTimeCallback {
|
||||||
String logContent = check + " " + value + " " + statusText;
|
String logContent = check + " " + value + " " + statusText;
|
||||||
|
|
||||||
if(Boolean.FALSE.equals(result)){
|
if(Boolean.FALSE.equals(result)){
|
||||||
flightService.updateFlightStatus(flight.getFlightId(), "ERROR");
|
flightService.updateFlightStatus(taskId, StatusEnum.FAILED);
|
||||||
}
|
}
|
||||||
|
|
||||||
logEntity.setLogContent(logContent);
|
logEntity.setLogContent(logContent);
|
||||||
logEntity.setSuccess(result != null ? result : false);
|
logEntity.setSuccess(result != null ? result : false);
|
||||||
|
|
||||||
log.info("【FlightLogCallback】准备插入自检日志[{}/{}]: deviceSn={}, flightId={}, check={}, value={}, result={}",
|
log.info("【FlightLogCallback】准备插入自检日志[{}/{}]: deviceSn={}, flightId={}, check={}, value={}, result={}",
|
||||||
i + 1, checkItems.size(), deviceSn, flight.getFlightId(), check, value, result);
|
i + 1, checkItems.size(), deviceSn, taskId, check, value, result);
|
||||||
|
|
||||||
flightService.insertPreCheckLog(logEntity);
|
flightService.insertPreCheckLog(logEntity);
|
||||||
|
|
||||||
log.info("【FlightLogCallback】成功插入自检日志[{}/{}]: deviceSn={}, flightId={}, logId={}",
|
log.info("【FlightLogCallback】成功插入自检日志[{}/{}]: deviceSn={}, flightId={}, logId={}",
|
||||||
i + 1, checkItems.size(), deviceSn, flight.getFlightId(), logEntity.getLogId());
|
i + 1, checkItems.size(), deviceSn, taskId, logEntity.getLogId());
|
||||||
}
|
}
|
||||||
log.info("【FlightLogCallback】完成保存自检日志: deviceSn={}, flightId={}, 检查项数量={}",
|
log.info("【FlightLogCallback】完成保存自检日志: deviceSn={}, flightId={}, 检查项数量={}",
|
||||||
deviceSn, flight.getFlightId(), checkItems.size());
|
deviceSn, taskId, checkItems.size());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("【FlightLogCallback】保存自检日志失败: deviceSn={}, messageId={}, jiancha={}, error={}",
|
log.error("【FlightLogCallback】保存自检日志失败: deviceSn={}, messageId={}, jiancha={}, error={}",
|
||||||
deviceSn, messageID, jianchaJson, e.getMessage(), e);
|
deviceSn, messageID, jianchaJson, e.getMessage(), e);
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public class FlightServiceImpl implements FlightService
|
||||||
@Autowired
|
@Autowired
|
||||||
private RemoteTaskService remoteTaskService;
|
private RemoteTaskService remoteTaskService;
|
||||||
|
|
||||||
public Long onClickTakeOff(String sn,String routeUrl){
|
public Long createClickTakeOffTask(String sn, String routeUrl){
|
||||||
TaskDTO taskDTO = new TaskDTO();
|
TaskDTO taskDTO = new TaskDTO();
|
||||||
taskDTO.setActualStartTime(new Date());
|
taskDTO.setActualStartTime(new Date());
|
||||||
taskDTO.setStartTime(new Date());
|
taskDTO.setStartTime(new Date());
|
||||||
|
|
@ -51,37 +51,38 @@ public class FlightServiceImpl implements FlightService
|
||||||
taskDTO.setTaskCategory(TaskCategoryEnum.MANUAL_FLIGHT);
|
taskDTO.setTaskCategory(TaskCategoryEnum.MANUAL_FLIGHT);
|
||||||
taskDTO.setRouteId(-1L);
|
taskDTO.setRouteId(-1L);
|
||||||
taskDTO.setUavId(sn);
|
taskDTO.setUavId(sn);
|
||||||
taskDTO.setStatus(StatusEnum.RUNNING);
|
taskDTO.setStatus(StatusEnum.PENDING);
|
||||||
taskDTO.setRouteUrl(routeUrl);
|
taskDTO.setRouteUrl(routeUrl);
|
||||||
R<Long> taskId = remoteTaskService.createTaskWithoutPlan(taskDTO,SecurityConstants.INNER);
|
R<Long> taskId = remoteTaskService.createTaskWithoutPlan(taskDTO,SecurityConstants.INNER);
|
||||||
|
|
||||||
return taskId.getData();
|
return taskId.getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
//// @Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
//// @Transactional(rollbackFor = Exception.class)
|
||||||
public FlightEntity getOrCreateFlightByMessageId(String deviceSn, String messageId) {
|
// public FlightEntity getOrCreateFlightByMessageId(String deviceSn, String messageId) {
|
||||||
// 先查询是否存在相同 deviceSn 和 flight_id_extern 的记录
|
// // 先查询是否存在相同 deviceSn 和 flight_id_extern 的记录
|
||||||
FlightEntity flight = flightMapper.selectFlightByDeviceSnAndFlightIdExternal(deviceSn, messageId);
|
// FlightEntity flight = flightMapper.selectFlightByDeviceSnAndFlightIdExternal(deviceSn, messageId);
|
||||||
|
//
|
||||||
if (flight != null) {
|
// if (flight != null) {
|
||||||
// 如果存在,直接返回
|
// // 如果存在,直接返回
|
||||||
log.info("找到已存在的飞行记录: deviceSn={}, messageId={}, flightId={}",
|
// log.info("找到已存在的飞行记录: deviceSn={}, messageId={}, flightId={}",
|
||||||
deviceSn, messageId, flight.getFlightId());
|
// deviceSn, messageId, flight.getFlightId());
|
||||||
return flight;
|
// return flight;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// 如果不存在,创建新的飞行记录
|
// // 如果不存在,创建新的飞行记录
|
||||||
flight = new FlightEntity();
|
// flight = new FlightEntity();
|
||||||
flight.setDeviceSn(deviceSn);
|
// flight.setDeviceSn(deviceSn);
|
||||||
flight.setFlightIdExternal(messageId);
|
// flight.setFlightIdExternal(messageId);
|
||||||
flight.setStatus("CHECKING");
|
// flight.setStatus("CHECKING");
|
||||||
flightMapper.insertFlight(flight);
|
// flightMapper.insertFlight(flight);
|
||||||
|
//
|
||||||
log.info("创建新的飞行记录: deviceSn={}, messageId={}, flightId={}, status=CHECKING",
|
// log.info("创建新的飞行记录: deviceSn={}, messageId={}, flightId={}, status=CHECKING",
|
||||||
deviceSn, messageId, flight.getFlightId());
|
// deviceSn, messageId, flight.getFlightId());
|
||||||
|
//
|
||||||
return flight;
|
// return flight;
|
||||||
}
|
// }
|
||||||
|
|
||||||
// @Override
|
// @Override
|
||||||
// public FlightEntity getLatestFlight(String deviceSn) {
|
// public FlightEntity getLatestFlight(String deviceSn) {
|
||||||
|
|
@ -100,14 +101,16 @@ public class FlightServiceImpl implements FlightService
|
||||||
// }
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateFlightStatus(Long flightId, String status) {
|
public void updateFlightStatus(Long flightId,StatusEnum status) {
|
||||||
flightMapper.updateFlightStatus(flightId, status);
|
|
||||||
log.info("更新飞行状态: flightId={}, status={}", flightId, status);
|
|
||||||
|
|
||||||
if ("HOME".equals(status) ||"ERROR".equals(status)) {
|
remoteTaskService.updateTaskStatus(flightId,status,SecurityConstants.INNER);
|
||||||
flightMapper.updateReturnTime(flightId);
|
// flightMapper.updateFlightStatus(flightId, status);
|
||||||
log.info("更新返航时间: flightId={}", flightId);
|
// log.info("更新飞行状态: flightId={}, status={}", flightId, status);
|
||||||
}
|
//
|
||||||
|
// if ("HOME".equals(status) ||"ERROR".equals(status)) {
|
||||||
|
// flightMapper.updateReturnTime(flightId);
|
||||||
|
// log.info("更新返航时间: flightId={}", flightId);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
// @Override
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue