Parcourir la source

Merge branch 'refs/heads/feature-lihb-20250716-shiyan' into test-merge

LHB il y a 3 semaines
Parent
commit
51d5c7f889

+ 14 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/StandardInfoMapper.xml

@@ -72,7 +72,21 @@
     </select>
     <select id="findByParentId" resultType="org.springblade.business.entity.StandardInfo">
         select
+            case
+                when
+                    symbol = '~'
+                then
+                    SUBSTRING_INDEX(name, '~', 1)
+                else
+                    name
+            end `name`,
             <include refid="Base_Column_List"/>,
+            case
+                when
+                    symbol = '~'
+                then
+                    SUBSTRING_INDEX(name, '~', -1)
+            end nameEnd,
             case
                 when
                     symbol = '~'

+ 19 - 5
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UStandardInfoServiceImpl.java

@@ -85,13 +85,13 @@ public class UStandardInfoServiceImpl extends ServiceImpl<StandardInfoMapper, St
 
                 //判断符号之后的数据是否为数字
                 if (StringUtils.isNotEmpty(item.getSymbol())) {
-                    if (!NumberUtils.isNumber(item.getName())) {
-                        throw new ServiceException("数据错误,未知字符");
+                    if(item.getName().startsWith("+")){
+                        item.setName(item.getName().substring(1));
                     }
                     //如果是范围符号 则单独处理数据
                     if(StringUtils.equals(item.getSymbol(),"~")){
-                        if (!NumberUtils.isNumber(item.getNameEnd())) {
-                            throw new ServiceException("数据错误,未知字符");
+                        if(item.getNameEnd().startsWith("+")){
+                            item.setNameEnd(item.getNameEnd().substring(1));
                         }
                         item.setName(item.getName() + "~" + item.getNameEnd());
                     }
@@ -131,6 +131,20 @@ public class UStandardInfoServiceImpl extends ServiceImpl<StandardInfoMapper, St
                     //更新的子集合 添加更新人
                     item.setUpdateUser(user.getUserId());
                 }
+
+                //判断符号之后的数据是否为数字
+                if (StringUtils.isNotEmpty(item.getSymbol())) {
+                    if(item.getName().startsWith("+")){
+                        item.setName(item.getName().substring(1));
+                    }
+                    //如果是范围符号 则单独处理数据
+                    if(StringUtils.equals(item.getSymbol(),"~")){
+                        if(item.getNameEnd().startsWith("+")){
+                            item.setNameEnd(item.getNameEnd().substring(1));
+                        }
+                        item.setName(item.getName() + "~" + item.getNameEnd());
+                    }
+                }
             });
             //更新父级对象
             StandardInfo parent = BeanUtil.copyProperties(uStandardInfo, StandardInfo.class);
@@ -140,7 +154,7 @@ public class UStandardInfoServiceImpl extends ServiceImpl<StandardInfoMapper, St
             return true;
         } catch (Exception e) {
             e.printStackTrace();
-            throw new ServiceException("更新失败");
+            throw new ServiceException(e.getMessage());
         }
     }
 

+ 3 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/EqualNode.java

