package com.fzzy.gateway.hx2023.service; import com.alibaba.fastjson2.JSONObject; import com.fzzy.gateway.GatewayUtils; import com.fzzy.gateway.api.GatewayRemoteManager; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.hx2023.ScConstant; import com.fzzy.gateway.hx2023.data.CloudSendData; import com.fzzy.gateway.hx2023.data.SyncReqData; import com.fzzy.mqtt.MqttGatewayService; import com.fzzy.mqtt.MqttProviderConfig; import com.fzzy.mqtt.MqttPublishService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * 根据接受到的MQTT信息执行 */ @Slf4j @Component public class OnReceiveMqttService { @Resource private GatewayRemoteManager gatewayRemoteManager; @Resource private MqttGatewayService mqttGatewayService; /** * 当前接收到云端发送信息 * * @param message */ public void onReceiveMessage(String topic,String message) { try { CloudSendData cloudSendData = JSONObject.parseObject(message, CloudSendData.class); String functionId = cloudSendData.getFunctionId(); //粮情采集 if (ScConstant.FUNCTION_getTAndRHInfo.equals(functionId)) { getTAndRHInfo(cloudSendData); } } catch (Exception e) { log.error("--------执行异常-----{}",e); } } private void getTAndRHInfo(CloudSendData cloudSendData) { String deviceId = cloudSendData.getDeviceId(); GatewayDevice device = GatewayUtils.getCacheByDeviceId(deviceId); SyncReqData syncReqData = new SyncReqData(); syncReqData.setDeviceId(deviceId); syncReqData.setMessageId(cloudSendData.getMessageId()); syncReqData.setMessageType(cloudSendData.getMessageType()); syncReqData.setFunctionId(cloudSendData.getFunctionId()); syncReqData.setAutoReplay(true); syncReqData.setDevice(device); BaseResp resp = gatewayRemoteManager.getSyncGrainService(device.getSyncProtocol()).syncGrain2(syncReqData); //自动推送 if (200 == resp.getCode() && syncReqData.isAutoReplay()) { String topic = ScConstant.TOPIC_REPORT; topic = topic.replace("${productId}", device.getProductId()).replace("${deviceId}", device.getDeviceId()); mqttGatewayService.publishMqttWithTopic(resp.getData(), topic); log.info("----------------------------推送MQTT信息---------------------------"); log.info("-----TOPIC-----{}",topic); log.info("-----Message-----{}",resp.getData()); } } }