大家好,我又更新干货了,还是那句话,我绝不分享那些照抄官网翻译的东西来骗订阅,我觉得那是浪费时间,要搞就搞干货,今天给大家分享ThingsBoard如何自定义规则节点,而且是万能查询节点,这是本人经过多次研究搞出来的,这个节点有什么特别之处呢?这个节点几乎可以代替其他节点,几乎满足你所有业务的查询,俗称万金油节点。我为什么说没有什么业务不能使用规则链实现呢?这个节点就占了很大的作用。

2.1、下面官方的包结构

下载官方的自定义规则节点的下面,然后修改文件夹名字为你需要自定义的节点名字,如下图:

然后使用IDEA打开工程,修改POM的artifactId

2.2、自定义节点

工程结构如下图:

为什么要创建org.thingsboard.server.util呢?

因为thingsboard项目启动类扫描了org.thingsboard.server,我们自定义的SpringContextUtil需要被spring管理,需要初始化加载容器的bean。只要我们需要自定义节点,就需要获取dao-api下面定义的service类,如果默认的TbContext没有加载进去,我们都需要使用SpringContextUtil来动态创建bean对象,从而实现对当前service类下面方法的调用,下面给出了dao-api的所有service类定义。

定义EntityQueryNode类

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. package org.thingsboard.rule.engine.node.entityquery; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import lombok.extern.slf4j.Slf4j; 大家好,我又更新干货了,还是那句话,我绝不分享那些照抄官网翻译的东西来骗订阅,我觉得那是浪费时间,要搞就搞干货,今天给大家分享ThingsBoard如何自定义规则节点,而且是万能查询节点,这是本人经过多次研究搞出来的,这个节点有什么特别之处呢?这个节点几乎可以代替其他节点,几乎满足你所有业务的查询,俗称万金油节点。我为什么说没有什么业务不能使用规则链实现呢?这个节点就占了很大的作用。工程结构如下图:为什么要创建org.thingsboard.server.util呢?
设备列表和带状态跳转设备列表和带状态跳转一、多个设备二、列表部件路灯列表别名列表Action到详情三、设备详情升级设备详情的别名修改跳回列表四、下一步 设备列表和带状态跳转 上节有提到,这节就是仪表盘甚至整个专题的精髓,信息量很大,请反复阅读体会。。理解透了,甚至可以用仪表盘开发基于设备的应用系统 一、多个设备 为了实现设备的跳转,我们至少需要两个设备。 按照之前添加设备的方式添加 第二个设备路灯2。 二、列表部件 添加路灯列表 进入编辑模式,选择 Entity admin widgets实体管
DTO(Data Transfer Object)是用于在不同层之间传输数据的对象,它表示VO(View Object)和 Entity (实体)之间的中间转换对象。DTO包含了VO或 Entity 对象的属性,并用于前端传递数据到后端进行处理和保存。反之亦然,DTO也可以将后端处理后的数据传递给前端展示。\[1\] Entity 是指与数据库中的表相对应的实体类,它包含了与表中字段对应的属性。在某些情况下, Entity 可能无法满足前端页面所需的数据,这时可以创建一个DTO来扩展 Entity 的属性,以满足需求。例如,在 查询 用户信息和账号订单数量的需求中,可以创建一个继承用户信息 Entity 的DTO,并扩展订单数量属性,以便返回给前端所需的数据。\[2\] VO(View Object)是用于在前端页面展示数据的对象。在某些情况下,DTO中的数据可能无法直接在前端页面显示,需要进行一些转换。例如,DTO中存储的性别是数字0和1,但前端页面需要显示为男和女,这时可以创建一个VO,将DTO转换为VO,并将其中的性别属性转换为对应的汉字,以便返回给前端展示。\[2\] Query 是指用于 查询 数据库的操作,可以根据需求编写相应的 查询 语句来获取所需的数据。在DTO和 Entity 之间的转换过程中,可以使用 Query 查询 数据库并将 查询 到的数据放入DTO中,以便进行后续的数据处理和返回。\[2\] 综上所述,DTO用于在不同层之间传输数据, Entity 表示与数据库表对应的实体类,VO用于前端页面展示数据, Query 用于 查询 数据库获取数据。它们在数据传递和处理过程中起到了不同的作用。 #### 引用[.reference_title] - *1* [后端中dto、vo、 entity 的区别](https://blog.csdn.net/qq_56769991/article/details/125299866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [DTO、VO、 Entity 的区别](https://blog.csdn.net/weixin_45056780/article/details/125293579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]