package com.fzzy.gateway.hx2023.service; import com.alibaba.fastjson2.JSONObject; import com.fzzy.api.data.GatewayDeviceProtocol; import com.fzzy.gateway.GatewayUtils; import com.fzzy.gateway.api.GatewayRemoteManager; import com.fzzy.gateway.data.BaseReqData; 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 lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * 根据接受到的MQTT信息执行 */ @Slf4j @Component public class OnReceiveMqttService { @Resource private GatewayRemoteManager gatewayRemoteManager; /** * 当前接收到云端发送信息 * * @param message */ public void onReceiveMessage(String topic, String message) { // 这里可以处理接收的数据 log.info("----------------------------收到订阅内容---------------------------"); log.info("-----TOPIC-----{}", topic); log.info("-----Message-----{}", 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); BaseReqData syncReqData = new BaseReqData(); syncReqData.setDeviceId(deviceId); syncReqData.setProductId(device.getProductId()); syncReqData.setDeviceName(device.getDeviceName()); syncReqData.setMessageId(cloudSendData.getMessageId()); syncReqData.setMessageType(cloudSendData.getMessageType()); syncReqData.setFunctionId(cloudSendData.getFunctionId()); syncReqData.setAutoReplay(true); syncReqData.setDevice(device); BaseResp resp; if (GatewayDeviceProtocol.DEVICE_TEST.getCode().equals(device.getSyncProtocol())) { resp = gatewayRemoteManager.getGatewayTestService(device.getPushProtocol()).testGrain(syncReqData); } else { syncReqData.setAutoReplay(false); resp = gatewayRemoteManager.getSyncGrainService(device.getSyncProtocol()).syncGrain(syncReqData); } //自动推送 if (200 == resp.getCode() && syncReqData.isAutoReplay()) { syncReqData.setData(resp.getData()); gatewayRemoteManager.getDeviceReportService(device.getPushProtocol()).reportGrainData(syncReqData); } } }