Browse Source

计量相关

yangyj 1 year ago
parent
commit
4af56d4aea

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

@@ -39,7 +39,7 @@ public class ExecutorMeter extends FormulaExecutor {
     private Function<Long, List<MeterApply>> meterApplyFc;
     private Function<Long, List<StartPayForm>> stayPayFormFc;
     private ElementWriter elementWriter;
-    /*执行链*/
+    /**执行链*/
     private List<Special> specialList = new ArrayList<>();
     /**支付章节*/
     private List<InventoryForm> chapters = new ArrayList<>();
@@ -47,6 +47,8 @@ public class ExecutorMeter extends FormulaExecutor {
     private List<Payment>  previous =new ArrayList<>();
     /**本期支付信息*/
     private List<Payment>   current =new ArrayList<>();
+    /**累计到本期末支付信息*/
+    private List<Payment>   paymentsPeriodEnd =new ArrayList<>();
 
     private List<InterimPaymentCertificate> interimPaymentCertificates =new ArrayList<>();
     /*求百分比*/
@@ -329,6 +331,8 @@ public class ExecutorMeter extends FormulaExecutor {
                  previous = paymentList.stream().filter(e->e.getSort()<tec.periodInfo.getSort()).collect(Collectors.toList());
                  /*当前计量期数据*/
                  current = paymentList.stream().filter(e-> e.getSort().equals(tec.periodInfo.getSort())).collect(Collectors.toList());
+                 /*累计到本期末*/
+                 paymentsPeriodEnd=paymentList.stream().filter(e->e.getSort()<=tec.periodInfo.getSort()).collect(Collectors.toList());
                  /*往期每章节的实际花费*/
                  Map<String,BigDecimal> previousMoney= this.moneySum.apply(previous);
                  /*当前计量期每章节的实际花费*/
@@ -520,7 +524,38 @@ public class ExecutorMeter extends FormulaExecutor {
             LinkedHashMap<String,Summary> currentSummary = toSummary(current);
             LinkedHashMap<String,Summary> preSummary = toSummary(previous);
             List<SubprojectInterimPaymentSummary> totalList = new ArrayList<>();
-            for(Map.Entry<String,Summary> form:currentSummary.entrySet()){
+            List<String> numbers=  paymentsPeriodEnd.stream().map(Payment::getNumber).distinct().collect(Collectors.toList());
+            numbers.forEach(number->{
+                Summary pre =preSummary.get(number);
+                Summary cur = currentSummary.get(number);
+                SubprojectInterimPaymentSummary sis = new SubprojectInterimPaymentSummary();
+                Summary main =cur;
+                if(main==null)main=pre;
+                sis.setFormNumber(main.getFormNumber());
+                sis.setItemName(main.getItemName());
+                sis.setUnit(main.getUnit());
+                sis.setContractTotal(main.getContractTotal().toString());
+                sis.setChangeTotal(main.getChangeTotal().toString());
+                sis.setContractMoney(main.getContractMoney().toString());
+                sis.setChangeMoney(main.getChangeMoney().toString());
+                if(cur!=null){
+                    sis.setCurrentPeriodCompleted(cur.getCompleted().toString());
+                    sis.setCurrentPeriodPay(cur.getCurrentPeriodPay().toString());
+                }
+                if(pre!=null){
+                    sis.setPreviousPeriodPay(pre.getMoney().toString());
+                    sis.setPreviousPeriodCompleted(pre.getCompleted().toString());
+                }
+                if(cur!=null&&pre!=null){
+                    main.merge(pre);
+                }
+                sis.setCompleted(main.getCompleted().toString());
+                sis.setCurrentPeriodPay(main.getCurrentPeriodPay().toString());
+                sis.setCurrentPeriodEndPay(main.getCurrentPeriodEndPay().toString());
+                sis.setPayRatio(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getChangeMoney()));
+                totalList.add(sis);
+            });
+           /*for(Map.Entry<String,Summary> form:currentSummary.entrySet()){
                 SubprojectInterimPaymentSummary sis = new SubprojectInterimPaymentSummary();
                 Summary pre =preSummary.get(form.getKey());
                 Summary summary = form.getValue();
@@ -531,9 +566,10 @@ public class ExecutorMeter extends FormulaExecutor {
                 sis.setChangeTotal(summary.getChangeTotal().toString());
                 sis.setContractMoney(summary.getContractMoney().toString());
                 sis.setChangeMoney(summary.getChangeMoney().toString());
+
                 sis.setCurrentPeriodCompleted(summary.getCompleted().toString());
                 sis.setCurrentPeriodPay(summary.getCurrentPeriodPay().toString());
-                /*当前期和往期统计*/
+                *//*当前期和往期统计*//*
                 summary.merge(pre);
                 if(pre!=null){
                     sis.setPreviousPeriodPay(pre.getMoney().toString());
@@ -544,9 +580,7 @@ public class ExecutorMeter extends FormulaExecutor {
                 sis.setCurrentPeriodEndPay(summary.getCurrentPeriodEndPay().toString());
                 sis.setPayRatio(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getChangeMoney()));
                 totalList.add(sis);
-            }
-
-
+            }*/
             LinkedHashMap<String,List<SubprojectInterimPaymentSummary>> chapterGroup= totalList.stream().collect(Collectors.groupingBy(e->getPrefix(e.getFormNumber()),LinkedHashMap::new,Collectors.toList()));
             AtomicInteger loop = new AtomicInteger(chapterGroup.size());
             chapterGroup.forEach((k,v)->{

+ 8 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/MeterElementWriter.java

@@ -32,13 +32,15 @@ public class MeterElementWriter implements ElementWriter {
             List<Object> values = toList(data,containsNull);
             /*计量写入数据无效考虑是否存在表页实体,也就不存在超页的概念,只管按需自动增页写人,任何元素初始化都是一页*/
             int capacity=fd.getCoordsList().size();
-            if(capacity!=0){ //capacity数据出现 0
-                List<ElementData> eds=  IntStream.range(0,values.size()).boxed().map(i->{
-                    Coords coords = fd.getCoordsList().get(i%capacity);
-                    return new ElementData(i/capacity,values.get(i),coords.getX(),coords.getY());
-                }).collect(Collectors.toList());
-                fd.setValues(eds);
+            if(capacity==0){
+                System.out.println(fd.getTableName()+fd.getEName()+"绑定单元格异常");
+                return;
             }
+            List<ElementData> eds=  IntStream.range(0,values.size()).boxed().map(i->{
+                Coords coords = fd.getCoordsList().get(i%capacity);
+                return new ElementData(i/capacity,values.get(i),coords.getX(),coords.getY());
+            }).collect(Collectors.toList());
+            fd.setValues(eds);
             fd.setUpdate(1);
         }catch (Exception e){
             e.printStackTrace();