Ver código fonte

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex into master

yangyj 2 anos atrás
pai
commit
8ffc00c186
21 arquivos alterados com 529 adições e 17 exclusões
  1. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java
  2. 186 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractVO6.java
  3. 57 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateVO3.java
  4. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java
  5. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  6. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FirstController.java
  7. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeMapper.xml
  8. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.java
  9. 39 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  10. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java
  11. 27 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml
  12. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeService.java
  13. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java
  14. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java
  15. 35 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  16. 23 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java
  17. 56 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeSupportServiceImpl.java
  18. 26 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  19. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java
  20. 10 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  21. 41 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/ForestNodeMerger.java

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

@@ -103,6 +103,12 @@ public class ArchiveTreeVO2 implements INode<ArchiveTreeVO2> {
      * 工程类型
      */
     private Integer projectType;
+
+    /**
+     * 关联类型
+     */
+    @ApiModelProperty(value = "关联类型")
+    private Integer associationType;
     /**
      * 关联类型
      */

+ 186 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractVO6.java

@@ -0,0 +1,186 @@
+package org.springblade.manager.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import org.springblade.core.tool.node.INode;
+import org.springblade.core.tool.node.TreeNode;
+import org.springblade.manager.entity.WbsTreeContract;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class WbsTreeContractVO6 extends WbsTreeContract implements INode<WbsTreeContractVO6> {
+    private static final long serialVersionUID = 1L;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    private Long pKeyId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<WbsTreeContractVO6> children;
+
+    private String title;
+    @JsonSerialize(
+            using = ToStringSerializer.class
+    )
+    private Long key;
+    @JsonSerialize(
+            using = ToStringSerializer.class
+    )
+    private Long value;
+
+    private Integer nodeType;
+
+    private Integer sort;
+
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private Boolean hasChildren;
+
+    public WbsTreeContractVO6() {
+    }
+
+
+
+    @Override
+    public List<WbsTreeContractVO6> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+
+    @Override
+    public Boolean getHasChildren() {
+        return hasChildren;
+    }
+
+    public Integer getNodeType() {
+        return nodeType;
+    }
+
+    public void setNodeType(Integer nodeType) {
+        this.nodeType = nodeType;
+    }
+
+
+    public String getTitle() {
+        return this.title;
+    }
+
+    public Long getKey() {
+        return this.key;
+    }
+
+    public Long getValue() {
+        return this.value;
+    }
+
+
+    public void setTitle(final String title) {
+        this.title = title;
+    }
+
+    public void setKey(final Long key) {
+        this.key = key;
+    }
+
+    public void setValue(final Long value) {
+        this.value = value;
+    }
+
+    public Integer getSort() {
+        return sort;
+    }
+
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+    @Override
+    public String toString() {
+        return "WbsTreeContractVO{" +
+                "id=" + id +
+                ", parentId=" + parentId +
+                ", children=" + children +
+                ", title='" + title +
+                ", key=" + key +
+                ", value=" + value +
+                ", nodeType=" + nodeType +
+                ", hasChildren=" + hasChildren +
+                '}';
+    }
+
+    public boolean equals(final Object o) {
+        if (o == this) {
+            return true;
+        } else if (!(o instanceof TreeNode)) {
+            return false;
+        } else {
+            TreeNodeVO other = (TreeNodeVO) o;
+            if (!other.canEqual(this)) {
+                return false;
+            } else {
+                label47:
+                {
+                    Object this$key = this.getKey();
+                    Object other$key = other.getKey();
+                    if (this$key == null) {
+                        if (other$key == null) {
+                            break label47;
+                        }
+                    } else if (this$key.equals(other$key)) {
+                        break label47;
+                    }
+
+                    return false;
+                }
+
+                Object this$value = this.getValue();
+                Object other$value = other.getValue();
+                if (this$value == null) {
+                    if (other$value != null) {
+                        return false;
+                    }
+                } else if (!this$value.equals(other$value)) {
+                    return false;
+                }
+
+                Object this$title = this.getTitle();
+                Object other$title = other.getTitle();
+                if (this$title == null) {
+                    if (other$title != null) {
+                        return false;
+                    }
+                } else if (!this$title.equals(other$title)) {
+                    return false;
+                }
+
+                return true;
+            }
+        }
+    }
+
+    protected boolean canEqual(final Object other) {
+        return other instanceof TreeNode;
+    }
+
+    public int hashCode() {
+        boolean PRIME = true;
+        int result = 1;
+        Object $key = this.getKey();
+        result = result * 59 + ($key == null ? 43 : $key.hashCode());
+        Object $value = this.getValue();
+        result = result * 59 + ($value == null ? 43 : $value.hashCode());
+        Object $title = this.getTitle();
+        result = result * 59 + ($title == null ? 43 : $title.hashCode());
+        return result;
+    }
+
+
+}

+ 57 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateVO3.java

@@ -0,0 +1,57 @@
+package org.springblade.manager.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.manager.entity.WbsTreePrivate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WbsTreePrivateVO3 extends WbsTreePrivate implements INode<WbsTreePrivateVO3> {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 父节点ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    /**
+     * 子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<WbsTreePrivateVO3> children;
+
+    /**
+     * 是否有子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private Boolean hasChildren;
+
+    @Override
+    public List<WbsTreePrivateVO3> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+
+}

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

@@ -113,8 +113,8 @@ public class ArchiveTreeController extends BladeController {
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "parentId", value = "父级id", required = true)
     })
-    public R<List<ArchiveTreeVO2>> lazyTree(Long parentId) {
-        List<ArchiveTreeVO2> tree = archiveTreeService.lazyTree2(AuthUtil.getTenantId(), parentId);
+    public R<List<ArchiveTreeVO2>> lazyTree(Long parentId,Long extId,Long level) {
+        List<ArchiveTreeVO2> tree = archiveTreeService.lazyTree2(AuthUtil.getTenantId(), parentId,extId,level);
         if (tree != null && tree.size() > 0) {
             return R.data(tree);
         }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -681,7 +681,7 @@ public class ExcelTabController extends BladeController {
 
 
     /**
-     * 客户端清表生成html
+     * 后管清表生成html
      */
     @GetMapping("/get-excel-html")
     @ApiOperationSupport(order = 15)
@@ -734,7 +734,7 @@ public class ExcelTabController extends BladeController {
     }
 
     /**
-     * 后管清表生成html
+     * 客户端清表生成html
      */
     @GetMapping("/get-excel-html-two")
     @ApiOperationSupport(order = 15)

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

@@ -246,7 +246,7 @@ public class FirstController extends BladeController {
                                     for (int i = 0; i < columns.length; i++) {
                                         CellRange cellRange = columns[i];
                                         System.out.println(cellRange.getStyle().getFont().getSize());
-                                        if (cellRange.getStyle().getFont().getSize() >= 12) {
+                                        if (cellRange.getStyle().getFont().getSize() >= 12 && StringUtils.isNotEmpty(cellRange.getText())) {
                                             cellRange.setText(projectInfo.getProjectName());
                                             cellRange.getStyle().getFont().setSize(20);
                                             break;

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

@@ -33,6 +33,7 @@
         <result column="ext_id" property="extId"/>
         <result column="archive_auto_type" property="archiveAutoType"/>
         <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
+        <result column="archive_auto_select" property="archiveAutoSelect"/>
         <result column="is_upload_file_display_configuration_tree" property="isUploadFileDisplayConfigurationTree"/>
     </resultMap>
 
@@ -49,6 +50,7 @@
         <result column="isDisplayTree" property="isDisplayTree"/>
         <result column="isStorageNode" property="isStorageNode"/>
         <result column="isBuiltDrawing" property="isBuiltDrawing"/>
+        <result column="association_type" property="associationType"/>
         <result column="postType" property="postType"/>
         <result column="project_type" property="projectType"/>
         <result column="storage_type" property="storageType"/>

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.java

@@ -88,4 +88,8 @@ public interface ContractInfoMapper extends BaseMapper<ContractInfo> {
                                   @Param("projectId") Long projectId,
                                   @Param("contractId") Long contractId);
 
+    List<WbsTreeContractVO6> tree6(@Param("wbsId") Long wbsId,
+                                  @Param("projectId") Long projectId,
+                                  @Param("contractId") Long contractId);
+
 }

+ 39 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -64,6 +64,18 @@
         <result column="major_data_type" property="majorDataType"/>
     </resultMap>
 
+    <resultMap id="treeNodeResultMap6" type="org.springblade.manager.vo.WbsTreeContractVO6">
+        <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="node_type" property="nodeType"/>
+        <result column="sort" property="sort"/>
+    </resultMap>
+
+
     <resultMap id="treeNodeResultMap2" type="org.springblade.manager.vo.WbsTreeContractVO">
         <id column="id" property="id"/>
         <result column="parentId" property="parentId"/>
@@ -440,4 +452,31 @@
         ORDER BY d.sort
     </select>
 
+    <select id="tree6" resultMap="treeNodeResultMap6">
+        SELECT
+        d.id,
+        d.parent_id AS "parentId",
+        IFNULL(if(length(trim(full_name)) > 0, full_name, node_name),node_name) AS title,
+        d.node_name AS "nodeName",
+        d.node_type AS "nodeType",
+        d.id AS "value",
+        d.id AS "key"
+        sort
+        FROM m_wbs_tree_contract d
+        WHERE
+        d.is_deleted = 0
+        AND d.status = 1
+        AND d.type = 1
+        <if test="wbsId!=null and wbsId!=''">
+            and wbs_id = #{wbsId}
+        </if>
+        <if test="projectId !=null and projectId!=''">
+            and project_id = #{projectId}
+        </if>
+        <if test="contractId!=null and contractId!=''">
+            and contract_id = #{contractId}
+        </if>
+        ORDER BY d.sort
+    </select>
+
 </mapper>

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java

@@ -19,6 +19,10 @@ public interface WbsTreeMapper extends EasyBaseMapper<WbsTree> {
                              @Param("tenantId") String tenantId,
                              @Param("parentId") Long parentId);
 
+    List<WbsTreeVO2> lazyTree2(@Param("wbsId") String wbsId,
+                             @Param("tenantId") String tenantId,
+                             @Param("parentId") Long parentId);
+
     List<WbsTreeVO> tree(@Param("wbsId") String wbsId, @Param("tenantId") String tenantId, @Param("type") String type);
 
     List<WbsTreeVO2> tree2(@Param("wbsId") String wbsId, @Param("tenantId") String tenantId, @Param("type") String type);

+ 27 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -285,6 +285,31 @@
         ORDER BY d.sort
     </select>
 
+    <select id="lazyTree2" resultMap="treeNodeResultMap2">
+        SELECT
+        t.id,
+        t.type AS "type",
+        t.node_type AS "nodeType",
+        t.is_exist_form AS "isExistForm",
+        t.parent_id,
+        t.node_name AS title,
+        t.id AS "value",
+        t.id AS "key",
+        t.ancestors AS "ancestors",
+        (select case when count(1) > 0 then 1 else 0 end from m_wbs_tree where parent_id = t.id and is_deleted = 0) AS "has_children"
+        FROM
+        m_wbs_tree t
+        WHERE
+        t.parent_id = #{parentId} AND t.is_deleted = 0
+        <if test="tenantId!=null and tenantId!=''">
+            AND t.tenant_id = #{tenantId}
+        </if>
+        AND t.wbs_id = #{wbsId}
+        AND t.type = 1
+        AND status = 1
+        ORDER BY t.sort
+    </select>
+
 
     <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT
@@ -313,6 +338,8 @@
             ORDER BY t.sort
     </select>
 
+
+
     <select id="selectByNodeTable" resultMap="selectByNodeTableMap">
         SELECT
             wt.id AS id,

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

@@ -17,7 +17,7 @@ public interface IArchiveTreeService extends BaseService<ArchiveTree> {
 	boolean submit(ArchiveTreeDTO archiveTreeDTO);
 
 	List<ArchiveTreeVO> lazyTree(String tenantId, Long parentId);
-	List<ArchiveTreeVO2> lazyTree2(String tenantId, Long parentId);
+	List<ArchiveTreeVO2> lazyTree2(String tenantId, Long parentId, Long extId,Long level);
 
 	List<ArchiveTreeVO> tree(String tenantI, Integer disPlayTree, Integer nodeType);
 	List<ArchiveTreeVO2> tree2(String tenantI, Integer disPlayTree, Integer nodeType);

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java

@@ -46,6 +46,8 @@ public interface IContractInfoService extends BaseService<ContractInfo> {
 
     List<WbsTreeContractVO> tree3(String wbsId, String projectId, String contractId);
 
+    List<WbsTreeContractVO6> tree6List(String wbsId, String projectId, String contractId);
+
     List<WbsTreeContractVO2> treeTwo(String projectId);
 
     List<WbsTreeContractTreeVO> queryContractWbsTreeByContractIdAndType(String contractId, Integer wbsType, String parentId);
@@ -66,4 +68,6 @@ public interface IContractInfoService extends BaseService<ContractInfo> {
 
     Map<String, Object> trialRelationTree(String wbsId, String projectId, String contractId, String selfId);
 
+
+
 }

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java

@@ -23,6 +23,8 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 
     List<WbsTreeVO> lazyTree(String wbsId, String tenantId, Long parentId);
 
+    List<WbsTreeVO2> lazyTree2(String wbsId, String tenantId, Long parentId);
+
     List<WbsTreeVO2> tree(String wbsId, String tenantId, String type);
 
     boolean submit(WbsTree dept);

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

@@ -16,14 +16,18 @@
  */
 package org.springblade.manager.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.mixsmart.utils.StringUtils;
+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.node.ForestNodeMerger;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.mapper.ArchiveTreeMapper;
 import org.springblade.manager.vo.ArchiveTreeContractAutoRuleVO;
 import org.springblade.manager.vo.ArchiveTreeContractVO;
 import org.springblade.manager.mapper.ArchiveTreeContractMapper;
@@ -31,6 +35,7 @@ import org.springblade.manager.service.IArchiveTreeContractService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.manager.vo.ArchiveTreeContractVO2;
 import org.springblade.manager.vo.ArchiveTreeVO;
+import org.springblade.manager.wrapper.ArchiveTreeContractWrapper;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
@@ -43,19 +48,38 @@ import java.util.*;
  * @since 2023-02-18
  */
 @Service
+@AllArgsConstructor
 public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeContractMapper, ArchiveTreeContract> implements IArchiveTreeContractService {
 
+	private final ArchiveTreeContractMapper archiveTreeContractMapper;
+
+
 	@Override
 	public IPage<ArchiveTreeContractVO> selectArchiveTreeContractPage(IPage<ArchiveTreeContractVO> page, ArchiveTreeContractVO archiveTreeContract) {
 		return page.setRecords(baseMapper.selectArchiveTreeContractPage(page, archiveTreeContract));
 	}
 	@Override
 	public boolean initTree(String tenantId, Long projectId, List<ArchiveTree> trees){
+		boolean bCreate = false;
+		QueryWrapper<ArchiveTreeContract> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("parent_id", 0);
+		queryWrapper.eq("ancestors", 0);
+		queryWrapper.eq("tenant_id", tenantId);
+		queryWrapper.eq("project_id", projectId);
+
+		queryWrapper.eq("status", 1);
+		queryWrapper.eq("is_deleted", 0);
+		ArchiveTreeContract archiveTreeContract = archiveTreeContractMapper.selectOne(queryWrapper);
+		if (archiveTreeContract == null) {
+			bCreate = true;
+		}
+
 
 		//清理旧的项目归档树,待补充
 		clearProjectTree(tenantId,projectId);
+		//判断是否
 
-		//建立父子关系,祖先关系
+		//系统模板的
 		List<ArchiveTreeContract> archiveTreeContracts = new ArrayList<>();
 		Map<Long,Long> oldNewMap = new LinkedHashMap<>();
 
@@ -99,9 +123,17 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 			archiveTreeContracts.add(archiveTree);
 		}
 
-		//扩展动态节点
+		//todo 生成动态节点
+		List<ArchiveTreeContractVO2> archiveTreeContractVO2List = this.tree2(tenantId,1,null,projectId);
+
+
+		//todo 处理文件提名
+
+		//todo 立卷规则
+
+		//todo 生成动态节点的同名案卷
+
 
-		//处理丽娟规则
 
 		this.saveBatch(archiveTreeContracts);
 		return true;

+ 23 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java

@@ -29,6 +29,7 @@ import java.util.stream.Collectors;
 public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, ArchiveTree> implements IArchiveTreeService {
 
     private final ArchiveTreeMapper archiveTreeMapper;
+    private final ArchiveTreeSupportServiceImpl archiveTreeSupportService;
 
     @Override
     public boolean initArchiveTree() {
@@ -62,11 +63,31 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
     }
 
     @Override
-    public List<ArchiveTreeVO2> lazyTree2(String tenantId, Long parentId) {
+    public List<ArchiveTreeVO2> lazyTree2(String tenantId, Long parentId, Long extId,Long level) {
         if (AuthUtil.isAdministrator()) {
             tenantId = StringPool.EMPTY;
         }
-        return ForestNodeMerger.merge(baseMapper.lazyTree2(tenantId, parentId));
+
+        //获取父节点的信息
+        List<ArchiveTreeVO2> archiveTreeVO2List = null;
+        //带关联节点则从
+        if (extId != null && level != null) {
+            //从wbs树获取
+            String wbsId = extId.toString();
+            archiveTreeSupportService.getWbsArchiveTree(parentId,wbsId,tenantId,"1",level);
+
+        }//征程流程
+        else {
+            archiveTreeVO2List = baseMapper.lazyTree2(tenantId, parentId);
+            //质检资料关联节点设置成有子树
+            for (ArchiveTreeVO2 archiveTreeVO2:archiveTreeVO2List) {
+                if (archiveTreeVO2.getAssociationType() != null && archiveTreeVO2.getAssociationType() == 1) {
+                    archiveTreeVO2.setHasChildren(true);
+                }
+            }
+        }
+
+        return ForestNodeMerger.merge(archiveTreeVO2List);
     }
 
     @Override

+ 56 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeSupportServiceImpl.java

@@ -1,27 +1,58 @@
 package org.springblade.manager.service.impl;
 
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.WbsTree;
+import org.springblade.manager.service.IContractInfoService;
+import org.springblade.manager.service.IWbsTreeService;
+import org.springblade.manager.utils.ForestNodeMerger;
+import org.springblade.manager.vo.ArchiveTreeContractVO2;
+import org.springblade.manager.vo.WbsTreeContractVO6;
+import org.springblade.manager.vo.WbsTreeVO2;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 @Service
 @AllArgsConstructor
 public class ArchiveTreeSupportServiceImpl {
+    private final IWbsTreeService wbsTreeService;
 
+    private final IContractInfoService contractInfoService;
 
-    public List<ArchiveTree> getProcArchiveTree(ArchiveTree rootNode,String displayHierarchy,List<WbsTree> nodes)
+    /**
+     * 按照层次获取公共归档树
+     * @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<>();
-        for (WbsTree node: nodes) {
+
+        List<WbsTreeVO2> wbsTreeVO2s = wbsTreeService.tree(wbsId, tenantId, type);
+
+        //遍历构建
+        for (WbsTreeVO2 wbsTreeVO2:wbsTreeVO2s) {
+            //只展示指定层级之上的
+            if (wbsTreeVO2.getNodeType() > level){
+                continue;
+            }
+
             ArchiveTree archiveTree = new ArchiveTree();
-            archiveTree.setExtType(1);
-            archiveTree.setExtId(node.getId());
-            archiveTree.setAncestors(rootNode.getId().toString());
+            archiveTree.setId(SnowFlakeUtil.getId());
+            archiveTree.setParentId(parentId);
+            archiveTree.setNodeName(wbsTreeVO2.getTitle());
+            archiveTree.setExtId(wbsTreeVO2.getId());
+            archiveTree.setDisplayHierarchy(level.toString());
             archiveTreeList.add(archiveTree);
         }
 
@@ -30,4 +61,24 @@ public class ArchiveTreeSupportServiceImpl {
         return archiveTreeList;
     }
 
+    public List<ArchiveTreeContract> getTreeContractFromWbs(String tenantId, Long projectId, Long wbsId, Long contractId,Long level,ArchiveTreeContractVO2 subTree){
+        List<ArchiveTreeContract> archiveTreeContracts = new ArrayList<>();
+
+        //1. 获取子树链表
+        List<ArchiveTreeContractVO2> treeContractVO2s = new ArrayList<>();
+        ForestNodeMerger.getTreeList(subTree,treeContractVO2s);
+
+        //2. 获取对应合同的树
+        List<WbsTreeContractVO6> wbsTreeContractVO6s =  contractInfoService.tree6List(wbsId.toString(),projectId.toString(),contractId.toString());
+        Iterator<WbsTreeContractVO6> iterator = wbsTreeContractVO6s.iterator();
+        while (iterator.hasNext()) {
+            WbsTreeContractVO6 treeContractVO6 = iterator.next();
+            if (treeContractVO6.getNodeType() > level) {
+                iterator.remove();
+            }
+        }
+
+         return archiveTreeContracts;
+    }
+
 }

+ 26 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -134,6 +134,13 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         return buildWbsTreeByStream(wbsTreeContractVOS);
     }
 
+    @Override
+    public List<WbsTreeContractVO6> tree6List(String wbsId, String projectId, String contractId) {
+        List<WbsTreeContractVO6> wbsTreeContractVOS = baseMapper.tree6(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId));
+        return wbsTreeContractVOS;
+    }
+
+
     @Override
     public List<WbsTreeContractVO> tree(String wbsId, String projectId, String contractId) {
         List<WbsTreeContractVO> wbsTreeContractVOS = baseMapper.tree2(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId), null, null, null);
@@ -147,6 +154,13 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         return list;
     }
 
+    public List<WbsTreeContractVO6> buildWbsTreeByStream6(List<WbsTreeContractVO6> wbsTreeVO2s) {
+        List<WbsTreeContractVO6> list = wbsTreeVO2s.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
+        Map<Long, List<WbsTreeContractVO6>> map = wbsTreeVO2s.stream().collect(Collectors.groupingBy(WbsTreeContractVO6::getParentId));
+        this.recursionFnTree6(list, map);
+        return list;
+    }
+
     public void recursionFnTree(List<WbsTreeContractVO> list, Map<Long, List<WbsTreeContractVO>> map) {
         for (WbsTreeContractVO wbsTreeContractVO : list) {
             List<WbsTreeContractVO> childrenList = map.get(wbsTreeContractVO.getId());
@@ -158,6 +172,18 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         }
     }
 
+    public void recursionFnTree6(List<WbsTreeContractVO6> list, Map<Long, List<WbsTreeContractVO6>> map) {
+        for (WbsTreeContractVO6 wbsTreeContractVO6 : list) {
+            List<WbsTreeContractVO6> childrenList = map.get(wbsTreeContractVO6.getId());
+            wbsTreeContractVO6.setChildren(childrenList);
+            if (childrenList != null && childrenList.size() > 0) {
+                wbsTreeContractVO6.setHasChildren(true);
+                recursionFnTree6(childrenList, map);
+            }
+        }
+    }
+
+
     @Override
     public List<WbsTreeContractVO2> treeTwo(String projectId) {
         return wbsTreeContractMapper.selectListByCondition(projectId);

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

@@ -402,7 +402,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
             this.saveBatch(listData);
 
             //同步
-            syncDataFiled(wbsFormElementVO2.getInitTableName(), listData);
+            syncDataFiled(wbsTreePrivate.getInitTableName(), listData);
             return true;
 
         } else {

+ 10 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -73,6 +73,16 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return ForestNodeMerger.merge(wbsTreeVOS);
     }
 
+    @Override
+    public List<WbsTreeVO2> lazyTree2(String wbsId, String tenantId, Long parentId) {
+        if (AuthUtil.isAdministrator()) {
+            tenantId = StringPool.EMPTY;
+        }
+        List<WbsTreeVO2> wbsTreeVOS = baseMapper.lazyTree2(wbsId, tenantId, parentId);
+        return ForestNodeMerger.merge(wbsTreeVOS);
+    }
+
+
     @Override
     public List<WbsTreeVO2> tree(String wbsId, String tenantId, String type) {
         boolean fi;

+ 41 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/ForestNodeMerger.java

@@ -0,0 +1,41 @@
+package org.springblade.manager.utils;
+
+import org.springblade.core.tool.node.ForestNodeManager;
+import org.springblade.core.tool.node.INode;
+
+import java.util.List;
+
+public class ForestNodeMerger {
+    public static <T extends INode<T>> List<T> merge(List<T> items) {
+        ForestNodeManager<T> forestNodeManager = new ForestNodeManager(items);
+        items.forEach((forestNode) -> {
+            if (forestNode.getParentId() != 0L) {
+                INode<T> node = forestNodeManager.getTreeNodeAt(forestNode.getParentId());
+                if (node != null) {
+                    node.getChildren().add(forestNode);
+                } else {
+                    forestNodeManager.addParentId(forestNode.getId());
+                }
+            }
+
+        });
+        return forestNodeManager.getRoot();
+    }
+
+    public static <T extends INode<T>> void getTreeList(T tree, List<T> nodes){
+        if (tree == null) {
+            return;
+        }
+
+        nodes.add(tree);
+
+        List<T> childrens = tree.getChildren();
+        if (childrens!= null) {
+            for (T child :childrens) {
+                getTreeList(child,nodes);
+            }
+        }
+    }
+
+
+}