yangyj 1 gadu atpakaļ
vecāks
revīzija
edf1ab7935

+ 15 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/TreeCodeUpdate.java

@@ -0,0 +1,15 @@
+package org.springblade.business.entity;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author yangyj
+ * @Description treeCode刷新标记
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TreeCodeUpdate {
+}

+ 35 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/TreeCodeUpdateAspect.java

@@ -0,0 +1,35 @@
+package org.springblade.business.entity;
+
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author yangyj
+ * @Date 2023/10/27 10:39
+ * @description treeCode刷新标识
+ */
+@Aspect
+@Component
+public class TreeCodeUpdateAspect {
+
+    @Pointcut("@annotation(org.springblade.business.entity.TreeCodeUpdate)")
+    public void p(){};
+
+    @Around("p()")
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+        Object result = null;
+        try {
+            Object[] args = joinPoint.getArgs();
+            result= joinPoint.proceed();
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        /*System.out.println("treeCode刷新标识:执行一次就+1,后台定时检查到超阈值则执行刷新");*/
+        return result;
+    }
+
+}

+ 6 - 9
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -44,7 +44,6 @@ import org.springblade.manager.dto.RangeInfo;
 import org.springblade.manager.dto.RangeJson;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.feign.*;
-import org.springblade.manager.vo.WbsTreeContractLazyVO;
 import org.springblade.manager.vo.WbsTreeContractTreeVOS;
 import org.springblade.manager.vo.WbsTreeContractVO8;
 import org.springblade.resource.feign.NewIOSSClient;
@@ -58,10 +57,6 @@ import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.scheduling.annotation.Async;
-import org.springframework.transaction.TransactionStatus;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -72,8 +67,6 @@ import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.util.*;
 import java.util.function.Function;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -1377,6 +1370,7 @@ public class InformationWriteQueryController extends BladeController {
     @PostMapping("/copyContractTreeNode")
     @ApiOperationSupport(order = 15)
     @ApiOperation(value = "复制节点(新)")
+    @TreeCodeUpdate
     public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
         //表单所属方
         String tabOwner = "";
@@ -1467,7 +1461,7 @@ public class InformationWriteQueryController extends BladeController {
                     //newData.setIsBussShow(1);
                     //初始化表格是否上传附件,默认未上传
                     newData.setTabFileType(1);
-                    //初始化单表是否可以预览,默认不能
+                    //初始化单表是否可以预览,默认
                     newData.setIsTabPdf(1);
                     //初始化PDF路径
                     newData.setPdfUrl(null);
@@ -2960,6 +2954,7 @@ public class InformationWriteQueryController extends BladeController {
     @PostMapping("/saveContractTreeNode")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "新增节点及其子节点")
+    @TreeCodeUpdate
     public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
         //先获取当前节点的信息
         WbsTreeContract treeContract = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(vo.getCurrentNodePrimaryKeyId()));
@@ -3139,8 +3134,10 @@ public class InformationWriteQueryController extends BladeController {
                 newData.setContractIdRelation(treeContract.getContractIdRelation());
                 newData.setContractType(treeContract.getContractType());
                 newData.setCreateTime(new Date());
-                if (half.getType() != null && new Integer("2").equals(half.getType())) {
+                if(Optional.ofNullable(half.getNodeType()).orElse(7)<=6){
                     newData.setIsTypePrivatePid(half.getPKeyId());
+                }
+                if (half.getType() != null && new Integer("2").equals(half.getType())) {
                     //2023年8月1日14:41:03更改需求,isBussShow默认=1
                     newData.setIsBussShow(1);
                 }

+ 13 - 0
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -1,8 +1,19 @@
 package com.mixsmart.utils;
 
 
+import cn.hutool.json.JSONObject;
 import cn.hutool.log.StaticLog;
 import com.jfireel.expression.Expression;
+import org.apache.http.*;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
 import org.apache.poi.hssf.usermodel.HSSFDataFormatter;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
@@ -34,6 +45,7 @@ import org.springblade.manager.dto.LocalVariable;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.formula.NodeTable;
 import org.springblade.manager.utils.FileUtils;
+import reactor.core.publisher.Mono;
 
 import java.awt.*;
 import java.awt.Font;
@@ -841,4 +853,5 @@ public static Map<String,List<Long>> relatedPages(List<FormData> curFormDatas ,L
         treeCodeSplit(s).forEach(System.out::println);
     }*/
 
+
 }

+ 0 - 21
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -880,27 +880,6 @@ public class FormulaController {
            }
            System.out.println("刷新结束");
        }
-
-      /*  String sql ="select p_key_id pkeyId ,id,old_id originId,full_name fullName,node_name nodeName  from m_wbs_tree_contract where contract_id=? and node_type in(6,4) and major_data_type in(2,3,4) AND is_deleted=0 and is_type_private_pid is null";
-        List<Map<String,Object>> listMaps=this.jdbcTemplate.queryForList(sql,contractId);
-        if(listMaps.size()>0){
-           Map<Long,List<Map<String,Object>>> group=listMaps.stream().collect(Collectors.groupingBy(m->{Object id=m.get("id");Object originId=m.get("originId");if(originId!=null){
-                        return Long.parseLong(originId.toString());
-                    }else{
-                        return Long.parseLong(id.toString());
-                    }}));
-           String sql2="select node_name nodeName,p_key_id pkeyId,id from m_wbs_tree_private where id in ("+group.keySet().stream().map(Objects::toString).collect(Collectors.joining(","))+") and project_id=?";
-           List<Map<String,Object>> privateListMap= this.jdbcTemplate.queryForList(sql2,projectId);
-           if(privateListMap.size()>0){
-               Map<Long,Long> kkm=privateListMap.stream().collect(Collectors.toMap(s->Long.parseLong(s.get("id").toString()),s->Long.parseLong(s.get("pkeyId").toString())));
-               System.out.println(kkm.size());
-               *//*{id,pkeyId}*//*
-               Set<Long> set = new HashSet<>(group.keySet());
-               set.removeAll(kkm.keySet());
-               System.out.println("剩余数量:"+set.size());
-           }
-
-        }*/
       return    R.success("成功");
     }
 

