Kaynağa Gözat

支付汇总排序

yangyj 1 yıl önce
ebeveyn
işleme
ec568bce4f

+ 15 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java

@@ -21,6 +21,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.function.Predicate;
+import java.util.function.ToIntFunction;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -215,9 +216,23 @@ public class ExecutorInit extends FormulaExecutor {
     BiFunction< LinkedHashMap<Integer,List<Payment>>, Predicate<Map.Entry<Integer,List<Payment>>>, List<Payment>>
             paymentListPick = (a,b)-> a.entrySet().stream().filter(b).flatMap(kv->kv.getValue().stream()).collect(Collectors.toList());
 
+    private ToIntFunction<Payment> paymentSortIndexFc= payment -> {
+        int sort=9999999;
+        String number = payment.getNumber();
+        if(number!=null&&!number.isEmpty()){
+            String[] arr = number.split("[^\\d.]+");
+            /*
+            102-5-3-1的sort=102X10^6+5x10^4+3X10^2+1
+             */
+            sort=IntStream.range(0,arr.length).boxed().mapToInt(i-> (int) (BaseUtils.obj2IntegerZero(arr[i])*Math.pow(10,(6-2*i)))).sum();
+        }
+        return sort;
+    };
     private void payment(){
         List<Payment> paymentList = paymentListFc.apply(tec.getContractId());
         if(paymentList.size()>0){
+            /*根据编号排序*/
+            paymentList.sort(Comparator.comparingInt(paymentSortIndexFc));
             LinkedHashMap<Integer,List<Payment>> tmp = paymentList.stream().collect(Collectors.groupingBy(Payment::getSort,LinkedHashMap::new,Collectors.toList()));
             int sort = tec.periodInfo.getSort();
             LinkedHashMap<Integer,List<Payment>>paymentListMap = new LinkedHashMap<>();

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

@@ -1806,7 +1806,7 @@ public class ExecutorMeter extends FormulaExecutor {
                     /*自定义写入数据*/
                     LinkedHashMap<String,FormData> targetMap= tec.formDataList.stream().filter(e->table2E16.getInitTableName().equals(e.getTableName())).collect(Collectors.toMap(FormData::getCode,t->t,(v1,v2)->v1,LinkedHashMap::new));
                     capacity=1;
-                    pageSum.addAndGet(pageNumber(pageIndex, targetMap));
+                    pageNumber(pageIndex, targetMap,pageSum);
                     this.put2FormData(fdm,fieldDataFcMap,dataList,targetMap);
                     /*重置输出缓存*/
                     dataList.clear();
@@ -1822,15 +1822,15 @@ public class ExecutorMeter extends FormulaExecutor {
         }
 
         /*页码计算*/
-        public int pageNumber( FormData pageIndex, LinkedHashMap<String,FormData> targetMap){
+        public void pageNumber( FormData pageIndex, LinkedHashMap<String,FormData> targetMap, AtomicInteger pageSum){
             int total = totalPage();
             if(pageIndex!=null){
                 FormulaUtils.beRelyFrom(targetMap, pageIndex.getCode()).findFirst().ifPresent(tfd->{
                     /*根据依赖获取输出目标元素*/
-                    elementWriter.write(tfd,IntStream.rangeClosed(1, total).boxed().map(ElementData::new).collect(Collectors.toList()));
+                    elementWriter.write(tfd,IntStream.rangeClosed(pageSum.get()+1, pageSum.get()+total).boxed().collect(Collectors.toList()));
                 });
             }
-            return total;
+            pageSum.getAndAdd(total);
         }
         /*把结果数据回写到元素*/
         public void  put2FormData( LinkedHashMap<String,FormData> fdm,Map<String,Function<List<InterimMeter>,List<Object>>> functionMap,List<InterimMeter> dataList,LinkedHashMap<String,FormData> targetMap){