作者 钟来

添加topic方式

... ... @@ -3,6 +3,7 @@ package com.zhonglai.luhui.device.protocol.factory.service.impl;
import com.google.gson.JsonObject;
import com.ruoyi.common.utils.GsonConstructor;
import com.ruoyi.common.utils.StringUtils;
import com.zhonglai.luhui.device.analysis.comm.config.SysParameter;
import com.zhonglai.luhui.device.analysis.comm.dao.BaseDao;
import com.zhonglai.luhui.device.analysis.comm.dto.DeviceSensorData;
import com.zhonglai.luhui.device.analysis.comm.dto.LogDeviceOperation;
... ... @@ -121,6 +122,7 @@ public class DefaultDbService {
IotDevice iotDevice = new IotDevice();
iotDevice.setClient_id(parserDeviceHostDto.getId());
iotDevice.setData_update_time(parserDeviceHostDto.getUpdateTime());
iotDevice.setListen_service_ip(SysParameter.service_ip);
if(parserDeviceHostDto.is_summary_up())
{
if(null != parserDeviceHostDto.getSummary() && parserDeviceHostDto.getSummary().size() != 0)
... ...
... ... @@ -11,6 +11,9 @@ import com.zhonglai.luhui.device.protocol.factory.analysis.ProtocolParserFactory
import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceHostDto;
import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceInfoDto;
import com.zhonglai.luhui.device.protocol.factory.dto.ProtocolPurificationModel;
import com.zhonglai.luhui.device.protocol.xinjie.analysis.topic.PubData;
import com.zhonglai.luhui.device.protocol.xinjie.analysis.topic.WriteData;
import com.zhonglai.luhui.device.protocol.xinjie.analysis.topic.WriteReply;
import com.zhonglai.luhui.device.protocol.xinjie.dto.Variant;
import com.zhonglai.luhui.device.protocol.xinjie.dto.XinJieDto;
import org.springframework.stereotype.Service;
... ... @@ -20,52 +23,29 @@ import java.util.List;
@Service
public class ProtocolParserServiceImpl implements ProtocolParserFactory<byte[]> {
private static final String topicModel = "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{imei}}/{{topicType}}";
private static final String topicModel = "/{{roleid}}/{{username}}/{{password}}/{{payloadtype}}/{{clientid}}/{{topicType}}";
@Override
public Topic analysisTopic(String topicStr) {
// /13/jiulin/476210165B365166812345678Userdata/Json/476210165B365166812345678/pub_data
Topic topic = TopicUtil.initTopicFromModelStr(topicStr,topicModel);
topic.setClientid(topic.getClientid().replace("12345678",""));
return topic;
}
@Override
public JsonObject analysisPayload(Topic topic, byte[] payload) {
String data = new String(payload);
XinJieDto xinJieDto = GsonConstructor.get().fromJson(data, XinJieDto.class);
if(null != xinJieDto.getVariant() && xinJieDto.getVariant().size()!=0)
switch (topic.getTopicType())
{
JsonObject rj = new JsonObject();
analysisHost(rj,xinJieDto);
analysisDeviceInfo(rj,xinJieDto);
return rj;
}
return GsonConstructor.get().fromJson(data, JsonObject.class);
case "pub_data":
return new PubData().analysisPayload(topic,payload);
case "write_data":
return new WriteData().analysisPayload(topic,payload);
case "write_reply":
return new WriteReply().analysisPayload(topic,payload);
default:
return null;
}
private void analysisHost(JsonObject rj,XinJieDto xinJieDto)
{
Variant variant = xinJieDto.getVariant().get(0);
JsonObject data = new JsonObject();
JsonObject summary = new JsonObject();
summary.addProperty("Unix",variant.getUnix());
summary.addProperty("Version",variant.getVersion());
data.add("summary",summary);
rj.add("0",data);
}
private void analysisDeviceInfo(JsonObject rj,XinJieDto xinJieDto )
{
Variant variant = xinJieDto.getVariant().get(0);
int i =1;
for (String key:variant.getPub_Data().keySet())
{
rj.add(ByteUtil.changerTwoStr(i+""),variant.getPub_Data().get(key).getAsJsonObject());
i++;
}
}
}
... ...
package com.zhonglai.luhui.device.protocol.xinjie.analysis;
import com.google.gson.JsonObject;
import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
public interface ProtocolTopicParser<T> {
JsonObject analysisPayload(Topic topic, T payload);
}
... ...
package com.zhonglai.luhui.device.protocol.xinjie.analysis.topic;
import com.google.gson.JsonObject;
import com.ruoyi.common.utils.GsonConstructor;
import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
import com.zhonglai.luhui.device.analysis.comm.util.ByteUtil;
import com.zhonglai.luhui.device.protocol.xinjie.analysis.ProtocolTopicParser;
import com.zhonglai.luhui.device.protocol.xinjie.dto.Variant;
import com.zhonglai.luhui.device.protocol.xinjie.dto.XinJieDto;
public class PubData implements ProtocolTopicParser<byte[]> {
@Override
public JsonObject analysisPayload(Topic topic, byte[] payload) {
String data = new String(payload);
XinJieDto xinJieDto = GsonConstructor.get().fromJson(data, XinJieDto.class);
if(null != xinJieDto.getVariant() && xinJieDto.getVariant().size()!=0)
{
JsonObject rj = new JsonObject();
analysisHost(rj,xinJieDto);
analysisDeviceInfo(rj,xinJieDto);
return rj;
}
return GsonConstructor.get().fromJson(data, JsonObject.class);
}
private void analysisHost(JsonObject rj,XinJieDto xinJieDto)
{
Variant variant = xinJieDto.getVariant().get(0);
JsonObject data = new JsonObject();
JsonObject summary = new JsonObject();
summary.addProperty("Unix",variant.getUnix());
summary.addProperty("Version",variant.getVersion());
data.add("summary",summary);
rj.add("0",data);
}
private void analysisDeviceInfo(JsonObject rj,XinJieDto xinJieDto )
{
Variant variant = xinJieDto.getVariant().get(0);
int i =1;
for (String key:variant.getPub_Data().keySet())
{
JsonObject jsonObject = variant.getPub_Data().get(key).getAsJsonObject();
jsonObject.addProperty("系统名称",key);
rj.add(ByteUtil.changerTwoStr(i+""),jsonObject);
i++;
}
}
}
... ...
package com.zhonglai.luhui.device.protocol.xinjie.analysis.topic;
import com.google.gson.JsonObject;
import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
import com.zhonglai.luhui.device.protocol.xinjie.analysis.ProtocolTopicParser;
public class WriteData implements ProtocolTopicParser<byte[]> {
@Override
public JsonObject analysisPayload(Topic topic, byte[] payload) {
return null;
}
}
... ...
package com.zhonglai.luhui.device.protocol.xinjie.analysis.topic;
import com.google.gson.JsonObject;
import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
import com.zhonglai.luhui.device.protocol.xinjie.analysis.ProtocolTopicParser;
public class WriteReply implements ProtocolTopicParser<byte[]> {
@Override
public JsonObject analysisPayload(Topic topic, byte[] payload) {
return null;
}
}
... ...