作者 钟来

调试微滤机

正在显示 45 个修改的文件 包含 193 行增加75 行删除
... ... @@ -21,7 +21,10 @@ public class ClienConnectionImpl implements ClienConnection {
@Override
public void reply(ApiClientRePlyDto apiClientRePlyDto) {
apiClientRePlyDto.setReplyMessage(message);
if (null != apiClientRePlyDto)
{
apiClientRePlyDto.setReplyMessage(message);
}
this.notify();
}
... ...
package com.zhonglai.luhui.device.service;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.Message;
import com.ruoyi.common.core.domain.MessageCode;
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-device-protocol-agreement</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>lh-device-defaul</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-device-protocol-factory</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
package com.zhonglai.luhui.device.protocol.factory.analysis;
package com.zhonglai.luhui.device.protocol.defaul.analysis;
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.util.TopicUtil;
import com.zhonglai.luhui.device.protocol.factory.analysis.topic.*;
import com.zhonglai.luhui.device.protocol.defaul.analysis.topic.*;
import com.zhonglai.luhui.device.protocol.factory.analysis.ProtocolParserFactory;
import com.zhonglai.luhui.device.protocol.factory.analysis.topic.Online;
import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
import org.springframework.stereotype.Service;
public class DefaultProtocolParserFactoryImpl implements ProtocolParserFactory{
public class DefaultProtocolParserFactoryImpl implements ProtocolParserFactory {
private static final String topicModel = "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}";
@Override
... ...
package com.zhonglai.luhui.device.protocol.factory.analysis.topic;
package com.zhonglai.luhui.device.protocol.defaul.analysis.topic;
import com.google.gson.JsonObject;
import com.ruoyi.common.utils.GsonConstructor;
... ...
package com.zhonglai.luhui.device.protocol.defaul.analysis.topic;
import com.google.gson.JsonObject;
import com.ruoyi.common.utils.GsonConstructor;
import com.zhonglai.luhui.device.analysis.comm.dto.ApiClientRePlyDto;
import com.zhonglai.luhui.device.analysis.dto.Message;
import com.zhonglai.luhui.device.analysis.dto.MessageCode;
import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
public class PutReq {
public AnalysisResult analysisPayload(byte[] payload)
{
return analysisPayload(new String(payload));
}
public AnalysisResult analysisPayload(String payload)
{
JsonObject jsonObject = GsonConstructor.get().fromJson(payload, JsonObject.class);
return new AnalysisResult(false, true, jsonObject, message -> {
if(jsonObject.has("code") && "1".equals(jsonObject.get("code").getAsString()))
{
message.setCode(MessageCode.DEFAULT_SUCCESS_CODE);
message.setMessage("操作成功");
}
});
}
}
... ...
package com.zhonglai.luhui.device.protocol.defaul.control;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.GsonConstructor;
import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
import com.zhonglai.luhui.device.domain.IotProduct;
import com.zhonglai.luhui.device.protocol.factory.config.DeviceCach;
import com.zhonglai.luhui.device.protocol.factory.control.DeviceCommandServiceFactory;
import com.zhonglai.luhui.device.protocol.factory.dto.NoticeMessageDto;
import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceHostDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Type;
import java.util.Map;
/**
* 指令控制监听实现
*/
public class DeviceCommandListenServiceImpl implements DeviceCommandServiceFactory {
private static final String topicModel = "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/{{messageid}}";
private static final Logger log = LoggerFactory.getLogger(DeviceCommandListenServiceImpl.class);
@Override
public NoticeMessageDto read(String deviceId, JsonObject jsonObject) {
return null;
}
@Override
public NoticeMessageDto write(String deviceId, JsonObject jsonObject) {
ParserDeviceHostDto parserDeviceHostDto = DeviceCach.getDeviceHost(deviceId);
Topic topic = getWriteTopic(deviceId,parserDeviceHostDto.getIotProduct());
NoticeMessageDto noticeMessageDto = new NoticeMessageDto();
noticeMessageDto.setTopic(topic);
noticeMessageDto.setTopicconfig(topicModel);
noticeMessageDto.setCommd(jsonObject.toString().getBytes());
return noticeMessageDto;
}
@Override
public NoticeMessageDto notice(String deviceId, JsonObject jsonObject) {
return null;
}
private Topic getWriteTopic(String deviceId, IotProduct iotProduct)
{
Topic topic = new Topic();
topic.setTopicType("PUT");
topic.setClientid(deviceId);
topic.setRoleid(iotProduct.getRole_id()+"");
topic.setUsername(iotProduct.getMqtt_username());
topic.setPayloadtype("Json");
topic.setMessageid(DateUtils.getNowTimeMilly()+"");
return topic;
}
}
... ...
... ... @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-device-protocol-parser</artifactId>
<artifactId>lh-device-protocol-agreement</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
... ...
... ... @@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>lh-device-protocol-parser</artifactId>
<artifactId>lh-device-protocol-agreement</artifactId>
<groupId>com.zhonglai.luhui</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
... ...
... ... @@ -12,12 +12,13 @@ import com.zhonglai.luhui.device.analysis.dto.MessageCode;
import com.zhonglai.luhui.device.analysis.util.TopicUtil;
import com.zhonglai.luhui.device.domain.IotProductPayloadModelNumber;
import com.zhonglai.luhui.device.protocol.factory.analysis.ProtocolParserFactory;
import com.zhonglai.luhui.device.protocol.factory.analysis.topic.*;
import com.zhonglai.luhui.device.protocol.factory.analysis.topic.Online;
import com.zhonglai.luhui.device.protocol.factory.config.DeviceCach;
import com.zhonglai.luhui.device.protocol.factory.config.ProductPayloadModelNumberCach;
import com.zhonglai.luhui.device.protocol.factory.control.DeviceCommandListenService;
import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceHostDto;
import com.zhonglai.luhui.device.protocol.plc004.analysis.topic.AddPost;
public class PLC004ProtocolParserFactoryImpl implements ProtocolParserFactory {
... ...
package com.zhonglai.luhui.device.protocol.factory.analysis.topic;
package com.zhonglai.luhui.device.protocol.plc004.analysis.topic;
import com.google.gson.JsonObject;
import com.ruoyi.common.utils.GsonConstructor;
import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
public class PutReq {
public AnalysisResult analysisPayload(byte[] payload)
public class AddPost {
public AnalysisResult analysisPayload( byte[] payload)
{
return analysisPayload(new String(payload));
}
... ... @@ -13,6 +13,6 @@ public class PutReq {
public AnalysisResult analysisPayload(String payload)
{
JsonObject jsonObject = GsonConstructor.get().fromJson(payload, JsonObject.class);
return new AnalysisResult(false,true,jsonObject);
return new AnalysisResult(false,false,jsonObject);
}
}
... ...
... ... @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-device-protocol-parser</artifactId>
<artifactId>lh-device-protocol-agreement</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
... ...
package com.zhonglai.luhui.device.protocol.uyu.analysis;
import com.google.gson.JsonObject;
import com.ruoyi.common.utils.ByteUtil;
import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
import com.zhonglai.luhui.device.analysis.util.TopicUtil;
import com.zhonglai.luhui.device.protocol.factory.analysis.ProtocolParserFactory;
import com.zhonglai.luhui.device.protocol.factory.analysis.topic.Online;
import com.zhonglai.luhui.device.protocol.factory.control.DeviceCommandListenService;
import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
import com.zhonglai.luhui.device.protocol.uyu.analysis.topic.CkaDtSndR;
import com.zhonglai.luhui.device.protocol.uyu.analysis.topic.CkaDtSndS;
public class UyuProtocolParserFactoryImpl implements ProtocolParserFactory {
... ...
... ... @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-device-protocol-parser</artifactId>
<artifactId>lh-device-protocol-agreement</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhonglai.luhui</groupId>
<artifactId>lh-device-protocol-parser</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>lh-device-protocol-agreement</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<packaging>pom</packaging>
<modules>
<module>lh-device-xinjie</module>
<module>lh-device-uyu</module>
<module>lh-device-plc004</module>
<module>lh-device-modbus</module>
<module>lh-device-defaul</module>
</modules>
</project>
\ No newline at end of file
... ...
package com.zhonglai.luhui.device.protocol.factory;
import com.google.gson.JsonObject;
import com.ruoyi.common.utils.GsonConstructor;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.zhonglai.luhui.device.analysis.comm.dto.MyException;
import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
import com.zhonglai.luhui.device.analysis.util.TopicUtil;
import com.zhonglai.luhui.device.domain.IotProduct;
import com.zhonglai.luhui.device.protocol.factory.analysis.DefaultProtocolParserFactoryImpl;
import com.zhonglai.luhui.device.protocol.factory.analysis.ProtocolParserFactory;
import com.zhonglai.luhui.device.protocol.factory.comm.DataLogType;
import com.zhonglai.luhui.device.protocol.factory.comm.DeviceDataLog;
... ... @@ -87,16 +85,15 @@ public class ProtocolParserAndPurificationFactory<T> {
* @throws InstantiationException
* @throws IllegalAccessException
*/
private ProtocolParserFactory getProtocolParserFactory(String analysis_clas) throws InstantiationException, IllegalAccessException {
private ProtocolParserFactory getProtocolParserFactory(String analysis_clas) {
if(StringUtils.isEmpty(analysis_clas))
{
return new DefaultProtocolParserFactoryImpl();
throw new MyException("解析服务为空:"+analysis_clas);
}
ProtocolParserFactory protocolParserFactory = PluginsClassLoader.getJarClass(ProtocolParserFactory.class,analysis_clas);
if(null == protocolParserFactory)
{
System.out.println("没有找到解析服务使用默认的");
protocolParserFactory = new DefaultProtocolParserFactoryImpl();
throw new MyException("没有找到解析服务:"+analysis_clas);
}
return protocolParserFactory;
}
... ...
... ... @@ -112,26 +112,28 @@ public class DeviceCommandListenService implements RocketMQReplyListener<Message
DeviceCommandServiceFactory deviceCommandServiceFactory = PluginsClassLoader.getJarClass(DeviceCommandServiceFactory.class,controlCls);
if(null != deviceCommandServiceFactory)
{
IotThingsModelService iotThingsModelService = SpringUtils.getBean(IotThingsModelService.class);
JsonObject jsonObject = iotThingsModelService.reverseModeData(parserDeviceHostDto.getIotProduct().getId(), deviceCommand.getData());
switch (deviceCommand.getCommandType())
{
case read:
NoticeMessageDto noticeMessageDomain = deviceCommandServiceFactory.read(deviceCommand.getDeviceId(), deviceCommand.getData());
NoticeMessageDto noticeMessageDomain = deviceCommandServiceFactory.read(deviceCommand.getDeviceId(), jsonObject);
if(null == noticeMessageDomain)
{
return new Message(MessageCode.DEFAULT_FAIL_CODE,"该设备不支持读取功能");
}
return sendMessage(noticeMessageDomain);
case write:
noticeMessageDomain = deviceCommandServiceFactory.write(deviceCommand.getDeviceId(), deviceCommand.getData());
noticeMessageDomain = deviceCommandServiceFactory.write(deviceCommand.getDeviceId(), jsonObject);
if(null == noticeMessageDomain)
{
return new Message(MessageCode.DEFAULT_FAIL_CODE,"该设备不支持写入功能");
}
return sendMessage(noticeMessageDomain);
case notice:
IotThingsModelService iotThingsModelService = SpringUtils.getBean(IotThingsModelService.class);
JsonObject jsonObject = iotThingsModelService.reverseModeData(parserDeviceHostDto.getIotProduct().getId(), deviceCommand.getData());
noticeMessageDomain = deviceCommandServiceFactory.notice(deviceCommand.getDeviceId(), jsonObject);
if(null == noticeMessageDomain)
... ...
package com.zhonglai.luhui.device.protocol.factory.plugins;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
import com.zhonglai.luhui.device.protocol.factory.analysis.DefaultProtocolParserFactoryImpl;
import com.zhonglai.luhui.device.protocol.factory.analysis.ProtocolParserFactory;
import com.zhonglai.luhui.device.protocol.factory.config.PluginsClassLoader;
import com.zhonglai.luhui.device.protocol.factory.purification.DefaultProtocolPurificationFactoryImpl;
import io.swagger.v3.oas.annotations.servers.Server;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public class InitPlugins {
... ... @@ -38,7 +16,7 @@ public class InitPlugins {
{
// //加载默认的class
// //默认协议解析
// classMap.put("com.zhonglai.luhui.device.protocol.factory.analysis.DefaultProtocolParserFactoryImpl", DefaultProtocolParserFactoryImpl.class);
// classMap.put("com.zhonglai.luhui.device.protocol.defaul.analysis.DefaultProtocolParserFactoryImpl", DefaultProtocolParserFactoryImpl.class);
// //默认协议清洗
// classMap.put("com.zhonglai.luhui.device.protocol.factory.purification.DefaultProtocolPurificationFactoryImpl", DefaultProtocolPurificationFactoryImpl.class);
//
... ...
package com.zhonglai.luhui.device.protocol.factory.service;
import com.ruoyi.common.core.domain.Message;
import com.ruoyi.common.utils.GsonConstructor;
import com.zhonglai.luhui.device.protocol.factory.ProtocolParserAndPurificationFactory;
import com.zhonglai.luhui.device.protocol.factory.control.ControlFactory;
import com.zhonglai.luhui.device.protocol.factory.control.DeviceCommandListenService;
import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceHostDto;
import com.zhonglai.luhui.device.protocol.factory.dto.ProtocolPurificationModel;
import com.zhonglai.luhui.device.protocol.factory.sync.ProtocolSyncFactory;
import com.zhonglai.luhui.rocketmq.service.RocketMqService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
... ...
package com.zhonglai.luhui.device.protocol.factory.service;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.*;
import com.ruoyi.common.utils.GsonConstructor;
import com.ruoyi.common.utils.StringUtils;
import com.zhonglai.luhui.device.analysis.comm.dto.thingsmodels.ThingsModelBase;
... ... @@ -17,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
... ... @@ -163,7 +163,7 @@ public class IotThingsModelService {
{
if(null != jsonObject && jsonObject.size() !=0 )
{
JSONObject vjsonObject = GsonConstructor.get().fromJson(jsonObject.toString(),JSONObject.class);
JSONObject vjsonObject = JSONObject.parseObject(jsonObject.toString());
vjsonObject = reverseTranslateModeData(product_id,vjsonObject);
if(null != vjsonObject)
{
... ... @@ -281,4 +281,5 @@ public class IotThingsModelService {
}
return thingsModel;
}
}
... ...
... ... @@ -34,6 +34,12 @@ public class DefaultDbService {
@Autowired
private DeviceCommandListenService deviceCommandListenService;
@Value("${server.port}")
private long port;
@Value("${server.servlet.context-path}")
private String contextPath;
public List<String> getTopicFromRole()
{
List<String> rlist= new ArrayList<>();
... ... @@ -143,7 +149,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);
iotDevice.setListen_service_ip(SysParameter.service_ip+":"+port+contextPath);
iotDevice.setRssi(parserDeviceHostDto.getRssi());
if(parserDeviceHostDto.is_summary_up())
{
... ...
... ... @@ -21,12 +21,9 @@
<packaging>pom</packaging>
<modules>
<module>lh-device-xinjie</module>
<module>lh-device-protocol-factory</module>
<module>lh-device-http-public</module>
<module>lh-device-modbus</module>
<module>lh-device-uyu</module>
<module>lh-device-plc004</module>
<module>lh-device-protocol-agreement</module>
</modules>
<description>
设备协议解析工厂
... ...
... ... @@ -29,7 +29,7 @@ mqtt:
client:
#客户端操作时间
operationTime: 10
productids: 17
productids: 35
#rocketmq配置信息
rocketmq:
... ...
... ... @@ -41,7 +41,7 @@ spring:
mqtt:
#链接地址
broker: tcp://iot.yu2le.com:1883
broker: tcp://175.24.61.68:1883
#唯一标识
clientId: ${random.uuid}
#公司id
... ... @@ -68,5 +68,5 @@ sys:
rocketmq:
#nameservice服务器地址(多个以英文逗号隔开)
name-server: 8.129.224.117:9876
send-topic: lh-mqtt-service-deviceCommand-test
send-topic: lh-mqtt-service-deviceCommand-test1
send-tag: 1
\ No newline at end of file
... ...