From f6d6778770fe4b645276ace8a644b00b1c1171f7 Mon Sep 17 00:00:00 2001 From: zch Date: Mon, 30 Dec 2024 08:48:02 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ems):=20=E4=BC=98=E5=8C=96=E6=B8=A9?= =?UTF-8?q?=E5=BA=A6=E6=95=B0=E6=8D=AE=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构了 TWTempertureDataServiceImpl 中的 selectLastTWTempertureData 方法 --- .../impl/TWTempertureDataServiceImpl.java | 130 ++++++------------ .../ems/record/TWTempertureDataMapper.xml | 8 +- 2 files changed, 46 insertions(+), 92 deletions(-) diff --git a/ruoyi-ems/src/main/java/com/ruoyi/ems/record/service/impl/TWTempertureDataServiceImpl.java b/ruoyi-ems/src/main/java/com/ruoyi/ems/record/service/impl/TWTempertureDataServiceImpl.java index baed0f2..8bde92c 100644 --- a/ruoyi-ems/src/main/java/com/ruoyi/ems/record/service/impl/TWTempertureDataServiceImpl.java +++ b/ruoyi-ems/src/main/java/com/ruoyi/ems/record/service/impl/TWTempertureDataServiceImpl.java @@ -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; @@ -131,98 +130,53 @@ public class TWTempertureDataServiceImpl implements ITWTempertureDataService * @param tWTempertureData 需要查询的温度数据对象。 * @return 如果数据库中存在对应的温度数据,返回包含最新数据的列表;如果不存在或查询过程中发生异常,返回空列表。 */ - @Override - public List selectLastTWTempertureData(TWTempertureData tWTempertureData) { - try { - // 从数据库中查询数据列表 - List twlist = tWTempertureDataMapper.selectLastTWTempertureData(tWTempertureData); - if (twlist == null || twlist.isEmpty()) { - // 如果查询结果为空或列表为空,返回一个空列表 - return Collections.emptyList(); - } - - // 创建一个新的TWTempertureData对象用于存储最终的数据 - TWTempertureData data = new TWTempertureData(); - // 获取列表的反向迭代器,从最后一个元素开始遍历 - ListIterator 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(); - } - } +@Override +public List selectLastTWTempertureData(TWTempertureData tWTempertureData) { + try { + // 从数据库中查询数据列表 + List twlist = tWTempertureDataMapper.selectLastTWTempertureData(tWTempertureData); + if (twlist == null || twlist.isEmpty()) { + // 如果查询结果为空或列表为空,返回一个空列表 + return Collections.emptyList(); + } + // 创建一个新的TWTempertureData对象用于存储最终的数据 + TWTempertureData data = new TWTempertureData(); + boolean humiditySet = false, illuminanceSet = false, noiseSet = false,tempretureSet = false; - /** - * 将源对象中指定字段的值设置到目标对象的相应字段中,如果该值不为空且目标对象的对应字段为空。 - * - * @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); + + 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; } - } 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"); + 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) { + // 异常处理,打印堆栈跟踪并返回空列表 + 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); - } } diff --git a/ruoyi-ems/src/main/resources/mapper/ems/record/TWTempertureDataMapper.xml b/ruoyi-ems/src/main/resources/mapper/ems/record/TWTempertureDataMapper.xml index 5a95377..c894be2 100644 --- a/ruoyi-ems/src/main/resources/mapper/ems/record/TWTempertureDataMapper.xml +++ b/ruoyi-ems/src/main/resources/mapper/ems/record/TWTempertureDataMapper.xml @@ -245,13 +245,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - +