Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

liuyc 1 vuosi sitten
vanhempi
commit
96cfdc8232

+ 4 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/TreeNode.java

@@ -25,4 +25,8 @@ public class TreeNode<T> {
        public boolean isTop(){
               return parentId==0L;
        }
+      public String toString(){
+              return name;
+      }
+
 }

+ 5 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterTree.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author yangyj
@@ -31,6 +32,9 @@ public class MeterTree {
         }
         return this.ancestor;
     }
-    public SubInterimMeterPaySummary  peer;
+    /*层级映射*/
+    public SubInterimMeterPaySummary peer;
+    /*支付清单映射*/
+    public List<SubInterimMeterPaySummary> paymentPeer;
 
 }

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SubInterimMeterPaySummary.java

@@ -74,6 +74,12 @@ public class SubInterimMeterPaySummary {
           list.add(n);
          this.setCurrentPeriodEndPay(list.stream().filter(BaseUtils::isNumber).map(BigDecimal::new).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
     }
+    public void currentPeriodPayAdd(String n){
+        List<String> list = new ArrayList<>();
+        list.add(this.currentPeriodPay);
+        list.add(n);
+        this.setCurrentPeriodPay(list.stream().filter(BaseUtils::isNumber).map(BigDecimal::new).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
+    }
 
     public void completedAdd(Integer n){
         List<Object> list = new ArrayList<>();

+ 4 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SubprojectInterimPaymentSummary.java

@@ -39,6 +39,9 @@ public class SubprojectInterimPaymentSummary {
     /**本次完成数量*/
     @JSONField(name = "key_5",label="本次完成数量",ordinal = 5)
     private String currentPeriodCompleted;
+    /**至上期完成数量*/
+    @JSONField(name = "key_15",label="至上期完成数量",ordinal = 5)
+    private String previousPeriodCompleted;
     /**累计完成数量*/
     @JSONField(name = "key_6",label="累计完成数量",ordinal = 6)
     private String completed;
@@ -49,7 +52,7 @@ public class SubprojectInterimPaymentSummary {
     @JSONField(name = "key_8",label="变更后A金额",ordinal = 8)
     private String changeMoney;
     /**上次支付金额*/
-    @JSONField(name = "key_13",label="次支付金额",ordinal = 8)
+    @JSONField(name = "key_13",label="次支付金额",ordinal = 8)
     private String previousPeriodPay;
     /**本次支付金额*/
     @JSONField(name = "key_9",label="本次支付金额",ordinal = 9)

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

@@ -42,13 +42,13 @@ public class ExecutorInit extends FormulaExecutor {
         if(MeterType.MATERIAL.equals(tec.getMeterType())||MeterType.START.equals(tec.getMeterType())){
             /*加载计量期信息*/
             tec.periodInfo=meterPeriodFc.apply(tec.getReportId());
-            tec.setPeriodId(tec.periodInfo.getId());
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
             /*计量期*/
             tec.periodInfo=interimMeterPeriodFc.apply(tec.getReportId());
             /*计量单元树*/
             tec.setMeterTreeMap(getMeterTreeMapAsync(tec.getContractId()));
         }
+        tec.setPeriodId(tec.periodInfo.getId());
         String periodNumber = tec.periodInfo.getPeriodNumber();
         if(!BaseUtils.isNumber(periodNumber)){
             periodNumber= RegexUtil.findResult("[\\d一二三四五六七八九十]+",periodNumber);

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

@@ -480,15 +480,15 @@ public class ExecutorMeter extends FormulaExecutor {
                 }
                 /*本期完成*/
                 this.completed =next.completed+this.completed;;
+                this.money=this.money.add(next.money);
                 return this;
             }
 
             /*当前期合并往期计算累计值*/
             public Summary merge(Summary previous){
                  if(previous!=null){
-                     this.currentPeriodPay=this.money.add(BigDecimal.ZERO);
-                     this.money=this.money.add(previous.money);
-                     this.currentPeriodEndPay=this.money;
+                     this.currentPeriodPay=this.money;
+                     this.currentPeriodEndPay=this.currentPeriodPay.add(previous.money);
                      this.completed=this.completed+previous.completed;
                  }
                 return this;
@@ -529,7 +529,12 @@ public class ExecutorMeter extends FormulaExecutor {
                 sis.setCurrentPeriodPay(summary.getCurrentPeriodPay().toString());
                 /*当前期和往期统计*/
                 summary.merge(pre);
+                if(pre!=null){
+                    sis.setPreviousPeriodPay(pre.getMoney().toString());
+                    sis.setPreviousPeriodCompleted(pre.getCompleted().toString());
+                }
                 sis.setCompleted(summary.getCompleted().toString());
+                sis.setCurrentPeriodPay(summary.getCurrentPeriodPay().toString());
                 sis.setCurrentPeriodEndPay(summary.getCurrentPeriodEndPay().toString());
                 sis.setPayRatio(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getChangeMoney()));
                 totalList.add(sis);
@@ -605,10 +610,15 @@ public class ExecutorMeter extends FormulaExecutor {
             smps.setFormNumber(payment.getNumber());
             smps.setUnit(payment.getUnit());
             smps.setRevisedTotal(StringUtils.handleNull(payment.getChangeTotal()));
+            /*本期完成数量*/
             smps.setCurrentPeriodCompleted(StringUtils.handleNull(payment.getCompleted()));
+            /*本期累计完成数量*/
             smps.setCompleted(payment.getCompleted().toString());
+            /*变更金额*/
             smps.setChangeMoney(payment.getChangeMoney());
+            /*本期支付金额*/
             smps.setCurrentPeriodPay(payment.getMoney());
+            /*本期末累计支付金额*/
             smps.setCurrentPeriodEndPay(payment.getMoney());
             if(prePayment!=null){
                 smps.completedAdd(prePayment.getCompleted());
@@ -629,10 +639,12 @@ public class ExecutorMeter extends FormulaExecutor {
                 if(opTreeNode.isPresent()) {
                     /*计量单元根节点*/
                     TreeNode<MeterTree> top= opTreeNode.get();
+                    /*根据计量单元Id分组清单*/
                     Map<Long, List<Payment>> paymentGroup = current.stream().collect(Collectors.groupingBy(Payment::getMeterId));
+                    /*根据计量单元Id和清单Id分组清单*/
                     Map<String,Payment> preMeterPaymentGroup = previous.stream().collect(Collectors.toMap(Payment::meterFormKey,p->p,(p1,p2)->p2));
                     FormulaUtils.treeNodeSort(0,top);
-                    current.forEach(e -> {
+                   /* current.forEach(e -> {
                         TreeNode<MeterTree> meterTreeNode=treeNodeMap.get(e.getMeterId());
                         if(meterTreeNode!=null){
                             MeterTree meterUnit = meterTreeNode.getValue();
@@ -642,6 +654,13 @@ public class ExecutorMeter extends FormulaExecutor {
                                 this.treeNodeCheckedCount(meterTreeNode,payment,prePayment);
                             }
                         }
+                    });*/
+                    /*路径选中,设置节点采集数据*/
+                    paymentGroup.forEach((k,v)->{
+                        TreeNode<MeterTree> meterTreeNode=treeNodeMap.get(k);
+                        if(meterTreeNode!=null){
+                            this.treeNodeCheckedCount(meterTreeNode,v,preMeterPaymentGroup);
+                        }
                     });
                     /*分组列表,每一组都是一个章节*/
                     List<List<SubInterimMeterPaySummary>> pageData =traversal(top);
@@ -675,15 +694,21 @@ public class ExecutorMeter extends FormulaExecutor {
 
 
         /*溯源并计算累计支付*/
-        public  void treeNodeCheckedCount(TreeNode<MeterTree> tmp,Payment payment, Payment prePayment ){
+        public  void treeNodeCheckedCount(TreeNode<MeterTree> tmp,List<Payment> payments, Map<String,Payment> preMeterPaymentGroup){
             tmp.setChecked(true);
             MeterTree meterTree = tmp.getValue();
-            if(meterTree.peer==null){
-                meterTree.peer= payment2Smps.apply(payment,prePayment);
+            meterTree.peer=new SubInterimMeterPaySummary();
+            meterTree.peer.setItemName(meterTree.getNodeName());
+            meterTree.paymentPeer= new ArrayList<>();
+            for(Payment payment:payments){
+                SubInterimMeterPaySummary pay= payment2Smps.apply(payment,preMeterPaymentGroup.get(meterTree.getId().toString()+payment.getFormId()));
+                /*计算节点的本次付款金额*/
+                meterTree.peer.currentPeriodPayAdd(pay.getCurrentPeriodPay());
+                /*计量单对应信息*/
+                meterTree.paymentPeer.add(pay);
             }
             int loop = 10;
             TreeNode<MeterTree> node=tmp.getParent();
-            SubInterimMeterPaySummary sp= meterTree.peer;
             while (node!=null&&loop-->0){
                 node.setChecked(true);
                 MeterTree tmpTree= node.getValue();
@@ -691,13 +716,12 @@ public class ExecutorMeter extends FormulaExecutor {
                 if(ss==null){
                     /*不存在则新增*/
                     ss = new SubInterimMeterPaySummary();
-                    ss.setItemName(meterTree.getNodeName());
-                    ss.setCurrentPeriodEndPay(sp.getCurrentPeriodEndPay());
+                    ss.setItemName(tmpTree.getNodeName());
+                    ss.currentPeriodPayAdd(meterTree.peer.getCurrentPeriodPay());
                     tmpTree.peer=ss;
-                }else{
-                    /*已存在则相加*/
-                    ss.currentPeriodEndPayAdd(sp.getCurrentPeriodEndPay());
                 }
+                /*已存在则相加*/
+                ss.currentPeriodPayAdd(meterTree.peer.getCurrentPeriodPay());
                 node=node.getParent();
             }
 
@@ -707,6 +731,7 @@ public class ExecutorMeter extends FormulaExecutor {
         public  List<List<SubInterimMeterPaySummary>> traversal(TreeNode<MeterTree> top){
             List<List<SubInterimMeterPaySummary>> total = new ArrayList<>();
             if(top.hasChildren()) {
+                /*按单位工程分页*/
                 List<TreeNode<MeterTree>> parts = top.getChildren();
                 for(TreeNode<MeterTree> node :parts){
                     List<SubInterimMeterPaySummary> list = new ArrayList<>();
@@ -724,11 +749,18 @@ public class ExecutorMeter extends FormulaExecutor {
         /*获取checked状态的节点*/
         public void toSubCollect(TreeNode<MeterTree> node,List<SubInterimMeterPaySummary> list){
             if(node.isChecked()){
-                list.add(node.getValue().getPeer());
+                MeterTree meterTree= node.getValue();
+                list.add(meterTree.getPeer());
+                /*不是叶子节点就继续找*/
                 if(node.hasChildren()){
                       for(TreeNode<MeterTree> child:node.getChildren()){
                           toSubCollect(child,list);
                       }
+                }else {
+                    /*计量单信息*/
+                    if(meterTree.paymentPeer!=null) {
+                        list.addAll(meterTree.paymentPeer);
+                    }
                 }
             }
         }