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.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.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; import com.sandu.ximon.admin.service.PoleService; import com.sandu.ximon.admin.utils.Base64Util; import com.sandu.ximon.dao.domain.Pole; import com.sandu.ximon.dao.enums.MenuEnum; import lombok.AllArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.LinkedHashMap; import java.util.Map; /** * MQTT测试 * * @author ZZQ * @date 2022/10/19 15:49 */ @RestController @AllArgsConstructor @RequestMapping("/v1/admin/mqtt") public class MQTTTestController { private PermissionConfig permissionConfig; /** * 模糊查询 * * @return */ @PostMapping("/sendRRPC") public ResponseVO sendRRPC(@RequestBody @Validated MQTTTestPrarm mqttTestPrarm) { /** * 测试数据 * poleMac:32313243305005ff3867ffff * frameStr:/qUBAAv+AQAD//8ARZcUd7bYwso= */ if (!permissionConfig.check(MenuEnum.MQTT_TEST.getCode())) { return ResponseUtil.fail("缺少对应用户权限"); } Pole pole = SpringContextHolder.getBean(PoleService.class).getById(mqttTestPrarm.getPoleId()); if (pole == null) { throw new BusinessException("灯杆不存在!"); } if (StringUtil.isEmpty(pole.getDeviceCode())) { throw new BusinessException("灯杆MAC不能为空!"); } InvokeParam param = new InvokeParam(); param.setOperate("1001"); //字符串mqttTestPrarm.getFrameStr()转base64 String frame = Base64Util.toBase64Frame(mqttTestPrarm.getFrameStr());; System.out.println("frame: "+frame); param.setFrame(frame); CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(pole.getDeviceCode(), param); 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); return ResponseUtil.success(map); } @PostMapping("/transparentFrame") public ResponseVO 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); } }