| package com.dy.common.mw.protocol4Mqtt.pSdV1; | 
|   | 
| import com.alibaba.fastjson2.JSON; | 
| import com.alibaba.fastjson2.JSONObject; | 
| import com.dy.common.mw.protocol.Command; | 
| import com.dy.common.mw.protocol4Mqtt.pSdV1.downVos.ComCtrlVo; | 
| import org.eclipse.paho.client.mqttv3.MqttMessage; | 
|   | 
|   | 
| /** | 
|  * @Author: liurunyu | 
|  * @Date: 2025/6/5 11:41 | 
|  * @Description | 
|  */ | 
| public class ProtocolParserSdV1 { | 
|     public MqttSubMsgSdV1 parseSubMsg(String deviceId, String topic, MqttMessage mqttMsg) throws Exception { | 
|         MqttSubMsgSdV1 ms = new MqttSubMsgSdV1(deviceId, topic, new String(mqttMsg.getPayload(), "UTF-8")); | 
|         return ms; | 
|     } | 
|   | 
|     public MqttPubMsgSdV1 createPubMsg(String orgTag, Command com) throws Exception { | 
|         MqttPubMsgSdV1 msg = null ; | 
|         switch (com.code){ | 
|             case CodeSdV1.cd_Fault:{ | 
|                 //故障解除命令 | 
|                 this.checkParam(com); | 
|                 this.checkRtnWebUrl(com); | 
|                 msg = this.createPubMsgOfFault(orgTag, com) ; | 
|                 break ; | 
|             } | 
|             case CodeSdV1.cd_Stir:{ | 
|                 //搅拌启停命令 | 
|                 this.checkParam(com); | 
|                 this.checkRtnWebUrl(com); | 
|                 msg = this.createPubMsgOfStir(orgTag, com) ; | 
|                 break ; | 
|             } | 
|             case CodeSdV1.cd_Inject:{ | 
|                 //注肥启停命令 | 
|                 this.checkParam(com); | 
|                 this.checkRtnWebUrl(com); | 
|                 msg = this.createPubMsgOfInject(orgTag, com) ; | 
|                 break ; | 
|             } | 
|             case CodeSdV1.cd_Irr:{ | 
|                 //灌溉启停命令 | 
|                 this.checkParam(com); | 
|                 this.checkRtnWebUrl(com); | 
|                 msg = this.createPubMsgOfIrr(orgTag, com) ; | 
|                 break ; | 
|             } | 
|             default:{ | 
|                 throw new Exception("接收到MQTT命令,协议" + com.protocol + "版本" + com.protocolVersion + "功能码" + com.code + "构造器未实现") ; | 
|             } | 
|         } | 
|         return msg ; | 
|     } | 
|     private void checkParam(Command com)throws Exception { | 
|         if(com.param == null){ | 
|             throw new Exception("接收到MQTT命令,协议" + com.protocol + "版本" + com.protocolVersion + "功能码" + com.code + "命令数据为空") ; | 
|         } | 
|     } | 
|     private void checkRtnWebUrl(Command com)throws Exception { | 
|         if(com.rtuResultSendWebUrl == null || com.rtuResultSendWebUrl.trim().equals("")){ | 
|             throw new Exception("接收到MQTT命令,协议" + com.protocol + "版本" + com.protocolVersion + "功能码" + com.code + "命令结果回收URL为空") ; | 
|         } | 
|     } | 
|     private MqttPubMsgSdV1 createPubMsgOfFault(String orgTag, Command com) throws Exception { | 
|         JSONObject obj = (JSONObject) com.param; | 
|         String json = obj.toJSONString(); | 
|         ComCtrlVo cvo = JSON.parseObject(json, ComCtrlVo.class); | 
|         if(cvo == null){ | 
|             throw new Exception("json转ComCtrlVo为null") ; | 
|         } | 
|         MqttPubMsgSdV1 msg = new MqttPubMsgSdV1() ; | 
|         this.setPubMsgBase(com, msg); | 
|         msg.isCacheForOffLine = false ; | 
|         msg.hasResponse = true ; | 
|         msg.address = 123 ; | 
|         msg.value = "" + (cvo.isDo?1:0); | 
|         msg.topic = createTopic(orgTag, com) ; | 
|         msg.msg = "" ; | 
|         return msg ; | 
|     } | 
|     private MqttPubMsgSdV1 createPubMsgOfStir(String orgTag, Command com) throws Exception { | 
|         JSONObject obj = (JSONObject) com.param; | 
|         String json = obj.toJSONString(); | 
|         ComCtrlVo cvo = JSON.parseObject(json, ComCtrlVo.class); | 
|         if(cvo == null){ | 
|             throw new Exception("json转ComCtrlVo为null") ; | 
|         } | 
|         MqttPubMsgSdV1 msg = new MqttPubMsgSdV1() ; | 
|         this.setPubMsgBase(com, msg); | 
|         msg.isCacheForOffLine = false ; | 
|         msg.hasResponse = true ; | 
|         msg.address = 123 ; | 
|         msg.value = "" + (cvo.isDo?1:0); | 
|         msg.topic = createTopic(orgTag, com) ; | 
|         msg.msg = "" ; | 
|         return msg ; | 
|     } | 
|     private MqttPubMsgSdV1 createPubMsgOfInject(String orgTag, Command com) throws Exception { | 
|         JSONObject obj = (JSONObject) com.param; | 
|         String json = obj.toJSONString(); | 
|         ComCtrlVo cvo = JSON.parseObject(json, ComCtrlVo.class); | 
|         if(cvo == null){ | 
|             throw new Exception("json转ComCtrlVo为null") ; | 
|         } | 
|         MqttPubMsgSdV1 msg = new MqttPubMsgSdV1() ; | 
|         this.setPubMsgBase(com, msg); | 
|         msg.isCacheForOffLine = false ; | 
|         msg.hasResponse = true ; | 
|         msg.address = 123 ; | 
|         msg.value = "" + (cvo.isDo?1:0); | 
|         msg.topic = createTopic(orgTag, com) ; | 
|         msg.msg = "" ; | 
|         return msg ; | 
|     } | 
|     private MqttPubMsgSdV1 createPubMsgOfIrr(String orgTag, Command com) throws Exception { | 
|         JSONObject obj = (JSONObject) com.param; | 
|         String json = obj.toJSONString(); | 
|         ComCtrlVo cvo = JSON.parseObject(json, ComCtrlVo.class); | 
|         if(cvo == null){ | 
|             throw new Exception("json转ComCtrlVo为null") ; | 
|         } | 
|         MqttPubMsgSdV1 msg = new MqttPubMsgSdV1() ; | 
|         this.setPubMsgBase(com, msg); | 
|         msg.isCacheForOffLine = false ; | 
|         msg.hasResponse = true ; | 
|         msg.address = 123 ; | 
|         msg.value = "" + (cvo.isDo?1:0); | 
|         msg.topic = createTopic(orgTag, com) ; | 
|         msg.msg = "" ; | 
|         return msg ; | 
|     } | 
|   | 
|     private void setPubMsgBase(Command com, MqttPubMsgSdV1 msg){ | 
|         msg.commandId = com.id ; | 
|         msg.deviceId = com.rtuAddr ; | 
|         msg.mqttResultSendWebUrl = com.rtuResultSendWebUrl ; | 
|     } | 
|   | 
|     private String createTopic(String orgTag, Command com){ | 
|         String topic = null ; | 
|         switch (com.code){ | 
|             case CodeSdV1.cd_Fault:{ | 
|                 topic = orgTag + "/" + com.protocol + com.protocolVersion + "/" + com.rtuAddr + "/control/m4" ; | 
|                 break ; | 
|             } | 
|             case CodeSdV1.cd_Stir:{ | 
|                 topic = orgTag + "/" + com.protocol + com.protocolVersion + "/" + com.rtuAddr + "/control/m80" ; | 
|                 break ; | 
|             } | 
|             case CodeSdV1.cd_Inject:{ | 
|                 topic = orgTag + "/" + com.protocol + com.protocolVersion + "/" + com.rtuAddr + "/control/m1" ; | 
|                 break ; | 
|             } | 
|             case CodeSdV1.cd_Irr:{ | 
|                 topic = orgTag + "/" + com.protocol + com.protocolVersion + "/" + com.rtuAddr + "/control/m2" ; | 
|                 break ; | 
|             } | 
|             default:{ | 
|                 topic = null ; | 
|                 break; | 
|             } | 
|         } | 
|         return topic ; | 
|     } | 
|   | 
| } |