修改无人机状态
This commit is contained in:
parent
1fdf6dc22d
commit
7d51087047
|
|
@ -9,10 +9,12 @@ import com.ruoyi.device.domain.model.DockAircraft;
|
||||||
import com.ruoyi.device.domain.model.thingsboard.AttributeMap;
|
import com.ruoyi.device.domain.model.thingsboard.AttributeMap;
|
||||||
import com.ruoyi.device.domain.model.thingsboard.TelemetryMap;
|
import com.ruoyi.device.domain.model.thingsboard.TelemetryMap;
|
||||||
import com.ruoyi.device.domain.model.thingsboard.constants.DeviceAttributes;
|
import com.ruoyi.device.domain.model.thingsboard.constants.DeviceAttributes;
|
||||||
|
import com.ruoyi.device.domain.model.thingsboard.constants.DeviceTelemetry;
|
||||||
import com.ruoyi.device.service.api.IBufferDeviceService;
|
import com.ruoyi.device.service.api.IBufferDeviceService;
|
||||||
import com.ruoyi.device.service.dto.AircraftDTO;
|
import com.ruoyi.device.service.dto.AircraftDTO;
|
||||||
import com.ruoyi.device.service.dto.AircraftDetailDTO;
|
import com.ruoyi.device.service.dto.AircraftDetailDTO;
|
||||||
import com.ruoyi.device.service.dto.DockDetailDTO;
|
import com.ruoyi.device.service.dto.DockDetailDTO;
|
||||||
|
import com.ruoyi.device.api.enums.AircraftStatusEnum;
|
||||||
import com.ruoyi.device.api.enums.DockStatusEnum;
|
import com.ruoyi.device.api.enums.DockStatusEnum;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
@ -69,6 +71,7 @@ public class BufferDeviceImpl implements IBufferDeviceService
|
||||||
dto.setDockLocation(dock.getDockLocation());
|
dto.setDockLocation(dock.getDockLocation());
|
||||||
dto.setDockIotId(device.getIotDeviceId());
|
dto.setDockIotId(device.getIotDeviceId());
|
||||||
|
|
||||||
|
|
||||||
List<DockAircraft> aircrafts = dockAircraftDomain.selectDockAircraftByDockId(dockId);
|
List<DockAircraft> aircrafts = dockAircraftDomain.selectDockAircraftByDockId(dockId);
|
||||||
|
|
||||||
if(!CollectionUtils.isEmpty(aircrafts)){
|
if(!CollectionUtils.isEmpty(aircrafts)){
|
||||||
|
|
@ -80,6 +83,11 @@ public class BufferDeviceImpl implements IBufferDeviceService
|
||||||
Device airDevice = deviceDomain.selectDeviceByDeviceId(aircraft.getDeviceId());
|
Device airDevice = deviceDomain.selectDeviceByDeviceId(aircraft.getDeviceId());
|
||||||
dto.setAircraftIotId(airDevice.getIotDeviceId());
|
dto.setAircraftIotId(airDevice.getIotDeviceId());
|
||||||
|
|
||||||
|
AircraftDetailDTO aircraftDetailDTO = getChangeAbleAirDetailDTO(airDevice.getIotDeviceId());
|
||||||
|
/**
|
||||||
|
* 设置无人机状态
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -91,14 +99,14 @@ public class BufferDeviceImpl implements IBufferDeviceService
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AircraftDetailDTO getAircraftDetailById(Long aircraftId)
|
public AircraftDetailDTO getAircraftDetailById(Long aircraftId) {
|
||||||
{
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private DockDetailDTO getChangeAbleDockDetailDTO(String deviceIotId)
|
private DockDetailDTO getChangeAbleDockDetailDTO(String deviceIotId)
|
||||||
{
|
{
|
||||||
DockDetailDTO dto = new DockDetailDTO();
|
DockDetailDTO dto = new DockDetailDTO();
|
||||||
|
|
@ -140,8 +148,80 @@ public class BufferDeviceImpl implements IBufferDeviceService
|
||||||
private AircraftDetailDTO getChangeAbleAirDetailDTO(String deviceIotId)
|
private AircraftDetailDTO getChangeAbleAirDetailDTO(String deviceIotId)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
AircraftDetailDTO dto = new AircraftDetailDTO();
|
||||||
|
AttributeMap attributeMap = thingsBoardDomain.getPredefinedDeviceAttributes(deviceIotId);
|
||||||
|
TelemetryMap telemetryMap = thingsBoardDomain.getPredefinedDeviceTelemetry(deviceIotId);
|
||||||
|
|
||||||
return null;
|
//设置aircraftStatus
|
||||||
|
// drone_in_dock 表示是否在舱外
|
||||||
|
// device_online_status 表示是否开机
|
||||||
|
// 先判断机场的状态是否是
|
||||||
|
// 任务中 和 调试, 这两个状态用机场的, 暂时不要用离线状态
|
||||||
|
//
|
||||||
|
|
||||||
|
String aircraftStatus = determineAircraftStatus(attributeMap, telemetryMap);
|
||||||
|
dto.setAircraftStatus(aircraftStatus);
|
||||||
|
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据设备属性和遥测数据确定无人机状态
|
||||||
|
*
|
||||||
|
* @param attributeMap 设备属性映射
|
||||||
|
* @param telemetryMap 设备遥测数据映射
|
||||||
|
* @return 无人机状态字符串
|
||||||
|
*/
|
||||||
|
private String determineAircraftStatus(AttributeMap attributeMap, TelemetryMap telemetryMap) {
|
||||||
|
// 先检查 MODE_CODE,判断是否处于任务中或调试状态
|
||||||
|
// MODE_CODE 定义: {"0":"待机","1":"起飞准备","2":"起飞准备完毕","3":"手动飞行","4":"自动起飞",
|
||||||
|
// "5":"航线飞行","6":"全景拍照","7":"智能跟随","8":"ADS-B 躲避","9":"自动返航",
|
||||||
|
// "10":"自动降落","11":"强制降落","12":"三桨叶降落","13":"升级中","14":"未连接",
|
||||||
|
// "15":"APAS","16":"虚拟摇杆状态","17":"指令飞行","18":"空中 RTK 收敛模式",
|
||||||
|
// "19":"机场选址中","20":"POI环绕"}
|
||||||
|
Integer modeCode = attributeMap.get(DeviceAttributes.MODE_CODE).orElse(null);
|
||||||
|
|
||||||
|
if (modeCode != null) {
|
||||||
|
// 14 = 未连接,直接返回离线状态
|
||||||
|
if (modeCode == 14) {
|
||||||
|
return AircraftStatusEnum.OFFLINE.getCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否在任务中 (飞行相关状态: 1-12, 15-20)
|
||||||
|
if (modeCode >= 1 && modeCode <= 12 || modeCode >= 15 && modeCode <= 20) {
|
||||||
|
return AircraftStatusEnum.IN_MISSION.getCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取无人机是否在舱内: {"0":"舱外","1":"舱内"}
|
||||||
|
Integer droneInDock = telemetryMap.get(DeviceTelemetry.Drone_In_Dock)
|
||||||
|
.map(telemetryValue -> telemetryValue.getValue())
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
|
// 获取无人机是否开机: {"0":"关机","1":"开机"}
|
||||||
|
Integer deviceOnlineStatus = telemetryMap.get(DeviceTelemetry.Sub_Device_Online_Status)
|
||||||
|
.map(telemetryValue -> telemetryValue.getValue())
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
|
// 根据舱内/舱外和开机/关机状态确定无人机状态
|
||||||
|
boolean isInCabin = droneInDock != null && droneInDock == 1;
|
||||||
|
boolean isPowerOn = deviceOnlineStatus != null && deviceOnlineStatus == 1;
|
||||||
|
|
||||||
|
if (isInCabin) {
|
||||||
|
// 舱内
|
||||||
|
if (isPowerOn) {
|
||||||
|
return AircraftStatusEnum.POWER_ON_IN_CABIN.getCode();
|
||||||
|
} else {
|
||||||
|
return AircraftStatusEnum.POWER_OFF_IN_CABIN.getCode();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 舱外
|
||||||
|
if (isPowerOn) {
|
||||||
|
return AircraftStatusEnum.POWER_ON_OUT_CABIN.getCode();
|
||||||
|
} else {
|
||||||
|
return AircraftStatusEnum.POWER_OFF_OUT_CABIN.getCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue