正在显示
11 个修改的文件
包含
99 行增加
和
26 行删除
| @@ -13,4 +13,5 @@ public interface ThingsModelBase<T> { | @@ -13,4 +13,5 @@ public interface ThingsModelBase<T> { | ||
| 13 | String getView(); | 13 | String getView(); |
| 14 | String getSaveView(); | 14 | String getSaveView(); |
| 15 | Object getCmdView(Object value); | 15 | Object getCmdView(Object value); |
| 16 | + boolean checkValue(); | ||
| 16 | } | 17 | } |
| @@ -38,4 +38,9 @@ public class ArrayModelOutput extends ThingsModelItemBase<JSONArray> | @@ -38,4 +38,9 @@ public class ArrayModelOutput extends ThingsModelItemBase<JSONArray> | ||
| 38 | public Object getCmdView(Object object) { | 38 | public Object getCmdView(Object object) { |
| 39 | return object; | 39 | return object; |
| 40 | } | 40 | } |
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + public boolean checkValue() { | ||
| 44 | + return true; | ||
| 45 | + } | ||
| 41 | } | 46 | } |
| @@ -42,4 +42,9 @@ public class BoolModelOutput extends ThingsModelItemBase<Boolean> | @@ -42,4 +42,9 @@ public class BoolModelOutput extends ThingsModelItemBase<Boolean> | ||
| 42 | public Object getCmdView(Object object) { | 42 | public Object getCmdView(Object object) { |
| 43 | return object; | 43 | return object; |
| 44 | } | 44 | } |
| 45 | + | ||
| 46 | + @Override | ||
| 47 | + public boolean checkValue() { | ||
| 48 | + return true; | ||
| 49 | + } | ||
| 45 | } | 50 | } |
| @@ -43,4 +43,14 @@ public class DecimalModelOutput extends ThingsModelItemBase<BigDecimal> | @@ -43,4 +43,14 @@ public class DecimalModelOutput extends ThingsModelItemBase<BigDecimal> | ||
| 43 | public Object getCmdView(Object object) { | 43 | public Object getCmdView(Object object) { |
| 44 | return object; | 44 | return object; |
| 45 | } | 45 | } |
| 46 | + | ||
| 47 | + @Override | ||
| 48 | + public boolean checkValue() { | ||
| 49 | + BigDecimal bigDecimal = getValue(); | ||
| 50 | + if(null != bigDecimal && bigDecimal.compareTo(min)>=0 && bigDecimal.compareTo(max)<=0) | ||
| 51 | + { | ||
| 52 | + return true; | ||
| 53 | + } | ||
| 54 | + return false; | ||
| 55 | + } | ||
| 46 | } | 56 | } |
| @@ -67,6 +67,11 @@ public class EnumModelOutput extends ThingsModelItemBase<Object> | @@ -67,6 +67,11 @@ public class EnumModelOutput extends ThingsModelItemBase<Object> | ||
| 67 | return conversion(object,clas); | 67 | return conversion(object,clas); |
| 68 | } | 68 | } |
| 69 | 69 | ||
| 70 | + @Override | ||
| 71 | + public boolean checkValue() { | ||
| 72 | + return true; | ||
| 73 | + } | ||
| 74 | + | ||
| 70 | private static Object conversion(Object data ,String clas) { | 75 | private static Object conversion(Object data ,String clas) { |
| 71 | try { | 76 | try { |
| 72 | return stringToTarget(String.valueOf(data),Class.forName(clas)); | 77 | return stringToTarget(String.valueOf(data),Class.forName(clas)); |
| @@ -57,4 +57,19 @@ public class IntegerModelOutput extends ThingsModelItemBase<Integer> | @@ -57,4 +57,19 @@ public class IntegerModelOutput extends ThingsModelItemBase<Integer> | ||
| 57 | BigDecimal bigDecimal = new BigDecimal(object.toString()); | 57 | BigDecimal bigDecimal = new BigDecimal(object.toString()); |
| 58 | return bigDecimal.multiply(new BigDecimal(acy)).intValue(); | 58 | return bigDecimal.multiply(new BigDecimal(acy)).intValue(); |
| 59 | } | 59 | } |
| 60 | + | ||
| 61 | + @Override | ||
| 62 | + public boolean checkValue() { | ||
| 63 | + if(null != getValue() ) | ||
| 64 | + { | ||
| 65 | + BigDecimal bigDecimal = new BigDecimal(getValue()); | ||
| 66 | + | ||
| 67 | + if(bigDecimal.compareTo(min)>=0 && bigDecimal.compareTo(max)<=0) | ||
| 68 | + { | ||
| 69 | + return true; | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + } | ||
| 73 | + return false; | ||
| 74 | + } | ||
| 60 | } | 75 | } |
| @@ -7,7 +7,7 @@ import lombok.Data; | @@ -7,7 +7,7 @@ import lombok.Data; | ||
| 7 | * 字符串可以适配所有 | 7 | * 字符串可以适配所有 |
| 8 | */ | 8 | */ |
| 9 | @Data | 9 | @Data |
| 10 | -public class StringModelOutput extends ThingsModelItemBase<Object> | 10 | +public class StringModelOutput extends ThingsModelItemBase<String> |
| 11 | { | 11 | { |
| 12 | private int maxLength; | 12 | private int maxLength; |
| 13 | 13 | ||
| @@ -30,4 +30,13 @@ public class StringModelOutput extends ThingsModelItemBase<Object> | @@ -30,4 +30,13 @@ public class StringModelOutput extends ThingsModelItemBase<Object> | ||
| 30 | public Object getCmdView(Object object) { | 30 | public Object getCmdView(Object object) { |
| 31 | return object; | 31 | return object; |
| 32 | } | 32 | } |
| 33 | + | ||
| 34 | + @Override | ||
| 35 | + public boolean checkValue() { | ||
| 36 | + if(null != getValue() && getValue().length()<maxLength) | ||
| 37 | + { | ||
| 38 | + return true; | ||
| 39 | + } | ||
| 40 | + return false; | ||
| 41 | + } | ||
| 33 | } | 42 | } |
| @@ -97,6 +97,10 @@ public class DataModeAnalysisService { | @@ -97,6 +97,10 @@ public class DataModeAnalysisService { | ||
| 97 | 97 | ||
| 98 | thingsModelBase.addValue(jsData.get(key)); | 98 | thingsModelBase.addValue(jsData.get(key)); |
| 99 | 99 | ||
| 100 | + if(!thingsModelBase.checkValue()) | ||
| 101 | + { | ||
| 102 | + continue; | ||
| 103 | + } | ||
| 100 | ThingsModelItemBase thingsModelItemBase = (ThingsModelItemBase) thingsModelBase; | 104 | ThingsModelItemBase thingsModelItemBase = (ThingsModelItemBase) thingsModelBase; |
| 101 | //记录数据日志 | 105 | //记录数据日志 |
| 102 | if(1==thingsModelItemBase.getIs_save_log() && null != serverDto.getDeviceSensorDataList()) | 106 | if(1==thingsModelItemBase.getIs_save_log() && null != serverDto.getDeviceSensorDataList()) |
| @@ -10,6 +10,7 @@ import com.zhonglai.luhui.mqtt.comm.factory.Topic; | @@ -10,6 +10,7 @@ import com.zhonglai.luhui.mqtt.comm.factory.Topic; | ||
| 10 | import com.zhonglai.luhui.mqtt.comm.util.ByteUtil; | 10 | import com.zhonglai.luhui.mqtt.comm.util.ByteUtil; |
| 11 | import com.zhonglai.luhui.mqtt.service.db.DeviceService; | 11 | import com.zhonglai.luhui.mqtt.service.db.DeviceService; |
| 12 | import lombok.SneakyThrows; | 12 | import lombok.SneakyThrows; |
| 13 | +import org.apache.commons.beanutils.BeanUtils; | ||
| 13 | import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; | 14 | import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; |
| 14 | import org.eclipse.paho.client.mqttv3.MqttCallbackExtended; | 15 | import org.eclipse.paho.client.mqttv3.MqttCallbackExtended; |
| 15 | import org.eclipse.paho.client.mqttv3.MqttException; | 16 | import org.eclipse.paho.client.mqttv3.MqttException; |
| @@ -53,6 +54,9 @@ public class MqttCallback implements MqttCallbackExtended { | @@ -53,6 +54,9 @@ public class MqttCallback implements MqttCallbackExtended { | ||
| 53 | 54 | ||
| 54 | @Override | 55 | @Override |
| 55 | public void messageArrived(String s, MqttMessage mqttMessage) { | 56 | public void messageArrived(String s, MqttMessage mqttMessage) { |
| 57 | + Topic desttopic = new Topic(s); | ||
| 58 | + desttopic.setPayloadtype("POST_REQ"); | ||
| 59 | + | ||
| 56 | //接收到消息 | 60 | //接收到消息 |
| 57 | StringBuffer buffer = new StringBuffer(); | 61 | StringBuffer buffer = new StringBuffer(); |
| 58 | buffer.append("topic:"); | 62 | buffer.append("topic:"); |
| @@ -65,30 +69,33 @@ public class MqttCallback implements MqttCallbackExtended { | @@ -65,30 +69,33 @@ public class MqttCallback implements MqttCallbackExtended { | ||
| 65 | buffer.append(ByteUtil.hexStringToSpace(ByteUtil.toHexString(mqttMessage.getPayload()))); | 69 | buffer.append(ByteUtil.hexStringToSpace(ByteUtil.toHexString(mqttMessage.getPayload()))); |
| 66 | buffer.append("\r\n"); | 70 | buffer.append("\r\n"); |
| 67 | buffer.append("\r\n"); | 71 | buffer.append("\r\n"); |
| 68 | - Topic topic = new Topic(s); | ||
| 69 | - if(null == topic) | ||
| 70 | - { | ||
| 71 | - log.error("消息{},topic为空,不做解析"); | ||
| 72 | - log.error("消息《"+s+"》解析为空 》》》内容:\r\n"+buffer.toString()); | ||
| 73 | - return; | ||
| 74 | - } | ||
| 75 | - | ||
| 76 | - //日志记录 | ||
| 77 | - log.info(buffer.toString()); | ||
| 78 | 72 | ||
| 79 | - //准备数据 | ||
| 80 | - byte[] data = mqttMessage.getPayload(); | ||
| 81 | - IotDevice iotDevice = deviceService.getDeviceById(topic.getClientid()); | ||
| 82 | - if(null == iotDevice) | ||
| 83 | - { | ||
| 84 | - log.info("设备{}不存在",topic.getClientid()); | ||
| 85 | - return; | ||
| 86 | - } | ||
| 87 | - if("ONLINE".equals(topic.getTopicType().toUpperCase())) | ||
| 88 | - { | ||
| 89 | - topic.setPayloadtype("String"); | ||
| 90 | - } | ||
| 91 | try { | 73 | try { |
| 74 | + Topic topic = new Topic(s); | ||
| 75 | + if(null == topic) | ||
| 76 | + { | ||
| 77 | + log.error("消息{},topic为空,不做解析"); | ||
| 78 | + log.error("消息《"+s+"》解析为空 》》》内容:\r\n"+buffer.toString()); | ||
| 79 | + terminalService.publish(desttopic.generateSendMessageTopic(),"0"); | ||
| 80 | + return; | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + //日志记录 | ||
| 84 | + log.info(buffer.toString()); | ||
| 85 | + | ||
| 86 | + //准备数据 | ||
| 87 | + byte[] data = mqttMessage.getPayload(); | ||
| 88 | + IotDevice iotDevice = deviceService.getDeviceById(topic.getClientid()); | ||
| 89 | + if(null == iotDevice) | ||
| 90 | + { | ||
| 91 | + log.info("设备{}不存在",topic.getClientid()); | ||
| 92 | + terminalService.publish(desttopic.generateSendMessageTopic(),"1"); | ||
| 93 | + return; | ||
| 94 | + } | ||
| 95 | + if("ONLINE".equals(topic.getTopicType().toUpperCase())) | ||
| 96 | + { | ||
| 97 | + topic.setPayloadtype("String"); | ||
| 98 | + } | ||
| 92 | //转化为协议对象 | 99 | //转化为协议对象 |
| 93 | BusinessDto businessDto = BusinessDtoClassNew.newBean(topic.getPayloadtype(),data).analyticalModel(iotDevice.getThings_model_value()); | 100 | BusinessDto businessDto = BusinessDtoClassNew.newBean(topic.getPayloadtype(),data).analyticalModel(iotDevice.getThings_model_value()); |
| 94 | 101 | ||
| @@ -106,8 +113,17 @@ public class MqttCallback implements MqttCallbackExtended { | @@ -106,8 +113,17 @@ public class MqttCallback implements MqttCallbackExtended { | ||
| 106 | 113 | ||
| 107 | //数据持久化 | 114 | //数据持久化 |
| 108 | dataPersistenceService.persistence(topic,dto); | 115 | dataPersistenceService.persistence(topic,dto); |
| 116 | + | ||
| 117 | + terminalService.publish(desttopic.generateSendMessageTopic(),"2"); | ||
| 118 | + log.info("{}payload解析完成",s); | ||
| 109 | } catch (Exception e) { | 119 | } catch (Exception e) { |
| 110 | log.error(s+"消息解析异常",e); | 120 | log.error(s+"消息解析异常",e); |
| 121 | + try { | ||
| 122 | + terminalService.publish(desttopic.generateSendMessageTopic(),"3"); | ||
| 123 | + } catch (MqttException ex) { | ||
| 124 | + log.error(s+"消息解析异常时返回的执行结果消息异常",ex); | ||
| 125 | + } | ||
| 126 | + | ||
| 111 | } | 127 | } |
| 112 | } | 128 | } |
| 113 | 129 |
| @@ -45,10 +45,10 @@ mqtt: | @@ -45,10 +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: NWDB_2023 |
| 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: '866569062386039' | 51 | + sub_clientid: '+' |
| 52 | topicconfig: "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/{{messageid}}" | 52 | topicconfig: "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/{{messageid}}" |
| 53 | top_return_map: '{"PUT":"PUT_REQ","READ":"READ_REQ"}' | 53 | top_return_map: '{"PUT":"PUT_REQ","READ":"READ_REQ"}' |
| 54 | username: sysuser | 54 | username: sysuser |
-
请 注册 或 登录 后发表评论