Просмотр исходного кода

同步功能-多节点同步项目下拉接口开发

LHB 2 месяцев назад
Родитель
Сommit
704a6c3d51

+ 23 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeSynchronousRecordVo.java

@@ -0,0 +1,23 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+
+/**
+ *
+ * @author LHB
+ */
+@Data
+public class WbsTreeSynchronousRecordVo {
+    /**
+     * id
+     */
+    private Long id;
+    /**
+     * 项目名称
+     */
+    private String name;
+    /**
+     * type = 1 公共  type = 2 私有
+     */
+    private Integer type;
+}

+ 16 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeSynchronousRecordController.java

@@ -5,15 +5,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.manager.entity.ProjectInfo;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.entity.WbsTreeSynchronousRecord;
 import org.springblade.manager.service.WbsTreeSynchronousRecordService;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.manager.vo.WbsTreeSynchronousRecordVo;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * WBS同步记录表(MWbsTreeSynchronousRecord)表控制层
@@ -73,5 +77,17 @@ public class WbsTreeSynchronousRecordController {
     }
 
 
+    /**
+     * 获取当前项目的模板项目
+     * @param nodeIds 节点ids 逗号拼接
+     */
+    @GetMapping("getTempProject")
+    public R<List<WbsTreeSynchronousRecordVo>> getProjectTemplate(@RequestParam String nodeIds) {
+        if(StringUtil.isBlank(nodeIds)){
+            return R.fail("参数不能为空");
+        }
+        return R.data(this.mWbsTreeSynchronousRecordService.getProjectTemplate(nodeIds));
+    }
+
 }
 

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/WbsTreeSynchronousRecordService.java

@@ -3,7 +3,12 @@ package org.springblade.manager.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.core.mp.support.Query;
+import org.springblade.manager.entity.ProjectInfo;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.entity.WbsTreeSynchronousRecord;
+import org.springblade.manager.vo.WbsTreeSynchronousRecordVo;
+
+import java.util.List;
 
 /**
 * @author LHB
@@ -14,4 +19,5 @@ public interface WbsTreeSynchronousRecordService extends IService<WbsTreeSynchro
 
     Integer insert(WbsTreeSynchronousRecord mWbsTreeSynchronousRecord);
 
+    List<WbsTreeSynchronousRecordVo> getProjectTemplate(String nodeIds);
 }

+ 35 - 201
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java

@@ -121,6 +121,12 @@ public class WbsSynchronousServiceImpl {
                 ? Arrays.stream(formIds.split(",")).map(Long::parseLong).collect(Collectors.toSet())
                 : Collections.emptySet();
 
+        //获取项目信息
+        ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getId, wbsTreeSynchronousRecord.getProjectId()));
+
+
+
+
 
         for (String primaryKeyId : nodeIds) {
             if (StringUtils.isNotEmpty(primaryKeyId)) {
@@ -129,14 +135,25 @@ public class WbsSynchronousServiceImpl {
                 if (wbsTreePrivate == null) {
                     throw new ServiceException("当前节点不存在");
                 }
-                //获取项目信息
-                ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getId, wbsTreePrivate.getProjectId()));
+                //当前项目绑定的是公有模板还是私有项目
+                Boolean isPublic = false;
+                if (
+                        ("1".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateType()))   ||
+                                ("2".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial()))   ||
+                                ("3".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeMeter()))   ||
+                                ("5".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeLar()))
+                ) {
+                    isPublic = true;
+                }
+
+
+
                 //当前项目模板对应的节点信息
                 List<WbsTreePrivate> templateNodes = new ArrayList<>();
                 //质检
                 //当前节点引用的模板为公有模板
 
-                if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
+                if (isPublic) {
                     //当前节点对应的模板节点信息
                     WbsTree wbsTreeTemplate = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery()
                             .eq(WbsTree::getId, wbsTreePrivate.getTreePId()));
@@ -156,7 +173,7 @@ public class WbsSynchronousServiceImpl {
                     templateNodes = BeanUtil.copyProperties(wbsTrees, WbsTreePrivate.class);
                     templateNodes.forEach(f -> f.setTreePId(f.getId()));
 
-                } else if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
+                } else {
                     //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
                     WbsTreePrivate wbsTreePrivateRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
                             .eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
@@ -215,7 +232,8 @@ public class WbsSynchronousServiceImpl {
                 List<WbsTreePrivate> editPrivateNodes = new ArrayList<>();
                 for (WbsTreePrivate templateNode : templateNodes) {
                     //数据修复-----------------------------------------------------------------------------------------------------------------------------------开始
-                    if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
+
+                    if (isPublic) {
                         boolean isUpdate = false;
                         if (templateNode.getExcelId() != null) {
                             ExcelTab excelTab = excelTabMapper.selectOne(Wrappers.<ExcelTab>lambdaQuery()
@@ -353,7 +371,7 @@ public class WbsSynchronousServiceImpl {
                     switch (i) {
                         //添加表单
                         case 1:
-                            insertPrivateForm(wbsTreeSynchronousRecord,wbsTreePrivates, addPrivateNodes);
+                            insertPrivateForm(wbsTreeSynchronousRecord, wbsTreePrivates, addPrivateNodes);
                             //如果同时选择新增表单和其他的同步类型  在操作其他类型的时候需要添加新的表单
                             if (CollectionUtil.isNotEmpty(addPrivateNodes)) {
                                 editPrivateNodes.addAll(addPrivateNodes.stream().filter(f -> f.getType() == 2).collect(Collectors.toList()));
@@ -624,7 +642,7 @@ public class WbsSynchronousServiceImpl {
                         switch (i) {
                             //添加表单
                             case 1:
-                                insertContractForm(wbsTreeSynchronousRecord,contractInfo, wbsTreeContracts, addContractNode);
+                                insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode);
                                 //如果同时选择新增表单和其他的同步类型  在操作其他类型的时候需要添加新的表单
                                 if (CollectionUtil.isNotEmpty(addContractNode)) {
                                     editContractNodes.addAll(addContractNode.stream().filter(f -> f.getType() == 2).collect(Collectors.toList()));
@@ -666,10 +684,10 @@ public class WbsSynchronousServiceImpl {
      * 类型 1 添加表单
      *
      * @param wbsTreeSynchronousRecord 同步任务
-     * @param wbsTreePrivates 当前项目对应节点的子节点
-     * @param addPrivateNodes 需要新增的节点
+     * @param wbsTreePrivates          当前项目对应节点的子节点
+     * @param addPrivateNodes          需要新增的节点
      */
-    public void insertPrivateForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord,List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> addPrivateNodes) {
+    public void insertPrivateForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> addPrivateNodes) {
         List<WbsTreePrivate> addData = new ArrayList<>();
 
         //------------------------------------------------新增-------------------------------------------------------------------------
@@ -782,12 +800,13 @@ public class WbsSynchronousServiceImpl {
     /**
      * 合同段添加表单
      * 合同段添加表单
+     *
      * @param wbsTreeSynchronousRecord 同步任务
-     * @param contractInfo 合同段信息
-     * @param wbsTreeContracts 当前合同节点数据
-     * @param addContractNodes 新增节点数据
+     * @param contractInfo             合同段信息
+     * @param wbsTreeContracts         当前合同节点数据
+     * @param addContractNodes         新增节点数据
      */
-    public void insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord,ContractInfo contractInfo, List<WbsTreeContract> wbsTreeContracts, List<WbsTreeContract> addContractNodes) {
+    public void insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, ContractInfo contractInfo, List<WbsTreeContract> wbsTreeContracts, List<WbsTreeContract> addContractNodes) {
         List<WbsTreeContract> addData = new ArrayList<>();
 
 
@@ -884,7 +903,8 @@ public class WbsSynchronousServiceImpl {
 
         //判断 如果模板项目为公共项目  则无法同步电签
         ProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
-        if (projectInfo != null && ("private").equals(projectInfo.getReferenceWbsTemplateType()) && com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(projectInfo.getReferenceWbsTemplateId())) {
+
+        if (projectInfo != null && ("private").equals(projectInfo.getReferenceWbsTemplateType()) && projectInfo.getReferenceWbsTemplateId() != null) {
 
 
             //封装  源Pkeyid  修改pKeyId
@@ -1078,190 +1098,4 @@ public class WbsSynchronousServiceImpl {
         // 将路径列表转换为字符串并返回
         return String.join(",", path.stream().map(String::valueOf).toArray(String[]::new));
     }
-
-
-    /**
-     * 根据选中节点id 同步新增节点和新增表单
-     *
-     * @param primaryKeyId
-     * @return
-     */
-
-    public void test(String primaryKeyId) {
-
-        if (StringUtils.isNotEmpty(primaryKeyId)) {
-            //获取当前节点对应节点信息
-            WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, primaryKeyId));
-
-            //获取项目信息
-            ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getId, wbsTreePrivate.getProjectId()));
-
-            //当前项目模板对应的节点信息
-
-            List<WbsTreePrivate> templateNodes = new ArrayList<>();
-
-            //结果集
-            List<WbsTreePrivate> addData = new ArrayList<>();
-            //质检
-            //当前节点引用的模板为公有模板
-
-            if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
-                //当前节点对应的模板节点信息
-                WbsTree wbsTreeTemplate = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery()
-                        .eq(WbsTree::getId, wbsTreePrivate.getTreePId()));
-                //获取模板中当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
-                LambdaQueryWrapper<WbsTree> wrapperTree = Wrappers.lambdaQuery();
-                wrapperTree.eq(WbsTree::getWbsId, wbsTreePrivate.getWbsId())
-                        .eq(WbsTree::getIsDeleted, 0);
-                if (wbsTreeTemplate.getParentId() != 0) {
-                    wrapperTree.apply("FIND_IN_SET({0},ancestors)", wbsTreeTemplate.getId());
-                }
-                //模板节点的所有子节点信息
-                List<WbsTree> wbsTrees = wbsTreeMapper.selectList(wrapperTree);
-                //3、获取需要新增的节点或者表单节点信息 以及他们对应的父级节点信息--------------------------------------------------------------------------------------------
-                if (CollectionUtil.isEmpty(wbsTrees)) {
-                    throw new ServiceException("模板节点未找到");
-                }
-                templateNodes = BeanUtil.copyProperties(wbsTrees, WbsTreePrivate.class);
-
-            } else if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
-                //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
-                WbsTreePrivate wbsTreePrivateRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
-                        .eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
-
-                //获取当前选中节点与私有模板对应的节点信息 父级模板项目的当前选中节点
-                wbsTreePrivateRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
-                        .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
-                        .eq(WbsTreePrivate::getTreePId, wbsTreePrivate.getTreePId()));
-
-                //获取模板中当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
-                LambdaQueryWrapper<WbsTreePrivate> wrapperPrivate = Wrappers.lambdaQuery();
-                wrapperPrivate.eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
-                        .eq(WbsTreePrivate::getIsDeleted, 0);
-                //判断如果为顶级顶级节点
-                if (wbsTreePrivate.getTreePId() != 0) {
-                    wrapperPrivate.apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreePrivateRoot.getPKeyId());
-                }
-                templateNodes = wbsTreePrivateMapper.selectList(wrapperPrivate);
-            }
-
-            if (CollectionUtil.isEmpty(templateNodes)) {
-                throw new ServiceException("未找到模板对应节点");
-            }
-
-
-            //2、获取当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
-            LambdaQueryWrapper<WbsTreePrivate> wrapperPrivate = Wrappers.lambdaQuery();
-            wrapperPrivate.eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTreePrivate::getIsDeleted, 0);
-            //判断如果为顶级顶级节点
-            if (wbsTreePrivate.getTreePId() != 0) {
-                wrapperPrivate.apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreePrivate.getPKeyId());
-            }
-            List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(wrapperPrivate);
-
-            if (wbsTreePrivates.isEmpty()) {
-                throw new ServiceException("无法找到模板对应节点,请检查模板节点");
-            }
-            //获取id 和 tree_p_id 组成的集合
-            Set<Long> ids = wbsTreePrivates.stream().map(WbsTreePrivate::getTreePId).collect(Collectors.toSet());
-            //3.1筛选出需要新增的节点
-            List<WbsTreePrivate> addPrivateNodes = templateNodes.stream()
-                    .filter(f -> !ids.contains(f.getId()))
-                    .collect(Collectors.toList());
-            //------------------------------------------------新增-------------------------------------------------------------------------
-            if (CollectionUtil.isNotEmpty(addPrivateNodes)) {
-                //先给每个新增节点赋唯一id,项目id,父级id
-                addPrivateNodes.forEach(f -> f.setPKeyId(SnowFlakeUtil.getId()));
-
-                //给每一个节点的父级id
-                for (WbsTreePrivate addPrivateNode : addPrivateNodes) {
-                    if (addPrivateNode.getParentId() == 0) {
-                        continue;
-                    }
-
-                    //查询出当前模板节点的父节点 去获取对应项目节点  如果父节点为0就跳过
-                    List<WbsTreePrivate> addPrivateParentNodes = wbsTreePrivates.stream().filter(f -> f.getTreePId().equals(addPrivateNode.getParentId())).collect(Collectors.toList());
-                    //如果没有数据  就表示这条数据的父节点也时新增节点 就需要从新增节点集合中找父级节点
-                    if (addPrivateParentNodes.isEmpty()) {
-                        addPrivateParentNodes = addPrivateNodes.stream().filter(f -> f.getId().equals(addPrivateNode.getParentId())).collect(Collectors.toList());
-                    }
-                    //如果现在还找不到当前节点的父节点就表示数据有问题
-                    if (addPrivateParentNodes.isEmpty()) {
-                        //TODO
-                        continue;
-                    }
-                    //当前新增节点的父节点
-                    WbsTreePrivate parent = addPrivateParentNodes.get(0);
-
-                    addPrivateNode.setPId(parent.getPKeyId());
-                    addPrivateNode.setWbsId(parent.getWbsId());
-                    addPrivateNode.setWbsType(wbsTreePrivate.getWbsType());
-                    addPrivateNode.setIsAddConceal(0);
-                    addPrivateNode.setProjectId(wbsTreePrivate.getProjectId());
-                    //TODO 后续如果把p_key_id改成了id做 唯一id
-                    addPrivateNode.setTreePId(addPrivateNode.getId());
-                    //后续如果使用id做当前表主键 则先在赋值treePid之后再去赋值id    addPrivateNode.setId(SnowFlakeUtil.getId());
-                }
-                addData.addAll(addPrivateNodes);
-            }
-
-
-            //设置html_url----------------------------------------------------------------------------------------------------------
-            //如果有新增的数据 旧设置html_url
-            if (CollectionUtil.isNotEmpty(addData)) {
-                try {
-                    String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-                    Set<String> urls = new HashSet<>();
-                    for (WbsTreePrivate tree : addData) {
-                        if (org.apache.commons.lang3.StringUtils.isNotBlank(tree.getHtmlUrl())) {
-                            String[] split = tree.getHtmlUrl().split("/");
-                            String htmlUrl = file_path + "privateUrlCopy/" + tree.getPdfUrl() + "/" + split[split.length - 1];
-                            if (!urls.contains(tree.getHtmlUrl())) {
-                                urls.add(tree.getHtmlUrl());
-                                File file_in = ResourceUtil.getFile(tree.getHtmlUrl());
-                                if (!file_in.exists() || file_in.length() == 0) {
-                                    continue;
-                                }
-                                File file_out = ResourceUtil.getFile(htmlUrl);
-                                FileUtil.copy(file_in, file_out);
-                            }
-                            tree.setHtmlUrl(htmlUrl);
-                        }
-                    }
-                } catch (Exception e) {
-                    throw new ServiceException("重置表单路径错误");
-                }
-                //查询出当前项目所有节点---------------------------------------------------------------------------------------------------
-                List<WbsTreePrivate> addList = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
-                        .select(WbsTreePrivate::getPKeyId, WbsTreePrivate::getPId)
-                        .eq(WbsTreePrivate::getIsDeleted, 0)
-                        .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()));
-
-                addList.addAll(addData);
-                //组合祖级路径 根据当前选中节点为开始
-                Map<Long, WbsTreePrivate> collect = addList.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, Function.identity()));
-
-                addData.forEach(node -> {
-                    String correctAncestors = createAncestorsPId(node, collect);
-                    node.setAncestorsPId(correctAncestors);
-                });
-
-                //新增-----------------------------------------------------------------------------------------------------------------
-                List<List<WbsTreePrivate>> partition = Lists.partition(addData, 1000);
-                for (List<WbsTreePrivate> data : partition) {
-                    //单个批次一个事务,只会回滚当前批次数据
-                    Integer i = wbsTreePrivateMapper.insertBatchSomeColumn(data);
-                    //如果失败  -- - - - - 继续执行   或者把当前节点的p_key_id 记录到某个地方 方便后续处理
-                    if (i == 0) {
-                        List<Long> collect1 = addData.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
-                        //这里可以保存到数据库指定错误日志表
-                        throw new ServiceException("新增节点失败,请联系后台人员");
-                    }
-                }
-                //记录同步信息
-            }
-        } else {
-            throw new ServiceException("未传指定参数,请联系后台人员");
-        }
-    }
 }

+ 59 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeSynchronousRecordServiceImpl.java

@@ -8,18 +8,19 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.CollectionUtil;
-import org.springblade.manager.entity.WbsTreePrivate;
-import org.springblade.manager.entity.WbsTreeSynchronousRecord;
-import org.springblade.manager.mapper.WbsTreePrivateMapper;
-import org.springblade.manager.mapper.WbsTreeSynchronousRecordMapper;
+import org.springblade.manager.entity.*;
+import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.WbsTreeSynchronousRecordService;
+import org.springblade.manager.vo.WbsTreeSynchronousRecordVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -39,6 +40,13 @@ public class WbsTreeSynchronousRecordServiceImpl extends ServiceImpl<WbsTreeSync
     @Autowired
     private WbsSynchronousServiceImpl wbsSynchronousService;
 
+    @Autowired
+    private WbsTreeMapper wbsTreeMapper;
+    @Autowired
+    private ProjectInfoMapper projectInfoMapper;
+    @Autowired
+    private WbsInfoMapper wbsInfoMapper;
+
     @Override
     public Integer insert(WbsTreeSynchronousRecord mWbsTreeSynchronousRecord) {
         //新增之前  判断当前选中节点是否在同步列表中,因为是多节点 所有要查询所有同项目下的同步节点再获取所有子节点 判断当前选中节点是否在这一批次当中
@@ -104,6 +112,53 @@ public class WbsTreeSynchronousRecordServiceImpl extends ServiceImpl<WbsTreeSync
     }
 
 
+    @Override
+    public List<WbsTreeSynchronousRecordVo> getProjectTemplate(String nodeIds) {
+
+        String nodeId = nodeIds.split(",")[0];
+        //选中节点
+        WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectById(nodeId);
+        List<WbsTreeSynchronousRecordVo> wbsTreePrivates = new ArrayList<>();
+        List<WbsTreeSynchronousRecordVo> tempProject = getTempProject(wbsTreePrivate, wbsTreePrivates);
+
+        return tempProject;
+    }
+
+
+    public List<WbsTreeSynchronousRecordVo> getTempProject(WbsTreePrivate wbsTreePrivate,List<WbsTreeSynchronousRecordVo> list){
+        ProjectInfo projectInfo = projectInfoMapper.selectById(wbsTreePrivate.getProjectId());
+        if(projectInfo == null){
+            return list;
+        }
+
+        Boolean isPublic = false;
+        if (("1".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateType())) ||
+                ("2".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) ||
+                ("3".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeMeter())) ||
+                ("5".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeLar())))
+            isPublic = true;
+
+        if (isPublic) {
+            //公共项目
+            WbsInfo wbsInfo = wbsInfoMapper.selectById(wbsTreePrivate.getWbsId());
+            WbsTreeSynchronousRecordVo wbsTreeSynchronousRecordVo = new WbsTreeSynchronousRecordVo();
+            wbsTreeSynchronousRecordVo.setId(wbsInfo.getId());
+            wbsTreeSynchronousRecordVo.setName(wbsInfo.getWbsName());
+            wbsTreeSynchronousRecordVo.setType(1);
+            list.add(wbsTreeSynchronousRecordVo);
+            return list;
+        } else {
+            WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectById(wbsTreePrivate.getWbsId());
+            ProjectInfo projectInfo1 = projectInfoMapper.selectById(wbsTreePrivate1.getProjectId());
+            WbsTreeSynchronousRecordVo wbsTreeSynchronousRecordVo = new WbsTreeSynchronousRecordVo();
+            wbsTreeSynchronousRecordVo.setId(projectInfo1.getId());
+            wbsTreeSynchronousRecordVo.setName(projectInfo1.getProjectName());
+            wbsTreeSynchronousRecordVo.setType(2);
+            list.add(wbsTreeSynchronousRecordVo);
+            return getTempProject(wbsTreePrivate1,list);
+        }
+    }
+
     /**
      * 同步节点表单
      * 定时检查同步任务,状态为1的数据如果最后更新时间与当前时间超过10分钟,则修改状态为1