+ 8 - 122
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java

@@ -1,7 +1,6 @@
 package org.springblade.manager.controller;
 
 import cn.hutool.core.date.StopWatch;
-import cn.hutool.log.StaticLog;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -31,9 +30,7 @@ import org.springblade.manager.vo.ParamBean;
 import org.springblade.manager.vo.ParamSearch;
 import org.springblade.manager.wrapper.WbsParamWrapper;
 import org.springframework.beans.BeanUtils;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.*;
@@ -133,26 +130,8 @@ public class WbsParamController {
                         }
                         if (!elementMap.isEmpty()) {
                             List<Map<String, Object>> finalElementMap = elementMap;
-                           // List<Map<String,Object>> formulaIdAndKmaps=this.jdbcTemplate.queryForList("select a.id,b.k from m_formula a join m_wbs_param b on a.param_id=b.id where b.k in ("+entityList.stream().map(WbsParam::getK).collect(Collectors.joining("','","'","'"))+") AND b.type=0");
                            Map<String,Long> fkMap=this.service.formulaIdKeyMap(entityList.stream().map(WbsParam::getK).collect(Collectors.toList()));
                             entityList.forEach(e -> {
-//                                Formula formula = new Formula();
-//                                formula.setOutm(Formula.FULL);
-//                                formula.setParamId(e.getId());
-//                                Map<String, String> keyMap = new HashMap<>();
-//                                keyMap.put("name", e.getName());
-//                                keyMap.put("id", e.getId().toString());
-//                                tmpMap.put(e.getK(), keyMap);
-//                                if (RegexUtil.match(ParamElements.LEVEL_REG, e.getV().trim())) {
-//                                    /*取层级*/
-//                                    formula.setFormula("FC.tree(trees,WP[" + e.getK() + "])");
-//                                } else {
-//                                    /*直接取数*/
-//                                    formula.setFormula("WP[" + e.getK() + "]");
-//                                }
-//                                formula.setMap(JSON.toJSONString(tmpMap));
-//                                this.formulaService.save(formula);
-//                                tmpMap.clear();
                                 finalElementMap.forEach(m -> {
                                     if (StringUtils.handleNull(m.get("name")).contains(e.getName())) {
                                         ElementFormulaMapping efm = new ElementFormulaMapping();
@@ -594,128 +573,35 @@ public class WbsParamController {
         return R.fail("项目Id格式有问题");
     }
 
+    /*检查指定节点的文件提名*/
+    @GetMapping("/file-title-check")
+    public R<Object> titleCheck(Long pkeyId){
+        return R.data(this.service.createFileTitle(pkeyId));
+    }
 
     /**按合同段或者项目刷入m_wbs_tree_contract的treeCode*/
     @GetMapping("/tree-code")
     public R<Object> treeCode(Long contractId,Long projectId) {
-        StopWatch stopWatch = new StopWatch();
-        stopWatch.start("treeCode刷新");
-        Set<Long> contractIds=new HashSet<>();
-        if(projectId!=null){
-            contractIds= new HashSet<>(this.jdbcTemplate.queryForList(" select id from m_contract_info where p_id="+projectId+" and is_deleted=0 ",Long.class));
-        }else if( contractId!=null){
-            contractIds.add(contractId);
-        }
-        if(contractIds.size()>0){
-            this.treeCodeUpdate(contractIds);
-            stopWatch.stop();
-            return R.success((stopWatch.getLastTaskName()+"执行用时:"+stopWatch.getTotalTimeMillis()));
-        }
-        return R.fail("执行失败");
+        return this.service.treeCode(contractId,projectId);
     }
 
     /*把所有项目的合同段都刷新treeCode*/
     @GetMapping("/tree-code-all")
     public R<Object> treeCodeAll() {
-            return this.treeCodeUpdateProjectAllForJob();
+            return this.service.treeCodeUpdateProjectAllForJob();
     }
 
 
-
     @Scheduled(cron = " 0 0 3,13 * * ?")
     public  void job(){
         System.out.println("treeCode刷新任务开始"+ LocalDateTime.now());
         if(!Optional.ofNullable(System.getProperty("os.name")).orElse(StringPool.EMPTY).equals("Linux")){
-              this.treeCodeUpdateProjectAllForJob();
-        }
-    }
-
-
-    public void builder(Long id,List<String>sqlList){
-        List<Map<String,Object>> treeNodeList= this.jdbcTemplate.queryForList("select node_name name,p_key_id value, id, parent_id parentId from m_wbs_tree_contract where contract_id="+id+" and is_deleted=0 and type=1 ");
-        if(treeNodeList.size()>0){
-            Map<Long,TreeNode<Long>> treeNodeMap = new HashMap<>(treeNodeList.size()*2);
-            Long topId=null;
-            for (Map<String,Object> map:treeNodeList){
-                TreeNode<Long> treeNode = new TreeNode<>();
-                treeNode.setId(Long.parseLong(map.get("id").toString()));
-                treeNode.setParentId(Long.parseLong(map.get("parentId").toString()));
-                treeNode.setValue(Long.parseLong(map.get("value").toString()));
-                treeNode.setName(map.get("name").toString());
-                if(treeNode.getParentId().equals(0L)){
-                    topId=treeNode.getId();
-                }
-                treeNodeMap.put(treeNode.getId(),treeNode);
-            }
-            Map<Long,List<TreeNode<Long>>> group= treeNodeMap.values().stream().collect(Collectors.groupingBy(TreeNode::getParentId));
-            group.forEach((k,v)->{
-                TreeNode<Long> tmp = treeNodeMap.get(k);
-                if(tmp!=null) {
-                    tmp.setChildren(v);
-                }
-            });
-            sqlBuilder2(treeNodeMap.get(topId),sqlList,ZERO);
-        }
-    }
-
-    public void treeCodeUpdate(Set<Long> contractIds){
-        List<String>sqlList=new ArrayList<>();
-        contractIds.forEach(id->{
-            builder(id,sqlList);
-        });
-        if(sqlList.size()>0){
-            List<List<String>> sqlListSeg = BaseUtils.splitList(sqlList, 250);
-            sqlListSeg.parallelStream().forEach(sql->{
-                try {
-                    String joinSql=String.join(";",sql);
-                    this.jdbcTemplate.execute(joinSql);
-                }catch (Exception e){
-                    e.printStackTrace();
-                }
-            });
-        }
-    }
-
-    /**批量任務*/
-    public R<Object> treeCodeUpdateProjectAllForJob(){
-        StopWatch stopWatch = new StopWatch();
-        stopWatch.start("全部项目treeCode刷新");
-        Set<Long>  contractIds= new HashSet<>(this.jdbcTemplate.queryForList(" select id from m_contract_info where  is_deleted=0 ",Long.class));
-        if(contractIds.size()>0){
-            this.treeCodeUpdate(contractIds);
-            stopWatch.stop();
-            return R.success((stopWatch.getLastTaskName()+"执行用时:"+stopWatch.getTotalTimeMillis()));
+              this.service.treeCodeUpdateProjectAllForJob();
         }
-        return R.fail("执行失败");
     }
 
-    static String ZERO="0";
-    public void sqlBuilder(TreeNode<Long> top, List<Object[]>paramList, String treeCode){
-            if(top!=null){
-                paramList.add(new Object[]{treeCode,top.getValue()});
-                if(top.hasChildren()){
-                     for(int i=0;i<top.getChildren().size();i++){
-                         TreeNode<Long> child=top.getChildren().get(i);
-                         int base=ZERO.equals(treeCode)?100:1000;
-                         sqlBuilder(child,paramList,treeCode+String.valueOf(base+i).substring(1));
-                     }
-                }
-            }
 
-    }
-    public void sqlBuilder2(TreeNode<Long> top, List<String>sqlList, String treeCode){
-        if(top!=null){
-            sqlList.add("update m_wbs_tree_contract set tree_code ='"+treeCode+"' where p_key_id="+top.getValue());
-            if(top.hasChildren()){
-                for(int i=0;i<top.getChildren().size();i++){
-                    TreeNode<Long> child=top.getChildren().get(i);
-                    int base=ZERO.equals(treeCode)?100:1000;
-                    sqlBuilder2(child,sqlList,treeCode+String.valueOf(base+i).substring(1));
-                }
-            }
-        }
 
-    }
 
 
 

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

@@ -1,6 +1,7 @@
 package org.springblade.manager.service;
 
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.tool.api.R;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsTreeContract;
@@ -8,6 +9,7 @@ import org.springblade.manager.entity.WbsTreeContract;
 import javax.validation.constraints.NotNull;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author yangyj
@@ -40,5 +42,12 @@ public interface IWbsParamService extends BaseService<WbsParam> {
     Map<String,Long> formulaIdKeyMap(List<String> ks);
     /**指定key的formulaId映射*/
     Long formulaId(String k);
+    /**指定key的formulaId映射*/
     Map<String, Formula> formulaKeyMap(List<String> ks);
+    /**根据合同段集合刷新*/
+     void treeCodeUpdate(Set<Long> contractIds);
+    /**全部项目刷新*/
+     R<Object> treeCodeUpdateProjectAllForJob();
+    /**指定合同段或者项目*/
+     R<Object> treeCode(Long contractId,Long projectId);
 }

+ 142 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsParamServiceImpl.java

@@ -4,13 +4,16 @@ import cn.hutool.core.date.StopWatch;
 import cn.hutool.log.StaticLog;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.mixsmart.utils.CustomFunction;
+import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.AllArgsConstructor;
 import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.mp.base.BaseEntity;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.dto.TreeNode;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.WbsParamMapper;
 import org.springblade.manager.service.IElementFormulaMappingService;
@@ -82,22 +85,38 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
         WbsTreeContract one = this.treeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, pkeyId));
         if (one != null) {
             List<WbsTreeContract> list = new ArrayList<>();
-            list.add(one);
-            int max = 20;
-            int loop = 0;
-            String parentId = one.getParentId().toString();
-            while (loop < max && StringUtils.isNotEquals(0, parentId)) {
-                WbsTreeContract next = this.treeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getContractId, one.getContractId()).eq(WbsTreeContract::getId, parentId));
-                if(next!=null) {
-                    parentId = next.getParentId().toString();
-                    list.add(next);
-                    loop++;
-                }else{
-                    loop=max;
+            if(Func.isNotBlank(one.getTreeCode())){
+                List<String> treeCodes= FormulaUtils.treeCodeSplit(one.getTreeCode());
+                treeCodes.remove(0);
+                List<WbsTreeContract> chains = this.treeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().in(WbsTreeContract::getTreeCode,treeCodes).eq(WbsTreeContract::getContractId,one.getContractId()));
+                Long parentId=one.getParentId();
+                Collections.reverse(chains);
+                for(WbsTreeContract t:chains){
+                    /*由于treeCode的刷新时效性,还需要筛选*/
+                    if(t.getId().equals(parentId)){
+                        list.add(t);
+                        parentId=t.getParentId();
+                    }
+                }
+                list.add(one);
+            }else {
+                list.add(one);
+                int max = 20;
+                int loop = 0;
+                String parentId = one.getParentId().toString();
+                while (loop < max && StringUtils.isNotEquals(0, parentId)) {
+                    WbsTreeContract next = this.treeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getContractId, one.getContractId()).eq(WbsTreeContract::getId, parentId));
+                    if (next != null) {
+                        parentId = next.getParentId().toString();
+                        list.add(next);
+                        loop++;
+                    } else {
+                        loop = max;
+                    }
                 }
+                Collections.reverse(list);
+                list.remove(0);
             }
-            Collections.reverse(list);
-            list.remove(0);
             return list;
         }
         return new ArrayList<>();
@@ -265,6 +284,115 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
         }
         return result;
     }
