package com.ard.sample.component.mqtt.handler; import com.ard.sample.component.mqtt.model.CommonTopicReceiver; import com.ard.sample.component.mqtt.model.StateDataEnum; import com.ard.sample.component.websocket.enums.MessageType; import com.ard.sample.component.websocket.handler.DockWebSocketHandler; import com.ard.sample.manage.model.dto.DeviceDTO; import com.ard.sample.manage.model.param.DeviceQueryParam; import com.ard.sample.manage.model.receiver.LiveCapacityReceiver; import com.ard.sample.manage.model.receiver.LiveStatusTwoReceiver; import com.ard.sample.manage.service.IDeviceService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; @Service @Slf4j public class StateLiveStatusHandler extends AbstractStateTopicHandler{ @Autowired private DockWebSocketHandler _dockWebSocketHandler; @Autowired private IDeviceService _deviceService; protected StateLiveStatusHandler(@Autowired @Qualifier("stateFirmwareVersionHandler")AbstractStateTopicHandler handler) { super(handler); } @Override public CommonTopicReceiver handleState(Map dataNode, CommonTopicReceiver stateReceiver, String sn) throws JsonProcessingException { if (dataNode.containsKey(StateDataEnum.LIVESTATUS.getDesc())) { stateReceiver.setType(MessageType.LIVESTATUS.getType()); String deviceSn= stateReceiver.getGateway(); DeviceQueryParam param = DeviceQueryParam.builder().deviceSn(deviceSn).build(); List deviceDTOS = _deviceService.getDevicesByParams(param); // List gatewaysList = _deviceService.getDevicesByParams(DeviceQueryParam.builder().childSn(deviceSn).build()); String childSn = deviceDTOS.get(0).getChildDeviceSn(); List list = mapper.convertValue(dataNode.get(StateDataEnum.LIVESTATUS.getDesc()), new TypeReference>() {}); for (LiveStatusTwoReceiver receiver : list) { if(receiver.getVideoId().contains(childSn)){ stateReceiver.setData(receiver); continue; } } stateReceiver.setGateway(childSn); String liveStatus = ""; try{ liveStatus=mapper.writeValueAsString(stateReceiver); } catch (Exception e){ log.error("接收state直播设备状态反馈转换异常:{}",e); } _deviceService.setChildRedisCamera(childSn, liveStatus); log.info("接收state直播设备状态反馈:{}",liveStatus); return stateReceiver; } return handler.handleState(dataNode, stateReceiver, sn); } }