作者 钟来

修改bug

1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />  
@@ -6,8 +6,8 @@ @@ -6,8 +6,8 @@
6 /{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/READ/+ 读数据,需要返回执行结果 6 /{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/READ/+ 读数据,需要返回执行结果
7 7
8 ## 终端发布 8 ## 终端发布
9 -/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/ALL_POST 全量上报数据,不需要返回  
10 -/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/ADD_POST 增量上报数据,不需要返回 9 +/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/ALL_POST/+ 全量上报数据,不需要返回
  10 +/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/ADD_POST/+ 增量上报数据,不需要返回
11 /{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/PUT_REQ/+ 写数据的执行结果 11 /{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/PUT_REQ/+ 写数据的执行结果
12 /{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/GET/+ 获取数据 12 /{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/GET/+ 获取数据
13 /{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/READ_REQ/+ 读数据的执行结果 13 /{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/READ_REQ/+ 读数据的执行结果
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />  
@@ -69,12 +69,12 @@ public class MqttCallback implements MqttCallbackExtended { @@ -69,12 +69,12 @@ public class MqttCallback implements MqttCallbackExtended {
69 if(null == topic) 69 if(null == topic)
70 { 70 {
71 log.error("消息{},topic为空,不做解析"); 71 log.error("消息{},topic为空,不做解析");
72 -// getLoggerByName("error").error("消息《"+s+"》解析为空 》》》内容:\r\n"+buffer.toString()); 72 + log.error("消息《"+s+"》解析为空 》》》内容:\r\n"+buffer.toString());
73 return; 73 return;
74 } 74 }
75 75
76 //日志记录 76 //日志记录
77 -// getLoggerByName(topic.getClientid()).info(buffer.toString()); 77 + log.info(buffer.toString());
78 78
79 //准备数据 79 //准备数据
80 byte[] data = mqttMessage.getPayload(); 80 byte[] data = mqttMessage.getPayload();
@@ -57,6 +57,8 @@ public class TerminalService { @@ -57,6 +57,8 @@ public class TerminalService {
57 private List<String> topics; 57 private List<String> topics;
58 @Value("${mqtt.username}") 58 @Value("${mqtt.username}")
59 private String username; 59 private String username;
  60 + @Value("${mqtt.sub_clientid}")
  61 + private String sub_clientid;
60 @Value("${mqtt.password}") 62 @Value("${mqtt.password}")
61 private String password; 63 private String password;
62 64
@@ -99,7 +101,7 @@ public class TerminalService { @@ -99,7 +101,7 @@ public class TerminalService {
99 topic.append("/"); 101 topic.append("/");
100 topic.append(mqtt_username); 102 topic.append(mqtt_username);
101 topic.append("/"); 103 topic.append("/");
102 - topic.append("+"); 104 + topic.append(sub_clientid);
103 topic.append("/"); 105 topic.append("/");
104 topic.append("+"); 106 topic.append("+");
105 for(String tc:topics) 107 for(String tc:topics)
@@ -126,7 +128,7 @@ public class TerminalService { @@ -126,7 +128,7 @@ public class TerminalService {
126 connect(); 128 connect();
127 log.info("-----------mqtt连接服务器成功--------------------"); 129 log.info("-----------mqtt连接服务器成功--------------------");
128 subscribe(); 130 subscribe();
129 - log.info("-----------订阅{}成功--------------------",topics); 131 + log.info("-----------订阅{}:{}成功--------------------",sub_clientid,topics);
130 132
131 } 133 }
132 134
1 package com.zhonglai.luhui.mqtt.dto.topic; 1 package com.zhonglai.luhui.mqtt.dto.topic;
2 2
  3 +import com.alibaba.fastjson.JSONObject;
3 import com.zhonglai.luhui.mqtt.comm.dto.ServerDto; 4 import com.zhonglai.luhui.mqtt.comm.dto.ServerDto;
4 5
5 public class GetDto extends ServerDto { 6 public class GetDto extends ServerDto {
  7 + private JSONObject data;
  8 +
  9 + public JSONObject getData() {
  10 + return data;
  11 + }
  12 +
  13 + public void setData(JSONObject data) {
  14 + this.data = data;
  15 + }
6 } 16 }
1 package com.zhonglai.luhui.mqtt.service.topic; 1 package com.zhonglai.luhui.mqtt.service.topic;
2 2
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.alibaba.fastjson.JSONObject;
  5 +import com.alibaba.fastjson.JSONValidator;
  6 +import com.ruoyi.system.domain.IotDevice;
  7 +import com.ruoyi.system.domain.IotTerminal;
  8 +import com.zhonglai.luhui.mqtt.comm.dao.BaseDao;
3 import com.zhonglai.luhui.mqtt.comm.dto.ServerDto; 9 import com.zhonglai.luhui.mqtt.comm.dto.ServerDto;
4 import com.zhonglai.luhui.mqtt.comm.dto.TerminalClientRePlyDto; 10 import com.zhonglai.luhui.mqtt.comm.dto.TerminalClientRePlyDto;
5 import com.zhonglai.luhui.mqtt.comm.dto.business.BusinessDto; 11 import com.zhonglai.luhui.mqtt.comm.dto.business.BusinessDto;
6 import com.zhonglai.luhui.mqtt.comm.factory.BusinessAgreement; 12 import com.zhonglai.luhui.mqtt.comm.factory.BusinessAgreement;
7 import com.zhonglai.luhui.mqtt.comm.factory.Topic; 13 import com.zhonglai.luhui.mqtt.comm.factory.Topic;
8 import com.zhonglai.luhui.mqtt.comm.service.ClienNoticeService; 14 import com.zhonglai.luhui.mqtt.comm.service.ClienNoticeService;
  15 +import com.zhonglai.luhui.mqtt.comm.util.StringUtils;
  16 +import com.zhonglai.luhui.mqtt.dto.topic.AddPostDto;
9 import com.zhonglai.luhui.mqtt.dto.topic.GetDto; 17 import com.zhonglai.luhui.mqtt.dto.topic.GetDto;
  18 +import org.springframework.beans.BeanUtils;
10 import org.springframework.beans.factory.annotation.Autowired; 19 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Service; 20 import org.springframework.stereotype.Service;
12 21
  22 +import java.util.ArrayList;
  23 +
13 /** 24 /**
14 * 获取数据 25 * 获取数据
15 */ 26 */
@@ -18,18 +29,94 @@ public class GetTopic implements BusinessAgreement<GetDto> { @@ -18,18 +29,94 @@ public class GetTopic implements BusinessAgreement<GetDto> {
18 @Autowired 29 @Autowired
19 private ClienNoticeService clienNoticeService; //客户端通知服务 30 private ClienNoticeService clienNoticeService; //客户端通知服务
20 31
  32 + protected BaseDao baseDao = new BaseDao();
  33 +
21 @Override 34 @Override
22 public ServerDto analysis(Topic topic, GetDto data) throws Exception { 35 public ServerDto analysis(Topic topic, GetDto data) throws Exception {
  36 + JSONObject allData = new JSONObject();
  37 + JSONObject rData = new JSONObject();
  38 +
  39 + JSONObject jsonObject = data.getData();
  40 + if(null !=jsonObject && jsonObject.keySet().size()!=0)
  41 + {
  42 + for(String key:jsonObject.keySet())
  43 + {
  44 + if ("0".equals(key))
  45 + {
  46 + IotDevice iotDevice = (IotDevice) baseDao.get(IotDevice.class,topic.getClientid());
  47 + if(null == iotDevice)
  48 + {
  49 + return null;
  50 + }
  51 + String value = iotDevice.getThings_model_value();
  52 + String config = iotDevice.getThings_model_config();
  53 + if(StringUtils.isNotEmpty(value))
  54 + {
  55 + JSONObject jv = JSONObject.parseObject(value,JSONObject.class);
  56 + allData.putAll(jv);
  57 + }
  58 + if(StringUtils.isNotEmpty(config))
  59 + {
  60 + JSONObject jc = JSONObject.parseObject(config,JSONObject.class);
  61 + allData.putAll(jc);
  62 + }
  63 + }else {
  64 + IotTerminal iotTerminal = (IotTerminal) baseDao.get(IotTerminal.class,topic.getClientid()+"_"+key);
  65 + if(null == iotTerminal)
  66 + {
  67 + continue;
  68 + }
  69 + String value = iotTerminal.getThings_model_value();
  70 + String config = iotTerminal.getThings_model_config();
  71 + if(StringUtils.isNotEmpty(value))
  72 + {
  73 + JSONObject jv = JSONObject.parseObject(value,JSONObject.class);
  74 + allData.putAll(jv);
  75 + }
  76 + if(StringUtils.isNotEmpty(config))
  77 + {
  78 + JSONObject jc = JSONObject.parseObject(config,JSONObject.class);
  79 + allData.putAll(jc);
  80 + }
  81 + }
  82 + }
  83 +
  84 + for(String key:jsonObject.keySet())
  85 + {
  86 + JSONObject keyJson = rData.getJSONObject(key);
  87 + if(null == keyJson)
  88 + {
  89 + keyJson = new JSONObject();
  90 + rData.put(key,keyJson);
  91 + }
  92 + String parameters = jsonObject.getString(key);
  93 + if(StringUtils.isNotEmpty(parameters))
  94 + {
  95 + String[] ps = parameters.split(",");
  96 + for(String p:ps)
  97 + {
  98 + if(allData.containsKey(p) )
  99 + {
  100 + keyJson.put(p,allData.getJSONObject(p).get("value"));
  101 + }
  102 + }
  103 + }
  104 +
  105 + }
  106 + }
23 //回复客户端消息 107 //回复客户端消息
24 clienNoticeService.replyTerminalMessage(topic, new TerminalClientRePlyDto() { 108 clienNoticeService.replyTerminalMessage(topic, new TerminalClientRePlyDto() {
25 @Override 109 @Override
26 public byte[] getCommd() { 110 public byte[] getCommd() {
27 - return new byte[0]; 111 + return rData.toJSONString().getBytes();
28 } 112 }
29 113
30 @Override 114 @Override
31 public String getReplyCommdTopic(Topic topic) { 115 public String getReplyCommdTopic(Topic topic) {
32 - return null; 116 + Topic topic1 = new Topic();
  117 + BeanUtils.copyProperties(topic,topic1);
  118 + topic1.setTopicType("GET_REQ");
  119 + return topic1.generateSendMessageTopic();
33 } 120 }
34 }); 121 });
35 return null; 122 return null;
@@ -38,6 +125,11 @@ public class GetTopic implements BusinessAgreement<GetDto> { @@ -38,6 +125,11 @@ public class GetTopic implements BusinessAgreement<GetDto> {
38 @Override 125 @Override
39 public GetDto toData(BusinessDto data) { 126 public GetDto toData(BusinessDto data) {
40 GetDto serverDto = new GetDto(); 127 GetDto serverDto = new GetDto();
  128 + serverDto.setData((JSONObject) data.getContentData());
  129 + serverDto.getData().remove("id");
  130 + serverDto.setIotTerminalList(new ArrayList<>());
  131 + serverDto.setDeviceSensorDataList(new ArrayList<>());
  132 + serverDto.setLogDeviceOperationList(new ArrayList<>());
41 return serverDto; 133 return serverDto;
42 } 134 }
43 135
@@ -45,9 +45,10 @@ mqtt: @@ -45,9 +45,10 @@ mqtt:
45 clientId: ${random.uuid} 45 clientId: ${random.uuid}
46 #公司id 46 #公司id
47 roleid: 2 47 roleid: 2
48 - mqtt_usernames: 6_WP 48 + mqtt_usernames: 6_WP,12_BPQ
49 #订阅的topic 49 #订阅的topic
50 topics: ADD_POST,ALL_POST,DB_TOPIC_DISTRIBUTE,GET/+,online,PUT_REQ/+,READ_REQ/+ 50 topics: ADD_POST,ALL_POST,DB_TOPIC_DISTRIBUTE,GET/+,online,PUT_REQ/+,READ_REQ/+
  51 + sub_clientid: '865328068125334'
51 topicconfig: "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/{{messageid}}" 52 topicconfig: "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/{{messageid}}"
52 top_return_map: '{"PUT":"PUT_REQ","READ":"READ_REQ"}' 53 top_return_map: '{"PUT":"PUT_REQ","READ":"READ_REQ"}'
53 username: sysuser 54 username: sysuser
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4" />