package com.ard.sample.manage.service.impl;
|
|
import com.ard.sample.component.mqtt.model.CommonTopicReceiver;
|
import com.ard.sample.component.websocket.config.ConcurrentWebSocketSession;
|
import com.ard.sample.component.websocket.enums.MessageType;
|
import com.ard.sample.component.websocket.handler.DockWebSocketHandler;
|
import com.ard.sample.component.websocket.model.BizCodeEnum;
|
import com.ard.sample.component.websocket.model.CustomWebSocketMessage;
|
import com.ard.sample.manage.model.dto.DeviceDTO;
|
import com.ard.sample.manage.model.dto.TelemetryDTO;
|
import com.ard.sample.manage.model.enums.DeviceDomainEnum;
|
import com.ard.sample.manage.model.receiver.OsdDockReceiver;
|
import com.ard.sample.manage.service.IDeviceService;
|
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Collection;
|
|
/**
|
* @author sean
|
* @version 1.0
|
* @date 2022/5/11
|
*/
|
@Service
|
public class DockOSDServiceImpl extends AbstractTSAService {
|
|
@Autowired
|
private DockWebSocketHandler _dockWebSocketHandler;
|
|
@Autowired
|
private IDeviceService _deviceService;
|
|
public DockOSDServiceImpl() {
|
super(null);
|
}
|
|
|
|
@Override
|
public void pushTelemetryData(Collection<ConcurrentWebSocketSession> sessions,
|
CustomWebSocketMessage<TelemetryDTO> message, Object Object) {
|
|
}
|
|
@Override
|
public void handleOSD(CommonTopicReceiver receiver, DeviceDTO device,
|
Collection<ConcurrentWebSocketSession> webSessions,
|
CustomWebSocketMessage<TelemetryDTO> wsMessage) {
|
|
if (DeviceDomainEnum.DOCK.getVal() == device.getDomain()) {
|
wsMessage.setBizCode(BizCodeEnum.DOCK_OSD.getCode());
|
OsdDockReceiver data = mapper.convertValue(receiver.getData(), OsdDockReceiver.class);
|
receiver.setType(MessageType.STATUS.getType());
|
String dockOsd="";
|
String dockOsdData="";
|
try{
|
dockOsd=mapper.writeValueAsString(receiver);
|
dockOsdData=mapper.writeValueAsString(receiver.getData());
|
if (dockOsdData.contains("flighttask_step_code")) {
|
JsonNode jsonNode = mapper.readTree(dockOsdData);
|
if (jsonNode.has("flighttask_step_code")) {
|
String deviceSn = device.getDeviceSn();
|
Long code = jsonNode.get("flighttask_step_code").asLong();
|
if(code != null) {
|
//只要状态 "0":"作业准备中","1":"飞行作业中","5":"任务空闲"
|
if(code == 0 || code == 1 || code == 5) {
|
_deviceService.updateWorkType(deviceSn,code);
|
}
|
}
|
}
|
|
} else if (dockOsdData.contains("network_state")) {
|
JsonNode jsonNode = mapper.readTree(dockOsdData);
|
if (jsonNode.has("drone_in_dock") && jsonNode.get("sub_device").has("device_online_status")) {
|
String childDeviceSn=jsonNode.get("sub_device").get("device_sn").asText();
|
Long inDock=jsonNode.get("drone_in_dock").asLong();
|
Long deviceOnlineStatus=jsonNode.get("sub_device").get("device_online_status").asLong();
|
if(inDock.equals(1L) && deviceOnlineStatus.equals(0L))
|
{// 飞行器在舱内且关机状态为6
|
_deviceService.updateWorkType(childDeviceSn,6L);
|
}
|
}
|
} else if (dockOsdData.contains("job_number")) {
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
wsMessage.getData().setHost(data);
|
sendMessageService.sendBatch(webSessions, wsMessage);
|
// 发送给websocket客户端
|
_dockWebSocketHandler.sendMessageToSubscribers(device.getDeviceSn(), MessageType.STATUS.getType(), dockOsd);
|
}
|
}
|
}
|