From f3b34e7fb5799f7d2cc97089a3ee0190935d7a66 Mon Sep 17 00:00:00 2001 From: mashili Date: Wed, 24 Sep 2025 14:09:29 +0800 Subject: [PATCH] =?UTF-8?q?0918=E4=BC=98=E5=8C=96-=E7=82=B9=E4=BD=8D?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=95=B0=E6=8D=AE=E5=80=BC=E5=8F=8D=E5=90=91?= =?UTF-8?q?=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EmsDeviceSettingServiceImpl.java | 53 +++++++++++++++++-- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java index 069d4ab..ac45ec4 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java @@ -9,6 +9,7 @@ import com.xzzn.common.enums.DeviceCategory; import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.StringUtils; import com.xzzn.ems.domain.EmsDevicesSetting; +import com.xzzn.ems.domain.vo.PointDataRequest; import com.xzzn.ems.domain.vo.PointQueryResponse; import com.xzzn.ems.mapper.EmsDevicesSettingMapper; import com.xzzn.ems.mapper.EmsPointMatchMapper; @@ -16,6 +17,7 @@ import com.xzzn.ems.service.IEmsDeviceSettingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -120,10 +122,13 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService } @Override - public List getSingleSiteDevicePoints(String siteId, String deviceId, - String deviceCategory, String dataPointName, - String dataPoint, String sortMethod) { - List response = emsPointMatchMapper.getSingleSiteDevicePoints(siteId,deviceCategory,dataPointName,dataPoint); + public List getSingleSiteDevicePoints(PointDataRequest request) { + String siteId = request.getSiteId(); + String deviceId = request.getDeviceId(); + String deviceCategory = request.getDeviceCategory(); + + List response = emsPointMatchMapper.getSingleSiteDevicePoints(siteId,deviceCategory, + request.getDataPointName(),request.getDataPoint()); // 电动所的电池簇特殊处理-来源pcs+bmsd if (siteId.equals(DDS_SITE_ID) && DeviceCategory.CLUSTER.getCode().equals(deviceCategory)) { @@ -158,7 +163,30 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService if (response == null || response.isEmpty()) { return response; } + BigDecimal lowerBound = request.getLower(); + BigDecimal upperBound = request.getUpper(); + // 数据反向筛选 + if (lowerBound == null && upperBound == null) { + return response; + } + response = response.stream() .filter(point -> { + Object dataValue = point.getPointValue(); + if (dataValue == null) { + return false; + } + // 转换为BigDecimal进行精确比较(避免double精度损失) + BigDecimal value = parseToBigDecimal(dataValue); + if (value == null) { + return false; + } + // 比较:使用BigDecimal的compareTo方法 + boolean meetLower = (lowerBound == null) || (value.compareTo(lowerBound) >= 0); + boolean meetUpper = (upperBound == null) || (value.compareTo(upperBound) <= 0); + return meetLower && meetUpper; + }).collect(Collectors.toList()); + // 结果排序 + String sortMethod = request.getSortMethod(); if (sortMethod==null || sortMethod.isEmpty() || "asc".equals(sortMethod)) {// 升序 response = response.stream().sorted(Comparator.comparing(PointQueryResponse::getUpdateTime)).collect(Collectors.toList()); } else if ("desc".equals(sortMethod)) {//降序 @@ -167,6 +195,23 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService return response; } + // Object转BigDecimal(支持多种类型) + private BigDecimal parseToBigDecimal(Object dataValue) { + if (dataValue instanceof BigDecimal) { + return (BigDecimal) dataValue; + } else if (dataValue instanceof Number) { + return new BigDecimal(((Number) dataValue).toString()); + } else if (dataValue instanceof String) { + try { + return new BigDecimal((String) dataValue); + } catch (NumberFormatException e) { + return null; + } + } else { + return null; + } + } + // 对于dds的电池簇点位最新数据获取特殊处理 private List specialDealWithDDSCluster(List response, String siteId, String deviceId) { JSONObject mergedData = new JSONObject();