作者 钟来

修改bug

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />
\ No newline at end of file
... ... @@ -6,8 +6,8 @@
/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/READ/+ 读数据,需要返回执行结果
## 终端发布
/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/ALL_POST 全量上报数据,不需要返回
/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/ADD_POST 增量上报数据,不需要返回
/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/ALL_POST/+ 全量上报数据,不需要返回
/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/ADD_POST/+ 增量上报数据,不需要返回
/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/PUT_REQ/+ 写数据的执行结果
/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/GET/+ 获取数据
/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/READ_REQ/+ 读数据的执行结果
... ...
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />
\ No newline at end of file
... ... @@ -69,12 +69,12 @@ public class MqttCallback implements MqttCallbackExtended {
if(null == topic)
{
log.error("消息{},topic为空,不做解析");
// getLoggerByName("error").error("消息《"+s+"》解析为空 》》》内容:\r\n"+buffer.toString());
log.error("消息《"+s+"》解析为空 》》》内容:\r\n"+buffer.toString());
return;
}
//日志记录
// getLoggerByName(topic.getClientid()).info(buffer.toString());
log.info(buffer.toString());
//准备数据
byte[] data = mqttMessage.getPayload();
... ...
... ... @@ -57,6 +57,8 @@ public class TerminalService {
private List<String> topics;
@Value("${mqtt.username}")
private String username;
@Value("${mqtt.sub_clientid}")
private String sub_clientid;
@Value("${mqtt.password}")
private String password;
... ... @@ -99,7 +101,7 @@ public class TerminalService {
topic.append("/");
topic.append(mqtt_username);
topic.append("/");
topic.append("+");
topic.append(sub_clientid);
topic.append("/");
topic.append("+");
for(String tc:topics)
... ... @@ -126,7 +128,7 @@ public class TerminalService {
connect();
log.info("-----------mqtt连接服务器成功--------------------");
subscribe();
log.info("-----------订阅{}成功--------------------",topics);
log.info("-----------订阅{}:{}成功--------------------",sub_clientid,topics);
}
... ...
package com.zhonglai.luhui.mqtt.dto.topic;
import com.alibaba.fastjson.JSONObject;
import com.zhonglai.luhui.mqtt.comm.dto.ServerDto;
public class GetDto extends ServerDto {
private JSONObject data;
public JSONObject getData() {
return data;
}
public void setData(JSONObject data) {
this.data = data;
}
}
... ...
package com.zhonglai.luhui.mqtt.service.topic;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONValidator;
import com.ruoyi.system.domain.IotDevice;
import com.ruoyi.system.domain.IotTerminal;
import com.zhonglai.luhui.mqtt.comm.dao.BaseDao;
import com.zhonglai.luhui.mqtt.comm.dto.ServerDto;
import com.zhonglai.luhui.mqtt.comm.dto.TerminalClientRePlyDto;
import com.zhonglai.luhui.mqtt.comm.dto.business.BusinessDto;
import com.zhonglai.luhui.mqtt.comm.factory.BusinessAgreement;
import com.zhonglai.luhui.mqtt.comm.factory.Topic;
import com.zhonglai.luhui.mqtt.comm.service.ClienNoticeService;
import com.zhonglai.luhui.mqtt.comm.util.StringUtils;
import com.zhonglai.luhui.mqtt.dto.topic.AddPostDto;
import com.zhonglai.luhui.mqtt.dto.topic.GetDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
/**
* 获取数据
*/
... ... @@ -18,18 +29,94 @@ public class GetTopic implements BusinessAgreement<GetDto> {
@Autowired
private ClienNoticeService clienNoticeService; //客户端通知服务
protected BaseDao baseDao = new BaseDao();
@Override
public ServerDto analysis(Topic topic, GetDto data) throws Exception {
JSONObject allData = new JSONObject();
JSONObject rData = new JSONObject();
JSONObject jsonObject = data.getData();
if(null !=jsonObject && jsonObject.keySet().size()!=0)
{
for(String key:jsonObject.keySet())
{
if ("0".equals(key))
{
IotDevice iotDevice = (IotDevice) baseDao.get(IotDevice.class,topic.getClientid());
if(null == iotDevice)
{
return null;
}
String value = iotDevice.getThings_model_value();
String config = iotDevice.getThings_model_config();
if(StringUtils.isNotEmpty(value))
{
JSONObject jv = JSONObject.parseObject(value,JSONObject.class);
allData.putAll(jv);
}
if(StringUtils.isNotEmpty(config))
{
JSONObject jc = JSONObject.parseObject(config,JSONObject.class);
allData.putAll(jc);
}
}else {
IotTerminal iotTerminal = (IotTerminal) baseDao.get(IotTerminal.class,topic.getClientid()+"_"+key);
if(null == iotTerminal)
{
continue;
}
String value = iotTerminal.getThings_model_value();
String config = iotTerminal.getThings_model_config();
if(StringUtils.isNotEmpty(value))
{
JSONObject jv = JSONObject.parseObject(value,JSONObject.class);
allData.putAll(jv);
}
if(StringUtils.isNotEmpty(config))
{
JSONObject jc = JSONObject.parseObject(config,JSONObject.class);
allData.putAll(jc);
}
}
}
for(String key:jsonObject.keySet())
{
JSONObject keyJson = rData.getJSONObject(key);
if(null == keyJson)
{
keyJson = new JSONObject();
rData.put(key,keyJson);
}
String parameters = jsonObject.getString(key);
if(StringUtils.isNotEmpty(parameters))
{
String[] ps = parameters.split(",");
for(String p:ps)
{
if(allData.containsKey(p) )
{
keyJson.put(p,allData.getJSONObject(p).get("value"));
}
}
}
}
}
//回复客户端消息
clienNoticeService.replyTerminalMessage(topic, new TerminalClientRePlyDto() {
@Override
public byte[] getCommd() {
return new byte[0];
return rData.toJSONString().getBytes();
}
@Override
public String getReplyCommdTopic(Topic topic) {
return null;
Topic topic1 = new Topic();
BeanUtils.copyProperties(topic,topic1);
topic1.setTopicType("GET_REQ");
return topic1.generateSendMessageTopic();
}
});
return null;
... ... @@ -38,6 +125,11 @@ public class GetTopic implements BusinessAgreement<GetDto> {
@Override
public GetDto toData(BusinessDto data) {
GetDto serverDto = new GetDto();
serverDto.setData((JSONObject) data.getContentData());
serverDto.getData().remove("id");
serverDto.setIotTerminalList(new ArrayList<>());
serverDto.setDeviceSensorDataList(new ArrayList<>());
serverDto.setLogDeviceOperationList(new ArrayList<>());
return serverDto;
}
... ...
... ... @@ -45,9 +45,10 @@ mqtt:
clientId: ${random.uuid}
#公司id
roleid: 2
mqtt_usernames: 6_WP
mqtt_usernames: 6_WP,12_BPQ
#订阅的topic
topics: ADD_POST,ALL_POST,DB_TOPIC_DISTRIBUTE,GET/+,online,PUT_REQ/+,READ_REQ/+
sub_clientid: '865328068125334'
topicconfig: "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/{{messageid}}"
top_return_map: '{"PUT":"PUT_REQ","READ":"READ_REQ"}'
username: sysuser
... ...
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />
\ No newline at end of file