@ -1,6 +1,10 @@
package com.ruoyi.ems.record.service.impl ;
import java.lang.reflect.Method ;
import java.util.Collections ;
import java.util.List ;
import java.util.ListIterator ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
import com.ruoyi.ems.record.mapper.TWTempertureDataMapper ;
@ -9,19 +13,19 @@ import com.ruoyi.ems.record.service.ITWTempertureDataService;
/ * *
* 物 联 网 实 时 数 据 Service 业 务 层 处 理
*
*
* @author Caoql
* @date 2024 - 0 8 - 21
* /
@Service
public class TWTempertureDataServiceImpl implements ITWTempertureDataService
public class TWTempertureDataServiceImpl implements ITWTempertureDataService
{
@Autowired
private TWTempertureDataMapper tWTempertureDataMapper ;
/ * *
* 查 询 物 联 网 实 时 数 据
*
*
* @param objid 物 联 网 实 时 数 据 主 键
* @return 物 联 网 实 时 数 据
* /
@ -33,7 +37,7 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService
/ * *
* 查 询 物 联 网 实 时 数 据 列 表
*
*
* @param tWTempertureData 物 联 网 实 时 数 据
* @return 物 联 网 实 时 数 据
* /
@ -45,7 +49,7 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService
/ * *
* 新 增 物 联 网 实 时 数 据
*
*
* @param tWTempertureData 物 联 网 实 时 数 据
* @return 结 果
* /
@ -57,7 +61,7 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService
/ * *
* 修 改 物 联 网 实 时 数 据
*
*
* @param tWTempertureData 物 联 网 实 时 数 据
* @return 结 果
* /
@ -69,7 +73,7 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService
/ * *
* 批 量 删 除 物 联 网 实 时 数 据
*
*
* @param objids 需 要 删 除 的 物 联 网 实 时 数 据 主 键
* @return 结 果
* /
@ -81,7 +85,7 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService
/ * *
* 删 除 物 联 网 实 时 数 据 信 息
*
*
* @param objid 物 联 网 实 时 数 据 主 键
* @return 结 果
* /
@ -120,4 +124,103 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService
// 按monitorName分组并获取每个分组的最新记录
return tWTempertureDataMapper . selectLastTWTempertureDataList ( tWTempertureData ) ;
}
/ * *
* 查 询 最 新 的 温 度 数 据 。
* @param tWTempertureData 需 要 查 询 的 温 度 数 据 对 象 。
* @return 如 果 数 据 库 中 存 在 对 应 的 温 度 数 据 , 返 回 包 含 最 新 数 据 的 列 表 ; 如 果 不 存 在 或 查 询 过 程 中 发 生 异 常 , 返 回 空 列 表 。
* /
public List < TWTempertureData > selectLastTWTempertureData ( TWTempertureData tWTempertureData ) {
try {
// 从数据库中查询温度数据列表
List < TWTempertureData > twlist = tWTempertureDataMapper . selectTWTempertureDataList ( tWTempertureData ) ;
if ( twlist = = null | | twlist . isEmpty ( ) ) {
// 如果查询结果为空或列表为空,返回一个空列表
return Collections . emptyList ( ) ;
}
// 创建一个新的TWTempertureData对象用于存储最终的数据
TWTempertureData data = new TWTempertureData ( ) ;
// 获取列表的反向迭代器,从最后一个元素开始遍历
ListIterator < TWTempertureData > iterator = twlist . listIterator ( twlist . size ( ) ) ;
while ( iterator . hasPrevious ( ) ) {
// 获取当前元素
TWTempertureData t = iterator . previous ( ) ;
// 如果当前元素的tempreture属性不为空, 则设置到data对象中
setIfNotNull ( t , data , "tempreture" ) ;
// 如果当前元素的humidity属性不为空, 则设置到data对象中
setIfNotNull ( t , data , "humidity" ) ;
// 如果当前元素的illuminance属性不为空, 则设置到data对象中
setIfNotNull ( t , data , "illuminance" ) ;
// 如果当前元素的noise属性不为空, 则设置到data对象中
setIfNotNull ( t , data , "noise" ) ;
// 设置PM值到data对象中
setPmValues ( t , data ) ;
}
// 返回包含最终数据的单元素列表
return Collections . singletonList ( data ) ;
} catch ( Exception e ) {
// 异常处理,打印堆栈跟踪并返回空列表
e . printStackTrace ( ) ;
return Collections . emptyList ( ) ;
}
}
/ * *
* 将 源 对 象 中 指 定 字 段 的 值 设 置 到 目 标 对 象 的 相 应 字 段 中 , 如 果 该 值 不 为 空 且 目 标 对 象 的 对 应 字 段 为 空 。
*
* @param source 源 对 象 , 从 中 获 取 字 段 值
* @param target 目 标 对 象 , 将 字 段 值 设 置 到 此 对 象 中
* @param fieldName 要 操 作 的 字 段 名 称
* /
private void setIfNotNull ( TWTempertureData source , TWTempertureData target , String fieldName ) {
try {
// 获取源对象中指定字段的getter方法
Method getMethod = TWTempertureData . class . getMethod ( "get" + capitalize ( fieldName ) ) ;
// 获取目标对象中指定字段的setter方法, 参数类型与getter方法返回类型一致
Method setMethod = TWTempertureData . class . getMethod ( "set" + capitalize ( fieldName ) , getMethod . getReturnType ( ) ) ;
// 调用getter方法获取源对象中的字段值
Object value = getMethod . invoke ( source ) ;
// 如果字段值不为空且目标对象中的对应字段值为空, 则调用setter方法将值设置到目标对象中
if ( value ! = null & & getMethod . invoke ( target ) = = null ) {
setMethod . invoke ( target , value ) ;
}
} catch ( Exception e ) {
// 捕获并打印异常信息
e . printStackTrace ( ) ;
}
}
/ * *
* 设 置 PM 值 。
* @param source 源 TWTempertureData 对 象 , 用 于 提 供 PM 值 。
* @param target 目 标 TWTempertureData 对 象 , 用 于 接 收 PM 值 。
* /
private void setPmValues ( TWTempertureData source , TWTempertureData target ) {
setIfNotNull ( source , target , "pm1" ) ;
if ( target . getPm1 ( ) = = null ) {
setIfNotNull ( source , target , "pm2" ) ;
}
if ( target . getPm2 ( ) = = null ) {
setIfNotNull ( source , target , "pm10" ) ;
}
}
/ * *
* 将 字 符 串 的 首 字 母 大 写 。
*
* @param str 要 处 理 的 字 符 串
* @return 首 字 母 大 写 的 字 符 串 , 如 果 输 入 为 空 或 长 度 为 0 , 则 返 回 原 字 符 串
* /
private String capitalize ( String str ) {
// 如果字符串为null或者长度为0, 直接返回原字符串
if ( str = = null | | str . length ( ) = = 0 ) {
return str ;
}
// 将字符串的第一个字符转换为大写,并与剩余部分拼接后返回
return str . substring ( 0 , 1 ) . toUpperCase ( ) + str . substring ( 1 ) ;
}
}