Răsfoiți Sursa

计量公式

yangyj 1 an în urmă
părinte
comite
699662b10e

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

@@ -14,6 +14,7 @@ public class TreeNode<T> {
        private Long id;
        private Long parentId;
        private T value;
+       private TreeNode<T> parent;
        private String name;
        private int sort;
        private List<TreeNode<T>> children=new ArrayList<>();

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

@@ -0,0 +1,27 @@
+package org.springblade.manager.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author yangyj
+ * @Date 2024/1/17 15:38
+ * @description 计量单元树映射
+ */
+@Data
+public class MeterTree {
+    private Long id;
+    @ApiModelProperty(value = "节点名")
+    private String nodeName;
+
+    @ApiModelProperty(value = "节点编码")
+    private String nodeCode;
+
+    @ApiModelProperty(value = "父级id")
+    private Long parentId;
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+}

+ 26 - 4
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -43,10 +43,7 @@ import org.springblade.common.utils.BaseUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.bean.TableInfo;
-import org.springblade.manager.dto.Coords;
-import org.springblade.manager.dto.ElementData;
-import org.springblade.manager.dto.FormData;
-import org.springblade.manager.dto.LocalVariable;
+import org.springblade.manager.dto.*;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.formula.NodeTable;
@@ -55,6 +52,7 @@ import org.springblade.manager.formula.impl.TableElementConverter;
 import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.vo.BaseInfo;
 import org.springblade.manager.vo.InterimPaymentCertificate;
+import org.springblade.manager.vo.MeterTree;
 import org.springblade.manager.vo.WbsFormElementVO;
 import reactor.core.publisher.Mono;
 
@@ -441,6 +439,30 @@ public class FormulaUtils {
         };
     }
 
+
+    public  static <K,T>   Map<K, TreeNode<T>>  list2TreeNode(Function<TreeNode<T>,K> keyMapper,List<T> list,Function<T,TreeNode<T>> fc,Function<TreeNode<T>,K>  classifier){
+        Map<K, TreeNode<T>> mTreeMap = new HashMap<>();
+        if (Func.isNotEmpty(list)) {
+            for (T mt : list) {
+                TreeNode<T> treeNode = fc.apply(mt);
+                mTreeMap.put(keyMapper.apply(treeNode), treeNode);
+            }
+            Map<K, List<TreeNode<T>>> group = mTreeMap.values().stream().collect(Collectors.groupingBy(classifier));
+            group.forEach((k, v) -> {
+                TreeNode<T> parent = mTreeMap.get(k);
+                if (parent != null) {
+                    v = v.stream().sorted(Comparator.comparingInt(TreeNode::getSort)).collect(Collectors.toList());
+                    parent.setChildren(v);
+                    v.forEach(e -> e.setParent(parent));
+                }
+            });
+
+        }
+        return mTreeMap;
+    }
+
+
+
     /**从元素名称中解析项目名称,细化项目匹配用*/
     public static  String parseItemName(String eName){
         if (StringUtils.isEmpty(eName)) {

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

@@ -3,13 +3,17 @@ package org.springblade.manager.formula.impl;
 import com.mixsmart.utils.FormulaUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.dto.TreeNode;
 import org.springblade.manager.formula.FormulaExecutor;
-import org.springblade.manager.vo.BaseInfo;
-import org.springblade.manager.vo.InterimPaymentCertificate;
-import org.springblade.manager.vo.MeterPeriodInfo;
-import org.springblade.manager.vo.MeterType;
+import org.springblade.manager.vo.*;
+import org.springframework.scheduling.annotation.Async;
 
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
+import java.util.logging.Handler;
+import java.util.stream.Collectors;
 
 /**
  * @author yangyj
@@ -24,6 +28,7 @@ public class ExecutorInit extends FormulaExecutor {
     }
     private  Function<Long, BaseInfo> baseInfoFc;
     private  Function<Long, MeterPeriodInfo>  meterPeriodFc;
+    private Function<Long, List<MeterTree>> meterTreeFc;
 
 
     public void handle() {
@@ -38,17 +43,28 @@ public class ExecutorInit extends FormulaExecutor {
             tec.formDataMap.putAll(FormulaUtils.toFormDataMap(meterPeriod));
             tec.getConstantMap().put(MeterPeriodInfo.TBN,meterPeriod);
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
-            /*中间支付证书*/
-            tec.formDataMap.putAll(FormulaUtils.toFormDataMap(new InterimPaymentCertificate()));
-            /*中间支付汇总*/
-            /*分项工程中期支付汇总*/
-            /*分项工程中期计量支付*/
-            /*中间计量支付汇总*/
-            /*中间计量*/
+               /*计量单元树*/
+                tec.setMeterTreeMap(getMeterTreeMapAsync(tec.getContractId()));
         }
 
     }
 
