2021与蓝度共同重构项目,服务端
liuhaonan
2022-08-02 74a6454275dc8539b0369b67e7914633d47a9253
Merge remote-tracking branch 'origin/master'
已修改8个文件
已添加5个文件
已重命名2个文件
已复制4个文件
829 ■■■■ 文件已修改
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataNongGengController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirEquipmentController.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartBeatTimeReportInnerFrame.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereOperationReportInnerFrame.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQuerySensorInfoReportInnerFrame.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQueryVersionReportInnerFrame.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereHeartBeatReqInnerFrame.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereNewReqInnerFrame.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryHeartBeatTimeReqInnerFrame.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQuerySensorInfoReqInnerFrame.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryVersionReqInnerFrame.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereRebootReqInnerFrame.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereSetHeartBeatTimeReqInnerFrame.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirEquipmentService.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataController.java
@@ -3,26 +3,20 @@
import com.sandu.common.domain.CommonPage;
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.security.annotation.AnonymousAccess;
import com.sandu.common.util.ResponseUtil;
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.manager.iot.amqp.processor.AirDataProcessor;
import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.AirDataReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.AtmosphereHeartBeatReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode;
import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
import com.sandu.ximon.admin.security.PermissionConfig;
import com.sandu.ximon.admin.service.AirDataService;
import com.sandu.ximon.admin.service.PoleBindingService;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
import com.sandu.ximon.dao.bo.AirDataBo;
import com.sandu.ximon.dao.domain.Pole;
import com.sandu.ximon.dao.enums.MenuEnum;
import com.sandu.ximon.dao.enums.PoleBindingEnums;
import com.sandu.ximon.dao.mapper.PoleBindingMapper;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
@@ -77,7 +71,7 @@
        if (!permissionConfig.check(MenuEnum.AIR_DATA_UPDATE.getCode())) {
            return ResponseUtil.fail("缺少对应用户权限");
        }
        AirDataReqInnerFrame airDataReqInnerFrame = new AirDataReqInnerFrame();
        AtmosphereHeartBeatReqInnerFrame airDataReqInnerFrame = new AtmosphereHeartBeatReqInnerFrame();
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), airDataReqInnerFrame);
        System.out.println(a5Frame + "          --------a5Frame");
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirDataNongGengController.java
@@ -10,7 +10,7 @@
import com.sandu.common.util.ResponseUtil;
import com.sandu.ximon.admin.manager.iot.amqp.processor.AirDataProcessor;
import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.AirDataNewReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.AtmosphereNewReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
@@ -39,8 +39,8 @@
    @PostMapping("/updateAirEquipmentInfo")
    public ResponseVO<Object> updataAirEquipmentInfo(@RequestBody List<String> listMac) {
        AirDataNewReqInnerFrame airDataNewReqInnerFrame = new AirDataNewReqInnerFrame();
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), airDataNewReqInnerFrame);
        AtmosphereNewReqInnerFrame atmosphereNewReqInnerFrame = new AtmosphereNewReqInnerFrame();
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereNewReqInnerFrame);
        System.out.println(a5Frame + "          --------a5Frame");
        List<String> success = new ArrayList<>();
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/AirEquipmentController.java
@@ -49,4 +49,61 @@
        }
    }
    /**
     * æŸ¥è¯¢å¤§æ°”设备心跳包时间
     *
     * @return
     */
    @GetMapping("/QueryHeartBeatTime")
    public ResponseVO<Object> QueryHeartBeatTime(@RequestParam(value = "mac", required = false) String mac) {
        return ResponseUtil.success(airEquipmentService.QueryHeartBeatTime(mac));
    }
    /**
     * è®¾ç½®å¿ƒè·³åŒ…间隔时间
     *
     * @param mac
     * @param time
     * @return
     */
    @GetMapping("/setHeartBeatTime")
    public ResponseVO<Object> setHeartBeatTime(@RequestParam(value = "mac", required = false) String mac,
                                               @RequestParam(value = "time", required = false) Integer time) {
        return ResponseUtil.success(airEquipmentService.setHeartBeatTime(mac, time));
    }
    /**
     * æŸ¥è¯¢ä¼ æ„Ÿå™¨æ•°é‡/故障
     *
     * @param mac
     * @return
     */
    @GetMapping("/QuerySensorInfo")
    public ResponseVO<Object> QuerySensorInfo(@RequestParam(value = "mac", required = false) String mac) {
        return ResponseUtil.success(airEquipmentService.QuerySensorInfo(mac));
    }
    /**
     * æŸ¥è¯¢è½¯ç¡¬ä»¶ç‰ˆæœ¬
     *
     * @param mac
     * @return
     */
    @GetMapping("/QueryVersion")
    public ResponseVO<Object> QueryVersion(@RequestParam(value = "mac", required = false) String mac) {
        airEquipmentService.QueryVersion(mac);
        return ResponseUtil.success(null);
    }
    /**
     * è½¯é‡å¯
     *
     * @param mac
     * @return
     */
    @GetMapping("/Reboot")
    public ResponseVO<Object> Reboot(@RequestParam(value = "mac", required = false) String mac) {
        return ResponseUtil.success(airEquipmentService.Reboot(mac));
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartBeatTimeReportInnerFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.sandu.ximon.admin.manager.iot.frame.inner.report;
import cn.hutool.core.util.StrUtil;
import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
import lombok.Data;
import lombok.ToString;
/**
 * å¤§æ°”设备心跳包间隔时间
 *
 * @author ZZQ
 * @date 2022/8/1 10:17
 */
//FEA584000C    FE  02  0004  FFFF  003C  B081260C    CC1C105D
@Data
@ToString(callSuper = true)
public class A5AtmosphereHeartBeatTimeReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereHeartBeatTimeReportInnerFrame> {
    //间隔时间
    private int intervalTime;
    //设备地址
    private String deviceAddress;
    @Override
    public A5AtmosphereHeartBeatTimeReportInnerFrame transformFrame(String hex) {
        //  é•¿åº¦ä¸ä¸€è‡´æ—¶ï¼Œè¿”回null
        if (StrUtil.isBlank(hex) || hex.length() != 24) {
            System.out.println("数据校验异常!");
            return null;
        }
        // MQTT通信方式(1)
        setConnectType(hex.substring(0, 2));
        //  åŠŸèƒ½ç (1)
        setFunctionCode(hex.substring(2, 4));
        //  è´Ÿè·é•¿åº¦(2)
        setPayloadLength(hex.substring(4, 8));
        //设备地址
        setDeviceAddress(hex.substring(8, 12));
        //心跳包间隔时间
        setIntervalTime(Integer.parseInt(hex.substring(12, 16), 16));
        setCrc32(hex.substring(hex.length() - 8));
        //  æ ¡éªŒCRC32
        String frame = hex.substring(2, hex.length() - 8);
        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
        return this;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereHeartbeatReportInnerFrame.java
@@ -70,21 +70,24 @@
        //  å…‰å¼º
        private Integer lightIntensity;
        //  å™ªéŸ³
        private Integer noise;
        private Double noise;
        //  PM2.5
        private Integer pm25;
        //  PM10
        private Integer pm10;
        //  æ€»æ‚¬æµ®é¢—粒物(TSP)
        private Integer tsp;
        //  SO2二氧化硫/甲醛相对值
        //  é›¨é‡
        private Double rainfall;
        //  SO2二氧化硫相对值
        private Integer so2;
        //  ç”²é†›ç›¸å¯¹å€¼
        private Integer ech2o;
        //  NO2二氧化氮/TVOC
        //  NO2二氧化氮
        private Integer no2;
        //  TVOC
        private Integer tvoc;
        //  CO一氧化碳 /二氧化碳
        //  CO一氧化碳
        private Integer co;
        //  äºŒæ°§åŒ–碳
        private Integer co2;
        //  O3臭氧
        private Integer o3;
@@ -116,10 +119,10 @@
            this.windDirection = parseVal(hex, 18, 22) * .1;
            this.pressure = parseVal(hex, 22, 26);
            this.lightIntensity = parseVal(hex, 26, 32);
            this.noise = parseVal(hex, 32, 36);
            this.noise = parseVal(hex, 32, 36) * .1;
            this.pm25 = parseVal(hex, 36, 40);
            this.pm10 = parseVal(hex, 40, 44);
            this.tsp = parseVal(hex, 44, 48);
            this.rainfall = parseVal(hex, 44, 48) * .1;
            /**
             * ä»¥ä¸‹åŒºåˆ†ç‰ˆæœ¬
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereOperationReportInnerFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.sandu.ximon.admin.manager.iot.frame.inner.report;
import cn.hutool.core.util.StrUtil;
import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
import lombok.Data;
import lombok.ToString;
/**
 * @author ZZQ
 * @date 2022/3/14 16:36
 * å¤§æ°”操作指令响应帧
 */
@Data
@ToString(callSuper = true)
public class A5AtmosphereOperationReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereOperationReportInnerFrame> {
    //MAC地址
    private String mac;
    private String state;
    @Override
    public A5AtmosphereOperationReportInnerFrame transformFrame(String hex) {        //  é•¿åº¦ä¸ä¸€è‡´æ—¶ï¼Œè¿”回null
        if (StrUtil.isBlank(hex)) {
            return null;
        }
        // MQTT通信方式(1)
        setConnectType(hex.substring(0, 2));
        //  åŠŸèƒ½ç (1)
        setFunctionCode(hex.substring(2, 4));
        //  è´Ÿè·é•¿åº¦(2)
        setPayloadLength(hex.substring(4, 8));
        //MAC地址
        setMac(hex.substring(8, 12));
        //硬件交互响应结果
        setState(returnState(hex.substring(12, 14)));
        setCrc32(hex.substring(hex.length() - 8));
        //  æ ¡éªŒCRC32
        String frame = hex.substring(2, hex.length() - 8);
        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
        return this;
    }
    public String returnState(String stateCode) {
        String State = "";
        switch (stateCode) {
            case "00":
                State = "操作成功";
                break;
            case "01":
                State = "校验码错误";
                break;
            case "02":
                State = "长度错误";
                break;
            case "03":
                State = "写Flash失败错误";
                break;
            case "FF":
                State = "其他错误";
                break;
            default:
                State = "未知错误";
        }
        return State;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQuerySensorInfoReportInnerFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
package com.sandu.ximon.admin.manager.iot.frame.inner.report;
import cn.hutool.core.util.StrUtil;
import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.IResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
import lombok.Data;
/**
 * æŸ¥è¯¢ä¼ æ„Ÿå™¨æ•°é‡/故障
 *
 * @author ZZQ
 * @date 2022/8/1 14:02
 */
@Data
public class A5AtmosphereQuerySensorInfoReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereQuerySensorInfoReportInnerFrame> {
    //设备地址
    private String deviceAddress;
    //传感器信息
    private SensorInfoPackage sensorInfoPackage;
    @Override
    public A5AtmosphereQuerySensorInfoReportInnerFrame transformFrame(String hex) {
        if (StrUtil.isBlank(hex) || hex.length() != 100) {
            return null;
        }
        // MQTT通信方式(1)
        setConnectType(hex.substring(0, 2));
        //  åŠŸèƒ½ç (1)
        setFunctionCode(hex.substring(2, 4));
        //  è´Ÿè·é•¿åº¦(2)
        setPayloadLength(hex.substring(4, 8));
        //设备地址
        setDeviceAddress(hex.substring(8, 12));
        //传感器信息
        String infoStr = hex.substring(14, hex.length() - 8);
        SensorInfoPackage sensorInfoPackage = new SensorInfoPackage().transformFrame(infoStr);
        setSensorInfoPackage(sensorInfoPackage);
        //校验
        setCrc32(hex.substring(hex.length() - 8));
        //  æ ¡éªŒCRC32
        String frame = hex.substring(2, hex.length() - 8);
        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
        return this;
    }
    @Data
    public static class SensorInfoPackage implements IResponseInnerFrame<SensorInfoPackage> {
        //  æ¸©åº¦å€¼
        private String temperature;
        //  æ¹¿åº¦å€¼
        private String humidity;
        //  é£Žé€Ÿ
        private String windSpeed;
        //  é£Žå‘
        private String windDirection;
        //  é£ŽåŠ›
        private String windPower;
        //  å¤§æ°”压
        private String pressure;
        //  å…‰å¼º
        private String lightIntensity;
        //  å™ªéŸ³
        private String noise;
        //  PM2.5
        private String pm25;
        //  PM10
        private String pm10;
        //  æ€»æ‚¬æµ®é¢—粒物(TSP)
        private String tsp;
        //  é›¨é‡
        private String rainfall;
        //  ç”²é†›
        private String ech2o;
        //  TVOC
        private String tvoc;
        //  äºŒæ°§åŒ–碳
        private String co2;
        //  SO2二氧化硫相对值
        private String so2;
        //  NO2二氧化氮
        private String no2;
        //  CO一氧化碳
        private String co;
        //  O3臭氧
        private String o3;
        //  F氟化物
        private String fluoride;
        @Override
        public SensorInfoPackage transformFrame(String hex) {
            if (StrUtil.isBlank(hex) || hex.length() != 80) {
                System.out.println("数据校验异常!");
                return null;
            }
            //  æ¸©åº¦
            setTemperature(hex.substring(2, 4));
            //  æ¹¿åº¦
            setHumidity(hex.substring(6, 8));
            //  é£Žé€Ÿ
            setWindSpeed(hex.substring(10, 12));
            //  é£Žå‘
            setWindDirection(hex.substring(14, 16));
            //  é£ŽåŠ›
            setWindPower(hex.substring(18, 20));
            //  å¤§æ°”压
            setPressure(hex.substring(22, 24));
            //  å…‰å¼º
            setLightIntensity(hex.substring(26, 28));
            //  å™ªéŸ³
            setNoise(hex.substring(30, 32));
            //  PM2.5
            setPm25(hex.substring(34, 36));
            //  PM10
            setPm10(hex.substring(38, 40));
            //  æ€»æ‚¬æµ®é¢—粒物(TSP)
            setTsp(hex.substring(42, 44));
            //  é›¨é‡
            setRainfall(hex.substring(46, 48));
            //  ç”²é†›
            setEch2o(hex.substring(50, 52));
            //  TVOC
            setTvoc(hex.substring(54, 56));
            //  äºŒæ°§åŒ–碳
            setCo2(hex.substring(58, 60));
            //  SO2二氧化硫相对值
            setSo2(hex.substring(62, 64));
            //  NO2二氧化氮
            setNo2(hex.substring(66, 68));
            //  CO一氧化碳
            setCo(hex.substring(70, 72));
            //  O3臭氧
            setO3(hex.substring(74, 76));
            //  F氟化物
            setFluoride(hex.substring(78, 80));
            return this;
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5AtmosphereQueryVersionReportInnerFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.sandu.ximon.admin.manager.iot.frame.inner.report;
import cn.hutool.core.util.StrUtil;
import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.IResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
import lombok.Data;
/**
 * æŸ¥è¯¢è½¯ç¡¬ä»¶ç‰ˆæœ¬
 *
 * @author ZZQ
 * @date 2022/8/1 14:02
 */
@Data
public class A5AtmosphereQueryVersionReportInnerFrame extends BaseResponseInnerFrame<A5AtmosphereQueryVersionReportInnerFrame> {
    //设备地址
    private String deviceAddress;
    @Override
    public A5AtmosphereQueryVersionReportInnerFrame transformFrame(String hex) {
        if (StrUtil.isBlank(hex) || hex.length() != 100) {
            return null;
        }
        // MQTT通信方式(1)
        setConnectType(hex.substring(0, 2));
        //  åŠŸèƒ½ç (1)
        setFunctionCode(hex.substring(2, 4));
        //  è´Ÿè·é•¿åº¦(2)
        setPayloadLength(hex.substring(4, 8));
        //设备地址
        setDeviceAddress(hex.substring(8, 12));
        //
        //校验
        setCrc32(hex.substring(hex.length() - 8));
        //  æ ¡éªŒCRC32
        String frame = hex.substring(2, hex.length() - 8);
        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
        return this;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/report/A5C3OperationReportInnerFrame.java
@@ -16,31 +16,7 @@
public class A5C3OperationReportInnerFrame extends BaseResponseInnerFrame<A5C3OperationReportInnerFrame> {
    //MAC地址
    private String mac;
    //响应状态
    //        æ•…障码类型表:
    //        1.通信流程超时
    //        2.无电压
    //        3.无电流
    //        4.无功率
    //        5.充电功率过小
    //        6.漏电
    //        7.设备温度过高
    //        8.设备温度过低
    //        9.充电超时(充电功率过小导至充电时间超长)
    //        10.无网络
    //        11.连接主机超时
    //        12.连接服务器超时
    //        13.触摸屏无响应
    //        14.更新写入Flash失败
    //        15.写入EEProm失败
    //        16.市电电压过高警告
    //        17.市电电压过底警告
    //        18.地锁故障(当前为解锁状态,不能锁上)
    //        19.地锁故障(当前为锁上状态,不能解锁)
    //        20.充电口1故障(不能使用)
    //        21.充电口2故障(不能使用)(暂不用)
    //        22. å……电口1无法与车机通讯
    //        23. å……电口2无法与车机通讯(暂不用)
    private String state;
    @Override
@@ -73,74 +49,19 @@
                State = "操作成功";
                break;
            case "01":
                State = "通信流程超时";
                State = "校验码错误";
                break;
            case "02":
                State = "无电压";
                State = "长度错误";
                break;
            case "03":
                State = "无电流";
                State = "写Flash失败错误";
                break;
            case "04":
                State = "无功率";
            case "FF":
                State = "其他错误";
                break;
            case "05":
                State = "充电功率过小";
                break;
            case "06":
                State = "漏电";
                break;
            case "07":
                State = "设备温度过高";
                break;
            case "08":
                State = "设备温度过低";
                break;
            case "09":
                State = "充电超时(充电功率过小导至充电时间超长)";
                break;
            case "10":
                State = "无网络";
                break;
            case "11":
                State = "连接主机超时";
                break;
            case "12":
                State = "连接服务器超时";
                break;
            case "13":
                State = "触摸屏无响应";
                break;
            case "14":
                State = "更新写入Flash失败";
                break;
            case "15":
                State = "写入EEProm失败";
                break;
            case "16":
                State = "市电电压过高警告";
                break;
            case "17":
                State = "市电电压过底警告";
                break;
            case "18":
                State = "地锁故障(当前为解锁状态,不能锁上)";
                break;
            case "19":
                State = "地锁故障(当前为锁上状态,不能解锁)";
                break;
            case "20":
                State = "充电口1故障(不能使用)";
                break;
            case "21":
                State = "充电口2故障(不能使用)(暂不用)";
                break;
            case "22":
                State = "充电口1无法与车机通讯";
                break;
            case "23":
                State = "充电口2无法与车机通讯(暂不用)";
            default:
                State = "未知错误";
        }
        return State;
    }
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereHeartBeatReqInnerFrame.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ÐÞ¸Ä
@@ -11,14 +11,14 @@
 * @Version 1.0
 */
public class AirDataReqInnerFrame implements IRequestInnerFrame {
public class AtmosphereHeartBeatReqInnerFrame implements IRequestInnerFrame {
//    private final String payload;
//    private String payload;
//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
//    private final String payloadLength;
    public AirDataReqInnerFrame() {
    public AtmosphereHeartBeatReqInnerFrame() {
    }
    @Override
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereNewReqInnerFrame.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataNewReqInnerFrame.java ÐÞ¸Ä
@@ -10,14 +10,14 @@
 * @Date 2022/4/24
 */
public class AirDataNewReqInnerFrame implements IRequestInnerFrame {
public class AtmosphereNewReqInnerFrame implements IRequestInnerFrame {
//    private final String payload;
//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
//    private final String payloadLength;
    public AirDataNewReqInnerFrame() {
    public AtmosphereNewReqInnerFrame() {
    }
    @Override
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryHeartBeatTimeReqInnerFrame.java
copy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryHeartBeatTimeReqInnerFrame.java
Îļþ´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ¸´ÖÆ
@@ -6,28 +6,18 @@
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
/**
 * @Author liuhaonan
 * @Date 2022/2/15 11:07
 * @Version 1.0
 * æŸ¥è¯¢å¤§æ°”设备心跳包时间
 *
 * @author ZZQ
 * @date 2022/7/29 15:47
 */
public class AirDataReqInnerFrame implements IRequestInnerFrame {
//    private final String payload;
//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
//    private final String payloadLength;
    public AirDataReqInnerFrame() {
    }
public class AtmosphereQueryHeartBeatTimeReqInnerFrame implements IRequestInnerFrame {
    @Override
    public String getEncodeFrame() {
        String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode();
        String functionCode = AtmoFunctionCode.QueryHeartBeatTime.getCode();
        String payloadLength = "0002";
        String payload = "FFFF";
        String frame = functionCode + payloadLength + payload;
        return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQuerySensorInfoReqInnerFrame.java
copy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQuerySensorInfoReqInnerFrame.java
Îļþ´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ¸´ÖÆ
@@ -6,28 +6,18 @@
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
/**
 * @Author liuhaonan
 * @Date 2022/2/15 11:07
 * @Version 1.0
 * æŸ¥è¯¢ä¼ æ„Ÿå™¨æ•°é‡/故障
 *
 * @author ZZQ
 * @date 2022/8/1 10:01
 */
public class AirDataReqInnerFrame implements IRequestInnerFrame {
//    private final String payload;
//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
//    private final String payloadLength;
    public AirDataReqInnerFrame() {
    }
public class AtmosphereQuerySensorInfoReqInnerFrame implements IRequestInnerFrame {
    @Override
    public String getEncodeFrame() {
        String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode();
        String functionCode = AtmoFunctionCode.QuerySensorInfo.getCode();
        String payloadLength = "0002";
        String payload = "FFFF";
        String frame = functionCode + payloadLength + payload;
        return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryVersionReqInnerFrame.java
copy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereQueryVersionReqInnerFrame.java
Îļþ´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ¸´ÖÆ
@@ -6,28 +6,18 @@
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
/**
 * @Author liuhaonan
 * @Date 2022/2/15 11:07
 * @Version 1.0
 * æŸ¥è¯¢å¤§æ°”设备软硬件版本
 *
 * @author ZZQ
 * @date 2022/8/1 10:03
 */
public class AirDataReqInnerFrame implements IRequestInnerFrame {
//    private final String payload;
//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
//    private final String payloadLength;
    public AirDataReqInnerFrame() {
    }
public class AtmosphereQueryVersionReqInnerFrame implements IRequestInnerFrame {
    @Override
    public String getEncodeFrame() {
        String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode();
        String functionCode = AtmoFunctionCode.QueryVersion.getCode();
        String payloadLength = "0002";
        String payload = "FFFF";
        String frame = functionCode + payloadLength + payload;
        return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereRebootReqInnerFrame.java
copy from ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java copy to ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereRebootReqInnerFrame.java
Îļþ´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AirDataReqInnerFrame.java ¸´ÖÆ
@@ -6,28 +6,18 @@
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
/**
 * @Author liuhaonan
 * @Date 2022/2/15 11:07
 * @Version 1.0
 * å¤§æ°”设备软重启
 *
 * @author ZZQ
 * @date 2022/7/29 15:47
 */
public class AirDataReqInnerFrame implements IRequestInnerFrame {
//    private final String payload;
//    private final String functionCode = DataTransportOrderType.LightTimer.getCode();
//    private final String payloadLength;
    public AirDataReqInnerFrame() {
    }
public class AtmosphereRebootReqInnerFrame implements IRequestInnerFrame {
    @Override
    public String getEncodeFrame() {
        String functionCode = AtmoFunctionCode.QueryHeartBeat.getCode();
        String functionCode = AtmoFunctionCode.Reboot.getCode();
        String payloadLength = "0002";
        String payload = "FFFF";
        String frame = functionCode + payloadLength + payload;
        return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereSetHeartBeatTimeReqInnerFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.sandu.ximon.admin.manager.iot.frame.inner.request;
import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
/**
 * æŸ¥è¯¢å¤§æ°”设备心跳包时间
 *
 * @author ZZQ
 * @date 2022/7/29 15:47
 */
public class AtmosphereSetHeartBeatTimeReqInnerFrame implements IRequestInnerFrame {
    private String payload;
    public AtmosphereSetHeartBeatTimeReqInnerFrame(int time) {
        String data = Integer.toHexString(time);
        switch (data.length()) {
            case 1:
                data = "000" + data;
                break;
            case 2:
                data = "00" + data;
                break;
            case 3:
                data = "0" + data;
                break;
            default:
        }
        payload = "FFFF" + data;
    }
    @Override
    public String getEncodeFrame() {
        String functionCode = AtmoFunctionCode.SettingHeartBeatTime.getCode();
        String payloadLength = "0004";
        String frame = functionCode + payloadLength + payload;
        return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/AtmoFunctionCode.java
@@ -11,10 +11,50 @@
    QueryHeartBeat("01"),
    //  æŸ¥è¯¢å¿ƒè·³åŒ…æ—¶é—´
    QueryHeartBeatTime("02"),
    //  æŸ¥è¯¢ä¼ æ„Ÿå™¨æ•°é‡/故障
    QuerySensorInfo("03"),
    //  æŸ¥è¯¢è½¯ç¡¬ä»¶ç‰ˆæœ¬
    QueryVersion("04"),
    //  é‡å¯
    Reboot("10"),
    //  è®¾ç½®å¿ƒè·³åŒ…é—´éš”
    SettingHeartBeatTime("11"),
    //设置地址
    SettingAddress("12"),
    //传感器功能开关
    SensorSwitch("13"),
    //设置数据修正值-温度
    Setting_Data_Correction_temperature("14"),
    //设置数据修正值-湿度
    Setting_Data_Correction_humidity("15"),
    //设置数据修正值-风速
    Setting_Data_Correction_windSpeed("16"),
    //设置数据修正值-风向
    Setting_Data_Correction_windDirection("17"),
    //设置数据修正值-气压
    Setting_Data_Correction_airPressure("18"),
    //设置数据修正值-光强
    Setting_Data_Correction_lightIntensity("19"),
    //设置数据修正值-噪音
    Setting_Data_Correction_noise("1A"),
    //设置数据修正值-PM2.5
    Setting_Data_Correction_PM2_5("1B"),
    //设置数据修正值-PM10
    Setting_Data_Correction_PM10("1C"),
    //设置数据修正值-雨量
    Setting_Data_Correction_rainfall("1D"),
    //设置数据修正值-SO2二氧化硫
    Setting_Data_Correction_SO2("1E"),
    //设置数据修正值-NO2二氧化氮
    Setting_Data_Correction_NO2("1F"),
    //设置数据修正值-CO一氧化碳
    Setting_Data_Correction_CO("20"),
    //设置数据修正值-O3臭氧
    Setting_Data_Correction_O3("21"),
    //设置数据修正值-F氟化物
    Setting_Data_Correction_F("22"),
    //  å¤§æ°”设备心跳包存储
    AIR_HEARTBEAT("air_heartbeat:air_heartbeat"),
    //  å¤§æ°”设备心跳包存储(设备状态))
@@ -37,4 +77,13 @@
    AtmoFunctionCode(String code) {
        this.code = code;
    }
    public static AtmoFunctionCode getByCode(String code) {
        for (AtmoFunctionCode atmoFunctionCode : values()) {
            if (atmoFunctionCode.getCode().equals(code)) {
                return atmoFunctionCode;
            }
        }
        return null;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirDataService.java
@@ -94,6 +94,7 @@
    }
    /**
     * +
     * æ ¹æ®ç¯æ†id查询大气数据
ximon-admin/src/main/java/com/sandu/ximon/admin/service/AirEquipmentService.java
@@ -5,7 +5,16 @@
import com.sandu.common.execption.BusinessException;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.common.util.SpringContextHolder;
import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartBeatTimeReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereOperationReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereQuerySensorInfoReportInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.*;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode;
import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
@@ -98,7 +107,7 @@
        /**
         * åˆ é™¤å¤§æ°”设备 æ—¥å¿—记录开始
         */
        List<String> listCode=new ArrayList<>(1);
        List<String> listCode = new ArrayList<>(1);
        listCode.add(airEquipment.getMac());
        String content = "{设备code:" + airEquipment.getMac() + "}";
@@ -132,4 +141,149 @@
        }
        return equipmentInfo;
    }
    /**
     * æŸ¥è¯¢å¤§æ°”设备心跳包时间
     */
    public String QueryHeartBeatTime(String mac) {
        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
        if (airEquipment == null) {
            throw new BusinessException("大气设备不存在!");
        }
        AtmosphereQueryHeartBeatTimeReqInnerFrame atmosphereQueryHeartBeatTimeReqInnerFrame = new AtmosphereQueryHeartBeatTimeReqInnerFrame();
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereQueryHeartBeatTimeReqInnerFrame);
        System.out.println(a5Frame + "          --------a5Frame");
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
        System.out.println(commonFrame + "         -----------commonFrame");
//        FEA504000AFE020002FFFF014062EC          --------a5Frame
//        FEA584000CFE020004FFFF003CB081260CCC1C105D         -----------commonFrame
        A5AtmosphereHeartBeatTimeReportInnerFrame a5AtmosphereHeartBeatTimeReportInnerFrame
                = new A5AtmosphereHeartBeatTimeReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (a5AtmosphereHeartBeatTimeReportInnerFrame != null && a5AtmosphereHeartBeatTimeReportInnerFrame.isValidate()) {
            return "该大气设备心跳包间隔时间为:" + a5AtmosphereHeartBeatTimeReportInnerFrame.getIntervalTime() + "s";
        } else {
            throw new BusinessException("数据校验异常!");
        }
    }
    /**
     * è®¾ç½®å¤§æ°”设备心跳包间隔时间
     *
     * @param mac
     * @param time
     */
    public String setHeartBeatTime(String mac, Integer time) {
        if (time < 30) {
            throw new BusinessException("心跳包间隔时间不能少于30s!");
        }
        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
        if (airEquipment == null) {
            throw new BusinessException("大气设备不存在!");
        }
        AtmosphereSetHeartBeatTimeReqInnerFrame atmosphereSetHeartBeatTimeReqInnerFrame = new AtmosphereSetHeartBeatTimeReqInnerFrame(time);
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereSetHeartBeatTimeReqInnerFrame);
        System.out.println(a5Frame + "          --------a5Frame");
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
        System.out.println(commonFrame + "         -----------commonFrame");
        //FEA584000BFE110003FFFF00464116EC58FC0C8F
        A5AtmosphereOperationReportInnerFrame a5AtmosphereOperationReportInnerFrame
                = new A5AtmosphereOperationReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (a5AtmosphereOperationReportInnerFrame != null && a5AtmosphereOperationReportInnerFrame.isValidate()) {
            return a5AtmosphereOperationReportInnerFrame.getState();
        } else {
            throw new BusinessException("数据校验异常!");
        }
    }
    /**
     * æŸ¥è¯¢ä¼ æ„Ÿå™¨æ•°é‡/故障
     *
     * @param mac
     * @return
     */
    public A5AtmosphereQuerySensorInfoReportInnerFrame.SensorInfoPackage QuerySensorInfo(String mac) {
        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
        if (airEquipment == null) {
            throw new BusinessException("大气设备不存在!");
        }
        AtmosphereQuerySensorInfoReqInnerFrame atmosphereQuerySensorInfoReqInnerFrame = new AtmosphereQuerySensorInfoReqInnerFrame();
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereQuerySensorInfoReqInnerFrame);
        System.out.println(a5Frame + "          --------a5Frame");
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
        System.out.println(commonFrame + "         -----------commonFrame");
        A5AtmosphereQuerySensorInfoReportInnerFrame atmosphereQuerySensorInfoReportInnerFrame
                = new A5AtmosphereQuerySensorInfoReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (atmosphereQuerySensorInfoReportInnerFrame != null && atmosphereQuerySensorInfoReportInnerFrame.isValidate()) {
            return atmosphereQuerySensorInfoReportInnerFrame.getSensorInfoPackage();
        } else {
            throw new BusinessException("数据校验异常!");
        }
    }
    /**
     * æŸ¥è¯¢è½¯ç¡¬ä»¶ç‰ˆæœ¬
     *
     * @param mac
     * @return
     */
    public void QueryVersion(String mac) {
        //TODO
        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
        if (airEquipment == null) {
            throw new BusinessException("大气设备不存在!");
        }
        AtmosphereQueryVersionReqInnerFrame atmosphereQueryVersionReqInnerFrame = new AtmosphereQueryVersionReqInnerFrame();
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereQueryVersionReqInnerFrame);
        System.out.println(a5Frame + "          --------a5Frame");
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
        System.out.println(commonFrame + "         -----------commonFrame");
//        FEA504000AFE040002FFFF8E00974C          --------a5Frame
//        FEA584000BFE040003FFFFFF38586A49EE3EAF62         -----------commonFrame
    }
    /**
     * è½¯é‡å¯
     *
     * @param mac
     * @return
     */
    public String Reboot(String mac) {
        AirEquipment airEquipment = SpringContextHolder.getBean(AirEquipmentService.class).
                getOne(Wrappers.lambdaQuery(AirEquipment.class).eq(AirEquipment::getMac, mac).last("limit 1"));
        if (airEquipment == null) {
            throw new BusinessException("大气设备不存在!");
        }
        AtmosphereRebootReqInnerFrame atmosphereRebootReqInnerFrame = new AtmosphereRebootReqInnerFrame();
        A5Frame a5Frame = new A5Frame(A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(), atmosphereRebootReqInnerFrame);
        System.out.println(a5Frame + "          --------a5Frame");
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(mac, a5Frame);
        System.out.println(commonFrame + "         -----------commonFrame");
        A5AtmosphereOperationReportInnerFrame a5AtmosphereOperationReportInnerFrame =
                new A5AtmosphereOperationReportInnerFrame().transformFrame(commonFrame.getPayload());
        if (a5AtmosphereOperationReportInnerFrame != null && a5AtmosphereOperationReportInnerFrame.isValidate()) {
            return a5AtmosphereOperationReportInnerFrame.getState();
        } else {
            throw new BusinessException("数据校验异常!");
        }
    }
}