feat: 新功能开发,设备告警信息、设备实时数据查看等。

This commit is contained in:
tianyongbao
2025-10-30 11:19:50 +08:00
parent a9187da813
commit 1d2e2e2513
31 changed files with 2310 additions and 1 deletions

View File

@@ -0,0 +1,34 @@
package com.intc.tdengine.controller;
import com.intc.common.web.core.BaseController;
import com.intc.tdengine.domain.DeviceSensorData;
import com.intc.tdengine.service.IDeviceSensorDataService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* TDEngines设备数据信息Controller
*
* @author Tianyongbao
* @date 2025-10-27
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/td/device")
public class DeviceSensorDataController extends BaseController
{
@Resource
private IDeviceSensorDataService deviceSensorDataService;
@GetMapping("/getHistoryData")
public List<DeviceSensorData> getHistoryData(@RequestParam("serialNum") String serialNum, @RequestParam("deviceId") Long deviceId, @RequestParam("mobilePhone") String mobilePhone, @RequestParam("deviceType") int deviceType, @RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime)
{
return deviceSensorDataService.getHistoryDataList(serialNum,deviceId,mobilePhone,deviceType,startTime,endTime);
}
}

View File

@@ -0,0 +1,33 @@
package com.intc.tdengine.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor // 生成无参构造方法
@AllArgsConstructor // 生成全参构造方法
public class DeviceSensorData {
// 测量字段(随时间变化的数值)
private LocalDateTime time; // 时序主键时间戳
private LocalDateTime createTime; // 数据创建时间
private double dissolvedOxygen; // 溶解氧
private double temperature; // 温度
private double saturability; // 饱和度
private double ph; // pH值
private double salinity; // 盐度
private double treference; // 参考值(具体含义需结合业务)
private double tfluorescence; // 荧光值
private double phaseDifference; // 相位差
private double battery; // 电池电量
// 标签字段(元数据,不随时间频繁变化)
private String serialNum; // 设备序列号
private long deviceId; // 设备ID对应TDengine的BIGINT
private long userId; // 用户ID对应TDengine的BIGINT
private String userName; // 用户名
private String mobilePhone; // 手机号
private String deviceName; // 设备名称
private int deviceType; // 设备类型
}

View File

@@ -0,0 +1,58 @@
package com.intc.tdengine.mapper;
import com.intc.tdengine.domain.DeviceSensorData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@Mapper
public interface DeviceSensorDataMapper {
/**
* 删除数据库
*
* @return 结果
*/
void dropDB();
/**
* 创建数据库
*
* @return 结果
*/
void createDB();
/**
* 创建超级表
*
* @return 结果
*/
void createSuperTable();
/**
* 创建子表
*
* @param deviceSensorData 数据信息
* @return 结果
*/
void createTable(DeviceSensorData deviceSensorData);
/**
* 批量插入数据
*
* @param dataList 数据列表
* @return 影响行数
*/
int batchInsertDeviceSensorData(@Param("dataList") List<DeviceSensorData> dataList);
/**
* 查询数据
*
* @return 影响行数
*/
List<DeviceSensorData> getHistoryDataList(@Param("serialNum") String serialNum,@Param("deviceId") Long deviceId,@Param("mobilePhone") String mobilePhone,@Param("deviceType") int deviceType,@Param("startTime") String startTime,@Param("endTime") String endTime);
}

View File

@@ -0,0 +1,37 @@
package com.intc.tdengine.service;
import com.intc.tdengine.domain.DeviceSensorData;
import org.springframework.scheduling.annotation.Async;
import java.util.List;
/**
* @author YaphetS
*/
public interface IDeviceSensorDataService {
/**
* 创建子表
*
* @param deviceSensorData 数据信息
* @return 结果
*/
void createTable(DeviceSensorData deviceSensorData);
/**
* 批量插入数据
*
* @param dataList 数据列表
* @return 影响行数
*/
@Async
public void batchInsertDeviceSensorData(List<DeviceSensorData> dataList);
/**
* 查询数据
*
* @return 影响行数
*/
public List<DeviceSensorData> getHistoryDataList(String serialNum, Long deviceId, String mobilePhone, int deviceType, String startTime, String endTime);
}

