From 3c511d4ef08ffece38891435a9d16ee38319345b Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期六, 18 一月 2025 14:24:32 +0800
Subject: [PATCH] 计算点bug 计算点正则分割时有空字符串,导致计算异常

---
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java
index d97b8f7..7731dc9 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java
@@ -21,6 +21,8 @@
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 计算点处理
@@ -80,6 +82,8 @@
     private Object singleCompute(DaPointDTO dto, Map<String, Object> dataMap,List<String> listGood,List<String> listBad) {
         String expression = dto.getExpression();
         String[] arr = expression.split(regex);
+        // 去掉arr中的空格
+        arr = Stream.of(arr).filter(StringUtils::isNotBlank).toArray(String[]::new);
         // 判断arr都在dataMap中包含
         if (!Arrays.stream(arr).allMatch(dataMap::containsKey)) {
             listBad.add(dto.getPointNo());
@@ -152,6 +156,11 @@
             pointNos.add(s);
             dataMap.putAll(measureHandle.getCurrent(pointNos));
             dataMap.putAll(constantHandle.getCurrent(pointNos));
+            if (dataMap.get(s) == null) {
+                log.info("计算点数据异常");
+                log.info("pointNo=" + dto.getPointNo() +";dataMap.key=" + s);
+                return CommonConstant.BAD_VALUE;
+            }
             String valueStr =  dataMap.get(s).toString();
             if (StrUtils.isNumeric(valueStr) && new BigDecimal(valueStr).compareTo(CommonConstant.BAD_VALUE) == 0) {
                 log.info("BAD_VALUE:" + s);

--
Gitblit v1.9.3