@@ -31,12 +31,14 @@ public class EqualNode extends OperatorResultNode {
                 Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
 
                 //如果是数字类型 第一个是float  第二个是整数所以不能使用equals
-                if(leftAndRight[0] instanceof Number && leftAndRight[1] instanceof Number){
+                if (leftAndRight[0] instanceof Number && leftAndRight[1] instanceof Number) {
                     return EqUtil.calculate((Number) leftAndRight[0], (Number) leftAndRight[1]);
                 }
 
                 boolean equals = StringUtils.isEquals(leftAndRight[0], leftAndRight[1]);
                 return leftAndRight == null ? null : equals;
+            } else if (leftValue instanceof Boolean || rightValue instanceof Boolean) {
+                return leftValue instanceof Boolean ? leftValue : rightValue;
             } else {
                 return leftValue.equals(rightValue);
             }

+ 6 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/GtNode.java

@@ -21,7 +21,12 @@ public class GtNode extends OperatorResultNode {
 //		if (rightValue == null) {
 //			return null;
 //		}
-        Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
+        Object calculate = leftOperand.calculate(variables);
+        if(calculate instanceof Boolean && !(Boolean) calculate){
+            return calculate;
+        }
+        Object calculate1 = rightOperand.calculate(variables);
+        Object[] leftAndRight = ValueUtil.obtain(calculate, calculate1);
         return leftAndRight == null ? null : GtUtil.calculate((Number) leftAndRight[0], (Number) leftAndRight[1]);
     }
 

+ 6 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/LtEqNode.java

@@ -21,7 +21,12 @@ public class LtEqNode extends OperatorResultNode {
 //		if (rightValue == null) {
 //			return null;
 //		}
-        Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
+        Object calculate = leftOperand.calculate(variables);
+        if(calculate instanceof Boolean && !(Boolean) calculate){
+            return calculate;
+        }
+        Object calculate1 = rightOperand.calculate(variables);
+        Object[] leftAndRight = ValueUtil.obtain(calculate, calculate1);
         return leftAndRight == null ? null : !((Boolean) GtUtil.calculate((Number) leftAndRight[0], (Number) leftAndRight[1]));
     }
 

+ 6 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/LtNode.java

@@ -22,7 +22,12 @@ public class LtNode extends OperatorResultNode {
 //		if (rightValue == null) {
 //			return null;
 //		}
-        Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
+        Object calculate = leftOperand.calculate(variables);
+        if(calculate instanceof Boolean && !(Boolean) calculate){
+            return calculate;
+        }
+        Object calculate1 = rightOperand.calculate(variables);
+        Object[] leftAndRight = ValueUtil.obtain(calculate, calculate1);
         return leftAndRight == null ? null : LtUtil.calculate((Number) leftAndRight[0], (Number) leftAndRight[1]);
     }
 

+ 3 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/NotEqualNode.java

@@ -31,12 +31,14 @@ public class NotEqualNode extends OperatorResultNode {
                 Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
 
                 //如果是数字类型 第一个是float  第二个是整数所以不能使用equals
-                if(leftAndRight[0] instanceof Number && leftAndRight[1] instanceof Number){
+                if (leftAndRight[0] instanceof Number && leftAndRight[1] instanceof Number) {
                     return !EqUtil.calculate((Number) leftAndRight[0], (Number) leftAndRight[1]);
                 }
 
                 boolean equals = !StringUtils.isEquals(leftAndRight[0], leftAndRight[1]);
                 return leftAndRight == null ? null : equals;
+            } else if (leftValue instanceof Boolean || rightValue instanceof Boolean) {
+                return leftValue instanceof Boolean ? leftValue : rightValue;
             } else {
                 return leftValue.equals(rightValue) == false;
             }

+ 1 - 0
blade-service/blade-manager/src/main/java/com/jfireel/expression/parse/impl/NumberParser.java

@@ -7,6 +7,7 @@ import com.jfireel.expression.parse.Invoker;
 import com.jfireel.expression.token.Operator;
 import com.jfireel.expression.token.Symbol;
 import com.jfireel.expression.token.Token;
+import com.jfireel.expression.token.TokenType;
 import com.jfireel.expression.util.CharType;
 
 import java.util.Deque;

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

@@ -5243,7 +5243,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             String[] split = record.getStandardInfoIds().split(",");
             if (split.length > 0) {
                 // 技术指标
-                List<Map<String, Object>> mapList = jdbcTemplate.queryForList("SELECT concat(a.symbol,a.name) symbolName,b.col_key,b.col_name from u_standard_info a, u_standard_info_private_join b WHERE a.id = b.standard_info_id and " +
+                List<Map<String, Object>> mapList = jdbcTemplate.queryForList("SELECT  case when a.symbol = '~' then  a.name else concat(a.symbol,a.name) end symbolName,b.col_key,b.col_name from u_standard_info a, u_standard_info_private_join b WHERE a.id = b.standard_info_id and " +
                                 "a.standard_id = ? and b.private_id = ? and a.is_deleted = 0 and b.is_deleted = 0 " +
                                 "and (SELECT count(1) from u_standard_info_join WHERE standard_info_right_id in ( "+ record.getStandardInfoIds() +" ) and standard_info_left_id = a.id and is_deleted = 0) = ?"
                         , record.getStandardId() , wbsTreePrivate.getPKeyId(), split.length);

+ 57 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -5108,6 +5108,32 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                         f = f.replace(el, "缺少数据无法匹配");
                                         break;
                                     }
+                                    //生成比较公式的时候是否使用或者
+                                    Boolean isOr = false;
+                                    //如果是范围
+                                    if (list1.get(0).contains("~") || list2.get(0).contains("~")) {
+                                        if(list1.get(0).contains("~")){
+                                            String[] split2 = list1.get(0).split("~");
+                                            list1.set(0, ">" + split2[0] + " <" + split2[1]);
+                                        }else{
+                                            String[] split2 = list2.get(0).split("~");
+                                            list2.set(0, ">" + split2[0] + " <" + split2[1]);
+                                        }
+
+
+                                    } else if (list1.get(0).startsWith("±") || list2.get(0).startsWith("±")) {
+                                        isOr = true;
+                                        //如果是正负值
+                                        if(list1.get(0).startsWith("±")){
+                                            String value = list1.get(0).substring(1);
+
+                                            list1.set(0, "=" + value + " =-" + value);
+                                        }else{
+                                            String value = list2.get(0).substring(1);
+                                            list2.set(0, "=" + value + " =-" + value);
+                                        }
+                                    }
+
                                     //带后缀的数据去掉留纯数据
                                     String strings1 = extractPureNumbers(list1.get(0));
                                     String strings2 = extractPureNumbers(list2.get(0));
@@ -5145,10 +5171,15 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                                 }
 
                                                 operator = strReplace(operator);
-                                                String str = split1[1] + operator + extractPureNumbers(number);
+                                                number = extractPureNumbers(number);
+                                                String str = split1[1] + operator + (number != null && number.startsWith("-") ? "(" + number + ")" : number);
                                                 list.add(str);
                                             }
-                                            formulaData = String.join("&&",list);
+                                            if(isOr){
+                                                formulaData = String.join("||",list);
+                                            }else{
+                                                formulaData = String.join("&&",list);
+                                            }
                                         }else{
                                             String number = null;
                                             //获取比较符
@@ -5160,8 +5191,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                                 number = s3.substring(1);
                                             }
                                             operator = strReplace(operator);