+    /*预处理计量单元树*/
+    public CompletableFuture<Map<Long, TreeNode<MeterTree>>> getMeterTreeMapAsync(Long contractId) {
+        return CompletableFuture.supplyAsync(() -> {
+            List<MeterTree> list = meterTreeFc.apply(contractId);
+            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(m.getSort());
+                return treeNode;
+            };
+            return FormulaUtils.list2TreeNode(TreeNode::getId,list,fc,TreeNode::getParentId);
+        });
+    }
 
 
 

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

@@ -13,22 +13,21 @@ import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.bean.TableInfo;
-import org.springblade.manager.dto.CellDataVo;
-import org.springblade.manager.dto.ElementData;
-import org.springblade.manager.dto.FormData;
+import org.springblade.manager.dto.*;
 import org.springblade.manager.entity.Formula;
-import org.springblade.manager.dto.Coords;
 import org.springblade.manager.enums.ExecuteType;
 import org.springblade.manager.formula.FormulaLog;
 import org.springblade.manager.formula.ITableElementConverter;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.NodeTable;
 import org.springblade.manager.vo.CurrentNode;
+import org.springblade.manager.vo.MeterTree;
 import org.springblade.manager.vo.MeterType;
 import org.springblade.manager.vo.ReportResult;
 import org.springframework.jdbc.core.JdbcTemplate;
 
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -113,6 +112,8 @@ public class TableElementConverter implements ITableElementConverter {
     private Long periodId;
     /**计量类型*/
     private MeterType meterType;
+    /**计量单元树*/
+    private CompletableFuture<Map<Long, TreeNode<MeterTree>>> meterTreeMap;
     /*存放计量计算结果*/
     public List<ReportResult> reportResults ;
     /*计量属性*/

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaDao.java

@@ -23,4 +23,6 @@ public interface IFormulaDao {
     /*获取合同计量清单*/
     Function<Long,List<InventoryForm>> getInventoryFormFc();
 
+    Function<Long,List<MeterTree>>  getMeterTreeFc();
+
 }

+ 9 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java

@@ -103,6 +103,15 @@ public class FormulaDaoImpl implements IFormulaDao {
         };
     }
 
+    @Override
+    public Function<Long, List<MeterTree>> getMeterTreeFc() {
+        return  contractId->{
+            String sql="select id,node_name,node_code,parent_id,sort from  s_meter_tree_contract where   is_deleted=0 and contract_id ="+contractId;
+            return getEntityList(sql,MeterTree.class);
+        };
+    }
+
+
     public <T> List<T> getEntityList(String sql, Class<T> entityClass) {
         return  jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(entityClass));
     }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -2575,6 +2575,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         ExecutorInit init= new ExecutorInit(tec);
         init.setBaseInfoFc(this.formulaDao.getBaseInfoFc());
         init.setMeterPeriodFc(this.formulaDao.getMeterPeriodFc());
+        init .setMeterTreeFc(this.formulaDao.getMeterTreeFc());
         formulaHandleChains.add(init);
         formulaHandleChains.add(new ExecutorSort(tec));
         formulaHandleChains.add(new ExecutorPre(tec));