2026-01-28 14:13:45 +08:00
|
|
|
package com.ruoyi.device.service.impl;
|
|
|
|
|
|
2026-01-28 16:39:35 +08:00
|
|
|
import com.ruoyi.device.domain.api.IAircraftDomain;
|
|
|
|
|
import com.ruoyi.device.domain.api.IDeviceDomain;
|
|
|
|
|
import com.ruoyi.device.domain.api.IDockAircraftDomain;
|
|
|
|
|
import com.ruoyi.device.domain.api.IDockDomain;
|
|
|
|
|
import com.ruoyi.device.domain.impl.DockDomainImpl;
|
2026-01-28 14:13:45 +08:00
|
|
|
import com.ruoyi.device.domain.impl.djimqtt.callback.IDockDataCallback;
|
|
|
|
|
import com.ruoyi.device.domain.impl.djimqtt.callback.IDroneDataCallback;
|
|
|
|
|
import com.ruoyi.device.domain.impl.djimqtt.config.DjiMqttClientConfig;
|
|
|
|
|
import com.ruoyi.device.service.config.DjiMqttProperties;
|
|
|
|
|
import com.ruoyi.device.domain.impl.djimqtt.handler.DjiMqttMessageHandler;
|
|
|
|
|
import com.ruoyi.device.domain.impl.djimqtt.manager.DjiMqttClientManager;
|
|
|
|
|
import com.ruoyi.device.domain.impl.djimqtt.model.DockData;
|
|
|
|
|
import com.ruoyi.device.domain.impl.djimqtt.model.DroneData;
|
2026-01-28 16:39:35 +08:00
|
|
|
import com.ruoyi.device.domain.model.Aircraft;
|
|
|
|
|
import com.ruoyi.device.domain.model.Device;
|
|
|
|
|
import com.ruoyi.device.domain.model.Dock;
|
|
|
|
|
import com.ruoyi.device.domain.model.DockAircraft;
|
2026-01-28 14:13:45 +08:00
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
|
|
|
|
import org.springframework.context.event.EventListener;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
2026-01-28 16:39:35 +08:00
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
2026-01-29 11:35:20 +08:00
|
|
|
import java.util.Objects;
|
2026-01-28 14:13:45 +08:00
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class DjiService {
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private DjiMqttClientManager clientManager;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private DjiMqttProperties mqttProperties;
|
|
|
|
|
|
2026-01-28 16:39:35 +08:00
|
|
|
@Autowired
|
|
|
|
|
private IDockDomain dockDomain;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IDeviceDomain deviceDomain;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IAircraftDomain aircraftDomain;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IDockAircraftDomain dockAircraftDomain;
|
|
|
|
|
|
2026-01-28 14:13:45 +08:00
|
|
|
@EventListener(ApplicationReadyEvent.class)
|
|
|
|
|
public void onApplicationReady() {
|
|
|
|
|
|
|
|
|
|
// 从配置文件读取配置
|
|
|
|
|
DjiMqttClientConfig config = DjiMqttClientConfig.builder()
|
|
|
|
|
.host(mqttProperties.getHost())
|
|
|
|
|
.port(mqttProperties.getPort())
|
|
|
|
|
.clientId(mqttProperties.getClientId())
|
|
|
|
|
.username(mqttProperties.getUsername())
|
|
|
|
|
.password(mqttProperties.getPassword())
|
|
|
|
|
.connectionTimeout(mqttProperties.getConnectionTimeout())
|
|
|
|
|
.keepAliveInterval(mqttProperties.getKeepAliveInterval())
|
|
|
|
|
.autoReconnect(mqttProperties.getAutoReconnect())
|
|
|
|
|
.cleanSession(mqttProperties.getCleanSession())
|
|
|
|
|
.useSharedSubscription(true)
|
|
|
|
|
.sharedGroupName("dji-group")
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
// 创建客户端
|
|
|
|
|
String clientId = clientManager.createClient(config);
|
|
|
|
|
|
|
|
|
|
// 获取消息处理器
|
|
|
|
|
DjiMqttMessageHandler handler = clientManager.getHandler(clientId);
|
|
|
|
|
|
|
|
|
|
// 注册无人机数据回调
|
|
|
|
|
handler.registerDroneDataCallback(new IDroneDataCallback() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onDroneData(DroneData droneData) {
|
2026-01-30 14:35:27 +08:00
|
|
|
log.info("droneData:{}", droneData);
|
2026-01-28 16:39:35 +08:00
|
|
|
// 更新 Dock 表的 lastActiveTime
|
2026-01-29 11:35:20 +08:00
|
|
|
Device device = deviceDomain.selectDeviceByDeviceSn(droneData.getDeviceSn());
|
|
|
|
|
if(Objects.nonNull(device)) {
|
|
|
|
|
Aircraft aircraft = aircraftDomain.selectAircraftByDeviceId(device.getDeviceId());
|
|
|
|
|
if(Objects.nonNull(aircraft)) {
|
|
|
|
|
List<DockAircraft> aircrafts = dockAircraftDomain.selectDockAircraftByAircraftId(aircraft.getAircraftId());
|
|
|
|
|
if(!aircrafts.isEmpty()) {
|
|
|
|
|
for(DockAircraft dockAircraft : aircrafts) {
|
|
|
|
|
Dock dock = dockDomain.selectDockByDockId(dockAircraft.getDockId());
|
|
|
|
|
if(Objects.nonNull(dock)) {
|
|
|
|
|
dock.setLastActiveTime(new Date());
|
|
|
|
|
dockDomain.updateDock(dock);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
2026-01-28 14:13:45 +08:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 注册机场数据回调
|
|
|
|
|
handler.registerDockDataCallback(new IDockDataCallback() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onDockData(DockData dockData) {
|
2026-01-28 15:11:06 +08:00
|
|
|
// log.info("droneData:{}", dockData);
|
2026-01-28 14:13:45 +08:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
log.info("客户端已创建并注册回调");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|