-
-                                            formulaData = split1[1] + operator + extractPureNumbers(number);
+                                            number = extractPureNumbers(number);
+                                            formulaData = split1[1] + operator + (number !=null && number.startsWith("-") ? "(" + number + ")" : number);
                                         }
                                     }else if (pattern.matcher(s3).matches() && !pattern.matcher(s4).matches()){
                                         list1.set(0,s3);
@@ -5179,10 +5210,15 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                                     number = string.substring(1);
                                                 }
                                                 operator = strReplace(operator);
-                                                String str = split1[0] + operator + extractPureNumbers(number);
+                                                number = extractPureNumbers(number);
+                                                String str = split1[0] + operator + (number !=null && number.startsWith("-") ? "(" + number + ")" : number);
                                                 list.add(str);
                                             }
-                                            formulaData = String.join("&&",list);
+                                            if(isOr){
+                                                formulaData = String.join("||",list);
+                                            }else{
+                                                formulaData = String.join("&&",list);
+                                            }
                                         }else{
                                             String number = null;
                                             //获取比较符
@@ -5194,7 +5230,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                                 number = s4.substring(1);
                                             }
                                             operator = strReplace(operator);
-                                            formulaData = split1[0] + operator + extractPureNumbers(number);
+                                            //新值
+                                            number = extractPureNumbers(number);
+                                            formulaData = split1[0] + operator + (number !=null && number.startsWith("-") ? "(" + number + ")" : number);
                                         }
                                     } else{
                                         f = f.replace(el, "数据错误,无法比较");
@@ -5315,17 +5353,23 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             return null;
         }
 
-        // 检查第一个字符是否为数字
-        if (Character.isDigit(input.charAt(0))) {
+        // 处理负数情况:以 '-' 开头且后跟数字
+        if (input.startsWith("-") && input.length() > 1 && Character.isDigit(input.charAt(1))) {
+            int endIndex = 2;  // 从 '-' 后开始检查数字
+            while (endIndex < input.length() && Character.isDigit(input.charAt(endIndex))) {
+                endIndex++;
+            }
+            return input.substring(0, endIndex);  // 返回 "-" + 连续数字
+        }
+        // 处理正数情况:以数字开头
+        else if (Character.isDigit(input.charAt(0))) {
             int endIndex = 1;
-            // 遍历后续字符,直到遇到非数字或字符串结束
             while (endIndex < input.length() && Character.isDigit(input.charAt(endIndex))) {
                 endIndex++;
             }
-            // 返回开头的连续数字子串
-            return input.substring(0, endIndex);
+            return input.substring(0, endIndex);  // 返回连续数字
         }
-        // 如果开头不是数字,返回空字符串
+        // 其他情况返回 null
         return null;
     }