|
@@ -1,6 +1,7 @@
|
|
|
package com.ruoyi.device.mqtt.handler.decoder.json;
|
|
package com.ruoyi.device.mqtt.handler.decoder.json;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.device.mqtt.annotation.ConsumerHandler;
|
|
import com.ruoyi.device.mqtt.annotation.ConsumerHandler;
|
|
|
import com.ruoyi.device.mqtt.domain.BaseJsonBody;
|
|
import com.ruoyi.device.mqtt.domain.BaseJsonBody;
|
|
@@ -36,17 +37,17 @@ public class JsonBodyDecoder extends AbstractDecoder<BaseJsonBody>
|
|
|
}
|
|
}
|
|
|
byte[] bodyBytes = new byte[header.getMsgLength() - 2];
|
|
byte[] bodyBytes = new byte[header.getMsgLength() - 2];
|
|
|
body.readBytes(bodyBytes);
|
|
body.readBytes(bodyBytes);
|
|
|
- String bodyJson = new String(bodyBytes, StandardCharsets.UTF_8).trim();
|
|
|
|
|
|
|
+ String bodyStr = new String(bodyBytes, StandardCharsets.UTF_8).trim();
|
|
|
|
|
|
|
|
// 2、解析报文体json
|
|
// 2、解析报文体json
|
|
|
- if (!JSON.isValidObject(bodyJson))
|
|
|
|
|
|
|
+ if (!JSON.isValidObject(bodyStr))
|
|
|
{
|
|
{
|
|
|
log.warn("报文体json格式化出错");
|
|
log.warn("报文体json格式化出错");
|
|
|
return BaseJsonBody.fail(commonTopic.getDeviceType(), commonTopic.getDeviceSn(), "报文体json格式化出错");
|
|
return BaseJsonBody.fail(commonTopic.getDeviceType(), commonTopic.getDeviceSn(), "报文体json格式化出错");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 3、json格式化为对象jsonBody
|
|
// 3、json格式化为对象jsonBody
|
|
|
- BaseJsonBody jsonBody = JSON.parseObject(bodyJson, BaseJsonBody.class);
|
|
|
|
|
|
|
+ BaseJsonBody jsonBody = JSON.parseObject(bodyStr, BaseJsonBody.class);
|
|
|
if (jsonBody == null || StringUtils.isEmpty(jsonBody.getCmdType()))
|
|
if (jsonBody == null || StringUtils.isEmpty(jsonBody.getCmdType()))
|
|
|
{
|
|
{
|
|
|
log.warn("报文体缺少 cmdType");
|
|
log.warn("报文体缺少 cmdType");
|
|
@@ -67,10 +68,16 @@ public class JsonBodyDecoder extends AbstractDecoder<BaseJsonBody>
|
|
|
if (StringUtils.isEmpty(jsonBody.getDeviceType()) && StringUtils.isNotEmpty(commonTopic.getDeviceType()))
|
|
if (StringUtils.isEmpty(jsonBody.getDeviceType()) && StringUtils.isNotEmpty(commonTopic.getDeviceType()))
|
|
|
{
|
|
{
|
|
|
jsonBody.setDeviceType(commonTopic.getDeviceType());
|
|
jsonBody.setDeviceType(commonTopic.getDeviceType());
|
|
|
|
|
+ JSONObject jsonObject = JSON.parseObject(bodyStr);
|
|
|
|
|
+ jsonObject.put("deviceType", commonTopic.getDeviceType());
|
|
|
|
|
+ bodyStr = jsonObject.toJSONString();
|
|
|
}
|
|
}
|
|
|
if (jsonBody.getDeviceSn() == null && commonTopic.getDeviceSn() != null)
|
|
if (jsonBody.getDeviceSn() == null && commonTopic.getDeviceSn() != null)
|
|
|
{
|
|
{
|
|
|
jsonBody.setDeviceSn(commonTopic.getDeviceSn());
|
|
jsonBody.setDeviceSn(commonTopic.getDeviceSn());
|
|
|
|
|
+ JSONObject jsonObject = JSON.parseObject(bodyStr);
|
|
|
|
|
+ jsonObject.put("deviceSn", commonTopic.getDeviceSn());
|
|
|
|
|
+ bodyStr = jsonObject.toJSONString();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 4、进行业务处理
|
|
// 4、进行业务处理
|
|
@@ -84,6 +91,6 @@ public class JsonBodyDecoder extends AbstractDecoder<BaseJsonBody>
|
|
|
log.warn("未注册 JSON 命令处理器 cmd={}", cmd);
|
|
log.warn("未注册 JSON 命令处理器 cmd={}", cmd);
|
|
|
return BaseJsonBody.fail(jsonBody.getDeviceType(), jsonBody.getDeviceSn(), cmd.getCmdDownType(), "未实现的服务处理器");
|
|
return BaseJsonBody.fail(jsonBody.getDeviceType(), jsonBody.getDeviceSn(), cmd.getCmdDownType(), "未实现的服务处理器");
|
|
|
}
|
|
}
|
|
|
- return handler.handle(commonTopic, header, bodyJson, cmd);
|
|
|
|
|
|
|
+ return handler.handle(commonTopic, header, bodyStr, cmd);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|