|
@@ -5,20 +5,29 @@ 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.entity.ProjectInfo;
|
|
|
+import org.springblade.manager.service.IProjectInfoService;
|
|
|
+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 +39,15 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
|
|
|
private final ArchiveTreeMapper archiveTreeMapper;
|
|
|
private final ArTreeContractInitServiceImpl archiveTreeContractInitService;
|
|
|
+ private final IWbsTreeService wbsTreeService;
|
|
|
+ private final IWbsTreePrivateService wbsTreePrivateService;
|
|
|
+ private final IProjectInfoService projectInfoService;
|
|
|
|
|
|
@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 +66,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;
|
|
|
}
|
|
|
- return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ 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,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 +198,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 +222,45 @@ 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();
|
|
|
-// }
|
|
|
- return ForestNodeMerger.merge(archiveTreeVOList);
|
|
|
+ public List<ArchiveTreeVO2> tree2(String tenantId,Long projectId, Integer disPlayTree, Integer nodeType,String wbsId) {
|
|
|
+ List<ArchiveTreeVO2> archiveTreeVOList = baseMapper.tree2(tenantId, projectId,disPlayTree, nodeType);
|
|
|
+ List<ArchiveTreeVO2> treeVO2s = ForestNodeMerger.merge(archiveTreeVOList);
|
|
|
+ //todo 遍历树,找到质检节点,调用getWbsArchiveTree,根据关联层级,拼接上去
|
|
|
+ //待传入wbsId,把child 加入ar的childred
|
|
|
+ if (StringUtils.isEmpty(wbsId) && projectId != 0) {
|
|
|
+ ProjectInfo projectInfo = projectInfoService.getOne(projectId);
|
|
|
+ if (projectInfo!= null) {
|
|
|
+ Long lWbsId = projectInfo.getReferenceWbsTemplateId();
|
|
|
+ if (lWbsId != null) {
|
|
|
+ wbsId = projectInfo.getReferenceWbsTemplateId().toString();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(wbsId)) {
|
|
|
+ for (ArchiveTreeVO2 ar : archiveTreeVOList) {
|
|
|
+ //关联质检资料
|
|
|
+ if (ar.getAssociationType()!= null
|
|
|
+ && ar.getAssociationType() == 1
|
|
|
+ && ar.getDisplayHierarchy() != null ) {
|
|
|
+ ArchiveTreeVO2 child = getWbsArchiveTree(tenantId,projectId,ar.getId(),
|
|
|
+ wbsId,"1",Long.parseLong(ar.getDisplayHierarchy()));
|
|
|
+
|
|
|
+ if (child!= null) {
|
|
|
+ ar.getChildren().add(child);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return treeVO2s;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -210,9 +365,64 @@ 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());
|
|
|
+ }
|
|
|
+
|
|
|
+ List<WbsTreeVO2> wbsTreeVO2List = new ArrayList<>();
|
|
|
+ ForestNodeMerger.getTreeList(wbsTreeVO2s.get(0),wbsTreeVO2List);
|
|
|
+
|
|
|
+ //遍历构建
|
|
|
+ for (WbsTreeVO2 wbsTreeVO2:wbsTreeVO2List) {
|
|
|
+ //只展示指定层级之上的
|
|
|
+ if (wbsTreeVO2.getMajorDataType() != null ) {
|
|
|
+ if (wbsTreeVO2.getMajorDataType() == 1
|
|
|
+ || wbsTreeVO2.getMajorDataType() == 2
|
|
|
+ || wbsTreeVO2.getMajorDataType() == 3){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (wbsTreeVO2.getNodeType() > level){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ ArchiveTreeVO2 archiveTree = new ArchiveTreeVO2();
|
|
|
+ archiveTree.setId(wbsTreeVO2.getId());
|
|
|
+ archiveTree.setParentId(wbsTreeVO2.getParentId());
|
|
|
+ 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;
|
|
|
}
|
|
|
|
|
|
|