2021与蓝度共同重构项目,服务端
zhanzhiqin
2022-10-20 4e76b9737e036c18e8a9e840dc443615ffcec348
大气农耕
已修改5个文件
已添加2个文件
154 ■■■■■ 文件已修改
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MQTTTestController.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/MainBoardDataTransparentReqInnerFrame.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonRequest.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A1OrderEnum.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/util/SupplementUtils.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/resources/application-local.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MQTTTestController.java
@@ -1,13 +1,22 @@
package com.sandu.ximon.admin.controller;
import cn.hutool.core.util.HexUtil;
import com.github.pagehelper.util.StringUtil;
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.execption.BusinessException;
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.frame.A1Frame;
import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
import com.sandu.ximon.admin.manager.iot.frame.FrameBuilder;
import com.sandu.ximon.admin.manager.iot.frame.IRequestFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.A1TernaryCodeReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.frame.inner.request.MainBoardDataTransparentReqInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonRequest;
import com.sandu.ximon.admin.manager.iot.rrpc.dto.InvokeParam;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.A1OrderEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
import com.sandu.ximon.admin.param.MQTTTestPrarm;
import com.sandu.ximon.admin.security.PermissionConfig;
@@ -16,6 +25,11 @@
import com.sandu.ximon.dao.enums.MenuEnum;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -38,7 +52,6 @@
     *
     * @return
     */
    @AnonymousAccess
    @PostMapping("/sendRRPC")
    public ResponseVO<Object> sendRRPC(@RequestBody @Validated MQTTTestPrarm mqttTestPrarm) {
        /**
@@ -64,9 +77,47 @@
        param.setOperate("1001");
        param.setFrame(mqttTestPrarm.getFrameStr());
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(pole.getDeviceCode(), param);
        if (commonFrame == null) {
            throw new BusinessException("请求失败,请重新请求");
        if (commonFrame == null || !commonFrame.isValidate()) {
            throw new BusinessException("响应数据校验失败,请重新请求数据!");
        }
        return ResponseUtil.success(commonFrame);
        String value = commonFrame.getConnectType() + commonFrame.getFunctionCode()
                + commonFrame.getOrderType() + commonFrame.getPayloadLength()
                + commonFrame.getPayload() + commonFrame.getCrc32();
        Map map = new LinkedHashMap();
        map.put("frame", value);
        return ResponseUtil.success(map);
    }
    @PostMapping("/transparentFrame")
    public ResponseVO<Object> transparentFrame(@RequestBody @Validated CommonRequest commonRequest) {
        boolean isAscii = commonRequest.getAscii().equals(0) ? false : true;
        Pole pole = SpringContextHolder.getBean(PoleService.class).getById(commonRequest.getPoleID());
        if (pole == null) {
            throw new BusinessException("灯杆不存在!");
        }
        if (StringUtil.isEmpty(pole.getDeviceCode())) {
            throw new BusinessException("灯杆MAC不能为空!");
        }
        MainBoardDataTransparentReqInnerFrame mainBoardDataTransparentReqInnerFrame = new MainBoardDataTransparentReqInnerFrame(commonRequest.getFrame(), isAscii);
        A1Frame a1Frame = new A1Frame(A1OrderEnum.TRANSPARENT.getCode(), mainBoardDataTransparentReqInnerFrame);
        System.out.println("a1Frame:" + a1Frame.getEncodeFrame());
        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(pole.getDeviceCode(), a1Frame);
        if (null == commonFrame) {
            throw new BusinessException("主板无响应!");
        }
        if (commonFrame == null || !commonFrame.isValidate()) {
            throw new BusinessException("响应数据校验失败,请重新请求数据!");
        }
        String value = commonFrame.getConnectType() + commonFrame.getFunctionCode()
                + commonFrame.getOrderType() + commonFrame.getPayloadLength()
                + commonFrame.getPayload() + commonFrame.getCrc32();
        Map map = new LinkedHashMap();
        map.put("frame", value);
        map.put("data", HexUtil.decodeHexStr(commonFrame.getPayload()));
        System.out.println(HexUtil.decodeHexStr(commonFrame.getPayload()));
        return ResponseUtil.success(map);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/MainBoardDataTransparentReqInnerFrame.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.sandu.ximon.admin.manager.iot.frame.inner.request;
import cn.hutool.core.util.HexUtil;
import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.FunctionCodeEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.enums.RemoteUpdateEnum;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils;
import com.sandu.ximon.admin.utils.HexUtils;
/**
 * ä¸»æ¿é€ä¼ æŒ‡ä»¤
 *
 * @author ZZQ
 * @date 2022/10/20 10:00
 */
public class MainBoardDataTransparentReqInnerFrame implements IRequestInnerFrame {
    private static final String REPLACE_CHAR = "\\r\\n";
    private static final String REPLACE_HEX_CHAR = "0D0A";
    private static final boolean CHECK_REPLACE = true;
    private String payload;
    public MainBoardDataTransparentReqInnerFrame(String payload, boolean isAscii) {
        if (CHECK_REPLACE) {
            String subStr = payload.substring(payload.length() - 4);
            if (subStr.equals(REPLACE_CHAR)) {
                payload = payload.substring(0, payload.length() - 4);
            }
        }
        System.out.println(payload);
        if (isAscii) {
            this.payload = SupplementUtils.stringToHexString(payload);
        }
        if (CHECK_REPLACE) {
            this.payload = this.payload + REPLACE_HEX_CHAR;
        }
        if (this.payload.length() % 2 != 0) {
            this.payload = "0" + this.payload;
        }
    }
    @Override
    public String getEncodeFrame() {
        return payload;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
@@ -95,6 +95,10 @@
        return FrameUtils.transformMessageToFrame(result);
    }
    /**
     * åŸºç¡€é€šä¿¡åŒæ­¥è°ƒç”¨
     *
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.sandu.ximon.admin.manager.iot.rrpc.dto;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class CommonRequest {
    @NotNull(message = "灯杆ID不能为空")
    private Long poleID;
    @NotEmpty(message = "frame不能为空")
    private String frame;
    @NotNull(message = "ascii不能为空")
    private Integer ascii;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A1OrderEnum.java
@@ -54,6 +54,10 @@
     * è®¾ç½®é˜¿é‡Œäº‘三元码DeviceSecret
     */
    REQUEST_SET_DEVICE_SECRET("0C"),
    /**
     * é€ä¼ 
     */
    TRANSPARENT("0D"),
    //-------------------------------------------- ä¸»æ¿ä¸ŠæŠ¥----------------------------------------------------//
    /**
ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/util/SupplementUtils.java
@@ -69,6 +69,22 @@
    }
    /**
     * å­—符串转换为16进制字符串
     *
     * @param s
     * @return
     */
    public static String stringToHexString(String s) {
        String str = "";
        for (int i = 0; i < s.length(); i++) {
            int ch = s.charAt(i);
            String s4 = Integer.toHexString(ch);
            str = str + s4;
        }
        return str;
    }
    /**
     * char转byte
     */
    private static byte charToByte(char c) {
ximon-admin/src/main/resources/application-local.yml
@@ -39,7 +39,7 @@
    enable: true
listenter:
  isOpen: true
  isOpen: false
minio:
  endpoint: 47.106.172.9