Răsfoiți Sursa

TD数据查询接口V1

yuanchao 4 luni în urmă
părinte
comite
5ad861da46

+ 17 - 0
yudao-module-pms/yudao-module-pms-biz/pom.xml

@@ -67,6 +67,23 @@
             <scope>compile</scope>
         </dependency>
 
+        <!--TDEngine相关配置-->
+        <!--pom.xml-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.taosdata.jdbc</groupId>
+            <artifactId>taos-jdbcdriver</artifactId>
+            <version>3.5.1</version>
+        </dependency>
+        <!--pom.xml-->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.2.6</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 47 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/DeviceController.java

@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.pms.controller.admin;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.pms.controller.admin.vo.DeviceVO;
+import cn.iocoder.yudao.module.pms.service.IDeviceService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+
+@Tag(name = "设备管理 ")
+@RestController
+@RequestMapping("/rq/deviceTest")
+public class DeviceController {
+    @Autowired
+    private IDeviceService deviceService;
+
+    /**
+     * 获取一段时间内的设备数据
+     */
+    ////@PreAuthorize("@ss.hasPermi('iot:device:query')")
+    @GetMapping(value = "/runningSpanData")
+    @Operation(summary = "获取一段时间内的设备数据")
+    public CommonResult<List<DeviceVO>> getRunningSpanDataInfo(@Valid DeviceVO device) {
+        return success(deviceService.selectBySpan(device));
+    }
+
+    /**
+     * 获取特定时间的设备数据
+     */
+    ////@PreAuthorize("@ss.hasPermi('iot:device:query')")
+    @GetMapping(value = "/runningSpanData")
+    @Operation(summary = "获取特定时间设备数据")
+    public CommonResult<List<DeviceVO>> getRunningTsDataInfo(@Valid DeviceVO device) {
+        return success(deviceService.selectByTs(device));
+    }
+
+
+}

+ 244 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/vo/DeviceVO.java

