128 lines
3.7 KiB
Java
128 lines
3.7 KiB
Java
package com.ruoyi.device.service.impl;
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
import com.ruoyi.device.domain.api.IDeviceDomain;
|
|
import com.ruoyi.device.domain.api.IDockDomain;
|
|
import com.ruoyi.device.domain.api.IAircraftDomain;
|
|
import com.ruoyi.device.domain.api.IThingsBoardDomain;
|
|
import com.ruoyi.device.domain.model.Device;
|
|
import com.ruoyi.device.domain.model.Dock;
|
|
import com.ruoyi.device.domain.model.thingsboard.AttributeMap;
|
|
import com.ruoyi.device.domain.model.thingsboard.TelemetryMap;
|
|
import com.ruoyi.device.domain.model.thingsboard.constants.DeviceAttributes;
|
|
import com.ruoyi.device.service.api.IBufferDeviceService;
|
|
import com.ruoyi.device.service.dto.AircraftDetailDTO;
|
|
import com.ruoyi.device.service.dto.DockDetailDTO;
|
|
import com.ruoyi.device.service.enums.DockStatusEnum;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* 设备缓冲服务实现
|
|
* 整合数据库数据和ThingsBoard数据
|
|
*
|
|
* @author ruoyi
|
|
* @date 2026-01-20
|
|
*/
|
|
@Service
|
|
@Slf4j
|
|
public class BufferDeviceImpl implements IBufferDeviceService
|
|
{
|
|
@Autowired
|
|
private IDockDomain dockDomain;
|
|
|
|
@Autowired
|
|
private IDeviceDomain deviceDomain;
|
|
|
|
@Autowired
|
|
private IAircraftDomain aircraftDomain;
|
|
|
|
@Autowired
|
|
private IThingsBoardDomain thingsBoardDomain;
|
|
|
|
@Override
|
|
public DockDetailDTO getDockDetailById(Long dockId)
|
|
{
|
|
|
|
Dock dock = dockDomain.selectDockByDockId(dockId);
|
|
log.info("selectDockByDockId {}",JSON.toJSONString(dock));
|
|
if (dock == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
Device device = deviceDomain.selectDeviceByDeviceId(dock.getDeviceId());
|
|
log.info("selectDeviceByDeviceId {}",JSON.toJSONString(device));
|
|
|
|
|
|
DockDetailDTO dto = getChangeAbleDockDetailDTO(device.getIotDeviceId());
|
|
dto.setDockId(dock.getDockId());
|
|
dto.setDockName(dock.getDockName());
|
|
dto.setDockLocation(dock.getDockLocation());
|
|
dto.setDockIotId(device.getIotDeviceId());
|
|
return dto;
|
|
|
|
|
|
}
|
|
|
|
@Override
|
|
public AircraftDetailDTO getAircraftDetailById(Long aircraftId)
|
|
{
|
|
|
|
return null;
|
|
}
|
|
|
|
|
|
|
|
private DockDetailDTO getChangeAbleDockDetailDTO(String deviceIotId)
|
|
{
|
|
DockDetailDTO dto = new DockDetailDTO();
|
|
AttributeMap attributeMap = thingsBoardDomain.getPredefinedDeviceAttributes(deviceIotId);
|
|
TelemetryMap telemetryMap = thingsBoardDomain.getPredefinedDeviceTelemetry(deviceIotId);
|
|
|
|
// 根据 MODE_CODE 设置机场状态
|
|
// MODE_CODE 定义: {"0":"空闲中","1":"现场调试","2":"远程调试","3":"固件升级中","4":"作业中","5":"待标定"}
|
|
attributeMap.get(DeviceAttributes.MODE_CODE).ifPresent(modeCode -> {
|
|
String dockStatus = mapModeCodeToDockStatus(modeCode);
|
|
dto.setDockStatus(dockStatus);
|
|
});
|
|
|
|
return dto;
|
|
}
|
|
|
|
/**
|
|
* 将 MODE_CODE 映射到机场状态
|
|
* @param modeCode 模式代码
|
|
* @return 机场状态字符串
|
|
*/
|
|
private String mapModeCodeToDockStatus(Integer modeCode) {
|
|
switch (modeCode) {
|
|
case 0:
|
|
return DockStatusEnum.IDLE.getCode();
|
|
case 1:
|
|
case 2:
|
|
return DockStatusEnum.Debugging.getCode();
|
|
case 3:
|
|
return DockStatusEnum.FIRMWARE_UPGRADING.getCode();
|
|
case 4:
|
|
return DockStatusEnum.WORKING.getCode();
|
|
case 5:
|
|
default:
|
|
return DockStatusEnum.UNKNOWN.getCode();
|
|
}
|
|
}
|
|
|
|
private AircraftDetailDTO getChangeAbleAirDetailDTO(String deviceIotId)
|
|
{
|
|
|
|
|
|
return null;
|
|
}
|
|
|
|
}
|