Просмотр исходного кода

处理能源类型只有包含不包含 这个调整下 别的去掉的问题;增加不包含操作符处理逻辑

lixiaolong 1 месяц назад
Родитель
Сommit
9938ebdc52

+ 31 - 24
tenant/costsorrule/src/main/java/com/jzg/costsorrule/service/impl/RuleServiceImpl.java

@@ -130,13 +130,11 @@ public class RuleServiceImpl implements RuleService {
         if (min == null || min.isEmpty()) {
             return false;
         }
-        String[] split = min.split(",");
-        for (String sp : split) {
-            if (sp.equals(value)) {
-                return true;
-            }
-        }
-        return false;
+        boolean contains = Arrays.stream(min.split(","))
+                .anyMatch(sp -> sp.trim().equals(value.trim()));
+        // "1"(EQ):在列表中匹配;"6"(NE):不在列表中匹配
+        boolean isNegate = OperatorConstant.InputNumber.NE.getCode().equals(linkVo.getOperator());
+        return isNegate ? !contains : contains;
     }
 
     private boolean inputNumberEqual(RuleAttrLinkVo linkVo, String value) {
@@ -165,7 +163,7 @@ public class RuleServiceImpl implements RuleService {
                 return true;
             }
         } else if (OperatorConstant.InputNumber.NE.getCode().equals(linkVo.getOperator())) {// 不包含:不在 [min, max] 区间内
-            if (min > v && max < v) {
+            if (min > v || max < v) {
                 return true;
             }
         }
@@ -174,27 +172,32 @@ public class RuleServiceImpl implements RuleService {
 
 
     private boolean inputTagEqual(RuleAttrLinkVo linkVo, String value) {
-        //将值进行分割
-
-        AtomicBoolean returnBool = new AtomicBoolean(false);
-
-        List<String> equalsMap = new ArrayList<>();
-        //字符型评分
-        equalsMap.add("CharacterBasedRating");
-        //交强字符型评分
-        equalsMap.add("JqCharacterBasedRating");
-        //商业字符型评分
-        equalsMap.add("SyCharacterBasedRating");
-
-        return returnBool.get();
+        String min = linkVo.getMin();
+        if (min == null || min.isEmpty() || value == null) {
+            return false;
+        }
+        String[] split = min.split(",");
+        List<String> equalsMap = Arrays.asList(
+                "CharacterBasedRating", "JqCharacterBasedRating", "SyCharacterBasedRating");
+        boolean matched;
+        if (equalsMap.contains(linkVo.getAttrCode())) {
+            matched = Arrays.stream(split).anyMatch(value::equals);
+        } else {
+            matched = Arrays.stream(split).anyMatch(value::contains);
+        }
+        boolean isNegate = OperatorConstant.InputNumber.NE.getCode().equals(linkVo.getOperator());
+        return isNegate ? !matched : matched;
     }
 
 
     private boolean selectEqual(RuleAttrLinkVo linkVo, String value) {
-        if (linkVo.getMin() != null && linkVo.getMin().contains(value)) {
-            return true;
+        String min = linkVo.getMin();
+        if (min == null || min.isEmpty() || value == null) {
+            return false;
         }
-        return false;
+        boolean contains = min.contains(value);
+        boolean isNegate = OperatorConstant.InputNumber.NE.getCode().equals(linkVo.getOperator());
+        return isNegate ? !contains : contains;
     }
 
     private boolean radioEqual(RuleAttrLinkVo linkVo, String value) {
@@ -249,6 +252,10 @@ public class RuleServiceImpl implements RuleService {
             if (v.isAfter(max) || v.isEqual(max)) {
                 return true;
             }
+        } else if (OperatorConstant.DateTime.NE.getCode().equals(linkVo.getOperator())) {
+            if (!(v.isAfter(min) && v.isBefore(max))) {
+                return true;
+            }
         }
         return false;
     }