@@ -0,0 +1,244 @@
+package cn.iocoder.yudao.module.pms.controller.admin.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.data.annotation.Transient;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 设备对象 iot_device
+ *
+ * @author kerwincui
+ * @date 2021-12-16
+ */
+@Schema(description = "管理后台 - 设备台账分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DeviceVO extends PageParam {
+    private static final long serialVersionUID = 1L;
+
+    @Schema(description="表名称")
+    private String deviceName;
+
+    /**
+     * 设备ID
+     */
+    @Schema(description="设备ID")
+    private Timestamp ts;
+
+    private Timestamp ts1;
+
+    /**
+     * 设备名称
+     */
+    @Schema(description="设备名称")
+    private String logValue;
+
+    /**
+     * 产品ID
+     */
+    @Schema(description="产品ID")
+    private String identity;
+
+    /**
+     * 产品名称
+     */
+    @Schema(description="产品名称")
+    private String productName;
+
+
+    /**
+     * 租户ID
+     */
+    @Schema(description="租户ID")
+    private Long tenantId;
+
+    /**
+     * 租户名称
+     */
+    @Schema(description="租户名称")
+    private String tenantName;
+
+    /**
+     * 设备编号
+     */
+    @Schema(description="设备编号")
+    private String serialNumber;
+
+    /**
+     * 固件版本
+     */
+    @Schema(description="固件版本")
+    private BigDecimal firmwareVersion;
+
+    /**
+     * 设备类型(1-直连设备、2-网关设备、3-监控设备)
+     */
+    @Schema(description="设备类型(1-直连设备、2-网关设备、3-监控设备 4-网关子设备)")
+    private Integer deviceType;
+
+    /**
+     * 设备状态(1-未激活,2-禁用,3-在线,4-离线)
+     */
+    @Schema(description="设备状态(1-未激活,2-禁用,3-在线,4-离线)")
+    private Integer status;
+
+    /**
+     * wifi信号强度(信号极好4格[-55— 0],信号好3格[-70— -55],信号一般2格[-85— -70],信号差1格[-100— -85])
+     */
+    @Schema(description="wifi信号强度(信号极好4格[-55— 0],信号好3格[-70— -55],信号一般2格[-85— -70],信号差1格[-100— -85])")
+    private Integer rssi;
+
+    /**
+     * 设备影子
+     */
+    @Schema(description="是否启用设备影子(0=禁用,1=启用)")
+    private Integer isShadow;
+
+    /**
+     * 设备所在地址
+     */
+    @Schema(description="设备所在地址")
+    private String networkAddress;
+
+    /**
+     * 设备入网IP
+     */
+    @Schema(description="设备入网IP")
+    private String networkIp;
+
+    /**
+     * 设备经度
+     */
+    @Schema(description="设备经度")
+    private BigDecimal longitude;
+
+    /**
+     * 设备纬度
+     */
+    @Schema(description="设备纬度")
+    private BigDecimal latitude;
+
+    /**
+     * 激活时间
+     */
+    @Schema(description="激活时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date activeTime;
+
+    /**
+     * 子设备网关编号
+     */
+    @Schema(description="子设备网关编号")
+    private String gwDevCode;
+
+    /**
+     * 物模型值
+     */
+    @Schema(description="物模型值")
+    private String thingsModelValue;
+
+    /**
+     * 图片地址
+     */
+    @Schema(description="图片地址")
+    private String imgUrl;
+
+    /**
+     * 是否自定义位置
+     **/
+    @Schema(description="定位方式(1=ip自动定位,2=设备定位,3=自定义)")
+    private Integer locationWay;
+
+    /**
+     * 设备摘要
+     **/
+    @Schema(description="设备摘要")
+    private String summary;
+
+    /**
+     * 分组ID,用于分组查询
+     **/
+    @Schema(description="分组ID,用于分组查询")
+    private Long groupId;
+
+    /**
+     * 是否设备所有者,用于查询
+     **/
+    @Schema(description="是否设备所有者,用于查询")
+    private Integer isOwner;
+    /**
+     * 子设备数量
+     */
+    @Schema(description="子设备数量")
+    private Integer subDeviceCount;
+    /**
+     * 是否是模拟设备
+     */
+    @Schema(description="是否是模拟设备")
+    private Integer isSimulate;
+    /**
+     * 子设备地址
+     */
+    @Schema(description="子设备地址")
+    private Integer slaveId;
+    /**
+     * 设备传输协议
+     */
+    @Schema(description="设备传输协议")
+    private String transport;
+
+    @Transient
+    @Schema(description="机构id")
+    private Long deptId;
+
+    @Transient
+    @Schema(description="是否显示下级")
+    private Boolean showChild;
+
+    private List<DeviceVO> subDeviceList;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @Schema(description="删除标志")
+    private String delFlag;
+
+    /**
+     * 关联组态,来源产品
+     */
+    private String guid;
+
+    //private List<SipRelation> sipRelationList;
+
+    private String clientId;
+
+    /**
+     * 发布
+     * */
+    private String postDev;
+
+    /**
+     * 订阅
+     * */
+    private String getDev;
+
+    private int mqttstats;
+
+    private String protocolCode;
+
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+}

+ 30 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/TDDeviceDO.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.pms.dal.dataobject;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.sql.Timestamp;
+
+/**
+ * @author yc
+ * @version 1.0
+ * @className TDDeviceDO
+ * @description
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TDDeviceDO extends BaseDO {
+
+    private String deviceName;
+    private Timestamp ts;
+    private Timestamp ts1;
+    private String identity;
+    private String logValue;
+
+}

+ 29 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/TDDeviceMapper.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.pms.dal.mysql;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.pms.controller.admin.vo.DeviceVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.TDDeviceDO;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * @author yc
+ * @version 1.0
+ * @className TDDeviceMapper
+ * @description
+ */
+@Mapper
+public interface TDDeviceMapper extends BaseMapperX<TDDeviceDO> {
+    @Select("SELECT * FROM iot_log.device_${deviceName} WHERE ts between #{ts} and #{ts1}")
+    @DS("tdengine")
+    List<DeviceVO> selectBySpan(@Param("deviceName") String tableName, @Param("ts") Timestamp ts);
+
+    @Select("SELECT * FROM iot_log.device_${deviceName} WHERE ts = #{ts}")
+    @DS("tdengine")
+    List<DeviceVO> selectByTs(@Param("deviceName") String tableName, @Param("ts") Timestamp ts);
+}

+ 46 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/DeviceServiceImpl.java

@@ -0,0 +1,46 @@
+package cn.iocoder.yudao.module.pms.service;
+
+
+import cn.iocoder.yudao.module.pms.controller.admin.vo.DeviceVO;
+import cn.iocoder.yudao.module.pms.dal.mysql.TDDeviceMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+
+@Service
+@Validated
+public class DeviceServiceImpl implements IDeviceService {
+    private static final Logger log = LoggerFactory.getLogger(DeviceServiceImpl.class);
+
+    @Autowired
+    private TDDeviceMapper deviceMapper;
+
+
+    /**
+     * 查询设备
+     *
+     * @param
+     * @return 设备
+     */
+    @Cacheable(value = "device", key = "#root.methodName + '_' + #deviceId", unless = "#result == null")
+    // TODO 22--slaveId
+    @Override
+    public List<DeviceVO> selectBySpan(DeviceVO deviceVO) {
+        List<DeviceVO> device = deviceMapper.selectBySpan(deviceVO.getDeviceName(),deviceVO.getTs());
+        return device;
+    }
+
+    @Override
+    public List<DeviceVO> selectByTs(DeviceVO deviceVO) {
+        List<DeviceVO> device = deviceMapper.selectByTs(deviceVO.getDeviceName(),deviceVO.getTs());
+        return device;
+    }
+
+
+}

+ 26 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IDeviceService.java

@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.module.pms.service;
+
+import cn.iocoder.yudao.module.pms.controller.admin.vo.DeviceVO;
+
+import java.util.List;
+
+
+public interface IDeviceService {
+
+    /**
+     * 查询一段时间内的运行数据
+     *
+     * @param
+     * @return 设备
+     */
+    List<DeviceVO> selectBySpan(DeviceVO deviceVO);
+
+    /**
+     * 查询指定时间内的运行数据
+     *
+     * @param
+     * @return 设备
+     */
+    List<DeviceVO> selectByTs(DeviceVO deviceVO);
+
+}

+ 18 - 2
yudao-server/src/main/resources/application-dev.yaml

@@ -55,13 +55,24 @@ spring:
           url: jdbc:mysql://1.94.244.160:3306/rqiot?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
           username: root
           password: .N_Mdq!BR1W4
+        # TDengine数据库
+        tdengine:
+          enabled: true
+          url: jdbc:TAOS-RS://1.94.244.160:6041/iot_log
+          username: root
+          password: taosdata
+          driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
+            #driver-class-name: com.taosdata.jdbc.ws.WebSocketDriver
+          jpa:
+            show-sql: true #JPA是否显示sql语句
+            # 使用mysql的方言,否则报错
+            database-platform: org.hibernate.dialect.MySQLDialect
 
   # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
   redis:
     host: localhost # 地址
     port: 6379 # 端口
-    database: 1 # 数据库索引
-    password: 123456 # 密码,建议生产环境开启
+    database: 0  # 数据库索引
 
 --- #################### 定时任务相关配置 ####################
 
@@ -241,3 +252,8 @@ iot:
 # 插件配置
 pf4j:
   pluginsDir: ${user.home}/plugins # 插件目录
+
+
+
+
+

+ 2 - 0
yudao-server/src/main/resources/application.yaml

@@ -288,6 +288,7 @@ yudao:
       - /admin-api/system/dict-data/page
       - /admin-api/rq/iot-tree/simple-list
       - /system/auth/social-login
+      - /admin-api/rq/deviceTest/runningStatus #查询时序数据库设备参数
     ignore-tables:
       - system_tenant
       - system_tenant_package
@@ -332,6 +333,7 @@ yudao:
       - rep_demo_jianpiao
       - tmp_report_data_1
       - tmp_report_data_income
+      - device_* #时序数据库表名称
     ignore-caches:
       - user_role_ids
       - permission_menu_ids