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 ;
|
}
|
|
}
|