Explorar el Código

节点参数获取和底层节点获取有冲突

chenr hace 5 meses
padre
commit
3cec755c9c

+ 13 - 6
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -11,9 +11,11 @@ import com.jfireel.expression.node.impl.VariableNode;
 import com.jfireel.expression.token.Token;
 import org.apache.commons.collections4.MapUtils;
 import org.springblade.common.utils.BaseUtils;
+import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.dto.ParamElements;
 import org.springblade.manager.entity.WbsTreeContract;
+import org.springblade.manager.utils.RandomNumberHolder;
 
 import java.math.BigDecimal;
 import java.text.ParseException;
@@ -47,6 +49,7 @@ public class CustomFunction {
     public static final String CONCAT = "@";
     public static final Set<String> KEYWORD_SET = new HashSet<>();
 
+
     static {
         KEYWORD_SET.add("first");
         KEYWORD_SET.add("last");
@@ -1606,21 +1609,24 @@ public class CustomFunction {
         return r;
     }
 
-    public static Object tree(List<WbsTreeContract> treeNodes, String param,Integer type) {
+    public static Object tree(List<String> treeNodes, String param) {
         if (CollectionUtil.isNotEmpty(treeNodes) && Func.isNotBlank(param)&&RegexUtil.match(ParamElements.LEVEL_REG, param.trim())) {
-            List<WbsTreeContract> nodes = new ArrayList<>(treeNodes);
+            List<String> nodes = new ArrayList<>(treeNodes);
             List<String> result = new ArrayList<>();
             param = param.trim().replaceAll("(?i:c)", "");
             List<String> list = Arrays.asList(param.split("[^.\\d]"));
             List<Integer> index = list.stream().map(Integer::parseInt).collect(Collectors.toList());
-            if(type==1){
+            Integer type = RandomNumberHolder.getRandomTemplateType();
+            if(type==null||type==1){
                 for (Integer i : index) {
                     if (i < nodes.size()) {
-                        result.add(nodes.get(i).getNodeName());
+                        result.add(nodes.get(i));
                     }
                 }
+                return String.join("", result);
             }else {
-                Map<Integer, String> map = nodes.stream()
+                List<WbsTreeContract> nodess = RandomNumberHolder.getRandomWbsTreeContract();
+                Map<Integer, String> map = nodess.stream()
                     .collect(Collectors.toMap(
                         WbsTreeContract::getNodeType,
                         WbsTreeContract::getNodeName,
@@ -1642,8 +1648,9 @@ public class CustomFunction {
                         }
                     }
                 }
+                return String.join("", result);
             }
-            return String.join("", result);
+
         }
         return param;
     }

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

@@ -11,6 +11,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.TreeNode;
@@ -18,6 +19,7 @@ import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.WbsParamMapper;
 import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.*;
+import org.springblade.manager.utils.RandomNumberHolder;
 import org.springblade.manager.vo.NameRuleVo;
 import org.springblade.manager.vo.WbsParamVo2;
 import org.springframework.cache.annotation.Cacheable;
@@ -43,6 +45,7 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
     private final IElementFormulaMappingService elementFormulaMappingService;
     private final JdbcTemplate jdbcTemplate;
+    private final BladeRedis bladeRedis;
 
 
     private static final String NOT_SET = "还未配置提名规则";
@@ -58,17 +61,22 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
         if(wtc!=null&&wtc.getPKeyId()!=null){
             List<WbsTreeContract> nodes = tracing(wtc.getPKeyId());
             if (Func.isNotEmpty(nodes)) {
-                //查询是否是底层节点
-                String sql="select template_type from m_contract_info where id="+wtc.getContractId();
-                Integer type= jdbcTemplate.queryForObject(sql, Integer.class);
+                    //查询是否是底层节点
+                    String sql="select template_type from m_contract_info where id="+wtc.getContractId();
+                    Integer type= jdbcTemplate.queryForObject(sql, Integer.class);
                 //顶层节点优先使用底层节点配置
                 if(type==2){
                     R nameRule = this.getNameRuleByPkeyId(wtc.getPKeyId(), Long.valueOf(wtc.getProjectId()));
                     if(nameRule.getData()!=null){
                         List<String> nameRules =(List<String>) nameRule.getData();
-                        return CustomFunction.tree(nodes, String.join("-", nameRules),2).toString();
+                        RandomNumberHolder.setRandomTemplateType(2);
+                        RandomNumberHolder.setRandomWbsTreeContract(nodes);
+                        //在节点参数获取的时候有反射,改参数个数和类型会有问题,所以把nodes存在线程副本里
+                        return CustomFunction.tree(nodes.stream().map(w->StringUtils.isNotEmpty(w.getFullName())?w.getFullName():w.getNodeName()).collect(Collectors.toList()),
+                            String.join("-", nameRules)).toString();
                     }
                 }else {
+                    RandomNumberHolder.setRandomTemplateType(1);
                     WbsTreePrivate wtp = this.wtpId(wtc.getPKeyId());
                     if(wtp!=null){
                         /*优先取私有*/
@@ -81,7 +89,7 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
                             }
                         }
                         if (Func.isNotEmpty(wp)) {
-                            return CustomFunction.tree(nodes, wp.getV(),1).toString();
+                            return CustomFunction.tree(nodes.stream().map(w->StringUtils.isNotEmpty(w.getFullName())?w.getFullName():w.getNodeName()).collect(Collectors.toList()), wp.getV()).toString();
                         }else{
                             return wtp.getNodeName()+"找不到文件题名配置";
                         }
@@ -107,7 +115,7 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
                 WbsTreePrivate wtp = this.wtpId(wtc.getPKeyId());
                 if(wtp!=null){
                     if (Func.isNotEmpty(wp)) {
-                        return CustomFunction.tree(nodes, wp,null).toString();
+                        return CustomFunction.tree(nodes.stream().map(w->StringUtils.isNotEmpty(w.getFullName())?w.getFullName():w.getNodeName()).collect(Collectors.toList()), wp).toString();
                     }else{
                         return wtp.getNodeName()+"找不到文件题名配置";
                     }

+ 33 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/RandomNumberHolder.java

@@ -1,19 +1,50 @@
 package org.springblade.manager.utils;
 
+import org.springblade.manager.entity.WbsTreeContract;
+
 import java.util.HashMap;
+import java.util.List;
 
 public class RandomNumberHolder {
         private static final ThreadLocal<HashMap<Long,String>> randomNumberThreadLocal = new ThreadLocal<>();
+        private static final ThreadLocal<Integer> randomTemplateTypeThreadLocal = new ThreadLocal<>();
+        private static final ThreadLocal<List<WbsTreeContract>> randomWbsTreeContractThreadLocal = new ThreadLocal<>();
 
     public static void setRandomNumber(HashMap<Long,String> map) {
         randomNumberThreadLocal.set(map);
     }
-
     public static HashMap<Long,String>getRandomNumber() {
         return randomNumberThreadLocal.get();
     }
 
-    public static void clear() {
+
+    public static void RandomNumberclear() {
         randomNumberThreadLocal.remove();
     }
+
+
+    public static void setRandomTemplateType(Integer type) {
+        randomTemplateTypeThreadLocal.set(type);
+    }
+
+    public static Integer getRandomTemplateType() {
+        return randomTemplateTypeThreadLocal.get();
+    }
+
+    public static void RandomTemplateTypeclear() {
+        randomTemplateTypeThreadLocal.remove();
+    }
+
+    public static void setRandomWbsTreeContract(List<WbsTreeContract> list ) {
+        randomWbsTreeContractThreadLocal.set(list);
+    }
+
+    public static List<WbsTreeContract> getRandomWbsTreeContract() {
+        return randomWbsTreeContractThreadLocal.get();
+    }
+
+    public static void RandomWbsTreeContractclear() {
+        randomWbsTreeContractThreadLocal.remove();
+    }
 }
+