Эх сурвалжийг харах

后管-公式
1、多重判断添加一个数据统计类型

LHB 6 өдөр өмнө
parent
commit
4091c7ef36

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -279,6 +279,14 @@ public class FormulaController {
                 if(formula.contains(".ifelseMulti")){
                     //处理数据
                     formula = formula.replaceFirst("FC.ifelseMulti","");
+                    String[] split = formula.split(",");
+                    if(split.length == 4){
+                        String s = split[0].replaceAll("\\(", "");
+                        fb.setMethod(s);
+                        split[0] = "(";
+                        formula = StringUtil.join(split,",");
+                    }
+
                     List<FormulaMultipleIf> formulaMultipleIfs = new ArrayList<>();
                     strParse(formula,formulaMultipleIfs);
                     fb.setFormulas(formulaMultipleIfs);

+ 14 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -5994,6 +5994,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
                     // 解析参数,处理嵌套逗号(在括号内的逗号不应该作为分隔符)
                     List<String> pa = parseParameters(content);
+                    String method = null;
+                    if(pa.size() == 4){
+                        method = pa.remove(0);
+                    }
 
                     if (pa.size() == 3) {
                         Map<String, Object> currentMap = createCurrentMap(f, tec);
@@ -6052,11 +6056,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 if(fd.getValues().size() > 1){
                                     f = f.replace(f, putDataWithKey(dataAll, tec));
                                 } else {
-                                    //计算平均值
-                                    OptionalDouble op = dataAll.stream().filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).average();
-                                    if (op.isPresent()) {
-                                        f = f.replace(f, putDataWithKey(op.getAsDouble(), tec));
+                                    if(StringUtil.isNotBlank(method) && "sum".equals(method)){
+                                        double sum = dataAll.stream().filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).sum();
+                                        f = f.replace(f, putDataWithKey(sum, tec));
+                                    } else{
+                                        //计算平均值
+                                        OptionalDouble op = dataAll.stream().filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).average();
+                                        if (op.isPresent()) {
+                                            f = f.replace(f, putDataWithKey(op.getAsDouble(), tec));
+                                        }
                                     }
+
                                 }
                             } else {
                                 Object data = parse.calculate(currentMap);