|
@@ -11,6 +11,7 @@ import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.constant.BladeConstant;
|
|
|
|
|
|
import org.springblade.core.tool.utils.Func;
|
|
|
+import org.springblade.manager.dto.ArchiveTreeContractAutoRuleMapDTO;
|
|
|
import org.springblade.manager.dto.ArchiveTreeDTO;
|
|
|
import org.springblade.manager.dto.ArchiveTreeSortDTO;
|
|
|
import org.springblade.manager.entity.ArchiveTree;
|
|
@@ -21,13 +22,10 @@ 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.vo.*;
|
|
|
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.*;
|
|
@@ -131,6 +129,8 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
archiveTrees.add(archiveTree);
|
|
|
}
|
|
|
|
|
|
+ //todo 同步立卷规则
|
|
|
+
|
|
|
this.saveBatch(archiveTrees);
|
|
|
|
|
|
return true;
|
|
@@ -147,7 +147,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
throw new ServiceException("根节点已存在,请先删除后再进行初始化");
|
|
|
}
|
|
|
|
|
|
- List<ArchiveTreeVO2> sysTrees = this.tree2(AuthUtil.getTenantId(), projectId,null, null,null);
|
|
|
+ List<ArchiveTreeVO2> sysTrees = this.tree2(AuthUtil.getTenantId(), projectId,null, null,null,false);
|
|
|
if (sysTrees == null || sysTrees.size() == 0) {
|
|
|
return false;
|
|
|
}
|
|
@@ -230,12 +230,12 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
// }
|
|
|
|
|
|
@Override
|
|
|
- public List<ArchiveTreeVO2> tree2(String tenantId,Long projectId, Integer disPlayTree, Integer nodeType,String wbsId) {
|
|
|
+ public List<ArchiveTreeVO2> tree2(String tenantId,Long projectId, Integer disPlayTree, Integer nodeType,String wbsId,boolean bgetExtNodes) {
|
|
|
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) {
|
|
|
+ //是否获取扩展的wbs节点
|
|
|
+ if (StringUtils.isEmpty(wbsId) && projectId != 0 && bgetExtNodes) {
|
|
|
ProjectInfo projectInfo = projectInfoService.getOne(projectId);
|
|
|
if (projectInfo!= null) {
|
|
|
Long lWbsId = projectInfo.getReferenceWbsTemplateId();
|
|
@@ -426,18 +426,192 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * 保存组卷规则设置
|
|
|
+ * @param archiveAutoType
|
|
|
+ * @param nodeIds
|
|
|
+ * @return
|
|
|
+ */
|
|
|
@Override
|
|
|
- public boolean saveAechiveAutoRule(Integer archiveAutoType, String nodeIds) {
|
|
|
- //步骤1:判断选择节点是否为wbs节点。
|
|
|
- //步骤2:归档树原始节点,
|
|
|
- //2.1保存选择节点的立卷规则。
|
|
|
- //2.1.1 最高并卷规则的需要将选择节点的ID赋值archiveAutoNodeId
|
|
|
- //2.1.2 分类并卷规则的需要生成个随机数,作为同一个分类赋值archiveAutoNodeId
|
|
|
- //2.2保存选择节点下所有子节点的立卷规则。注意立卷规则优先级覆盖原则。(单独组卷>分类并卷>最高并卷)
|
|
|
- //步骤3:归档树关联wbs节点
|
|
|
- //TODO 关联wbs节点的立卷规则保存,涉及到能否正确同步出来。再议
|
|
|
- //3.1保存选择节点的立卷规则。
|
|
|
- //3.2保存选择节点下所有子节点的立卷规则。注意立卷规则优先级覆盖原则。(单独组卷>分类并卷>最高并卷)
|
|
|
+ public boolean saveArchiveAutoRule(Integer archiveAutoType, String nodeIds) {
|
|
|
+ //项目级不需要考虑是否为wbs节点,已经同步出来了都属于归档树节点,直接按归档树节点处理
|
|
|
+ try{
|
|
|
+ //步骤1保存选择节点的立卷规则。
|
|
|
+ String[] ids = nodeIds.split(",");
|
|
|
+
|
|
|
+ Long archiveAutoGroupId=null;
|
|
|
+
|
|
|
+ //分类并卷规则的需要生成个随机数,作为同一个分类赋值archiveAutoNodeId
|
|
|
+ if(archiveAutoType==2){
|
|
|
+ double ran=(Math.random()*100000000) + 1;
|
|
|
+ archiveAutoGroupId=Long.parseLong(System.currentTimeMillis()+""+ran);
|
|
|
+ }
|
|
|
+ for(String nodeId:ids){
|
|
|
+ long nodeIdLong = Long.parseLong(nodeId);
|
|
|
+ ArchiveTree archiveTree = baseMapper.selectById(nodeIdLong);
|
|
|
+ archiveTree.setArchiveAutoType(archiveAutoType);
|
|
|
+ if(archiveAutoType==1){
|
|
|
+ //最高并卷规则 选择节点的ID
|
|
|
+ archiveTree.setArchiveAutoNodeId(nodeIdLong);
|
|
|
+ }
|
|
|
+ if(archiveAutoType==2){
|
|
|
+ //分类并卷规则 提交都是一个分类类型
|
|
|
+ archiveTree.setArchiveAutoGroupId(archiveAutoGroupId);
|
|
|
+ archiveTree.setArchiveAutoGroupSelect(1);
|
|
|
+ }
|
|
|
+ baseMapper.updateById(archiveTree);
|
|
|
+
|
|
|
+ //步骤2保存选择节点下所有子节点的立卷规则。注意立卷规则优先级覆盖原则。(单独组卷>分类并卷>最高并卷)
|
|
|
+ baseMapper.updateAllSonNodeIdsForArchiveAutoRule(archiveTree);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取节点规则查看
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> getArchiveAutoRule(Long id) {
|
|
|
+
|
|
|
+ Map<String,Object> map= new HashMap<>();
|
|
|
+
|
|
|
+ ArchiveTree archiveTree = baseMapper.selectById(id);
|
|
|
+ Integer archiveAutoType = archiveTree.getArchiveAutoType();
|
|
|
+ if(archiveAutoType!=null){
|
|
|
+ if(archiveAutoType==1){
|
|
|
+ //最高并卷层级 默认规则的节点 显示最高并卷层级节点
|
|
|
+ Long archiveAutoNodeId = archiveTree.getArchiveAutoNodeId();
|
|
|
+ ArchiveTree archiveAutoNode = baseMapper.selectById(archiveAutoNodeId);
|
|
|
+ StringBuffer allName= new StringBuffer();
|
|
|
+ String ancestors = archiveAutoNode.getAncestors();
|
|
|
+ String[] ancestorssplit = ancestors.split(",");//全路径ID
|
|
|
+ for(String pId:ancestorssplit){
|
|
|
+ long pIdLong = Long.parseLong(pId);
|
|
|
+ ArchiveTree pIdNode = baseMapper.selectById(pIdLong);
|
|
|
+ allName.append(pIdNode.getNodeName()+"/");
|
|
|
+ }
|
|
|
+ allName.append(archiveAutoNode.getNodeName());
|
|
|
+ ArchiveTreeAutoRuleVO vo= new ArchiveTreeAutoRuleVO();
|
|
|
+ vo.setAllName(allName.toString());
|
|
|
+ vo.setNodeId(archiveAutoNode.getId());
|
|
|
+ vo.setArchiveAutoType(archiveAutoType);
|
|
|
+ map.put("type",archiveAutoType);
|
|
|
+ map.put("data",vo);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ if(archiveAutoType==2){
|
|
|
+ //分类并卷显示所在大类下树结构,过滤单独规则,其他分类并卷规则组节点 本节点分类组显示打钩
|
|
|
+ //找出当前节点大类
|
|
|
+ String ancestors = archiveTree.getAncestors();
|
|
|
+ String[] ancestorssplit = ancestors.split(",");//全路径ID
|
|
|
+ String nodeAncestors = ancestorssplit[0]+","+ancestorssplit[1]; //大类的ancestors
|
|
|
+ //获取大类下所有节点,过滤单独规则,其他分类并卷规则组节点
|
|
|
+ List<ArchiveTreeAutoRuleVO> nodetree = ForestNodeMerger.merge(baseMapper.getAllSonNodeforGroupView(nodeAncestors, archiveTree.getArchiveAutoNodeId()));
|
|
|
+ //获取与当前节点同一分类的节点
|
|
|
+ List<ArchiveTree> listGroup= baseMapper.selectList(Wrappers.<ArchiveTree>lambdaQuery()
|
|
|
+ .eq(ArchiveTree::getArchiveAutoGroupId, archiveTree.getArchiveAutoGroupId())
|
|
|
+ .orderByAsc(ArchiveTree::getSort));
|
|
|
+ StringBuffer nodeSelect = new StringBuffer();
|
|
|
+
|
|
|
+ for(ArchiveTree node:listGroup){
|
|
|
+ nodeSelect.append(node.getId()+",");
|
|
|
+ }
|
|
|
+ map.put("type",archiveAutoType);
|
|
|
+ map.put("tree",nodetree);
|
|
|
+ map.put("data",nodeSelect.toString());
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ if(archiveAutoType==3){
|
|
|
+ //单独组卷规则 显示当前节点
|
|
|
+ StringBuffer allName= new StringBuffer();
|
|
|
+ String ancestors = archiveTree.getAncestors();
|
|
|
+ String[] ancestorssplit = ancestors.split(",");//全路径ID
|
|
|
+ for(String pId:ancestorssplit){
|
|
|
+ long pIdLong = Long.parseLong(pId);
|
|
|
+ ArchiveTree pIdNode = baseMapper.selectById(pIdLong);
|
|
|
+ allName.append(pIdNode.getNodeName()+"/");
|
|
|
+ }
|
|
|
+ allName.append(archiveTree.getNodeName());
|
|
|
+ ArchiveTreeAutoRuleVO vo= new ArchiveTreeAutoRuleVO();
|
|
|
+ vo.setAllName(allName.toString());
|
|
|
+ vo.setNodeId(archiveTree.getId());
|
|
|
+ vo.setArchiveAutoType(archiveAutoType);
|
|
|
+ map.put("type",archiveAutoType);
|
|
|
+ map.put("data",vo);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void removeArchiveAutoRule(Long nodeId){
|
|
|
+ ArchiveTree node = baseMapper.selectById(nodeId);
|
|
|
+ Integer archiveAutoType = node.getArchiveAutoType();
|
|
|
+ if(archiveAutoType!=null){
|
|
|
+ //删除默认规则
|
|
|
+ if(archiveAutoType==1){
|
|
|
+ baseMapper.removeAllSonNodeIdsForArchiveAutoRule_1(node);
|
|
|
+ }
|
|
|
+ //删除节点及所有子节点 分类并卷规则
|
|
|
+ if(archiveAutoType==2){
|
|
|
+ //删除规则
|
|
|
+ baseMapper.removeAllSonNodeIdsForArchiveAutoRule_2(node);
|
|
|
+ //TODO 验证节点的父节点是否为分类并卷规则,如是则取消。若无其他兄弟节点,继续往上验证。
|
|
|
+ }
|
|
|
+ //删除节点及所有子节点 单独并卷规则
|
|
|
+ if(archiveAutoType==3){
|
|
|
+ baseMapper.removeAllSonNodeIdsForArchiveAutoRule_3(node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean updateArchiveAutoRule(ArchiveTreeContractAutoRuleMapDTO dto) {
|
|
|
+ //项目级不需要考虑是否为wbs节点,已经同步出来了都属于归档树节点,直接按归档树节点处理
|
|
|
+
|
|
|
+ Integer archiveAutoType = dto.getArchiveAutoType();
|
|
|
+ if(archiveAutoType!=null){
|
|
|
+ if(archiveAutoType==2){
|
|
|
+ Long groupId = dto.getArchiveAutoGroupId();
|
|
|
+ String selectNodeIds = dto.getSelectNodeIds();
|
|
|
+ List<String> selectNodeIdlist = Arrays.asList(selectNodeIds);
|
|
|
+ //先将同一分类的节点删除配置,。
|
|
|
+ baseMapper.removeNodeForArchiveAutoRule_Group(groupId);
|
|
|
+ //然后再按照选择节点保存新的设置
|
|
|
+ for(String nodeId:selectNodeIdlist){
|
|
|
+ long nodeIdLong = Long.parseLong(nodeId);
|
|
|
+ ArchiveTree archiveTree = baseMapper.selectById(nodeIdLong);
|
|
|
+ archiveTree.setArchiveAutoType(archiveAutoType);
|
|
|
+ //分类并卷规则 提交都是一个分类类型
|
|
|
+ archiveTree.setArchiveAutoGroupId(groupId);
|
|
|
+ archiveTree.setArchiveAutoGroupSelect(1);
|
|
|
+ baseMapper.updateById(archiveTree);
|
|
|
+ //保存选择节点下所有子节点的立卷规则。注意立卷规则优先级覆盖原则。(单独组卷>分类并卷>最高并卷)
|
|
|
+ baseMapper.updateAllSonNodeIdsForArchiveAutoRule(archiveTree);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(archiveAutoType==1){
|
|
|
+
|
|
|
+ }
|
|
|
+ if(archiveAutoType==3){
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
}
|