|
|
|
@ -1,9 +1,8 @@
|
|
|
|
|
package com.ruoyi.ems.record.service.impl;
|
|
|
|
|
|
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.ListIterator;
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
@ -143,23 +142,32 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService
|
|
|
|
|
|
|
|
|
|
// 创建一个新的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);
|
|
|
|
|
boolean humiditySet = false, illuminanceSet = false, noiseSet = false,tempretureSet = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (TWTempertureData t : twlist) {
|
|
|
|
|
if (!humiditySet && t.getHumidity() != null && t.getHumidity().compareTo(BigDecimal.ZERO) != 0) {
|
|
|
|
|
data.setHumidity(t.getHumidity());
|
|
|
|
|
humiditySet = true;
|
|
|
|
|
}
|
|
|
|
|
if (!illuminanceSet && t.getIlluminance() != null && t.getIlluminance().compareTo(BigDecimal.ZERO) != 0 ) {
|
|
|
|
|
data.setIlluminance(t.getIlluminance());
|
|
|
|
|
illuminanceSet = true;
|
|
|
|
|
}
|
|
|
|
|
if (!noiseSet && t.getNoise() != null && t.getNoise().compareTo(BigDecimal.ZERO) != 0) {
|
|
|
|
|
data.setNoise(t.getNoise());
|
|
|
|
|
noiseSet = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!tempretureSet && t.getTempreture() != null && t.getTempreture().compareTo(BigDecimal.ZERO) != 0) {
|
|
|
|
|
data.setTempreture(t.getTempreture());
|
|
|
|
|
tempretureSet = true;
|
|
|
|
|
}
|
|
|
|
|
// 如果humidity、illuminance、noise都已设置,则停止优先设置
|
|
|
|
|
if (humiditySet && illuminanceSet && noiseSet && tempretureSet) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 返回包含最终数据的单元素列表
|
|
|
|
|
return Collections.singletonList(data);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
@ -170,59 +178,5 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 将源对象中指定字段的值设置到目标对象的相应字段中,如果该值不为空且目标对象的对应字段为空。
|
|
|
|
|
*
|
|
|
|
|
* @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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|