Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master' into master

yangyj 2 жил өмнө
parent
commit
3b19ea6782
23 өөрчлөгдсөн 423 нэмэгдсэн , 102 устгасан
  1. 38 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTree.java
  2. 2 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ArchiveTreeClient.java
  3. 7 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java
  4. 5 4
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java
  5. 4 4
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  6. 2 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  7. 4 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.java
  8. 41 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  9. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  10. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java
  11. 24 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java
  12. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ArchiveTreeClientImpl.java
  13. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  14. 4 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeMapper.java
  15. 9 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeMapper.xml
  16. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java
  17. 33 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  18. 7 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeService.java
  19. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java
  20. 3 37
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java
  21. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  22. 213 27
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java
  23. 16 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

+ 38 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTree.java

@@ -5,6 +5,9 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.core.mp.base.BaseEntity;
+import org.springblade.manager.vo.ArchiveTreeVO2;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.BeansException;
 
 @Data
 @TableName("m_archive_tree")
@@ -19,6 +22,9 @@ public class ArchiveTree extends BaseEntity {
     @ApiModelProperty(value = "租户id")
     private String tenantId;
 
+    @ApiModelProperty(value = "项目id,0为系统")
+    private Long projectId;
+
     /**
      * 父主键
      */
@@ -156,11 +162,42 @@ public class ArchiveTree extends BaseEntity {
     @ApiModelProperty(value = "是否为设置的节点")
     private Integer archiveAutoGroupSelect;
 
+    private Long fromId;
+
     /**
      * 试验资料类型
      */
     @ApiModelProperty(value = "试验资料类型,‘使用逗号拼接’")
     private String expDataType;
 
-
+    public ArchiveTree() {
+    }
+
+    public ArchiveTree(ArchiveTreeVO2 archiveTree) {
+        if (archiveTree == null) {
+            return;
+        }
+
+        try {
+            BeanUtils.copyProperties(archiveTree,this);
+            this.nodeName = archiveTree.getTitle();
+            this.isUploadFileDisplayConfigurationTree = archiveTree.getIsDisplayTree();
+            this.fromId = archiveTree.getId();
+        } catch (BeansException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public ArchiveTree(ArchiveTree archiveTree) {
+        if (archiveTree == null) {
+            return;
+        }
+
+        try {
+            BeanUtils.copyProperties(archiveTree,this);
+            this.fromId = archiveTree.getId();
+        } catch (BeansException e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 2 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ArchiveTreeClient.java

@@ -3,6 +3,7 @@ package org.springblade.manager.feign;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.vo.ArchiveTreeVO;
+import org.springblade.manager.vo.ArchiveTreeVO2;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -30,6 +31,6 @@ public interface ArchiveTreeClient {
      * 获取归档树映射
      */
     @GetMapping(API_PREFIX + "/tree")
-    R<List<ArchiveTreeVO>> tree(@RequestParam Integer disPlayTree, @RequestParam Integer nodeType);
+    R<List<ArchiveTreeVO2>> tree(@RequestParam Long projectId, @RequestParam Integer disPlayTree, @RequestParam Integer nodeType);
 
 }

+ 7 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java

@@ -22,6 +22,13 @@ public class ArchiveTreeVO2 implements INode<ArchiveTreeVO2> {
     @ApiModelProperty(value = "主键id")
     private Long id;
 
+    /**
+     * 父节点ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "项目id,0为系统级")
+    private Long projectId;
+
     /**
      * 父节点ID
      */

+ 5 - 4
blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java

@@ -38,6 +38,7 @@ import org.springblade.manager.feign.ArchiveTreeClient;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.feign.ProjectClient;
 import org.springblade.manager.vo.ArchiveTreeVO;
+import org.springblade.manager.vo.ArchiveTreeVO2;
 import org.springblade.system.entity.Role;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.beans.BeanUtils;
@@ -363,7 +364,7 @@ public class ArchiveFileController extends BladeController {
 	@PostMapping("/tree")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "获取归档划分树")
-	public R<List<ArchiveTreeVO>> tree(@RequestParam String contractId){
+	public R<List<ArchiveTreeVO2>> tree(@RequestParam String contractId){
 		//查询合同段信息
 		ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(contractId));
 		String roleName;
@@ -379,16 +380,16 @@ public class ArchiveFileController extends BladeController {
 				break;
 		}
 		//获取归档树
-		List<ArchiveTreeVO> result = this.archiveTreeClient.tree(1,2).getData();
+		List<ArchiveTreeVO2> result = this.archiveTreeClient.tree(Long.parseLong(contractInfo.getPId()), 1,2).getData();
 
 		String finalRoleName = roleName;
 		result.forEach(archiveTreeVO -> {
 			if("0".equals(archiveTreeVO.getParentId().toString())){
 				//根节点,获取子级判断合同段权限
 				if(archiveTreeVO.getChildren() != null && archiveTreeVO.getChildren().size() > 0){
-					Iterator<ArchiveTreeVO> iterator = archiveTreeVO.getChildren().iterator();
+					Iterator<ArchiveTreeVO2> iterator = archiveTreeVO.getChildren().iterator();
 					while (iterator.hasNext()){
-						ArchiveTreeVO next = iterator.next();
+						ArchiveTreeVO2 next = iterator.next();
 						if(StringUtils.isNotEmpty(next.getPostType())){
 							Role role = this.sysClient.getRole(Long.parseLong(next.getPostType())).getData();
 							if(role != null){

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

@@ -1310,7 +1310,7 @@ public class InformationWriteQueryController extends BladeController {
                     String sql = "select sort from m_wbs_tree_contract where contract_id = '" + node.getContractId() + "' and (id = '" + node.getId() + "' or old_id = '" + node.getId() + "')";
                     List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
                     List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
-                    Integer max;
+                    Integer max=1;
                     if (collect.size() > 0) {
                         max = collect.stream().reduce(collect.get(0), Integer::max);
                     } else {
@@ -1391,7 +1391,7 @@ public class InformationWriteQueryController extends BladeController {
                         String sql = "select sort from m_wbs_tree_contract where contract_id = '" + node.getContractId() + "' and (id = '" + node.getId() + "' or old_id = '" + node.getId() + "')";
                         List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
                         List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
-                        Integer max;
+                        Integer max=1;
                         if (collect.size() > 0) {
                             max = collect.stream().reduce(collect.get(0), Integer::max);
                         } else {
@@ -1833,7 +1833,7 @@ public class InformationWriteQueryController extends BladeController {
                 String sql = "select sort from m_wbs_tree_contract where contract_id = '" + treeContract.getContractId() + "' and (id = '" + half.getId() + "' or old_id = '" + half.getId() + "')";
                 List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
                 List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
-                Integer max;
+                Integer max =1 ;
                 if (collect.size() > 0) {
                     max = collect.stream().reduce(collect.get(0), Integer::max);
                 } else {
@@ -1912,7 +1912,7 @@ public class InformationWriteQueryController extends BladeController {
         if (saveList.size() > 0) {
             //保存施工日志
             if (saveLedger.size() > 0) {
-                this.constructionLedgerService.saveBatch(saveLedger, 1000);
+                this.constructionLedgerService.saveBatch(saveLedger,1000);
             }
 
             try {

+ 2 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -427,7 +427,8 @@ public class TaskController extends BladeController {
 	 */
 	private void integrationMethod(TaskQueryVO queryVO, Map<String,Task> masterTaskMap, Map<String,TaskParallel> parallelMap, List<String> parallelProcessInstanceIds, String status){
 		//先查询符合条件的流程
-		LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0).eq(Task::getProjectId, queryVO.getProjectId());
+		LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0)
+				.eq(Task::getProjectId, queryVO.getProjectId()).eq(StringUtils.isNotBlank(queryVO.getBatch()),Task::getBatch,queryVO.getBatch());
 		this.integrationMethod(wrapper, queryVO);
 
 		//符合条件的集合

+ 4 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.java

@@ -77,6 +77,10 @@ public interface InformationQueryMapper extends BaseMapper<InformationQuery> {
 	 * 统计
 	 */
 	Integer countInformationQuery(@Param("query") InformationQueryVO informationQuery);
+	/**
+	 * 统计
+	 */
+	Integer countInformationQueryTwo(@Param("query") InformationQueryVO informationQuery);
 
 	/**
 	 * 自定义分页

+ 41 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml

@@ -384,6 +384,47 @@
         ) AS query
     </select>
 
+    <select id="countInformationQueryTwo" resultType="java.lang.Integer">
+        select
+        count( distinct query.id)
+        from
+        (
+            select
+            query.id
+            from
+            (
+                select
+                iq.id,
+                (case iq.STATUS when 0 THEN null else t.batch end) as report_number,
+                date_format(iq.create_time,'%Y-%m-%d') as createTimes
+                from u_information_query iq left join (select  * from u_task k where k.status!=3 and k.contract_id = #{query.contractId}) t on iq.id = t.form_data_id  and t.is_deleted = 0
+                where
+                iq.is_deleted = 0
+                and iq.classify = #{query.classify}
+                and iq.contract_id = #{query.contractId}
+                <if test="query.taskStatus != null and query.taskStatus != ''"> and iq.status = #{query.taskStatus} </if>
+                <if test="query.sourceType != null and query.sourceType != ''"> and iq.source_type = #{query.sourceType} </if>
+                <if test="query.reportNumber != null and query.reportNumber != ''"> and t.batch = #{query.reportNumber} </if>
+                <if test="query.fileUserIdAndName != null and query.fileUserIdAndName != ''"> and iq.file_user_id_and_name like concat('%',#{query.fileUserIdAndName},'%') </if>
+                <if test="query.queryValue != null and query.queryValue != ''"> and (iq.name like concat('%',#{query.queryValue},'%') OR iq.number like concat('%',#{query.queryValue},'%')) </if>
+                <if test="query.firstTitle != null and query.firstTitle != ''"> and iq.type = 3 </if>
+                <if test="query.firstTitle == null or query.firstTitle == ''"> and iq.type != 3 </if>
+                <if test="query.wbsIds != null">
+                and iq.wbs_id in
+                <foreach collection="query.wbsIds" item="wbsIdc" open="(" separator="," close=")">
+                    #{wbsIdc}
+                </foreach>
+                </if>
+            ) AS query
+        where
+        1 = 1
+        <if test="query.reportNumber != null and query.reportNumber != ''"> and report_number = #{query.reportNumber} </if>
+        <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+            and query.createTimes between #{query.startTime} and #{query.endTime}
+        </if>
+        ) AS query
+    </select>
+
     <select id="selectInformationQueryPage" resultMap="informationQueryResultMap">
         select
             query.wbs_id,

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -460,7 +460,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
         }
 
         //获取总量
-        Integer count = this.baseMapper.countInformationQuery(vo);
+        Integer count = this.baseMapper.countInformationQueryTwo(vo);
 
         //获取数据
         List<InformationQuery> result = this.baseMapper.selectInformationQueryPageTwo(current, page.getSize(), vo);

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

@@ -221,7 +221,7 @@ public class ArchiveTreeContractController extends BladeController {
 	@GetMapping("/test")
 	public R test(){
 		Long projectId = 1578599210897772545L;
-		List<ArchiveTree> trees = archiveTreeService.treeList(AuthUtil.getTenantId(), null, null);
+		List<ArchiveTree> trees = archiveTreeService.treeList(AuthUtil.getTenantId(), projectId,null, null);
 
 		archiveTreeContractService.initTree2(AuthUtil.getTenantId(),projectId);
 

+ 24 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java

@@ -56,6 +56,7 @@ public class ArchiveTreeController extends BladeController {
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "详情", notes = "传入archiveTree")
     public R<ArchiveTree> detail(ArchiveTree archiveTree) {
+
         ArchiveTree detail = archiveTreeService.getOne(Condition.getQueryWrapper(archiveTree));
         return R.data(detail);
     }
@@ -111,10 +112,12 @@ public class ArchiveTreeController extends BladeController {
     @ApiOperationSupport(order = 6)
     @ApiOperation(value = "懒加载树形结构", notes = "传入父级id")
     @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "projectId", value = "项目id,0是系统级"),
             @ApiImplicitParam(name = "parentId", value = "父级id", required = true)
     })
-    public R<List<ArchiveTreeVO2>> lazyTree(Long parentId,Long extId,Long level) {
-        List<ArchiveTreeVO2> tree = archiveTreeService.lazyTree2(AuthUtil.getTenantId(), parentId,extId,level);
+    public R<List<ArchiveTreeVO2>> lazyTree(Long projectId,Long parentId,Long extId,Long level) {
+
+        List<ArchiveTreeVO2> tree = archiveTreeService.lazyTree2(AuthUtil.getTenantId(),projectId, parentId,extId,level);
         if (tree != null && tree.size() > 0) {
             return R.data(tree);
         }
@@ -128,11 +131,13 @@ public class ArchiveTreeController extends BladeController {
     @ApiOperationSupport(order = 7)
     @ApiOperation(value = "全加载树形结构/显示树", notes = "disPlayTree、nodeType")
     @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "projectId", value = "项目id,0是系统级"),
             @ApiImplicitParam(name = "disPlayTree", value = "是否加载显示树 'null'=不加载 '1'=加载"),
             @ApiImplicitParam(name = "nodeType", value = "'null'=全加载 '1'=关联电子原生文件类型树 '2'=文件上传类型树")
     })
-    public R<List<ArchiveTreeVO2>> tree(Integer disPlayTree, Integer nodeType) {
-        List<ArchiveTreeVO2> tree = archiveTreeService.tree2(AuthUtil.getTenantId(), disPlayTree, nodeType);
+    public R<List<ArchiveTreeVO2>> tree(Long projectId,Integer disPlayTree, Integer nodeType) {
+
+        List<ArchiveTreeVO2> tree = archiveTreeService.tree2(AuthUtil.getTenantId(),projectId, disPlayTree, nodeType);
         if (tree != null && tree.size() > 0) {
             return R.data(tree);
         }
@@ -172,12 +177,21 @@ public class ArchiveTreeController extends BladeController {
         return R.status(archiveTreeService.submitArchiveTreeSort(listSort));
     }
 
-    @GetMapping("/test")
-    public R test(){
-
-
-        return R.fail(200, "初始化成功");
+    /**
+     * 初始化归档树根节点
+     */
+    @PostMapping("/initProjectTree")
+    @ApiOperationSupport(order = 11)
+    @ApiOperation(value = "初始化项目级归档树根节点", notes = "传入token")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "projectId", value = "项目id")
+    })
+    public R<ArchiveTree> initProjectTree(Long projectId) {
+        boolean b = archiveTreeService.initArchiveProjectTree(projectId);
+        if (b) {
+            return R.success("初始化创建成功");
+        }
+        return R.fail(200, "初始化创建失败");
     }
 
-
 }

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ArchiveTreeClientImpl.java

@@ -7,6 +7,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.service.IArchiveTreeService;
 import org.springblade.manager.vo.ArchiveTreeVO;
+import org.springblade.manager.vo.ArchiveTreeVO2;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
@@ -39,7 +40,7 @@ public class ArchiveTreeClientImpl implements ArchiveTreeClient {
     }
 
     @Override
-    public R<List<ArchiveTreeVO>> tree(Integer disPlayTree, Integer nodeType) {
-        return R.data(this.archiveTreeService.tree(AuthUtil.getTenantId(), disPlayTree, nodeType));
+    public R<List<ArchiveTreeVO2>> tree(Long projectId,Integer disPlayTree, Integer nodeType) {
+        return R.data(this.archiveTreeService.tree2(AuthUtil.getTenantId(),projectId, disPlayTree, nodeType));
     }
 }

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

@@ -99,7 +99,8 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
             //查询表格
             return this.wbsTreeContractService.list(wrapper);
         } else {
-            return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getParentId, treeNode.getId()).eq(WbsTreeContract::getContractId, treeNode.getContractId()).eq(WbsTreeContract::getType, "1"));
+            //.eq(WbsTreeContract::getType, "1")
+            return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getParentId, treeNode.getId()).eq(WbsTreeContract::getContractId, treeNode.getContractId()));
         }
     }
 

+ 4 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeMapper.java

@@ -12,9 +12,11 @@ import java.util.List;
 public interface ArchiveTreeMapper extends BaseMapper<ArchiveTree> {
 
     List<ArchiveTreeVO> lazyTree(@Param("tenantId") String tenantId, @Param("parentId") Long parentId);
-    List<ArchiveTreeVO2> lazyTree2(@Param("tenantId") String tenantId, @Param("parentId") Long parentId);
+
     List<ArchiveTreeVO> tree(@Param("tenantId") String tenantId, @Param("disPlayTree") Integer disPlayTree, @Param("nodeType") Integer nodeType);
-    List<ArchiveTreeVO2> tree2(@Param("tenantId") String tenantId, @Param("disPlayTree") Integer disPlayTree, @Param("nodeType") Integer nodeType);
+
+    List<ArchiveTreeVO2> lazyTree2(@Param("tenantId") String tenantId, @Param("projectId") Long projectId,@Param("parentId") Long parentId);
+    List<ArchiveTreeVO2> tree2(@Param("tenantId") String tenantId, @Param("projectId") Long projectId,@Param("disPlayTree") Integer disPlayTree, @Param("nodeType") Integer nodeType);
     int updateBatch(@Param("diffRent") List<String> diffRent);
 
     int updateBatch2(@Param("diffRent") List<String> diffRent);

+ 9 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeMapper.xml

@@ -13,6 +13,7 @@
         <result column="status" property="status"/>
         <result column="is_deleted" property="isDeleted"/>
         <result column="parent_id" property="parentId"/>
+        <result column="project_id" property="projectId"/>
         <result column="ancestors" property="ancestors"/>
         <result column="node_name" property="nodeName"/>
         <result column="full_name" property="fullName"/>
@@ -32,6 +33,7 @@
         <result column="ext_type" property="extType"/>
         <result column="ext_id" property="extId"/>
         <result column="exp_data_type" property="expDataType"/>
+        <result column="from_id" property="fromId"/>
         <result column="archive_auto_type" property="archiveAutoType"/>
         <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
         <result column="archive_auto_group_select" property="archiveAutoGroupSelect"/>
@@ -42,6 +44,7 @@
     <resultMap id="ArchiveTreeVOResultMap" type="org.springblade.manager.vo.ArchiveTreeVO2">
         <id column="id" property="id"/>
         <result column="parent_id" property="parentId"/>
+        <result column="project_id" property="projectId"/>
         <result column="title" property="title"/>
         <result column="value" property="value"/>
         <result column="key" property="key"/>
@@ -59,6 +62,7 @@
         <result column="storage_type" property="storageType"/>
         <result column="ext_type" property="extType"/>
         <result column="ext_id" property="extId"/>
+        <result column="from_id" property="fromId"/>
         <result column="archive_auto_type" property="archiveAutoType"/>
         <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
         <result column="archive_auto_group_id" property="archiveAutoGroupId"/>
@@ -187,6 +191,7 @@
     <select id="lazyTree2" resultMap="ArchiveTreeVOResultMap">
         SELECT
         d.id,
+        d.project_id,
         d.parent_id,
         d.node_name AS title,
         d.id AS "value",
@@ -213,7 +218,7 @@
         FROM
         m_archive_tree d
         WHERE
-        d.parent_id = #{parentId} AND d.is_deleted = 0
+        d.parent_id = #{parentId} AND d.is_deleted = 0 AND project_id = #{projectId}
         <if test="tenantId!=null and tenantId!=''">
             AND d.tenant_id = #{tenantId}
         </if>
@@ -223,6 +228,7 @@
     <select id="tree2" resultMap="ArchiveTreeVOResultMap">
         SELECT
         id,
+        project_id,
         parent_id,
         node_name AS title,
         id AS "value",
@@ -247,7 +253,7 @@
         interface_type,
         sort
         FROM m_archive_tree
-        WHERE is_deleted = 0
+        WHERE is_deleted = 0 AND project_id = #{projectId}
         <if test=" tenantId!=null and tenantId!='' ">
             AND tenant_id = #{tenantId}
         </if>
@@ -258,7 +264,7 @@
             /*根节点=0 关联电子原生文件=1 数字化上传文件=2*/
             AND node_type in (0,#{nodeType})
         </if>
-        OR parent_id = 0
+        OR (parent_id = 0 and is_deleted = 0 AND project_id = #{projectId})
         ORDER BY sort
     </select>
 

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

@@ -11,6 +11,7 @@ import org.springblade.manager.injector.EasyBaseMapper;
 import org.springblade.manager.vo.TreeNodeVOByTabType;
 import org.springblade.manager.vo.WbsNodeTableVO;
 import org.springblade.manager.vo.WbsTreePrivateVO;
+import org.springblade.manager.vo.WbsTreeVO2;
 
 import java.util.List;
 
@@ -18,7 +19,7 @@ public interface WbsTreePrivateMapper extends EasyBaseMapper<WbsTreePrivate> {
     List<WbsTreePrivate> selectAll(Integer wbsType);
 
     List<WbsTreePrivateVO> tree(@Param("wbsId") String wbsId, @Param("projectId") String projectId, @Param("wbsType") Integer wbsType);
-
+    List<WbsTreeVO2> tree2(@Param("wbsId") String wbsId, @Param("projectId") String projectId, @Param("wbsType") Integer wbsType);
     List<WbsTreePrivate> selectByCondition(@Param("id") String id, @Param("wbsId") String wbsId, @Param("projectId") String projectId);
 
     void deleteByCondition(String id, String wbsId, String projectId);

+ 33 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -46,6 +46,21 @@
         <result column="project_name" property="projectName"/>
     </resultMap>
 
+    <resultMap id="WbsTreeResultMap2" type="org.springblade.manager.vo.WbsTreeVO2">
+        <id column="id" property="id"/>
+        <result column="parentId" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+        <result column="has_children" property="hasChildren"/>
+        <result column="type" property="type"/>
+        <result column="nodeType" property="nodeType"/>
+        <result column="wbsType" property="wbsType"/>
+        <result column="isExistForm" property="isExistForm"/>
+        <result column="ancestors" property="ancestors"/>
+        <result column="tenantId" property="tenantId"/>
+    </resultMap>
+
     <resultMap id="treeNodeResultMap" type="org.springblade.manager.vo.TreeNodeVO">
         <id column="id" property="id"/>
         <result column="parent_id" property="parentId"/>
@@ -376,6 +391,24 @@
         ORDER BY sort
     </select>
 
+    <select id="tree2" resultMap="WbsTreeResultMap2">
+        select
+        id, parent_id, node_name as title,type as "type", id as "value", id as "key" ,
+        node_type AS "nodeType", is_exist_form AS "isExistForm",
+        wbs_type as "wbsType"
+        from m_wbs_tree_private
+        where
+        is_deleted = 0
+        and status = 1
+        and `type` = 1
+        and project_id = #{projectId}
+        and wbs_id = #{wbsId}
+        <if test="wbsType != null and wbsType != ''">
+            and wbs_type = #{wbsType}
+        </if>
+        ORDER BY sort
+    </select>
+
     <select id="selectByCondition" resultType="org.springblade.manager.entity.WbsTreePrivate">
         SELECT *
         FROM m_wbs_tree_private

+ 7 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeService.java

@@ -16,11 +16,11 @@ public interface IArchiveTreeService extends BaseService<ArchiveTree> {
 
 	boolean submit(ArchiveTreeDTO archiveTreeDTO);
 
-	List<ArchiveTreeVO> lazyTree(String tenantId, Long parentId);
-	List<ArchiveTreeVO2> lazyTree2(String tenantId, Long parentId, Long extId,Long level);
+//	List<ArchiveTreeVO> lazyTree(String tenantId, Long parentId);
+//	List<ArchiveTreeVO> tree(String tenantI, Integer disPlayTree, Integer nodeType);
 
-	List<ArchiveTreeVO> tree(String tenantI, Integer disPlayTree, Integer nodeType);
-	List<ArchiveTreeVO2> tree2(String tenantI, Integer disPlayTree, Integer nodeType);
+	List<ArchiveTreeVO2> lazyTree2(String tenantId, Long projectId, Long parentId, Long extId,Long level);
+	List<ArchiveTreeVO2> tree2(String tenantI, Long projectId, Integer disPlayTree, Integer nodeType);
 
 	List<ArchiveTree> selectByParentIdOrId(String id);
 
@@ -30,9 +30,11 @@ public interface IArchiveTreeService extends BaseService<ArchiveTree> {
 
 	boolean submitArchiveTreeSort(List<ArchiveTreeSortDTO> listSort);
 
-	List<ArchiveTree> treeList(String tenantI,Integer disPlayTree,Integer nodeType);
+	List<ArchiveTree> treeList(String tenantId,Long projectId, Integer disPlayTree,Integer nodeType);
 	
 
 
 	boolean saveAechiveAutoRule(Integer archiveAutoType,String nodeIds);
+
+	boolean initArchiveProjectTree(Long projectId);
 }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java

@@ -15,6 +15,7 @@ import java.util.List;
 public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
 
     List<WbsTreePrivateVO> tree(String wbsId, String projectId);
+    List<WbsTreeVO2> tree2(String wbsId, String projectId);
 
     boolean submit(WbsTreePrivate wbsTreePrivate);
 

+ 3 - 37
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java

@@ -22,48 +22,12 @@ import java.util.*;
 @Service
 @AllArgsConstructor
 public class ArTreeContractInitServiceImpl {
-    private final IWbsTreeService wbsTreeService;
+
 
     private final IContractInfoService contractInfoService;
 
     private final ProjectClient projectClient;
 
-    /**
-     * 按照层次获取公共归档树
-     * @param parentId
-     * @param wbsId
-     * @param tenantId
-     * @param type
-     * @param level 层次,1,单位工程,2
-     * @return
-     */
-    public List<ArchiveTree> getWbsArchiveTree(Long parentId, String wbsId, String tenantId, String type,Long level)
-    {
-        List<ArchiveTree> archiveTreeList = new ArrayList<>();
-
-        List<WbsTreeVO2> wbsTreeVO2s = wbsTreeService.tree(wbsId, tenantId, type);
-
-        //遍历构建
-        for (WbsTreeVO2 wbsTreeVO2:wbsTreeVO2s) {
-            //只展示指定层级之上的
-            if (wbsTreeVO2.getNodeType() > level){
-                continue;
-            }
-
-            ArchiveTree archiveTree = new ArchiveTree();
-            archiveTree.setId(SnowFlakeUtil.getId());
-            archiveTree.setParentId(parentId);
-            archiveTree.setNodeName(wbsTreeVO2.getTitle());
-            archiveTree.setExtId(wbsTreeVO2.getId());
-            archiveTree.setDisplayHierarchy(level.toString());
-            archiveTreeList.add(archiveTree);
-        }
-
-        //设置pid
-
-        return archiveTreeList;
-    }
-
     /**
      *
      * @param tenantId
@@ -128,6 +92,8 @@ public class ArTreeContractInitServiceImpl {
         //设置祖先id
         InitAncestors(archiveTreeContracts);
 
+        //todo 复制组卷信息
+
         return;
 
     }

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

@@ -164,7 +164,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	@Override
 	public boolean initTree2(String tenantId, Long projectId){
 
-		List<ArchiveTreeVO2> tree = archiveTreeService.tree2(AuthUtil.getTenantId(), null, null);
+		List<ArchiveTreeVO2> tree = archiveTreeService.tree2(AuthUtil.getTenantId(), projectId,null, null);
 		if (tree == null || tree.size() == 0) {
 			return false;
 		}

+ 213 - 27
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java

@@ -5,20 +5,27 @@ import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.constant.BladeConstant;
-import org.springblade.core.tool.node.ForestNodeMerger;
+
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.ArchiveTreeDTO;
 import org.springblade.manager.dto.ArchiveTreeSortDTO;
 import org.springblade.manager.entity.ArchiveTree;
+import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.service.IWbsTreePrivateService;
+import org.springblade.manager.service.IWbsTreeService;
 import org.springblade.manager.utils.DiffListUtil;
+import org.springblade.manager.utils.ForestNodeMerger;
+import org.springblade.manager.vo.ArchiveTreeContractVO2;
 import org.springblade.manager.vo.ArchiveTreeVO;
 import org.springblade.manager.mapper.ArchiveTreeMapper;
 import org.springblade.manager.service.IArchiveTreeService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.manager.vo.ArchiveTreeVO2;
+import org.springblade.manager.vo.WbsTreeVO2;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -30,11 +37,14 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
 
     private final ArchiveTreeMapper archiveTreeMapper;
     private final ArTreeContractInitServiceImpl archiveTreeContractInitService;
+    private final IWbsTreeService wbsTreeService;
+    private final IWbsTreePrivateService wbsTreePrivateService;
 
     @Override
     public boolean initArchiveTree() {
         QueryWrapper<ArchiveTree> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("parent_id", 0);
+        queryWrapper.eq("project_id", 0);
         queryWrapper.eq("ancestors", 0);
         queryWrapper.eq("status", 1);
         ArchiveTree archiveTree1 = archiveTreeMapper.selectOne(queryWrapper);
@@ -53,17 +63,131 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         return this.save(archiveTree);
     }
 
-
     @Override
-    public List<ArchiveTreeVO> lazyTree(String tenantId, Long parentId) {
-        if (AuthUtil.isAdministrator()) {
-            tenantId = StringPool.EMPTY;
+    public boolean initArchiveProjectTree(Long projectId) {
+
+        if (projectId == null || projectId == 0) {
+            return false;
+        }
+        QueryWrapper<ArchiveTree> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("parent_id", 0);
+        queryWrapper.eq("project_id", projectId);
+        queryWrapper.eq("status", 1);
+        queryWrapper.eq("is_deleted", 0);
+        ArchiveTree archiveTree1 = archiveTreeMapper.selectOne(queryWrapper);
+        if (archiveTree1 != null) {
+            throw new ServiceException("根节点已存在,请先删除后再进行初始化");
+        }
+
+        List<ArchiveTree> sysTrees = this.treeList(AuthUtil.getTenantId(), 0L,null, null);
+        if (sysTrees == null || sysTrees.size() == 0) {
+            return false;
+        }
+
+        List<ArchiveTree> archiveTrees = new ArrayList<>();
+        Map<Long,Long> oldNewMap = new LinkedHashMap<>();
+
+        Map<Long,ArchiveTree> archiveMap = new LinkedHashMap<>();
+
+        for (ArchiveTree archiveTree :sysTrees) {
+            oldNewMap.put(archiveTree.getId(), SnowFlakeUtil.getId());
+            archiveMap.put(archiveTree.getId(), archiveTree);
         }
-        return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
+        oldNewMap.put(0L,0L);
+
+        for (ArchiveTree node :sysTrees) {
+
+            ArchiveTree archiveTree = new ArchiveTree(node);
+            archiveTree.setId(oldNewMap.get(node.getId()));
+            archiveTree.setParentId(oldNewMap.get(node.getParentId()));
+            archiveTree.setCreateUser(AuthUtil.getUserId());
+            archiveTree.setProjectId(projectId);
+
+
+            String anCenstors = archiveTree.getAncestors();
+            if (com.mixsmart.utils.StringUtils.isNotEmpty(anCenstors)) {
+                String newAnCenstors = "";
+                String arrAnCenstor[] = anCenstors.split(",");
+                if (arrAnCenstor.length > 0) {
+
+                    for (String anCenstor: arrAnCenstor) {
+                        Long anCenstorId = Long.parseLong(anCenstor);
+                        Long newAnCenstorId = oldNewMap.get(anCenstorId);
+                        if (newAnCenstorId!= null) {
+                            if (newAnCenstors.length() == 0) {
+                                newAnCenstors += newAnCenstorId;
+                            }else {
+                                newAnCenstors += (","+ newAnCenstorId);
+                            }
+                        }
+                    }
+                }
+                archiveTree.setAncestors(newAnCenstors);
+            }
+
+            archiveTrees.add(archiveTree);
+        }
+
+        this.saveBatch(archiveTrees);
+
+        return true;
     }
 
+    public boolean initArchiveProjectTree1(Long projectId) {
+        QueryWrapper<ArchiveTree> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("parent_id", 0);
+        queryWrapper.eq("project_id", 0);
+        queryWrapper.eq("status", 1);
+        queryWrapper.eq("is_deleted", 0);
+        ArchiveTree archiveTree1 = archiveTreeMapper.selectOne(queryWrapper);
+        if (archiveTree1 != null) {
+            throw new ServiceException("根节点已存在,请先删除后再进行初始化");
+        }
+
+        List<ArchiveTreeVO2> sysTrees = this.tree2(AuthUtil.getTenantId(), projectId,null, null);
+        if (sysTrees == null || sysTrees.size() == 0) {
+            return false;
+        }
+
+        List<ArchiveTreeVO2> trees = new ArrayList<>();
+        ForestNodeMerger.getTreeList(sysTrees.get(0),trees);
+
+        List<ArchiveTree> archiveTrees = new ArrayList<>();
+        Map<Long,Long> oldNewMap = new LinkedHashMap<>();
+
+        Map<Long,ArchiveTreeVO2> archiveMap = new LinkedHashMap<>();
+
+        for (ArchiveTreeVO2 archiveTreeVO :trees) {
+            oldNewMap.put(archiveTreeVO.getId(), SnowFlakeUtil.getId());
+            archiveMap.put(archiveTreeVO.getId(), archiveTreeVO);
+        }
+        oldNewMap.put(0L,0L);
+
+        for (ArchiveTreeVO2 archiveTreeVO :trees) {
+
+            ArchiveTree archiveTree = new ArchiveTree(archiveTreeVO);
+            archiveTree.setId(oldNewMap.get(archiveTreeVO.getId()));
+            archiveTree.setParentId(oldNewMap.get(archiveTreeVO.getParentId()));
+            archiveTree.setCreateUser(AuthUtil.getUserId());
+            archiveTree.setProjectId(projectId);
+            archiveTrees.add(archiveTree);
+        }
+
+
+        return true;
+    }
+
+
+//    @Override
+//    public List<ArchiveTreeVO> lazyTree(String tenantId, Long parentId) {
+//        if (AuthUtil.isAdministrator()) {
+//            tenantId = StringPool.EMPTY;
+//        }
+//        return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
+//    }
+
     @Override
-    public List<ArchiveTreeVO2> lazyTree2(String tenantId, Long parentId, Long extId,Long level) {
+    public List<ArchiveTreeVO2> lazyTree2(String tenantId, Long projectId, Long parentId, Long extId,Long level) {
         if (AuthUtil.isAdministrator()) {
             tenantId = StringPool.EMPTY;
         }
@@ -71,14 +195,19 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         //获取父节点的信息
         List<ArchiveTreeVO2> archiveTreeVO2List = null;
         //带关联节点则从
-        if (extId != null && level != null) {
-            //从wbs树获取
-            String wbsId = extId.toString();
-            archiveTreeContractInitService.getWbsArchiveTree(parentId,wbsId,tenantId,"1",level);
+        if (extId != null && level != null && projectId != null) {
+            //从系统级wbs树获取
+//            if (projectId == 0) {
+//                String wbsId = extId.toString();
+//                this.getWbsArchiveTree(tenantId,null,parentId,wbsId,"1",level);
+//            }else {
+//
+//            }
+
 
         }//征程流程
         else {
-            archiveTreeVO2List = baseMapper.lazyTree2(tenantId, parentId);
+            archiveTreeVO2List = baseMapper.lazyTree2(tenantId, projectId,parentId);
             //质检资料关联节点设置成有子树
             for (ArchiveTreeVO2 archiveTreeVO2:archiveTreeVO2List) {
                 if (archiveTreeVO2.getAssociationType() != null && archiveTreeVO2.getAssociationType() == 1) {
@@ -90,22 +219,33 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         return ForestNodeMerger.merge(archiveTreeVO2List);
     }
 
-    @Override
-    public List<ArchiveTreeVO> tree(String tenantId, Integer disPlayTree, Integer nodeType) {
-        List<ArchiveTreeVO> archiveTreeVOList = baseMapper.tree(tenantId, disPlayTree, nodeType);
-//        for (ArchiveTreeVO vo:archiveTreeVOList) {
-//            System.out.println();
-//        }
-        return ForestNodeMerger.merge(archiveTreeVOList);
-    }
+//    @Override
+//    public List<ArchiveTreeVO> tree(String tenantId, Integer disPlayTree, Integer nodeType) {
+//        List<ArchiveTreeVO> archiveTreeVOList = baseMapper.tree(tenantId, disPlayTree, nodeType);
+//
+//        return ForestNodeMerger.merge(archiveTreeVOList);
+//    }
 
     @Override
-    public List<ArchiveTreeVO2> tree2(String tenantId, Integer disPlayTree, Integer nodeType) {
-        List<ArchiveTreeVO2> archiveTreeVOList = baseMapper.tree2(tenantId, disPlayTree, nodeType);
-//        for (ArchiveTreeVO2 vo2:archiveTreeVOList) {
-//            System.out.println();
+    public List<ArchiveTreeVO2> tree2(String tenantId,Long projectId, Integer disPlayTree, Integer nodeType) {
+        List<ArchiveTreeVO2> archiveTreeVOList = baseMapper.tree2(tenantId, projectId,disPlayTree, nodeType);
+        List<ArchiveTreeVO2> treeVO2s = ForestNodeMerger.merge(archiveTreeVOList);
+        //todo 遍历树,找到质检节点,调用getWbsArchiveTree,根据关联层级,拼接上去
+        //待传入wbsId,把child 加入ar的childred
+//        String wbsId = "";
+//        if (com.mixsmart.utils.StringUtils.isNotEmpty(wbsId)) {
+//            for (ArchiveTreeVO2 ar : archiveTreeVOList) {
+//                if (ar.getAssociationType() == 1) {
+//                    ArchiveTreeVO2 child = getWbsArchiveTree(tenantId,projectId,ar.getId(),
+//                            wbsId,"1",Long.parseLong(ar.getDisplayHierarchy()));
+//                    if (child!= null) {
+//
+//                    }
+//                }
+//            }
 //        }
-        return ForestNodeMerger.merge(archiveTreeVOList);
+
+        return treeVO2s;
     }
 
     @Override
@@ -210,9 +350,55 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
     }
 
     @Override
-    public List<ArchiveTree> treeList(String tenantId, Integer disPlayTree, Integer nodeType) {
+    public List<ArchiveTree> treeList(String tenantId, Long projectId, Integer disPlayTree, Integer nodeType) {
         return          baseMapper.selectList(Wrappers.<ArchiveTree>query().lambda()
-                .eq(ArchiveTree::getTenantId, tenantId).eq(ArchiveTree::getIsDeleted,0).orderByAsc(ArchiveTree::getSort));
+                .eq(ArchiveTree::getTenantId, tenantId).eq(ArchiveTree::getIsDeleted,0)
+                .eq(ArchiveTree::getProjectId,projectId).orderByAsc(ArchiveTree::getSort));
+    }
+
+    /**
+     * 按照层次获取归档树链表
+     * @param parentId
+     * @param wbsId
+     * @param tenantId
+     * @param type
+     * @param level 层次,1,单位工程,2
+     * @return
+     */
+    public ArchiveTreeVO2 getWbsArchiveTree(String tenantId, Long projectId,Long parentId, String wbsId, String type,Long level)
+    {
+        List<ArchiveTreeVO2> archiveTreeList = new ArrayList<>();
+
+        List<WbsTreeVO2> wbsTreeVO2s = null;
+
+        if (projectId == 0) {
+            wbsTreeVO2s = wbsTreeService.tree(wbsId, tenantId, type);
+        }else {
+            wbsTreeVO2s = wbsTreePrivateService.tree2(wbsId, projectId.toString());
+        }
+
+        //遍历构建
+        for (WbsTreeVO2 wbsTreeVO2:wbsTreeVO2s) {
+            //只展示指定层级之上的
+            if (wbsTreeVO2.getNodeType() > level){
+                continue;
+            }
+
+            ArchiveTreeVO2 archiveTree = new ArchiveTreeVO2();
+            archiveTree.setId(SnowFlakeUtil.getId());
+            archiveTree.setParentId(parentId);
+            archiveTree.setTitle(wbsTreeVO2.getTitle());
+            archiveTree.setExtId(wbsTreeVO2.getId());
+            archiveTree.setDisplayHierarchy(level.toString());
+            archiveTreeList.add(archiveTree);
+        }
+
+        //设置pid
+        List<ArchiveTreeVO2> archiveTreeVO2s = ForestNodeMerger.merge(archiveTreeList);
+        if (archiveTreeVO2s != null && archiveTreeVO2s.size() > 0 ) {
+            return archiveTreeVO2s.get(0);
+        }
+        return null;
     }
 
 

+ 16 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -75,6 +75,22 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return null;
     }
 
+    @Override
+    public List<WbsTreeVO2> tree2(String wbsId, String projectId) {
+        WbsInfo wbsInfo = wbsInfoMapper.selectOne(Wrappers.<WbsInfo>query().lambda().eq(WbsInfo::getId, wbsId));
+        if (wbsInfo != null) {
+            //公有引用
+            return ForestNodeMerger.merge(baseMapper.tree2(wbsId, projectId, wbsInfo.getWbsType()));
+        } else {
+            //私有引用
+            WbsTreePrivate nodeRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, wbsId).eq(WbsTreePrivate::getProjectId, projectId).eq(WbsTreePrivate::getParentId, 0L));
+            if (nodeRoot != null) {
+                return ForestNodeMerger.merge(baseMapper.tree2(wbsId, projectId, Integer.valueOf(nodeRoot.getWbsType())));
+            }
+        }
+        return null;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean submit(WbsTreePrivate wbsTreePrivate) {