소스 검색

计算合格率公式支持填多个实测值

cr 2 주 전
부모
커밋
e5adf7df17

+ 27 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -32,6 +32,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
+import java.util.stream.Stream;
 
 import static java.math.BigDecimal.ROUND_CEILING;
 import static java.math.BigDecimal.ROUND_HALF_UP;
@@ -1277,7 +1278,32 @@ public class CustomFunction {
      * @Date 2022.08.01 11:06
      **/
     public static List<Object> b445check(List<Object> data, Object designs, Object dev, Object xN, Object hz) {
-
+        if(data.isEmpty()){
+            data = data.stream()
+                    .filter(Objects::nonNull)
+                    .map(Object::toString)
+                    .map(String::trim)
+                    .filter(s -> !s.isEmpty())
+                    .flatMap(s -> {
+                        // 检查包含的分隔符类型,按优先级处理
+                        if (s.contains("、")) {
+                            return Arrays.stream(s.split("、"));
+                        } else if (s.contains(",")) {
+                            return Arrays.stream(s.split(","));
+                        } else if (s.contains(",")) {
+                            return Arrays.stream(s.split(","));
+                        } else if (s.contains("/")) {
+                            return Arrays.stream(s.split("/"));
+                        } else if (s.contains(" ")) {
+                            return Arrays.stream(s.split("\\s+"));
+                        } else {
+                            return Stream.of(s);
+                        }
+                    })
+                    .map(String::trim)
+                    .filter(s -> !s.isEmpty())
+                    .collect(Collectors.toList());
+        }
         List<Object> result = new ArrayList<>();
         designs = designFormat(designs);
         if (StringUtils.isNotEmpty(data, designs, dev)) {

+ 30 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -5465,7 +5465,36 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 /*设计值可以是数值类型,或空(等效0)*/
                 if (dataFd != null) {
                     List<Object> values = dataFd.getRawValue();
-                    boolean nonNumeric = values.stream().filter(StringUtils::isNotEmpty).anyMatch(e -> !StringUtils.isNumber(e));
+                    //boolean nonNumeric = values.stream().filter(StringUtils::isNotEmpty).anyMatch(e -> !StringUtils.isNumber(e));
+                    boolean nonNumeric = values.stream()
+                            .filter(StringUtils::isNotEmpty)
+                            .anyMatch(e -> {
+                                String str = e.toString().trim();
+                                // 检查包含的分隔符类型,按优先级处理
+                                String[] parts;
+                                if (str.contains("、")) {
+                                    parts = str.split("、");
+                                } else if (str.contains(",")) {
+                                    parts = str.split(",");
+                                } else if (str.contains(",")) {
+                                    parts = str.split(",");
+                                } else if (str.contains("/")) {
+                                    parts = str.split("/");
+                                } else if (str.contains(" ")) {
+                                    parts = str.split("\\s+");
+                                } else {
+                                    // 不包含分隔符的情况,直接判断
+                                    return !StringUtils.isNumber(str);
+                                }
+
+                                // 对拆分后的每个部分进行数字判断
+                                for (String part : parts) {
+                                    if (!StringUtils.isNumber(part.trim())) {
+                                        return true;
+                                    }
+                                }
+                                return false;
+                            });
                     if (nonNumeric) {
                         data = values.stream().filter(StringUtils::isNotEmpty).count();
                     } else if (designFd != null) {