package com.sandu.ximon.admin.manager.iot.amqp.processor; import com.sandu.common.util.SpringContextHolder; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame; import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereNewHeartbeatReportInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5AtmosphereReportEnum; import com.sandu.ximon.admin.service.AirDataNongGengService; import com.sandu.ximon.admin.service.AirDataService; import lombok.extern.slf4j.Slf4j; /** * @author ZZQ * @date 2021/12/14 * 大气数据上报处理 */ @Slf4j public class AirDataProcessor implements IMessageProcessor { private AirDataProcessor() { } public static AirDataProcessor getInstance() { return AirDataProcessorHolder.INSTANCE; } private static class AirDataProcessorHolder { private static final AirDataProcessor INSTANCE = new AirDataProcessor(); } @Override public void process(String productKey, String deviceName, CommonFrame frame) { /** * connectType用于判断主动上报的数据是属于旧大气设备还是农耕大气设备 * 农耕心跳包主动上报系统地址(MQTT请求方式):01 功能码:03 */ String connectType = frame.getPayload().substring(0, 2); String functionCode = frame.getPayload().substring(2, 4); if (A5AtmosphereReportEnum.HeartBeat_Data.getCode().equals(functionCode)) { log.info("心跳相应——大气数据"); A5AtmosphereHeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5AtmosphereHeartbeatReportInnerFrame().transformFrame(frame.getPayload()); if (heartbeatReportInnerFrame != null) { log.info(heartbeatReportInnerFrame.toString()); SpringContextHolder.getBean(AirDataService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage()); } } else if (A5AtmosphereReportEnum.HeartBeat_Data_Nong_Geng.getCode().equals(functionCode) && "01".equals(connectType)) { log.info("心跳相应——大气数据(农耕)"); A5AtmosphereNewHeartbeatReportInnerFrame heartbeatReportInnerFrame = new A5AtmosphereNewHeartbeatReportInnerFrame().transformFrame(frame.getPayload()); if (heartbeatReportInnerFrame != null && heartbeatReportInnerFrame.isValidate()) { if (deviceName.equals("363832544e5008ff8960ffff")) { System.out.println("数据校验成功 frame: " + frame); } log.info("数据校验成功: " + heartbeatReportInnerFrame.toString()); SpringContextHolder.getBean(AirDataNongGengService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage()); } else { System.out.println("数据校验异常!"); } } } }