+
+    public void builder(Long id,List<String>sqlList){
+        List<Map<String,Object>> treeNodeList= this.jdbcTemplate.queryForList("select node_name name,p_key_id value, id, parent_id parentId from m_wbs_tree_contract where contract_id="+id+" and is_deleted=0 and type=1 ");
+        if(treeNodeList.size()>0){
+            Map<Long, TreeNode<Long>> treeNodeMap = new HashMap<>(treeNodeList.size()*2);
+            Long topId=null;
+            for (Map<String,Object> map:treeNodeList){
+                TreeNode<Long> treeNode = new TreeNode<>();
+                treeNode.setId(Long.parseLong(map.get("id").toString()));
+                treeNode.setParentId(Long.parseLong(map.get("parentId").toString()));
+                treeNode.setValue(Long.parseLong(map.get("value").toString()));
+                treeNode.setName(map.get("name").toString());
+                if(treeNode.getParentId().equals(0L)){
+                    topId=treeNode.getId();
+                }
+                treeNodeMap.put(treeNode.getId(),treeNode);
+            }
+            Map<Long,List<TreeNode<Long>>> group= treeNodeMap.values().stream().collect(Collectors.groupingBy(TreeNode::getParentId));
+            group.forEach((k,v)->{
+                TreeNode<Long> tmp = treeNodeMap.get(k);
+                if(tmp!=null) {
+                    tmp.setChildren(v);
+                }
+            });
+            sqlBuilder2(treeNodeMap.get(topId),sqlList,ZERO);
+        }
+    }
+
+    @Override
+    public void treeCodeUpdate(Set<Long> contractIds){
+        List<String>sqlList=new ArrayList<>();
+        contractIds.forEach(id->{
+            try {
+                builder(id, sqlList);
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        });
+        if(sqlList.size()>0){
+            List<List<String>> sqlListSeg = BaseUtils.splitList(sqlList, 250);
+            sqlListSeg.parallelStream().forEach(sql->{
+                try {
+                    String joinSql=String.join(";",sql);
+                    this.jdbcTemplate.execute(joinSql);
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            });
+        }
+    }
+
+    /**刷新所有有效合同段treeCode*/
+    @Override
+    public R<Object> treeCodeUpdateProjectAllForJob(){
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start("全部项目treeCode刷新");
+        Set<Long>  contractIds= new HashSet<>(this.jdbcTemplate.queryForList(" select id from m_contract_info where  is_deleted=0 ",Long.class));
+        if(contractIds.size()>0){
+            this.treeCodeUpdate(contractIds);
+            stopWatch.stop();
+            return R.success((stopWatch.getLastTaskName()+"执行用时:"+stopWatch.getTotalTimeMillis()));
+        }
+        return R.fail("执行失败");
+    }
+
+    static String ZERO="0";
+    public void sqlBuilder(TreeNode<Long> top, List<Object[]>paramList, String treeCode){
+        if(top!=null){
+            paramList.add(new Object[]{treeCode,top.getValue()});
+            if(top.hasChildren()){
+                for(int i=0;i<top.getChildren().size();i++){
+                    TreeNode<Long> child=top.getChildren().get(i);
+                    int base=ZERO.equals(treeCode)?100:1000;
+                    sqlBuilder(child,paramList,treeCode+String.valueOf(base+i).substring(1));
+                }
+            }
+        }
+    }
+    public void sqlBuilder2(TreeNode<Long> top, List<String>sqlList, String treeCode){
+        if(top!=null){
+            sqlList.add("update m_wbs_tree_contract set tree_code ='"+treeCode+"' where p_key_id="+top.getValue());
+            if(top.hasChildren()){
+                for(int i=0;i<top.getChildren().size();i++){
+                    TreeNode<Long> child=top.getChildren().get(i);
+                    int base=ZERO.equals(treeCode)?100:1000;
+                    sqlBuilder2(child,sqlList,treeCode+String.valueOf(base+i).substring(1));
+                }
+            }
+        }
+
+    }
+    @Override
+    public R<Object> treeCode(Long contractId,Long projectId) {
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start("treeCode刷新");
+        Set<Long> contractIds=new HashSet<>();
+        if(projectId!=null){
+            contractIds= new HashSet<>(this.jdbcTemplate.queryForList(" select id from m_contract_info where p_id="+projectId+" and is_deleted=0 ",Long.class));
+        }else if( contractId!=null){
+            contractIds.add(contractId);
+        }
+        if(contractIds.size()>0){
+            this.treeCodeUpdate(contractIds);
+            stopWatch.stop();
+            return R.success((stopWatch.getLastTaskName()+"执行用时:"+stopWatch.getTotalTimeMillis()));
+        }
+        return R.fail("执行失败");
+    }
+
 }