浏览代码

中期计量

yangyj 1 年之前
父节点
当前提交
f1b28c775d

+ 13 - 4
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterInfo.java

@@ -1,13 +1,12 @@
 package org.springblade.manager.vo;
 
+import cn.hutool.log.StaticLog;
 import lombok.Data;
 import org.springblade.manager.dto.TreeNode;
 
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
 
 /**
  * @author yangyj
@@ -48,5 +47,15 @@ public class MeterInfo {
     List<Payment> paymentList;
     /**需要延后生成FormData(元素对象)*/
     List<DataModel> delay =new LinkedList<>();
+    /**合同工程清单*/
+    private CompletableFuture<List<InventoryForm>> inventoryForms;
 
+    public List<InventoryForm> getInventoryForms()  {
+        try {
+             return inventoryForms.get();
+        }catch (Exception e){
+            StaticLog.error(e.getMessage());
+        }
+        return Collections.emptyList();
+    }
 }

+ 0 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterTree.java

@@ -23,8 +23,6 @@ public class MeterTree {
     private String ancestor;
     @ApiModelProperty(value = "父级id")
     private Long parentId;
-    @ApiModelProperty(value = "合同金额")
-    private String amount;
     @ApiModelProperty(value = "排序")
     private Integer sort;
 

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

@@ -39,6 +39,8 @@ public class ExecutorInit extends FormulaExecutor {
     private Function<Long, List<MidPayItem>> midPayItemListFc;
     private Function<Long,List<ChangeToken>> changeTokenFc;
     private Function<Long, List<Payment>> paymentListFc;
+    private Function<Long, List<InventoryForm>> inventoryFormFc;
+
     public static final String SZ="[ 一二三四五六七八九十]+";
 
 
@@ -51,23 +53,7 @@ public class ExecutorInit extends FormulaExecutor {
     }
 
 
-    /*预处理计量单元树*/
-    private CompletableFuture<Map<Long, TreeNode<MeterTree>>> getMeterTreeMapAsync(Long contractId) {
-        return CompletableFuture.supplyAsync(() -> {
-            List<MeterTree> list = meterTreeFc.apply(contractId);
-            tec.meterInfo.setMeterTreeList(list);
-            Function<MeterTree,TreeNode<MeterTree>> fc = m->{
-                TreeNode<MeterTree> treeNode = new TreeNode<>();
-                treeNode.setId(m.getId());
-                treeNode.setParentId(m.getParentId());
-                treeNode.setValue(m);
-                treeNode.setName(m.getNodeName());
-                treeNode.setSort(StringUtils.handObj2Integer(m.getSort()));
-                return treeNode;
-            };
-            return FormulaUtils.list2TreeNode(TreeNode::getId,list,fc,TreeNode::getParentId);
-        });
-    }
+
     private  BaseInfo  addBaseInfo(){
         /*加载合同数据*/
         BaseInfo baseInfo = baseInfoFc.apply(tec.getContractId());
@@ -94,6 +80,9 @@ public class ExecutorInit extends FormulaExecutor {
             //变更令部分
             changeToken();
             tec.meterInfo.setPaymentList(paymentListFc.apply(tec.getContractId()));
+            /*合同工程清单*/
+            tec.meterInfo.setInventoryForms(CompletableFuture.supplyAsync(() ->  inventoryFormFc.apply(tec.getContractId())));
+
         }
         tec.setPeriodId(tec.periodInfo.getId());
         tec.periodInfo.init();
@@ -103,6 +92,24 @@ public class ExecutorInit extends FormulaExecutor {
         //dataModel2FormData(tec.periodInfo);
     }
 
+    /*预处理计量单元树*/
+    private CompletableFuture<Map<Long, TreeNode<MeterTree>>> getMeterTreeMapAsync(Long contractId) {
+        return CompletableFuture.supplyAsync(() -> {
+            List<MeterTree> list = meterTreeFc.apply(contractId);
+            tec.meterInfo.setMeterTreeList(list);
+            Function<MeterTree,TreeNode<MeterTree>> fc = m->{
+                TreeNode<MeterTree> treeNode = new TreeNode<>();
+                treeNode.setId(m.getId());
+                treeNode.setParentId(m.getParentId());
+                treeNode.setValue(m);
+                treeNode.setName(m.getNodeName());
+                treeNode.setSort(StringUtils.handObj2Integer(m.getSort()));
+                return treeNode;
+            };
+            return FormulaUtils.list2TreeNode(TreeNode::getId,list,fc,TreeNode::getParentId);
+        });
+    }
+
     private void periodNumberFormat(){
         String periodNumber = tec.periodInfo.getPeriodNumber();
         if(!BaseUtils.isNumber(periodNumber)){

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

@@ -41,7 +41,7 @@ public class ExecutorMeter extends FormulaExecutor {
   /*  private Function<Long, List<Material>> materialFormFc;*/
    /* private Function<Long, List<Payment>> paymentListFc;*/
    /* private Function<Long, List<MidPayItem>> midPayItemListFc;*/
-    private Function<Long, List<InventoryForm>> inventoryFormFc;
+    /*private Function<Long, List<InventoryForm>> inventoryFormFc;*/
     private Function<Long, List<MeterApply>> meterApplyFc;
     private Function<Long, List<StartPayForm>> stayPayFormFc;
     private ElementWriter elementWriter;
@@ -401,7 +401,7 @@ public class ExecutorMeter extends FormulaExecutor {
               /*支付数据*/
              //List<Payment> paymentList=paymentListFc.apply(tec.getContractId());
              /*合同计量清单*/
-             List<InventoryForm> inventoryForms = inventoryFormFc.apply(tec.getContractId());
+             List<InventoryForm> inventoryForms = tec.meterInfo.getInventoryForms();
              InventoryForm root = null;
              for(InventoryForm itf:inventoryForms){
                  if(itf.getParentId()==0){
@@ -903,6 +903,7 @@ public class ExecutorMeter extends FormulaExecutor {
             Map<String,Map<Long,List<Payment>>> paymentGroup=paymentsPeriodEnd.stream().collect(Collectors.groupingBy(Payment::getNumber,Collectors.groupingBy(Payment::getPeriodId,Collectors.toList())));
             int max=monthMeterMap.keySet().stream().max(Comparator.comparingInt(t->t)).orElse(12);
             BaseInfo baseInfo =tec.meterInfo.getBaseInfo();
+            totalList.sort(Comparator.comparing(e -> getPrefix(e.getFormNumber())));
             totalList.forEach(sis->{
                 /*    单项占合同价的比例*/
                 sis.setItemPercent(ratioFc.apply(sis.getChangeMoney(),baseInfo.getTotalAmount().toString()));
@@ -993,8 +994,11 @@ public class ExecutorMeter extends FormulaExecutor {
                 int extended=BaseUtils.obj2IntegerZero(contractDay)-BaseUtils.obj2IntegerZero(totalDay);
                 /*已过去*/
                 String passDay=CustomFunction.join(CustomFunction.daysPassed(baseInfo.getStartDate(), LocalDate.now()),"").toString();
-                BigDecimal provisionalSum=tec.meterInfo.getMeterTreeList().stream().filter(e->e.getNodeCode().equals("D")).map(e->BaseUtils.str2BigDecimal(e.getAmount())).reduce(BigDecimal.ZERO,BigDecimal::add);
+
+                BigDecimal provisionalSum=tec.meterInfo.getInventoryForms().stream().filter(e->"D".equals(e.getFormNumber())).map(e->BaseUtils.str2BigDecimal(e.getBidPrice())).reduce(BigDecimal.ZERO,BigDecimal::add);
+                BigDecimal BOQAmount=tec.meterInfo.getInventoryForms().stream().filter(e->!"D".equals(e.getFormNumber())).map(e->BaseUtils.str2BigDecimal(e.getBidPrice())).reduce(BigDecimal.ZERO,BigDecimal::add);
                 baseInfo.setProvisionalSum(StringUtils.number2String(provisionalSum,2));
+                baseInfo.setBOQAmount(StringUtils.number2String(BOQAmount,2));
                 BigDecimal changeTokenTotal=tec.meterInfo.getChangeTokenListMap().values().stream().flatMap(Collection::stream).map(ChangeToken::getTotalChangeMoney).reduce(BigDecimal.ZERO,BigDecimal::add);
                 double totalMoney = BaseUtils.obj2DoubleZero(baseInfo.getContractAmount())+BaseUtils.obj2DoubleZero(baseInfo.getProvisionalSum())+BaseUtils.obj2DoubleZero(baseInfo.getBOQAmount())+BaseUtils.obj2DoubleZero(changeTokenTotal);
                 String brief="开工日期:"+baseInfo.getStartDatePlan()+" 始算工期日:"+baseInfo.getStartDate()
@@ -1002,7 +1006,7 @@ public class ExecutorMeter extends FormulaExecutor {
                         +"天(即至"+baseInfo.getEndDate()+")"
                         + "\n 合同总价"+baseInfo.getContractAmount().divide(new BigDecimal(10000),2,RoundingMode.HALF_UP)+"万元、暂定金"
                         +CustomFunction.xN(baseInfo.getProvisionalSum(),0.0001)+"万元、工程量清单金额"
-                        +CustomFunction.xN(baseInfo.getBOQAmount(),0.0001)+"万元、工程量变更("+CustomFunction.xN(changeTokenTotal,0.0001)+")万元、估计最终金额"+StringUtils.number2String(totalMoney,2)+"万元,时间已过"
+                        +CustomFunction.xN(baseInfo.getBOQAmount(),0.0001)+"万元、工程量变更("+CustomFunction.xN(changeTokenTotal,0.0001)+")万元、估计最终金额"+CustomFunction.xN(totalMoney,0.0001)+"万元,时间已过"
                         +passDay+"天,占合同工期"+StringUtils.number2String(ratioFc.apply(passDay,totalDay),2)+"%";
                 elementWriter.write(t,brief);
             });