yangyj 1 жил өмнө
parent
commit
5717847113

+ 13 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SubInterimMeterPaySummary.java

@@ -2,11 +2,13 @@ package org.springblade.manager.vo;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import lombok.Data;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.BaseUtils;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author yangyj
@@ -41,10 +43,10 @@ public class SubInterimMeterPaySummary {
     private String completed;
     /**合同金额*/
     @JSONField(name = "key_7",label="合同金额",ordinal = 7)
-    private String contractAmount;
+    private String contractMoney;
     /**变更后A金额*/
     @JSONField(name = "key_8",label="变更金额",ordinal = 8)
-    private String revisedAmount;
+    private String changeMoney;
     /**上次支付金额*/
     @JSONField(name = "key_9",label="本次支付金额",ordinal = 9)
     private String currentPeriodPay;
@@ -62,6 +64,15 @@ public class SubInterimMeterPaySummary {
          this.setCurrentPeriodEndPay(list.stream().filter(BaseUtils::isNumber).map(BigDecimal::new).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
     }
 
+    public void completedAdd(Integer n){
+        List<Object> list = new ArrayList<>();
+        list.add(this.getCompleted());
+        list.add(n);
+        this.setCompleted(String.valueOf(list.stream().filter(BaseUtils::isNumber).map(Object::toString).mapToInt(Integer::parseInt).sum()));
+    }
+
+
+
     public SubInterimMeterPaySummary(String itemName) {
         this.itemName = itemName;
     }

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

@@ -34,19 +34,19 @@ public class SubprojectInterimPaymentSummary {
     private String contractTotal;
     /**变更数量*/
     @JSONField(name = "key_4",label="变更数量",ordinal = 4)
-    private String revisedTotal;
+    private String changeTotal;
     /**本次完成数量*/
     @JSONField(name = "key_5",label="本次完成数量",ordinal = 5)
-    private String currentPeriodComplete;
+    private String currentPeriodCompleted;
     /**累计完成数量*/
     @JSONField(name = "key_6",label="累计完成数量",ordinal = 6)
-    private String complete;
+    private String completed;
     /**合同金额*/
     @JSONField(name = "key_7",label="合同金额",ordinal = 7)
-    private String contractAmount;
+    private String contractMoney;
     /**变更后A金额*/
     @JSONField(name = "key_8",label="变更后A金额",ordinal = 8)
-    private String revisedAmount;
+    private String changeMoney;
     /**上次支付金额*/
     @JSONField(name = "key_9",label="本次支付金额",ordinal = 9)
     private String currentPeriodPay;

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

@@ -1,5 +1,6 @@
 package org.springblade.manager.formula.impl;
 
+import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
@@ -60,7 +61,7 @@ public class ExecutorMeter extends FormulaExecutor {
    /**根据清单编号获取支付项目章节编号*/
     public String getPrefix(String fn){
         for(InventoryForm itf:chapters){
-            String prefix=itf.getChapter();
+            String prefix=itf.getFormNumber();
             fn= fn.split("-")[0];
             if(BaseUtils.isNumber(fn)){
                 fn=String.valueOf(100*Integer.parseInt(fn)/100);
@@ -293,7 +294,7 @@ public class ExecutorMeter extends FormulaExecutor {
              }
             for(InventoryForm itf:inventoryForms){
                 assert root != null;
-                if(itf.getParentId().equals(root.getParentId())){
+                if(itf.getParentId().equals(root.getId())){
                     chapters.add(itf);
                 }
             }
@@ -373,12 +374,13 @@ public class ExecutorMeter extends FormulaExecutor {
     @EqualsAndHashCode(callSuper = true)
     @Data
     public  class SubIPaySum extends   BaseSpecial<SubprojectInterimPaymentSummary> implements Special{
-
+        /*分项工程中期支付汇总表*/
         @Override
         public boolean ready() {
             return current.size()>0;
         }
 
+        /*清单合计类*/
         @Data
         class Summary{
             /*清单编号、支付编号*/
@@ -390,21 +392,21 @@ public class ExecutorMeter extends FormulaExecutor {
             /**合同数量*/
             private Integer contractTotal=0;
             /**变更数量*/
-            private Integer revisedTotal=0;
+            private Integer changeTotal =0;
             /**本次完成数量*/
-            private Integer currentPeriodComplete=0;
+            private Integer currentPeriodCompleted=0;
             /**累计完成数量*/
-            private Integer completed=0;
+            private Integer currentPeriodEndCompleted =0;
             /**合同金额*/
-            private BigDecimal contractAmount=BigDecimal.ZERO;
+            private BigDecimal contractMoney =BigDecimal.ZERO;
             /**变更后A金额*/
-            private BigDecimal revisedAmount=BigDecimal.ZERO;
-            /**上次支付金额*/
-            private BigDecimal previousPeriodEndPay=BigDecimal.ZERO;
+            private BigDecimal changeMoney =BigDecimal.ZERO;
+            /**支付金额*/
+            private BigDecimal money=BigDecimal.ZERO;
+            /**本次支付金额*/
+            private BigDecimal currentPeriodPay=BigDecimal.ZERO;
             /**累计支付B金额*/
             private BigDecimal currentPeriodEndPay=BigDecimal.ZERO;
-            /**比例*/
-            private BigDecimal payRatio=BigDecimal.ZERO;
 
             public Summary() {
             }
@@ -414,18 +416,30 @@ public class ExecutorMeter extends FormulaExecutor {
                     this.itemName=p.getName();
                     this.unit = p.getUnit();
                     this.contractTotal=p.getContractTotal();
-                    this.revisedTotal= p.getChangeTotal();
-                    this.completed=p.getCompleted();
-                    this.contractAmount=new BigDecimal(p.getContractMoney());
-                    this.revisedAmount=new BigDecimal(p.getChangeMoney());
-                    this.currentPeriodEndPay=p.getMoneyAsBigDecimal();
+                    this.changeTotal = p.getChangeTotal();
+                    this.currentPeriodCompleted =p.getCompleted();
+                    this.contractMoney =new BigDecimal(p.getContractMoney());
+                    this.changeMoney =new BigDecimal(p.getChangeMoney());
+                    this.money=p.getMoneyAsBigDecimal();
             }
+
+            /*同一个清单累加*/
             public Summary add(Summary next){
                 if(Func.isBlank(this.itemName)){
                     this.itemName=next.itemName;
                 }
-                this.completed=next.getCompleted()+this.completed;;
-                this.currentPeriodEndPay=this.previousPeriodEndPay.add(next.getPreviousPeriodEndPay());
+                /*本期完成*/
+                this.currentPeriodCompleted =next.getCurrentPeriodCompleted()+this.currentPeriodCompleted;;
+                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;
+                 }
                 return this;
             }
         }
@@ -433,15 +447,15 @@ public class ExecutorMeter extends FormulaExecutor {
         /*按清单编号求和*/
         public  Map<String,Summary> toSummary(List<Payment> payments) {
             return payments.stream()
-                    .collect(  Collectors.groupingBy(Payment::getNumber,
-                            Collectors.reducing(new Summary(),
-                                    Summary::new,
-                                    Summary::add
-                            )));
-
+                    .collect(Collectors.groupingBy(Payment::getNumber,
+                            Collectors.collectingAndThen(
+                                    Collectors.mapping(Summary::new, Collectors.reducing(Summary::add)),
+                                    op -> op.orElseGet(Summary::new)
+                            )
+                    ));
         }
 
-
+       /*分项工程中期支付汇总表*/
         @Override
         public void parse() {
             builderFormDatas(SubprojectInterimPaymentSummary.class);
@@ -456,16 +470,15 @@ public class ExecutorMeter extends FormulaExecutor {
                 sis.setItemName(summary.getItemName());
                 sis.setUnit(summary.getUnit());
                 sis.setContractTotal(summary.getContractTotal().toString());
-                sis.setRevisedTotal(summary.getRevisedTotal().toString());
-                sis.setComplete(summary.getCompleted().toString());
-                sis.setContractAmount(summary.getContractAmount().toString());
-                sis.setRevisedAmount(summary.getRevisedAmount().toString());
-                if(pre!=null){
-                    sis.setCurrentPeriodPay(pre.getCurrentPeriodEndPay().toString());
-                    summary.add(pre);
-                    sis.setCurrentPeriodEndPay(summary.getCurrentPeriodEndPay().toString());
-                    sis.setPayRatio(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getRevisedAmount()));
-                }
+                sis.setChangeTotal(summary.getChangeTotal().toString());
+                sis.setContractMoney(summary.getContractMoney().toString());
+                sis.setChangeMoney(summary.getChangeMoney().toString());
+                sis.setCurrentPeriodCompleted(summary.getCurrentPeriodCompleted().toString());
+                /*当前期和往期统计*/
+                summary.merge(pre);
+                sis.setCurrentPeriodPay(summary.getCurrentPeriodPay().toString());
+                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()));
@@ -522,7 +535,7 @@ public class ExecutorMeter extends FormulaExecutor {
     @EqualsAndHashCode(callSuper = true)
     @Data
     public class SubIMeterPay extends  BaseSpecial<SubInterimMeterPaySummary> implements Special{
-
+          /*分项工程中期计量支付表*/
         @Override
         public boolean ready() {
             return current.size()>0;
@@ -535,10 +548,14 @@ public class ExecutorMeter extends FormulaExecutor {
             smps.setUnit(payment.getUnit());
             smps.setRevisedTotal(StringUtils.handleNull(payment.getChangeTotal()));
             smps.setCurrentPeriodCompleted(StringUtils.handleNull(payment.getCompleted()));
-            smps.setCompleted(StringUtils.handleNull(payment.getCompleted()+prePayment.getCompleted()));
-            smps.setRevisedAmount(payment.getChangeMoney());
+            smps.setCompleted(payment.getCompleted().toString());
+            smps.setChangeMoney(payment.getChangeMoney());
             smps.setCurrentPeriodPay(payment.getMoney());
-            smps.setCurrentPeriodEndPay(StringUtils.handleNull(new BigDecimal(payment.getMoney()).add(new BigDecimal(prePayment.getMoney()))));
+            smps.setCurrentPeriodEndPay(payment.getMoney());
+            if(prePayment!=null){
+                smps.completedAdd(prePayment.getCompleted());
+                smps.currentPeriodEndPayAdd(prePayment.getMoney());
+            }
             return smps;
         };
 
@@ -549,11 +566,11 @@ public class ExecutorMeter extends FormulaExecutor {
             /*根据每一期的s_middle_meter_apply,s_inventory_form_apply 获取对应的计量清单,然后根据清单Id配合s_inventory_form_meter查找计量单元信息*/
             /*s_change_token_inventory每个清单关联的变更令,s_change_token_meter每个计量单元关联的变更令*/
             try {
-                Map<Long, TreeNode<MeterTree>> treeNodeMap = tec.getMeterTreeMap().get();
-                Optional<TreeNode<MeterTree>> optionalTreeNode=  treeNodeMap.values().stream().filter(TreeNode::isTop).findAny();
-                if(optionalTreeNode.isPresent()) {
+                Map<Long, TreeNode<MeterTree>> treeNodeMap = tec.meterTreeMap.get();
+                Optional<TreeNode<MeterTree>> opTreeNode=  treeNodeMap.values().stream().filter(TreeNode::isTop).findAny();
+                if(opTreeNode.isPresent()) {
                     /*计量单元根节点*/
-                    TreeNode<MeterTree> top= optionalTreeNode.get();
+                    TreeNode<MeterTree> top= opTreeNode.get();
                     Map<Long, List<Payment>> paymentGroup = current.stream().collect(Collectors.groupingBy(Payment::getMeterId));
                     Map<String,Payment> preMeterPaymentGroup = previous.stream().collect(Collectors.toMap(Payment::meterFormKey,p->p,(p1,p2)->p2));
                     FormulaUtils.treeNodeSort(0,top);
@@ -679,8 +696,9 @@ public class ExecutorMeter extends FormulaExecutor {
         }
     }
 
+    @EqualsAndHashCode(callSuper = true)
     @Data
-    public class IMeter implements Special{
+    public class IMeter extends   BaseSpecial<InterimMeter> implements Special{
         private Integer capacity=7;
         @Override
         public boolean ready() {
@@ -689,14 +707,9 @@ public class ExecutorMeter extends FormulaExecutor {
 
         @Override
         public void parse() {
-            LinkedHashMap<String,FormData> fdm = FormulaUtils.toFormDataMap(new InterimMeter());
-            /*获取实际输出行数*/
-            this.capacity=getLineSize(new ArrayList<>(fdm.keySet()));
-            Map<String,Function<List<InterimMeter>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(InterimMeter.class);
-            tec.getFormDataMap().putAll(fdm);
+            builderFormDatas(InterimMeter.class);
             List<MeterApply> meterApplyList=meterApplyFc.apply(tec.getPeriodId());
             Map<Long,List<Payment>> paymentGroup = current.stream().collect(Collectors.groupingBy(Payment::getMiddleMeterId));
-            List<InterimMeter> dataList = new ArrayList<>();
             for(MeterApply meterApply:meterApplyList){
                 List<Payment> paymentList = paymentGroup.get(meterApply.getId());
                 List<List<Payment>> pageData = BaseUtils.splitList(paymentList,this.capacity);
@@ -722,7 +735,7 @@ public class ExecutorMeter extends FormulaExecutor {
                     dataList.add(iim);
                 }
             }
-            FormulaUtils.put2FormData(fdm,functionMap,dataList);
+           putOut();
         }
     }
 

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

@@ -114,7 +114,7 @@ public class TableElementConverter implements ITableElementConverter {
     /**计量类型*/
     private MeterType meterType;
     /**计量单元树*/
-    private CompletableFuture<Map<Long, TreeNode<MeterTree>>> meterTreeMap;
+    public CompletableFuture<Map<Long, TreeNode<MeterTree>>> meterTreeMap;
     /*存放计量计算结果*/
     public List<ReportResult> reportResults ;
     /*计量属性*/