refactor(ems): 优化温度数据查询逻辑

- 重构了 TWTempertureDataServiceImpl 中的 selectLastTWTempertureData 方法
IOT
zch 2 months ago
parent 8b782c4f29
commit f6d6778770

@ -1,9 +1,8 @@
package com.ruoyi.ems.record.service.impl; package com.ruoyi.ems.record.service.impl;
import java.lang.reflect.Method; import java.math.BigDecimal;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.ListIterator;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -131,98 +130,53 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService
* @param tWTempertureData * @param tWTempertureData
* @return * @return
*/ */
@Override @Override
public List<TWTempertureData> selectLastTWTempertureData(TWTempertureData tWTempertureData) { public List<TWTempertureData> selectLastTWTempertureData(TWTempertureData tWTempertureData) {
try { try {
// 从数据库中查询数据列表 // 从数据库中查询数据列表
List<TWTempertureData> twlist = tWTempertureDataMapper.selectLastTWTempertureData(tWTempertureData); List<TWTempertureData> twlist = tWTempertureDataMapper.selectLastTWTempertureData(tWTempertureData);
if (twlist == null || twlist.isEmpty()) { if (twlist == null || twlist.isEmpty()) {
// 如果查询结果为空或列表为空,返回一个空列表 // 如果查询结果为空或列表为空,返回一个空列表
return Collections.emptyList(); 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();
}
}
// 创建一个新的TWTempertureData对象用于存储最终的数据
TWTempertureData data = new TWTempertureData();
boolean humiditySet = false, illuminanceSet = false, noiseSet = false,tempretureSet = false;
/**
* for (TWTempertureData t : twlist) {
* if (!humiditySet && t.getHumidity() != null && t.getHumidity().compareTo(BigDecimal.ZERO) != 0) {
* @param source data.setHumidity(t.getHumidity());
* @param target humiditySet = true;
* @param fieldName }
*/ if (!illuminanceSet && t.getIlluminance() != null && t.getIlluminance().compareTo(BigDecimal.ZERO) != 0 ) {
private void setIfNotNull(TWTempertureData source, TWTempertureData target, String fieldName) { data.setIlluminance(t.getIlluminance());
try { illuminanceSet = true;
// 获取源对象中指定字段的getter方法 }
Method getMethod = TWTempertureData.class.getMethod("get" + capitalize(fieldName)); if (!noiseSet && t.getNoise() != null && t.getNoise().compareTo(BigDecimal.ZERO) != 0) {
// 获取目标对象中指定字段的setter方法参数类型与getter方法返回类型一致 data.setNoise(t.getNoise());
Method setMethod = TWTempertureData.class.getMethod("set" + capitalize(fieldName), getMethod.getReturnType()); noiseSet = true;
// 调用getter方法获取源对象中的字段值
Object value = getMethod.invoke(source);
// 如果字段值不为空且目标对象中的对应字段值为空则调用setter方法将值设置到目标对象中
if (value != null && getMethod.invoke(target) == null) {
setMethod.invoke(target, value);
} }
} catch (Exception e) {
// 捕获并打印异常信息
e.printStackTrace();
}
}
/** if (!tempretureSet && t.getTempreture() != null && t.getTempreture().compareTo(BigDecimal.ZERO) != 0) {
* PM data.setTempreture(t.getTempreture());
* @param source TWTempertureDataPM tempretureSet = true;
* @param target TWTempertureDataPM }
*/ // 如果humidity、illuminance、noise都已设置则停止优先设置
private void setPmValues(TWTempertureData source, TWTempertureData target) { if (humiditySet && illuminanceSet && noiseSet && tempretureSet) {
setIfNotNull(source, target, "pm1"); break;
if (target.getPm1() == null) { }
setIfNotNull(source, target, "pm2");
}
if (target.getPm2() == null) {
setIfNotNull(source, target, "pm10");
} }
// 返回包含最终数据的单元素列表
return Collections.singletonList(data);
} catch (Exception e) {
// 异常处理,打印堆栈跟踪并返回空列表
e.printStackTrace();
return Collections.emptyList();
} }
}
/**
*
*
* @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);
}
} }

@ -245,13 +245,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<!-- <select id="selectLastTWTempertureData" parameterType="TWTempertureData" resultMap="TWTempertureDataResult"> <select id="selectLastTWTempertureData" parameterType="TWTempertureData" resultMap="TWTempertureDataResult">
select * select *
from T_W_TempertureData from T_W_TempertureData
ORDER BY objid DESC ORDER BY objid DESC
LIMIT 1000 LIMIT 1000
</select>--> </select>
<select id="selectLastTWTempertureData" parameterType="TWTempertureData" resultMap="TWTempertureDataResult"> <!-- <select id="selectLastTWTempertureData" parameterType="TWTempertureData" resultMap="TWTempertureDataResult">
select objid, select objid,
monitorId, monitorId,
collectTime, collectTime,
@ -271,5 +271,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
recodeTime >= date_sub(CURDATE(), INTERVAL 7 DAY) recodeTime >= date_sub(CURDATE(), INTERVAL 7 DAY)
ORDER BY objid DESC ORDER BY objid DESC
LIMIT 1000 LIMIT 1000
</select> </select>-->
</mapper> </mapper>

Loading…
Cancel
Save