a-tuoheng-device/src/main/java/com/ruoyi/device/service/impl/BufferDeviceImpl.java

128 lines
3.7 KiB
Java
Raw Normal View History

2026-01-20 14:54:53 +08:00
package com.ruoyi.device.service.impl;
2026-01-21 13:43:27 +08:00
import com.alibaba.fastjson2.JSON;
2026-01-20 17:05:25 +08:00
import com.ruoyi.device.domain.api.IDeviceDomain;
2026-01-20 15:37:54 +08:00
import com.ruoyi.device.domain.api.IDockDomain;
import com.ruoyi.device.domain.api.IAircraftDomain;
import com.ruoyi.device.domain.api.IThingsBoardDomain;
2026-01-20 17:05:25 +08:00
import com.ruoyi.device.domain.model.Device;
2026-01-20 15:37:54 +08:00
import com.ruoyi.device.domain.model.Dock;
2026-01-21 15:37:43 +08:00
import com.ruoyi.device.domain.model.thingsboard.AttributeMap;
import com.ruoyi.device.domain.model.thingsboard.TelemetryMap;
2026-01-21 15:47:50 +08:00
import com.ruoyi.device.domain.model.thingsboard.constants.DeviceAttributes;
2026-01-20 14:54:53 +08:00
import com.ruoyi.device.service.api.IBufferDeviceService;
2026-01-20 15:37:54 +08:00
import com.ruoyi.device.service.dto.AircraftDetailDTO;
import com.ruoyi.device.service.dto.DockDetailDTO;
2026-01-21 15:58:12 +08:00
import com.ruoyi.device.api.enums.DockStatusEnum;
2026-01-21 15:19:55 +08:00
2026-01-21 13:43:27 +08:00
import lombok.extern.slf4j.Slf4j;
2026-01-20 15:37:54 +08:00
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
2026-01-20 14:54:53 +08:00
/**
2026-01-20 15:37:54 +08:00
* 设备缓冲服务实现
* 整合数据库数据和ThingsBoard数据
2026-01-20 14:54:53 +08:00
*
2026-01-20 15:37:54 +08:00
* @author ruoyi
* @date 2026-01-20
2026-01-20 14:54:53 +08:00
*/
2026-01-20 15:37:54 +08:00
@Service
2026-01-21 13:43:27 +08:00
@Slf4j
2026-01-20 15:37:54 +08:00
public class BufferDeviceImpl implements IBufferDeviceService
{
@Autowired
private IDockDomain dockDomain;
2026-01-20 17:05:25 +08:00
@Autowired
private IDeviceDomain deviceDomain;
2026-01-20 15:37:54 +08:00
@Autowired
private IAircraftDomain aircraftDomain;
@Autowired
private IThingsBoardDomain thingsBoardDomain;
@Override
public DockDetailDTO getDockDetailById(Long dockId)
{
2026-01-21 14:16:24 +08:00
2026-01-20 15:37:54 +08:00
Dock dock = dockDomain.selectDockByDockId(dockId);
2026-01-21 14:16:24 +08:00
log.info("selectDockByDockId {}",JSON.toJSONString(dock));
2026-01-20 15:37:54 +08:00
if (dock == null)
{
return null;
}
2026-01-21 14:16:24 +08:00
2026-01-20 17:05:25 +08:00
Device device = deviceDomain.selectDeviceByDeviceId(dock.getDeviceId());
2026-01-21 14:16:24 +08:00
log.info("selectDeviceByDeviceId {}",JSON.toJSONString(device));
2026-01-20 15:37:54 +08:00
2026-01-21 15:16:32 +08:00
DockDetailDTO dto = getChangeAbleDockDetailDTO(device.getIotDeviceId());
dto.setDockId(dock.getDockId());
dto.setDockName(dock.getDockName());
dto.setDockLocation(dock.getDockLocation());
dto.setDockIotId(device.getIotDeviceId());
2026-01-21 15:37:43 +08:00
return dto;
2026-01-21 14:16:24 +08:00
2026-01-20 15:37:54 +08:00
}
@Override
public AircraftDetailDTO getAircraftDetailById(Long aircraftId)
{
2026-01-21 15:16:32 +08:00
return null;
2026-01-20 15:37:54 +08:00
}
2026-01-21 15:16:32 +08:00
private DockDetailDTO getChangeAbleDockDetailDTO(String deviceIotId)
2026-01-20 15:37:54 +08:00
{
2026-01-21 15:37:43 +08:00
DockDetailDTO dto = new DockDetailDTO();
AttributeMap attributeMap = thingsBoardDomain.getPredefinedDeviceAttributes(deviceIotId);
TelemetryMap telemetryMap = thingsBoardDomain.getPredefinedDeviceTelemetry(deviceIotId);
2026-01-20 15:37:54 +08:00
2026-01-21 15:47:50 +08:00
// 根据 MODE_CODE 设置机场状态
// MODE_CODE 定义: {"0":"空闲中","1":"现场调试","2":"远程调试","3":"固件升级中","4":"作业中","5":"待标定"}
attributeMap.get(DeviceAttributes.MODE_CODE).ifPresent(modeCode -> {
String dockStatus = mapModeCodeToDockStatus(modeCode);
dto.setDockStatus(dockStatus);
});
2026-01-21 15:37:43 +08:00
return dto;
2026-01-20 15:37:54 +08:00
}
2026-01-21 15:47:50 +08:00
/**
* 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();
}
}
2026-01-21 15:16:32 +08:00
private AircraftDetailDTO getChangeAbleAirDetailDTO(String deviceIotId)
2026-01-20 15:37:54 +08:00
{
2026-01-21 15:16:32 +08:00
return null;
2026-01-20 15:37:54 +08:00
}
2026-01-21 15:16:32 +08:00
2026-01-20 14:54:53 +08:00
}