From 431bbfaddba9f39496359bc0c1e2dcaf2bb6fca2 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期一, 23 六月 2025 15:09:04 +0800 Subject: [PATCH] 采用模拟软件MQTTX进行模拟测试,发现并修改MQTT相关水肥机上行数据与下行命令逻辑bug. --- pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java | 71 ++++++++++++++++++++++++----------- 1 files changed, 48 insertions(+), 23 deletions(-) diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java index f808c95..a361d9a 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/monitor/mqttSd1/irr/CdCtrl.java @@ -1,9 +1,9 @@ package com.dy.pipIrrRemote.monitor.mqttSd1.irr; import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; import com.dy.common.aop.SsoAop; import com.dy.common.mw.protocol.Command; +import com.dy.common.mw.protocol4Mqtt.MqttSubMsg; import com.dy.common.mw.protocol4Mqtt.pSdV1.CodeSdV1; import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1; import com.dy.common.mw.protocol4Mqtt.pSdV1.upVos.ManureVo; @@ -12,6 +12,7 @@ import com.dy.common.webUtil.BaseResponseUtils; import com.dy.pipIrrRemote.common.dto.Dto4MqttBase; import com.dy.pipIrrRemote.monitor.common.Com4MqttCtrl; +import com.dy.pipIrrRemote.monitor.mqttSd1.stir.CdDto; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -25,16 +26,20 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; + /** * @Author: liurunyu * @Date: 2025/6/16 17:35 * @Description + * 澶х灏嗘按鑲ユ満搴旂敤浜庣鐏岀郴缁燂紝鎵�浠ユ按鑲ユ満涓婃湭瀹夎鐏屾簤闃�闂紝鐩稿簲姝ゅ姛鑳戒篃涓嶅簲鐢ㄤ簡 */ @Slf4j -@Tag(name = "杩滅▼鍛戒护", description = "娓呴櫎鏁呴殰") +@Tag(name = "杩滅▼鍛戒护", description = "鐏屾簤鍚仠") @RestController("mqttSd1IrrCtrl") -@RequestMapping(path = "mqttSd1/irrCtrl") +@RequestMapping(path = "mqttSd1/irr") @RequiredArgsConstructor @Scope("prototype") //鍥犱负鏈夊璞$被灞炴�э紝鎵�浠ラ噰鐢ㄥ師鍨嬫ā寮忥紝姣忔璇锋眰鏂板缓涓�涓疄渚嬪璞� public class CdCtrl extends Com4MqttCtrl { @@ -48,15 +53,38 @@ @Autowired private CdSv sv ; + /** * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠� * @param dto 鍓嶇鍙戞潵鐨勫�煎璞� * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋� * @return 杩斿洖鍓嶇 */ - @PostMapping(path = "send", consumes = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(path = "start", consumes = MediaType.APPLICATION_JSON_VALUE) @SsoAop() - public BaseResponse<Object> send(@RequestBody @Valid CdDto dto, BindingResult bindingResult) { + public BaseResponse<Object> start(@RequestBody @Valid com.dy.pipIrrRemote.monitor.mqttSd1.stir.CdDto dto, BindingResult bindingResult) { + return this.send(dto, bindingResult, true) ; + } + + /** + * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠� + * @param dto 鍓嶇鍙戞潵鐨勫�煎璞� + * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋� + * @return 杩斿洖鍓嶇 + */ + @PostMapping(path = "stop", consumes = MediaType.APPLICATION_JSON_VALUE) + @SsoAop() + public BaseResponse<Object> stop(@RequestBody @Valid com.dy.pipIrrRemote.monitor.mqttSd1.stir.CdDto dto, BindingResult bindingResult) { + return this.send(dto, bindingResult, false) ; + } + + /** + * 鍚戣澶囷紙Mqtt涓棿浠�->FBox锛夊彂閫佸懡浠� + * @param dto 鍓嶇鍙戞潵鐨勫�煎璞� + * @param bindingResult 瀵筪to楠岃瘉鐨勭粨鏋� + * @return 杩斿洖鍓嶇 + */ + private BaseResponse<Object> send(CdDto dto, BindingResult bindingResult, boolean startTrueStopFalse) { BaseResponse<Object> res ; //鍙戦�佸懡浠ゅ墠-1锛氶獙璇� res = super.pre1(sv, ComCode, dto, bindingResult); @@ -65,15 +93,15 @@ res = super.pre2(sv, Protocol, ProtocolVersion, ComCode, dto, bindingResult); if (res == null) { //鍙戦�佸懡浠ゅ墠-3锛氫繚瀛樺懡浠ゆ棩蹇� - CdParam comParam = CdParam.builder().commandCode(ComCode).build(); + CdParam comParam = CdParam.builder().no(ctrlPo.no).startTrueStopFalse(true).build(); res = super.pre3(sv, dto.manureId, dto.getOperator(), Protocol, ProtocolVersion, ComCode, comParam); if (res == null) { //鍙戦�佸懡浠ゅ墠-4锛氬噯澶嘑eature super.pre4(); try { - //鍒涘缓澶栭儴鍛戒护锛堝彂缁欐帶鍒跺櫒锛� - Command com = sv.createOuterCommand(ctrlPo.fboxId, "" + comId, ComCode); - com.rtuResultSendWebUrl = rtuResultSendWebUrl; + //鍒涘缓澶栭儴鍛戒护锛堝彂缁橫QTT->FBox锛� + Command com = sv.createMQTTCommand(ctrlPo.fboxId, "" + comId, Protocol, ProtocolVersion, ComCode); + com.rtuResultSendWebUrl = mqttResultSendWebUrl; com.param = comParam ; //鍙戦�佸懡浠� res = super.doSend(sv, com); @@ -99,24 +127,21 @@ } @Override - protected String dealComResult(String code, JSONObject resultData, Callback callback){ + protected String dealComResult(String code, MqttSubMsg subMsg, Callback callback){ String msg; - if(resultData != null){ - log.info(resultData.toString()); - JSONObject codeData = resultData.getJSONObject("data") ; - if(codeData == null){ + if(subMsg != null){ + if(subMsg.vo4Up != null && Proxy.isProxyClass(subMsg.vo4Up.getClass())){ + // 鑾峰彇浠g悊鐨� InvocationHandler + InvocationHandler handler = Proxy.getInvocationHandler(subMsg.vo4Up); + String json = JSON.toJSONString(handler) ; + ManureVo vo = JSON.parseObject(json, ManureVo.class); + msg = vo.toString() ; + }else{ msg = RtuSuccessMsg ; - }else { - String json = codeData.toJSONString(); - ManureVo cvo = JSON.parseObject(json, ManureVo.class) ; - if(cvo != null){ - msg = cvo.toString() ; - }else{ - msg = RtuSuccessMsg ; - } } }else{ msg = RtuSuccessMsg ; } return msg; - }} + } +} -- Gitblit v1.8.0