yangyj 1 år sedan
förälder
incheckning
6fa7c0a496

+ 11 - 0
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -67,6 +67,7 @@ import java.io.*;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
+import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
@@ -74,6 +75,7 @@ import java.util.*;
 import java.util.List;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -1411,6 +1413,15 @@ public static Map<String,List<Long>> relatedPages(List<FormData> curFormDatas ,L
         return fdm.values().stream().filter(e->key.equals(e.getCode().split(":")[1])).findAny();
     }
 
+    /*创建T集合的指定字段fb的合计方法*/
+    public static   <T> Function<List<T>, String> createSumFunction(Function<T,BigDecimal> fb) {
+        return (pl) -> pl.stream()
+                .map(fb)
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .toString();
+    }
+
+
 
 
     public static List<TableInfo> getTableInfoList(JSONArray dataArray) {

+ 7 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -73,6 +73,9 @@ public class ExecutorMeter extends FormulaExecutor {
         return  aBd.multiply(new BigDecimal(100)).divide(bBd, 6, RoundingMode.HALF_UP).toString();
     };
 
+    /*计量单累加*/
+    private Function<List<Payment>,String> paymentSumFc=FormulaUtils.createSumFunction(e->BaseUtils.str2BigDecimal(e.getMoney()));
+
     /*减法*/
     private BinaryOperator<String> subtractFc = (a,b)-> BaseUtils.str2BigDecimal(a).subtract(BaseUtils.str2BigDecimal(b)).toString();
     /*乘法*/
@@ -366,7 +369,6 @@ public class ExecutorMeter extends FormulaExecutor {
              itemNamesMap.put("扣回动员预付款","-100");
              itemNamesMap.put("实际支付金额","-1");
          }
-
         @Override
         public boolean ready() {
             return true;
@@ -431,13 +433,13 @@ public class ExecutorMeter extends FormulaExecutor {
                         sc.setPrice(payment.getPrice());
                         sc.setContractAmount(payment.getContractMoney());
                         /*本期*/
-                        sc.setCurrentAmount(c.stream().map(e->BaseUtils.str2BigDecimal(e.getMoney())).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
+                        sc.setCurrentAmount(paymentSumFc.apply(c));
                         sc.setCurrentRatio(ratioFc.apply(sc.getCurrentAmount(),sc.getContractAmount()));
                         /*上期末*/
-                        sc.setPreviousEndAmount(p.stream().map(e->BaseUtils.str2BigDecimal(e.getMoney())).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
+                        sc.setPreviousEndAmount(paymentSumFc.apply(p));
                         sc.setPreviousEndRatio(ratioFc.apply(sc.getPreviousEndAmount(),sc.getContractAmount()));
                         /*本期末*/
-                        sc.setPeriodEndAmount(t.stream().map(e->BaseUtils.str2BigDecimal(e.getMoney())).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
+                        sc.setPeriodEndAmount(paymentSumFc.apply(t));
                         sc.setPeriodEndRatio(ratioFc.apply(sc.getPeriodEndAmount(),sc.getContractAmount()));
 
                         current.setFormName(v);
@@ -1533,6 +1535,7 @@ public class ExecutorMeter extends FormulaExecutor {
              configMap.put(f,c);
         }
 
+
     }
     interface  Special{
         /**是否满足执行条件*/