机场上云-无人机状态上报流程
Spring Integration末端处理点
/**
* osd dock drone
* @param request data
* @param headers The headers for a {@link Message}.
* @return status_reply
*/
@ServiceActivator(inputChannel = ChannelName.INBOUND_OSD_DOCK_DRONE)
public void osdDockDrone(TopicOsdRequest<OsdDockDrone> request, MessageHeaders headers) {
throw new UnsupportedOperationException("osdDockDrone not implemented");
}
实际实现类
@Override
public void osdDockDrone(TopicOsdRequest<OsdDockDrone> request, MessageHeaders headers) {
String from = request.getFrom();
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from);
if (deviceOpt.isEmpty()) {
deviceOpt = deviceService.getDeviceBySn(from);
if (deviceOpt.isEmpty()) {
log.error("Please restart the drone.");
return;
}
}
if (!StringUtils.hasText(deviceOpt.get().getWorkspaceId())) {
log.error("Please restart the drone.");
}
DeviceDTO device = deviceOpt.get();
deviceRedisService.setDeviceOnline(device);
deviceRedisService.setDeviceOsd(from, request.getData());
deviceService.pushOsdDataToWeb(device.getWorkspaceId(), BizCodeEnum.DEVICE_OSD, from, request.getData());
}
1. redis中查询是否有缓存,如果没有,根据SN码查询mysql的设备表
2. 将第一步的结果存储到redis中
3.将mqtt传递的data数据缓存到redis中
4.利用websocket将数据发送给前端,结构就是原始的报文结构,参考上云api的osd数据结构