View File

@@ -0,0 +1,54 @@
package com.intc.tdengine.service.impl;
import com.intc.tdengine.domain.DeviceSensorData;
import com.intc.tdengine.mapper.DeviceSensorDataMapper;
import com.intc.tdengine.service.IDeviceSensorDataService;
import jakarta.annotation.Resource;
import org.apache.ibatis.annotations.Param;
import java.util.ArrayList;
import java.util.List;
public class DeviceSensorDataService implements IDeviceSensorDataService {
@Resource
private DeviceSensorDataMapper deviceSensorDataMapper;
/**
* 创建子表
*
* @param deviceSensorData 数据信息
* @return 结果
*/
@Override
public void createTable(DeviceSensorData deviceSensorData) {
deviceSensorDataMapper.createTable(deviceSensorData);
}
/**
* 批量插入数据
*
* @param dataList 数据列表
* @return 影响行数
*/
@Override
public void batchInsertDeviceSensorData(List<DeviceSensorData> dataList) {
deviceSensorDataMapper.batchInsertDeviceSensorData(dataList);
}
/**
* 查询数据
*
* @return 影响行数
*/
@Override
public List<DeviceSensorData> getHistoryDataList(String serialNum,Long deviceId, String mobilePhone, int deviceType,String startTime, String endTime) {
List<DeviceSensorData> list=new ArrayList<>();
try {
list=deviceSensorDataMapper.getHistoryDataList(serialNum,deviceId,mobilePhone,deviceType,startTime,endTime);
}catch (Exception e){
}
return list;
}
}

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.intc.tdengine.mapper.DeviceSensorDataMapper">
<update id="dropDB">
drop database if exists fishery
</update>
<update id="createDB">
create database if not exists fishery
</update>
<update id="createSuperTable">
create table if not exists
fishery.device_sensor_data(time timestamp,createTime timestamp, dissolvedOxygen double, temperature double , saturability double , ph double , salinity double , treference double , tfluorescence double , phaseDifference double , battery double)
tags(
tenant_id nchar(50),
serialNum nchar(100),
deviceId BIGINT,
userId BIGINT,
userName nchar(100),
mobilePhone nchar(20),
deviceName nchar(100),
deviceType int
)
</update>
<update id="createTable" parameterType="com.intc.tdengine.domain.DeviceSensorData">
create table if not exists
`fishery`.t_#{serialNum}
using fishery.device_sensor_data
tags(#{tenantId},#{serialNum},#{deviceId},#{userId},#{userName},#{mobilePhone},#{deviceName},#{deviceType})
</update>
<insert id="batchInsertDeviceSensorData">
insert into
<foreach collection="dataList" item="data" open="" close="" separator=" ">
`fishery`.t_#{serialNum}
using fishery.device_sensor_data
tags(#{data.tenantId},#{data.serialNum},#{data.deviceId},#{data.userId},#{data.userName},#{data.mobilePhone},#{data.deviceName},#{data.deviceType})
(time, createTime, dissolvedOxygen, temperature, saturability, ph, salinity, treference, tfluorescence, phaseDifference, battery) values (#{data.time}, ${data.createTime}, ${data.dissolvedOxygen}, ${data.temperature}, ${data.saturability}, ${data.ph}, ${data.salinity}, ${data.treference}, ${data.tfluorescence}, ${data.phaseDifference}, ${data.battery})
</foreach>
</insert>
<select id="getHistoryDataList" parameterType="String" resultType="com.intc.tdengine.domain.DeviceSensorData">
select time,createTime,dissolvedOxygen,temperature,saturability,ph,salinity,treference,tfluorescence,phaseDifference,battery,serialNum,deviceId,data.mobilePhone,deviceType from fishery.t_#{serialNum}
<where>
time >= #{startTime} and time &lt;= #{endTime}
<if test="serialNum != null and serialNum != ''"> AND serialNum=#{serialNum}</if>
<if test="deviceId != null "> AND deviceId=#{deviceId}</if>
<if test="mobilePhone != null and mobilePhone != ''"> AND mobilePhone=#{mobilePhone}</if>
<if test="deviceType != null"> AND deviceType=#{deviceType}</if>
</where>
</select>
</mapper>