yangyj 1 год назад
Родитель
Сommit
6eee53f85c

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

@@ -823,7 +823,7 @@ public static Map<String,List<Long>> relatedPages(List<FormData> curFormDatas ,L
      List<String> result = new ArrayList<>();
      if(Func.isNotBlank(treeCode)){
           /*字符总长度*/
-          int max =treeCode.length(),
+          int max =treeCode.length()-3,
           /*累计字符长度字符*/
            sum=0,
           /*第几次循环*/
@@ -836,8 +836,8 @@ public static Map<String,List<Long>> relatedPages(List<FormData> curFormDatas ,L
   }
 
 /*    public static void main(String[] args) {
-       // String s="003000004001000003";
-        String s="0";
+        *//*String s="003000004001000003";*//*
+        String s="00300";
         treeCodeSplit(s).forEach(System.out::println);
     }*/
 

+ 9 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -15,7 +15,6 @@ import com.mixsmart.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import lombok.SneakyThrows;
 import org.springblade.common.utils.BaseUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
@@ -35,7 +34,6 @@ import org.springblade.manager.formula.impl.CompositeDataAccess;
 import org.springblade.manager.formula.impl.StartupTimeListener;
 import org.springblade.manager.service.*;
 import org.springblade.manager.service.impl.FormulaServiceImpl;
-import org.springblade.manager.vo.AppWbsTreeContractVO;
 import org.springblade.manager.wrapper.FormulaWrapper;
 import org.springframework.beans.BeanUtils;
 import org.springframework.dao.EmptyResultDataAccessException;
@@ -44,7 +42,6 @@ import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import java.io.FileNotFoundException;
-import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.time.Instant;
 import java.time.ZoneId;
@@ -52,7 +49,6 @@ import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * @author yangyj
@@ -511,15 +507,17 @@ public class FormulaController {
             List<String> list = new ArrayList<>();
             if(Func.isNotBlank(one.getTreeCode())){
                 List<String> treeCodes= FormulaUtils.treeCodeSplit(one.getTreeCode());
-                treeCodes.remove(treeCodes.size()-1);
+                /*treeCodes.remove(treeCodes.size()-1);*/
                 List<WbsTreeContract> chains = this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().in(WbsTreeContract::getTreeCode,treeCodes).eq(WbsTreeContract::getContractId,one.getContractId()));
                 if(chains.size()>0){
                     chains.add(one);
-                    chains.remove(0);
+                    WbsTreeContract level0= chains.remove(0);
                     ContractInfo info = contractInfoService.getById(one.getContractId());
-                    list.add(info.getContractName());
+                    list.add(info.getContractName()+"["+level0.getTreeCode()+"]");
                     chains.forEach(next->{
-                        list.add(Func.isNotBlank(next.getFullName()) ? next.getFullName() : next.getNodeName());
+                        String s=(Func.isNotBlank(next.getFullName()) ? next.getFullName() : next.getNodeName())+"["+next.getTreeCode()+"]";
+                        s=s.replaceAll("[\\t\\s\\n\\r]+","");
+                        list.add(s);
                     });
                 }
             }else{
@@ -533,14 +531,15 @@ public class FormulaController {
                         return R.fail("断链");
                     }
                     parentId = next.getParentId().toString();
-                    list.add(Func.isNotBlank(next.getFullName()) ? next.getFullName() : next.getNodeName());
+                    String s=Func.isNotBlank(next.getFullName()) ? next.getFullName() : next.getNodeName();
+                    s=s.replaceAll("[\\t\\s\\n\\r]+","");
+                    list.add(s);
                     loop++;
                 }
                 ContractInfo info = contractInfoService.getById(one.getContractId());
                 Collections.reverse(list);
                 list.set(0, info.getContractName());
             }
-
             final String[] indent = {"-"};
             String result = list.stream()
                     .map(item -> {

+ 60 - 37
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java

@@ -21,6 +21,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.FormulaBean;
 import org.springblade.manager.dto.TreeNode;
 import org.springblade.manager.dto.WbsParamBean;
@@ -30,11 +31,16 @@ 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.*;
 import springfox.documentation.annotations.ApiIgnore;
+
+import java.time.LocalDateTime;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 /**
@@ -50,6 +56,7 @@ public class WbsParamController {
     private final IWbsParamService service;
     private final JdbcTemplate jdbcTemplate;
     private final IFormulaService formulaService;
+    private final StringRedisTemplate redisTemplate;
     private final IElementFormulaMappingService elementFormulaMappingService;
 
 
@@ -593,24 +600,38 @@ public class WbsParamController {
     public R<Object> treeCode(Long contractId,Long projectId) {
         StopWatch stopWatch = new StopWatch();
         stopWatch.start("treeCode刷新");
-        List<Long> contractIds= new ArrayList<>();
+        Set<Long> contractIds=new HashSet<>();
         if(projectId!=null){
-            contractIds= this.jdbcTemplate.queryForList(" select id from m_contract_info where p_id="+projectId+" and is_deleted=0 ",Long.class);
+            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){
-             for(Long id:contractIds){
-                    batchUpdate(id,true);
-             }
+            this.treeCodeUpdate(contractIds);
             stopWatch.stop();
             return R.success((stopWatch.getLastTaskName()+"执行用时:"+stopWatch.getTotalTimeMillis()));
         }
-        return R.fail("项目Id格式有问题");
+        return R.fail("执行失败");
+    }
+
+    /*把所有项目的合同段都刷新treeCode*/
+    @GetMapping("/tree-code-all")
+    public R<Object> treeCodeAll() {
+            return this.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 batchUpdate(Long id,boolean fast){
+
+    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);
@@ -633,37 +654,39 @@ public class WbsParamController {
                     tmp.setChildren(v);
                 }
             });
-            TreeNode<Long> top = treeNodeMap.get(topId);
-            if(fast){
-                List<String>sqlList=new ArrayList<>();
-                sqlBuilder2(top,sqlList,ZERO);
-                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();
-                        }
-                    });
-                }
-            }else{
-                List<Object[]> paramList = new ArrayList<>();
-                sqlBuilder(top,paramList,ZERO);
-                if(!paramList.isEmpty()){
-                    List<List<Object[]>> paramListSplit=BaseUtils.splitList(paramList,1000);
-                    String sqlTemplate="update m_wbs_tree_contract set tree_code = ? where p_key_id = ?";
-                    paramListSplit.parallelStream().forEach(sql->{
-                        try {
-                            this.jdbcTemplate.batchUpdate(sqlTemplate,sql);
-                        }catch (Exception e){
-                            e.printStackTrace();
-                        }
-                    });
+            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()));
         }
+        return R.fail("执行失败");
     }
 
     static String ZERO="0";