Bläddra i källkod

节点参数:同步;查重

yangyj 2 år sedan
förälder
incheckning
ba43ebca6c

+ 24 - 0
blade-common/src/main/java/org/springblade/common/utils/BaseUtils.java

@@ -15,6 +15,8 @@ import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * @author yangyj
@@ -74,6 +76,14 @@ public class BaseUtils {
         return false;
     }
 
+
+    /**
+     * @Description  判断对象是否为数值
+     * @Param [value]
+     * @return boolean
+     * @Author yangyj
+     * @Date 2023.01.17 13:48
+     **/
     public static boolean isNumber(Object value) {
         if ((value == null) || value.toString().trim().length() == 0) {
             return false;
@@ -87,4 +97,18 @@ public class BaseUtils {
         return m.matches();
     }
 
+    /**
+     * @Description  根据指定大小对LIST进行切分
+     * @Param [list, chunkSize:每一段长度]
+     * @return java.util.List<java.util.List<T>>
+     * @Author yangyj
+     * @Date 2023.07.03 13:46
+     **/
+    public static <T> List<List<T>> splitList(List<T> list, int chunkSize) {
+        return IntStream.range(0, (list.size() + chunkSize - 1) / chunkSize)
+                .mapToObj(i -> list.subList(i * chunkSize, Math.min((i + 1) * chunkSize, list.size())))
+                .collect(Collectors.toList());
+    }
+
+
 }

+ 30 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java

@@ -12,6 +12,8 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.BaseUtils;
+import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
@@ -32,6 +34,8 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -82,6 +86,10 @@ public class WbsParamController {
     public R saveOrUpdateBatch(@RequestBody ParamBean pb) {
         try {
             List<WbsParamBean> wps = pb.getWps();
+            String names=checkRepeat(wps);
+            if(names!=null){
+                return R.success("存在重复参数【"+names+"】,删除多余项再保存");
+            }
             /*执行顺序,删>增>改*/
             if (Func.isNotEmpty(pb.getDelIds())) {
                 List<Long> delIds = pb.getDelIds().stream().filter(Func::isNotEmpty).collect(Collectors.toList());
@@ -187,6 +195,16 @@ public class WbsParamController {
 
     }
 
+    public String checkRepeat( List<WbsParamBean> wps){
+        if(Func.isNotEmpty(wps)){
+           List<List<WbsParamBean>> target=wps.stream().collect(Collectors.groupingBy(WbsParamBean::getK)).values().stream().filter(l->l.size()>1).collect(Collectors.toList());
+           if(target.size()>0){
+               return target.stream().map(l->l.get(0).getName()).collect(Collectors.joining(","));
+           }
+        }
+        return null;
+    }
+
     /**
      * /**
      * 删除
@@ -239,6 +257,7 @@ public class WbsParamController {
     @ApiOperation(value = "节点参数列表", notes = "节点参数列表")
     @GetMapping("/list")
     public R<List<WbsParamBean>> list3(@ApiParam(value = "节点id", required = true) Long wbsId) {
+        this.service.duplicate(wbsId);
         List<WbsParam> data = this.service.list(Wrappers.<WbsParam>lambdaQuery()
                 .select(WbsParam::getId, WbsParam::getName, WbsParam::getK, WbsParam::getV, WbsParam::getRemark, WbsParam::getNodeId, WbsParam::getProjectId)
                 .eq(WbsParam::getNodeId, wbsId)
@@ -410,7 +429,7 @@ public class WbsParamController {
         try {
             StopWatch stopWatch = new StopWatch();
             stopWatch.start("节点参数查重及删除");
-            List<Map<String, Object>> mapList = this.jdbcTemplate.queryForList("select  node_id nodeId,k,count(*) num from m_wbs_param  where is_deleted=0 and type=1 GROUP BY node_id,k HAVING count(*)>2");
+            List<Map<String, Object>> mapList = this.jdbcTemplate.queryForList("select  node_id nodeId,k,count(*) num from m_wbs_param  where is_deleted=0 and type=1 GROUP BY node_id,k HAVING count(*)>1");
             if (!mapList.isEmpty()) {
                 List<WbsParam> list = this.service.list(Wrappers.<WbsParam>lambdaQuery().in(WbsParam::getNodeId, mapList.stream().map(m -> m.get("nodeId")).collect(Collectors.toList())));
                 List<Long> removeWpIds = new ArrayList<>();
@@ -437,6 +456,9 @@ public class WbsParamController {
                 System.out.println("待删除参数" + removeWpIds.size() + "个");
                 System.out.println("待删除中间关联" + removeMapingIds.size() + "个");
                 System.out.println("待删除公式" + removeFormulaIds.size() + "个");
+//                    batchDel(this.service,removeWpIds);
+//                    batchDel(this.elementFormulaMappingService,removeMapingIds);
+//                    batchDel(this.formulaService,removeFormulaIds);
                 Map<String, Integer> result = new HashMap<>();
                 result.put("查找到重复参数", list.size());
                 result.put("待删除参数", removeWpIds.size());
@@ -453,4 +475,11 @@ public class WbsParamController {
         return R.fail("执行异常");
     }
 
+    public <T> void  batchDel(BaseService<T> sv,List<Long> list){
+        if(sv!=null&&Func.isNotEmpty(list)) {
+            List<List<Long>> removeWpIdsList = BaseUtils.splitList(list, 1000);
+            removeWpIdsList.forEach(sv::deleteLogic);
+        }
+    }
+
 }

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsParamService.java

@@ -29,5 +29,6 @@ public interface IWbsParamService extends BaseService<WbsParam> {
     List<WbsParam> findByNodeId(Long nodeId);
 
     List<WbsTreeContract> chain(Long contractId, Long id, Long pkId, WbsTreeContract wbsTreeContract);
-    public List<WbsTreeContract> tracing(@NotNull Long pkeyId);
+     List<WbsTreeContract> tracing(@NotNull Long pkeyId);
+    void duplicate(Long nodeId);
 }

+ 79 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsParamServiceImpl.java

@@ -1,11 +1,13 @@
 package org.springblade.manager.service.impl;
 
+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.StringUtils;
 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.tool.api.R;
 import org.springblade.core.tool.utils.Func;
@@ -14,9 +16,12 @@ import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.mapper.WbsParamMapper;
+import org.springblade.manager.service.IElementFormulaMappingService;
+import org.springblade.manager.service.IFormulaService;
 import org.springblade.manager.service.IWbsParamService;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springframework.cache.annotation.Cacheable;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -33,6 +38,10 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsParam> implements IWbsParamService {
     private final IWbsTreeContractService treeContractService;
+    private final IElementFormulaMappingService elementFormulaMappingService;
+    private final IFormulaService formulaService;
+    private final JdbcTemplate jdbcTemplate;
+
     private static final String NOT_SET = "还未配置提名规则";
     /**
      * 文件题名
@@ -44,7 +53,6 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
     public String createFileTitle(Long nodeId, Long contractId, WbsTreeContract wbsTreeContract) {
         if (BaseUtils.isNotNull(nodeId, contractId)) {
             StaticLog.info("获取节点{}文件题名", nodeId);
-          //  List<WbsTreeContract> nodes = chain(contractId, nodeId, wbsTreeContract.getPKeyId(), wbsTreeContract);
             List<WbsTreeContract> nodes = tracing(wbsTreeContract.getPKeyId());
             if (Func.isNotEmpty(nodes)) {
                 /*优先取私有*/
@@ -82,6 +90,76 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
         return new ArrayList<>();
     }
 
+    @Override
+    public void duplicate(Long nodeId) {
+        try {
+            StopWatch stopWatch = new StopWatch();
+            stopWatch.start("节点参数查重及删除");
+            List<Map<String, Object>> mapList = this.jdbcTemplate.queryForList("select  node_id nodeId,k,count(*) num from m_wbs_param  where is_deleted=0 and type=1 and node_id="+nodeId+" GROUP BY node_id,k HAVING count(*)>1");
+            if (!mapList.isEmpty()) {
+                List<WbsParam> list = this.list(Wrappers.<WbsParam>lambdaQuery().in(WbsParam::getNodeId, mapList.stream().map(m -> m.get("nodeId")).collect(Collectors.toList())));
+                List<Long> removeWpIds = new ArrayList<>();
+                List<Long> removeMapingIds = new ArrayList<>();
+                List<Long> removeFormulaIds = new ArrayList<>();
+                Map<Long, Map<String, List<WbsParam>>> group = list.stream().collect(Collectors.groupingBy(WbsParam::getNodeId, LinkedHashMap::new, Collectors.groupingBy(WbsParam::getK)));
+                group.values().forEach(m -> {
+                    m.forEach((k, v) -> {
+                        List<Map<String, Object>> relationMap = this.jdbcTemplate.queryForList("select a.id paramId,b.id mappingId,b.formula_id formulaId from m_wbs_param a join m_element_formula_mapping b on a.id=b.param_id where b.scope=35 and a.id in(" + v.stream().map(WbsParam::getId).map(String::valueOf).collect(Collectors.joining("','", "'", "'")) + ") order by  b.update_time desc");
+                        if (!relationMap.isEmpty()) {
+                            Object id = relationMap.get(0).get("paramId");
+                            removeWpIds.addAll(v.stream().map(WbsParam::getId).filter(eId -> !StringUtils.isNotEquals(id, eId)).collect(Collectors.toList()));
+                            /*同一道工序下,一个节点参数可能会关联多个元素,除了保留参数关联的以外全部添加到待删除列表*/
+                            relationMap.stream().filter(x -> StringUtils.isNotEquals(x.get("paramId"), id)).forEach(e -> {
+                                removeMapingIds.add(Long.parseLong(e.get("mappingId").toString()));
+                                removeFormulaIds.add(Long.parseLong(e.get("formulaId").toString()));
+                            });
+                        } else {
+                            removeWpIds.addAll(v.stream().skip(1).map(WbsParam::getId).collect(Collectors.toList()));
+                        }
+                    });
+                });
+                System.out.println("查找到重复参数" + list.size() + "个");
+                System.out.println("待删除参数" + removeWpIds.size() + "个");
+                System.out.println("待删除中间关联" + removeMapingIds.size() + "个");
+                System.out.println("待删除公式" + removeFormulaIds.size() + "个");
+                Map<String, Integer> result = new HashMap<>();
+                result.put("查找到重复参数", list.size());
+                result.put("待删除参数", removeWpIds.size());
+                result.put("待删除中间关联", removeMapingIds.size());
+                result.put("待删除公式", removeFormulaIds.size());
+//                if(removeWpIds.size()>0) {
+//                    this.deleteLogic(removeWpIds);
+//                }
+//                if(removeMapingIds.size()>0){
+//                    this.elementFormulaMappingService.deleteLogic(removeMapingIds);
+//                }
+//                if(removeFormulaIds.size()>0){
+//                    this.formulaService.deleteLogic(removeFormulaIds);
+//                }
+                if(removeWpIds.size()>0) {
+                    batchDel(this,removeWpIds);
+                }
+                if(removeMapingIds.size()>0){
+                    batchDel(this.elementFormulaMappingService,removeMapingIds);
+                }
+                if(removeFormulaIds.size()>0){
+                    batchDel(this.formulaService,removeFormulaIds);
+                }
+                stopWatch.stop();
+                Long totalTime = stopWatch.getTotalTimeMillis();
+                StaticLog.info("公式执行用时:{},删除情况:{}", totalTime,result);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    public <T> void  batchDel(BaseService<T> sv, List<Long> list){
+        if(sv!=null&&Func.isNotEmpty(list)) {
+            List<List<Long>> removeWpIdsList = BaseUtils.splitList(list, 1000);
+            removeWpIdsList.forEach(sv::deleteLogic);
+        }
+    }
+
     @Override
     public List<WbsParam> findByNodeId(Long nodeId) {
         if (nodeId != null) {

+ 33 - 36
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -41,6 +41,8 @@ import org.springblade.system.cache.ParamCache;
 import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.SqlParameterValue;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -50,6 +52,8 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.sql.Timestamp;
+import java.sql.Types;
 import java.time.LocalDateTime;
 import java.io.*;
 import java.util.*;
@@ -897,7 +901,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
     @Override
     public boolean syncNodeParam(String projectId, String pKeyId) {
-        projectId = null;//暂不执行
+       // projectId = null;//暂不执行
         if (StringUtils.isNotEmpty(projectId) && StringUtils.isNotEmpty(pKeyId)) {
             ProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
             //当前选择同步的节点信息
@@ -905,24 +909,22 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             if (selectNodeNow == null) {
                 throw new ServiceException("未获取到当前选择同步的节点信息,请联系管理员");
             }
-
-            //获取当前选择的节点与它所有子节点
-            List<WbsTreePrivate> selectNodeAndChildNodes = Optional.ofNullable(this.getChildNodes(selectNodeNow)).orElse(new ArrayList<>());
-            selectNodeAndChildNodes.add(selectNodeNow);
-            List<Long> privateNodeIds = selectNodeAndChildNodes.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
-            List<Long> privateNodePKeyIds = selectNodeAndChildNodes.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
             if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
                 // ---------私有才需要引用同步---------节点参数nodeId绑定的是m_wbs_private 的p_key_id  ;同节点下mapping scope=35 共用一个formula;也就是说同一个节点下的同一个element都指向同一个公式
                 /*全部查出来,pkeyId-id-paramId  source:key  最后比较;同节点相同k的参数都指向同一个公式,mapping 对象除了elementId不一样其它都一样*/
                 /*同步的范围不一定是整棵树,可以是局部分支*/
                 //获取当前私有引用模板的根节点信息
-                WbsTreePrivate treePrivateRootNode = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
-                        .select(WbsTreePrivate::getWbsId, WbsTreePrivate::getProjectId)
+                WbsTreePrivate sourceRootNode = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().select(WbsTreePrivate::getWbsId, WbsTreePrivate::getProjectId)
                         .eq(WbsTreePrivate::getPKeyId, selectNodeNow.getWbsId()).eq(WbsTreePrivate::getParentId, 0L).eq(WbsTreePrivate::getStatus, 1).eq(WbsTreePrivate::getType, 1));
-                List<Map<String, Object>> sourceListMap = this.jdbcTemplate.queryForList("select a.id,a.k,a.v,a.remark,a.node_id nodeId ,b.id privateId,a.update_time updateTime  " +
-                        "from m_wbs_param a join m_wbs_tree_private b on a.node_id = b.p_key_id   where  b.project_id in(?) and b.id in(?) and a.is_deleted=0  and a.type=1 ", treePrivateRootNode.getProjectId(), privateNodeIds.stream().map(Object::toString).collect(Collectors.joining(",")));
-                List<Map<String, Object>> distListMap = this.jdbcTemplate.queryForList("select a.id,a.k,a.v,a.remark,a.node_id nodeId ,b.id privateId,a.update_time updateTime  " +
-                        "from m_wbs_param a join m_wbs_tree_private b on a.node_id = b.p_key_id   where  b.project_id in(?) and b.p_key_id in(?) and a.is_deleted=0  and a.type=1 ", projectId, privateNodePKeyIds.stream().map(Object::toString).collect(Collectors.joining(",")));
+
+                List<WbsTreePrivate> selectNodeAndChildNodes = Optional.ofNullable(this.getChildNodes(selectNodeNow)).orElse(new ArrayList<>());
+                selectNodeAndChildNodes.add(selectNodeNow);
+                List<Long> sourceNodeIds = jdbcTemplate.queryForList("select p_key_id from m_wbs_tree_private where id in("+selectNodeAndChildNodes.stream().map(WbsTreePrivate::getId).map(Object::toString).collect(Collectors.joining(","))+") and  is_deleted=0 and project_id ="+sourceRootNode.getProjectId(),Long.class);
+                List<Long> distNodeIds = selectNodeAndChildNodes.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
+                List<Map<String, Object>> sourceListMap = this.jdbcTemplate.queryForList("select a.id,a.name ,a.k,a.v,a.remark,a.node_id nodeId ,b.id privateId,a.update_time updateTime  " +
+                        "from m_wbs_param a join m_wbs_tree_private b on a.node_id = b.p_key_id   where  b.project_id in(?) and b.p_key_id in("+sourceNodeIds.stream().map(Object::toString).collect(Collectors.joining(","))+") and a.is_deleted=0  and a.type=1 ",  Long.parseLong(sourceRootNode.getProjectId()));
+                List<Map<String, Object>> distListMap = this.jdbcTemplate.queryForList("select a.id,a.name,a.k,a.v,a.remark,a.node_id nodeId ,b.id privateId,a.update_time updateTime  " +
+                        "from m_wbs_param a join m_wbs_tree_private b on a.node_id = b.p_key_id   where  b.project_id in(?) and b.p_key_id in("+distNodeIds.stream().map(Object::toString).collect(Collectors.joining(","))+") and a.is_deleted=0  and a.type=1 ", Long.parseLong(projectId));
                 Map<String, Map<String, Object>> sourceMap = sourceListMap.stream().collect(Collectors.toMap(m -> m.get("privateId").toString() + m.get("k"), m -> m));
                 Map<String, Map<String, Object>> distMap = distListMap.stream().collect(Collectors.toMap(m -> m.get("privateId").toString() + m.get("k"), m -> m));
                 /*比较的结果*/
@@ -934,8 +936,9 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         Map<String, Object> u = distMap.get(k);
                         String t = Func.toStr(u.get("v"));
                         if (!s.equals(t)) {
-                            LocalDateTime sldt = LocalDateTime.parse(Func.toStr(v.get("updateTime")));
-                            LocalDateTime tldt = LocalDateTime.parse(Func.toStr(u.get("updateTime")));
+
+                            LocalDateTime sldt = ((Timestamp)v.get("updateTime")).toLocalDateTime();
+                            LocalDateTime tldt = ((Timestamp)u.get("updateTime")).toLocalDateTime();
                             /*假如内容不一样,且模版最后更新时间更晚,则覆盖*/
                             if (sldt.isAfter(tldt)) {
                                 u.put("v", s);
@@ -959,7 +962,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 }
                 List<WbsParam> insertList = new ArrayList<>();
                 if (!insertMap.isEmpty()) {
-                    List<WbsTreePrivate> targetList = Optional.ofNullable(this.list(Wrappers.<WbsTreePrivate>lambdaQuery().in(WbsTreePrivate::getId, insertMap.values().stream().map(m -> m.get("privateId")).collect(Collectors.toList())))).orElse(new ArrayList<>());
+                    List<WbsTreePrivate> targetList = Optional.ofNullable(this.list(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId,projectId).in(WbsTreePrivate::getId, insertMap.values().stream().map(m -> m.get("privateId")).collect(Collectors.toList())))).orElse(new ArrayList<>());
                     targetList.forEach(e -> {
                         Map<String, Object> kmp = insertMap.get(e.getId().toString());
                         if (kmp != null) {
@@ -998,32 +1001,26 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                                 "select c.e_name as name ,c.id,a.p_key_id pKeyId from m_wbs_tree_private a " +
                                         "inner join m_wbs_tree_private b on (a.id=b.parent_id and a.wbs_id=b.wbs_id) " +
                                         "inner join m_wbs_form_element c on  b.init_table_id=c.f_id " +
-                                        "where  b.project_id=" + projectId + " and a.p_key_id in(?)  and b.is_deleted=0 and c.is_deleted=0 ", nodeIds);
+                                        "where  b.project_id=" + projectId + " and a.p_key_id in("+String.join(",",nodeIds)+")  and b.is_deleted=0 and c.is_deleted=0 ");
 
                         Map<String, List<Map<String, Object>>> groupElementNode = listMaps.stream().collect(Collectors.groupingBy(e -> Func.toStr(e.get("pKeyId"))));
                         List<ElementFormulaMapping> insertEfm = new ArrayList<>();
                         insertList.forEach(p -> {
                             List<Map<String, Object>> elementMap = groupElementNode.get(p.getNodeId().toString());
                             Formula formula = insertFormulaMap.get(p.getId());
-                            elementMap.forEach(m -> {
-                                if (com.mixsmart.utils.StringUtils.handleNull(m.get("name")).contains(p.getName())) {
-                                    /*匹配名称,且该元素没有绑定任何节点参数公式*/
-//                                    if (longList.stream().noneMatch(k -> com.mixsmart.utils.StringUtils.isEquals(k, m.get("id")))) {
-//                                        ElementFormulaMapping efm = new ElementFormulaMapping();
-//                                        efm.setScope(FormulaBean.PARAM);
-//                                        efm.setParamId(e.getId());
-//                                        efm.setElementId(Long.parseLong(m.get("id").toString()));
-//                                        efm.setFormulaId(finalFormula.getId());
-//                                        this.elementFormulaMappingService.save(efm);
-//                                    }
-                                    ElementFormulaMapping efm = new ElementFormulaMapping();
-                                    efm.setScope(FormulaBean.PARAM);
-                                    efm.setParamId(p.getId());
-                                    efm.setElementId(Long.parseLong(m.get("id").toString()));
-                                    efm.setFormulaId(formula.getId());
-                                    insertEfm.add(efm);
-                                }
-                            });
+                           if(Func.isNotEmpty(elementMap)) {
+                               elementMap.forEach(m -> {
+                                   if (com.mixsmart.utils.StringUtils.handleNull(m.get("name")).contains(p.getName())) {
+                                       /*匹配名称,且该元素没有绑定任何节点参数公式*/
+                                       ElementFormulaMapping efm = new ElementFormulaMapping();
+                                       efm.setScope(FormulaBean.PARAM);
+                                       efm.setParamId(p.getId());
+                                       efm.setElementId(Long.parseLong(m.get("id").toString()));
+                                       efm.setFormulaId(formula.getId());
+                                       insertEfm.add(efm);
+                                   }
+                               });
+                           }
                         });
                         if (insertFormulaMap.size() > 0) {
                             this.formulaService.saveBatch(insertFormulaMap.values(), 1000);