修改环境配置,修改测试环境

This commit is contained in:
孙小云 2026-03-10 10:47:15 +08:00
parent 946e80288d
commit db2d1a70f5
5 changed files with 106 additions and 55 deletions

View File

@ -135,6 +135,10 @@
<artifactId>org.eclipse.paho.mqttv5.client</artifactId> <artifactId>org.eclipse.paho.mqttv5.client</artifactId>
<version>1.2.5</version> <version>1.2.5</version>
</dependency> </dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>tuoheng-api-task</artifactId>
</dependency>
</dependencies> </dependencies>

View File

@ -1,5 +1,6 @@
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.*;
@ -8,6 +9,10 @@ import com.ruoyi.device.api.enums.DroneMissionStatusEnum;
import com.ruoyi.device.domain.impl.machine.MachineCommandManager; import com.ruoyi.device.domain.impl.machine.MachineCommandManager;
import com.ruoyi.device.domain.impl.machine.command.CommandResult; 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.service.FlightService;
import com.ruoyi.task.api.RemoteTaskService;
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;
@ -15,6 +20,7 @@ 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;
@ -38,7 +44,8 @@ public class AircraftFlyController extends BaseController
private com.ruoyi.device.domain.impl.machine.statemachine.MachineStateManager machineStateManager; private com.ruoyi.device.domain.impl.machine.statemachine.MachineStateManager machineStateManager;
@Autowired @Autowired
private com.ruoyi.device.domain.impl.machine.mqtt.MqttClient mqttClient; private FlightService flightService;
/** /**
* 无人机飞控命令 * 无人机飞控命令
* *
@ -229,6 +236,9 @@ public class AircraftFlyController extends BaseController
return R.ok(vo); return R.ok(vo);
} }
//从配置文件获取
private String airlineFileUrl = "";
/** /**
* 无人机一键起飞 * 无人机一键起飞
* *
@ -239,11 +249,16 @@ public class AircraftFlyController extends BaseController
@PostMapping("/takeoff") @PostMapping("/takeoff")
public R<String> takeoff(@RequestBody DroneTakeoffRequest request) public R<String> takeoff(@RequestBody DroneTakeoffRequest request)
{ {
flightService.onClickTakeOff(request.getSn(),airlineFileUrl);
log.info("收到无人机起飞请求: sn={}, messageID={}", request.getSn(), request.getMessageID()); 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())){ if(Objects.isNull(request.getMessageID())){
params.put("messageID", UUID.randomUUID().toString()); params.put("messageID", UUID.randomUUID().toString());
}else { }else {
params.put("messageID", request.getMessageID()); params.put("messageID", request.getMessageID());
@ -350,7 +365,7 @@ public class AircraftFlyController extends BaseController
try { try {
// MachineStateManager 获取状态 // MachineStateManager 获取状态
com.ruoyi.device.domain.impl.machine.state.MachineStates states = machineStateManager.getStates(sn); MachineStates states = machineStateManager.getStates(sn);
// 转换为 VO 对象 // 转换为 VO 对象
MachineStateVO vo = new MachineStateVO(); MachineStateVO vo = new MachineStateVO();

View File

@ -20,16 +20,28 @@ public class TuohengMqttClientService {
private final TuohengMqttMessageHandler messageHandler; private final TuohengMqttMessageHandler messageHandler;
private MqttClient mqttClient; private MqttClient mqttClient;
public static final String AIRPORT_NEST_REALTIME_TOPIC = "/topic/v1/airportNest/+/realTime/data"; // public static final String AIRPORT_NEST_REALTIME_TOPIC = "/topic/v1/airportNest/+/realTime/data";
public static final String AIRPORT_NEST_BASIC_TOPIC = "/topic/v1/airportNest/+/realTime/basic"; // public static final String AIRPORT_NEST_BASIC_TOPIC = "/topic/v1/airportNest/+/realTime/basic";
public static final String AIRPORT_NEST_CONFIRM_TOPIC = "/topic/v1/airportNest/+/control/confirm"; // public static final String AIRPORT_NEST_CONFIRM_TOPIC = "/topic/v1/airportNest/+/control/confirm";
public static final String AIRPORT_DRONE_REALTIME_TOPIC = "/topic/v1/airportDrone/+/realTime/data"; // public static final String AIRPORT_DRONE_REALTIME_TOPIC = "/topic/v1/airportDrone/+/realTime/data";
public static final String AIRPORT_FLY_CONTROL_TOPIC = "/topic/v1/airportFly/+/control"; // public static final String AIRPORT_FLY_CONTROL_TOPIC = "/topic/v1/airportFly/+/control";
public static final String AIRPORT_FLY_DATA_TOPIC = "/topic/v1/airportFly/+/control/data"; // public static final String AIRPORT_FLY_DATA_TOPIC = "/topic/v1/airportFly/+/control/data";
public static final String AIRPORT_FLY_CONFIRM_TOPIC = "/topic/v1/airportFly/+/control/confirm"; // public static final String AIRPORT_FLY_CONFIRM_TOPIC = "/topic/v1/airportFly/+/control/confirm";
public static final String HEARTBEAT_MESSAGE_TOPIC = "/topic/v1/heartbeat/+/message"; // public static final String HEARTBEAT_MESSAGE_TOPIC = "/topic/v1/heartbeat/+/message";
public static final String PRODUCT_OSD_TOPIC = "thing/product/+/osd"; // public static final String PRODUCT_OSD_TOPIC = "thing/product/+/osd";
public static final String PRODUCT_EVENTS_TOPIC = "thing/product/+/events"; // public static final String PRODUCT_EVENTS_TOPIC = "thing/product/+/events";
public static final String AIRPORT_NEST_REALTIME_TOPIC = "/topic/v1/airportNest/THJSQ03A2302KSPYGJ2G/realTime/data";
public static final String AIRPORT_NEST_BASIC_TOPIC = "/topic/v1/airportNest/THJSQ03A2302KSPYGJ2G/realTime/basic";
public static final String AIRPORT_NEST_CONFIRM_TOPIC = "/topic/v1/airportNest/THJSQ03A2302KSPYGJ2G/control/confirm";
public static final String AIRPORT_DRONE_REALTIME_TOPIC = "/topic/v1/airportDrone/THJSQ03A2302KSPYGJ2G/realTime/data";
public static final String AIRPORT_FLY_CONTROL_TOPIC = "/topic/v1/airportFly/THJSQ03A2302KSPYGJ2G/control";
public static final String AIRPORT_FLY_DATA_TOPIC = "/topic/v1/airportFly/THJSQ03A2302KSPYGJ2G/control/data";
public static final String AIRPORT_FLY_CONFIRM_TOPIC = "/topic/v1/airportFly/THJSQ03A2302KSPYGJ2G/control/confirm";
public static final String HEARTBEAT_MESSAGE_TOPIC = "/topic/v1/heartbeat/THJSQ03A2302KSPYGJ2G/message";
public static final String PRODUCT_OSD_TOPIC = "thing/product/THJSQ03A2302KSPYGJ2G/osd";
public static final String PRODUCT_EVENTS_TOPIC = "thing/product/THJSQ03A2302KSPYGJ2G/events";
public TuohengMqttClientService(TuohengMqttClientConfig config, TuohengMqttMessageHandler messageHandler) { public TuohengMqttClientService(TuohengMqttClientConfig config, TuohengMqttMessageHandler messageHandler) {
this.config = config; this.config = config;

View File

@ -13,6 +13,8 @@ import java.util.Map;
public interface FlightService public interface FlightService
{ {
public Long onClickTakeOff(String sn,String url);
/** /**
* 获取或创建飞行记录通过messageID匹配 * 获取或创建飞行记录通过messageID匹配
* 如果存在相同messageID的飞行记录返回该记录 * 如果存在相同messageID的飞行记录返回该记录
@ -24,23 +26,23 @@ public interface FlightService
*/ */
FlightEntity getOrCreateFlightByMessageId(String deviceSn, String messageId); FlightEntity getOrCreateFlightByMessageId(String deviceSn, String messageId);
/** // /**
* 获取最新的飞行记录包括已返航的 // * 获取最新的飞行记录包括已返航的
* 用于WebSocket推送 // * 用于WebSocket推送
* // *
* @param deviceSn 设备SN号 // * @param deviceSn 设备SN号
* @return 飞行记录 // * @return 飞行记录
*/ // */
FlightEntity getLatestFlight(String deviceSn); // FlightEntity getLatestFlight(String deviceSn);
/** // /**
* 更新飞行ID外部ID // * 更新飞行ID外部ID
* // *
* @param flightId 飞行ID // * @param flightId 飞行ID
* @param flightIdExternal 外部飞行ID // * @param flightIdExternal 外部飞行ID
*/ // */
void updateFlightIdExternal(Long flightId, String flightIdExternal); // void updateFlightIdExternal(Long flightId, String flightIdExternal);
/** /**
* 更新飞行状态 * 更新飞行状态
@ -50,12 +52,12 @@ public interface FlightService
*/ */
void updateFlightStatus(Long flightId, String status); void updateFlightStatus(Long flightId, String status);
/** // /**
* 更新返航时间 // * 更新返航时间
* // *
* @param flightId 飞行ID // * @param flightId 飞行ID
*/ // */
void updateReturnTime(Long flightId); // void updateReturnTime(Long flightId);
/** /**
* 获取飞行记录和日志用于WebSocket推送 * 获取飞行记录和日志用于WebSocket推送

View File

@ -1,5 +1,7 @@
package com.ruoyi.device.service.impl; package com.ruoyi.device.service.impl;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.device.mapper.FlightLogMapper; import com.ruoyi.device.mapper.FlightLogMapper;
import com.ruoyi.device.mapper.FlightMapper; import com.ruoyi.device.mapper.FlightMapper;
import com.ruoyi.device.mapper.PreCheckLogMapper; import com.ruoyi.device.mapper.PreCheckLogMapper;
@ -7,16 +9,17 @@ 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.RemoteTaskService;
import com.ruoyi.task.api.domain.TaskDTO;
import com.ruoyi.task.api.enums.ExecuteTypeEnum;
import com.ruoyi.task.api.enums.StatusEnum;
import com.ruoyi.task.api.enums.TaskCategoryEnum;
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.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* 飞行服务实现类 * 飞行服务实现类
@ -37,7 +40,22 @@ public class FlightServiceImpl implements FlightService
@Autowired @Autowired
private FlightLogMapper flightLogMapper; private FlightLogMapper flightLogMapper;
@Autowired
private RemoteTaskService remoteTaskService;
public Long onClickTakeOff(String sn,String routeUrl){
TaskDTO taskDTO = new TaskDTO();
taskDTO.setActualStartTime(new Date());
taskDTO.setStartTime(new Date());
taskDTO.setExecuteType(ExecuteTypeEnum.ONCE);
taskDTO.setTaskCategory(TaskCategoryEnum.MANUAL_FLIGHT);
taskDTO.setRouteId(-1L);
taskDTO.setUavId(sn);
taskDTO.setStatus(StatusEnum.RUNNING);
taskDTO.setRouteUrl(routeUrl);
R<Long> taskId = remoteTaskService.createTaskWithoutPlan(taskDTO,SecurityConstants.INNER);
return taskId.getData();
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -65,21 +83,21 @@ public class FlightServiceImpl implements FlightService
return flight; return flight;
} }
@Override // @Override
public FlightEntity getLatestFlight(String deviceSn) { // public FlightEntity getLatestFlight(String deviceSn) {
return flightMapper.selectLatestFlightByDeviceSn(deviceSn); // return flightMapper.selectLatestFlightByDeviceSn(deviceSn);
} // }
//
@Override // @Override
public void updateFlightIdExternal(Long flightId, String flightIdExternal) { // public void updateFlightIdExternal(Long flightId, String flightIdExternal) {
FlightEntity flight = new FlightEntity(); // FlightEntity flight = new FlightEntity();
flight.setFlightId(flightId); // flight.setFlightId(flightId);
flight.setFlightIdExternal(flightIdExternal); // flight.setFlightIdExternal(flightIdExternal);
flightMapper.updateFlight(flight); // flightMapper.updateFlight(flight);
log.info("更新飞行ID: flightId={}, flightIdExternal={}", flightId, flightIdExternal); // log.info("更新飞行ID: flightId={}, flightIdExternal={}", flightId, flightIdExternal);
} // }
@Override @Override
public void updateFlightStatus(Long flightId, String status) { public void updateFlightStatus(Long flightId, String status) {
@ -92,10 +110,10 @@ public class FlightServiceImpl implements FlightService
} }
} }
@Override // @Override
public void updateReturnTime(Long flightId) { // public void updateReturnTime(Long flightId) {
flightMapper.updateReturnTime(flightId); // flightMapper.updateReturnTime(flightId);
} // }
@Override @Override
public Map<String, Object> getLatestFlightWithLogs(String deviceSn) { public Map<String, Object> getLatestFlightWithLogs(String deviceSn) {