|
@@ -49,7 +49,7 @@ import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
- * 服务实现类
|
|
|
+ * 服务实现类
|
|
|
*
|
|
|
* @author 00
|
|
|
* @since 2023-02-18
|
|
@@ -58,905 +58,892 @@ import java.util.stream.Collectors;
|
|
|
@AllArgsConstructor
|
|
|
public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeContractMapper, ArchiveTreeContract> implements IArchiveTreeContractService {
|
|
|
|
|
|
- private final ArchiveTreeContractMapper archiveTreeContractMapper;
|
|
|
- private final ArchiveTreeMapper archiveTreeMapper;
|
|
|
+ private final ArchiveTreeContractMapper archiveTreeContractMapper;
|
|
|
+ private final ArchiveTreeMapper archiveTreeMapper;
|
|
|
|
|
|
- private final IArchiveTreeService archiveTreeService;
|
|
|
+ private final IArchiveTreeService archiveTreeService;
|
|
|
|
|
|
- private final IContractInfoService contractInfoService;
|
|
|
+ private final IContractInfoService contractInfoService;
|
|
|
|
|
|
- private final ArTreeContractInitServiceImpl arTreeContractInitService;
|
|
|
+ private final ArTreeContractInitServiceImpl arTreeContractInitService;
|
|
|
|
|
|
- private final IProjectInfoService projectInfoService;
|
|
|
+ private final IProjectInfoService projectInfoService;
|
|
|
|
|
|
- private final ArchiveTreeContractSyncImpl archiveTreeContractSync;
|
|
|
+ private final ArchiveTreeContractSyncImpl archiveTreeContractSync;
|
|
|
|
|
|
|
|
|
- @Override
|
|
|
- public IPage<ArchiveTreeContractVO> selectArchiveTreeContractPage(IPage<ArchiveTreeContractVO> page, ArchiveTreeContractVO archiveTreeContract) {
|
|
|
- return page.setRecords(baseMapper.selectArchiveTreeContractPage(page, archiveTreeContract));
|
|
|
- }
|
|
|
+ @Override
|
|
|
+ public IPage<ArchiveTreeContractVO> selectArchiveTreeContractPage(IPage<ArchiveTreeContractVO> page, ArchiveTreeContractVO archiveTreeContract) {
|
|
|
+ return page.setRecords(baseMapper.selectArchiveTreeContractPage(page, archiveTreeContract));
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
- public boolean initTree2(String tenantId, Long projectId) {
|
|
|
- if (projectId == null || projectId == 0) {
|
|
|
- return false;
|
|
|
- }
|
|
|
+ @Override
|
|
|
+ public boolean initTree2(String tenantId, Long projectId){
|
|
|
+ if (projectId == null || projectId == 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
- //判断客户级是否存在
|
|
|
- QueryWrapper<ArchiveTreeContract> queryWrapper = new QueryWrapper<>();
|
|
|
- queryWrapper.eq("parent_id", 0);
|
|
|
- queryWrapper.eq("project_id", projectId);
|
|
|
- queryWrapper.eq("status", 1);
|
|
|
- queryWrapper.eq("is_deleted", 0);
|
|
|
- ArchiveTreeContract archiveTreeContract1 = archiveTreeContractMapper.selectOne(queryWrapper);
|
|
|
- if (archiveTreeContract1 != null) {
|
|
|
- throw new ServiceException("根节点已存在,请先删除后再进行初始化");
|
|
|
- }
|
|
|
+ //判断客户级是否存在
|
|
|
+ QueryWrapper<ArchiveTreeContract> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("parent_id", 0);
|
|
|
+ queryWrapper.eq("project_id", projectId);
|
|
|
+ queryWrapper.eq("status", 1);
|
|
|
+ queryWrapper.eq("is_deleted", 0);
|
|
|
+ ArchiveTreeContract archiveTreeContract1 = archiveTreeContractMapper.selectOne(queryWrapper);
|
|
|
+ if (archiveTreeContract1 != null) {
|
|
|
+ throw new ServiceException("根节点已存在,请先删除后再进行初始化");
|
|
|
+ }
|
|
|
|
|
|
- //判断项目级是否存在
|
|
|
- QueryWrapper<ArchiveTree> queryWrapper1 = new QueryWrapper<>();
|
|
|
- queryWrapper1.eq("parent_id", 0);
|
|
|
- queryWrapper1.eq("project_id", projectId);
|
|
|
- queryWrapper1.eq("status", 1);
|
|
|
- queryWrapper1.eq("is_deleted", 0);
|
|
|
- ArchiveTree archiveTree = archiveTreeMapper.selectOne(queryWrapper1);
|
|
|
- if (archiveTree == null) {
|
|
|
- boolean bRet = archiveTreeService.initArchiveProjectTree(projectId);
|
|
|
- if (bRet == false) {
|
|
|
- return bRet;
|
|
|
- }
|
|
|
- }
|
|
|
+ //判断项目级是否存在
|
|
|
+ QueryWrapper<ArchiveTree> queryWrapper1 = new QueryWrapper<>();
|
|
|
+ queryWrapper1.eq("parent_id", 0);
|
|
|
+ queryWrapper1.eq("project_id", projectId);
|
|
|
+ queryWrapper1.eq("status", 1);
|
|
|
+ queryWrapper1.eq("is_deleted", 0);
|
|
|
+ ArchiveTree archiveTree = archiveTreeMapper.selectOne(queryWrapper1);
|
|
|
+ if (archiveTree == null ) {
|
|
|
+ boolean bRet = archiveTreeService.initArchiveProjectTree(projectId);
|
|
|
+ if (bRet == false) {
|
|
|
+ return bRet;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- List<ArchiveTreeVO2> tree = archiveTreeService.tree2(AuthUtil.getTenantId(), projectId, null, null, null, false);
|
|
|
- if (tree == null || tree.size() == 0) {
|
|
|
- return false;
|
|
|
- }
|
|
|
+ List<ArchiveTreeVO2> tree = archiveTreeService.tree2(AuthUtil.getTenantId(), projectId,null, null,null,false);
|
|
|
+ if (tree == null || tree.size() == 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
- ProjectInfo projectInfo = projectInfoService.getOne(projectId);
|
|
|
+ ProjectInfo projectInfo = projectInfoService.getOne(projectId);
|
|
|
|
|
|
- List<ArchiveTreeContract> archiveTreeContracts = new ArrayList<>();
|
|
|
+ List<ArchiveTreeContract> archiveTreeContracts = new ArrayList<>();
|
|
|
|
|
|
|
|
|
- List<ContractInfo> contractInfoVOS = contractInfoService.selectContractInfoPageByPid(projectId.toString());
|
|
|
+ List<ContractInfo> contractInfoVOS = contractInfoService.selectContractInfoPageByPid(projectId.toString());
|
|
|
|
|
|
- arTreeContractInitService.copyTree(tenantId, projectId, projectInfo.getProjectName(), tree.get(0), archiveTreeContracts, contractInfoVOS);
|
|
|
+ arTreeContractInitService.copyTree(tenantId,projectId,projectInfo.getProjectName(),tree.get(0),archiveTreeContracts,contractInfoVOS);
|
|
|
|
|
|
- //是否获取扩展的wbs节点
|
|
|
+ //是否获取扩展的wbs节点
|
|
|
|
|
|
- Long wbsId = null;
|
|
|
- if (projectInfo != null) {
|
|
|
- Long lWbsId = projectInfo.getReferenceWbsTemplateId();
|
|
|
- if (lWbsId != null) {
|
|
|
- wbsId = projectInfo.getReferenceWbsTemplateId();
|
|
|
- }
|
|
|
- }
|
|
|
+ Long wbsId = null;
|
|
|
+ if (projectInfo!= null) {
|
|
|
+ Long lWbsId = projectInfo.getReferenceWbsTemplateId();
|
|
|
+ if (lWbsId != null) {
|
|
|
+ wbsId = projectInfo.getReferenceWbsTemplateId();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- ArchiveTreeContractVO2 newTree = arTreeContractInitService.getTree(archiveTreeContracts);
|
|
|
+ ArchiveTreeContractVO2 newTree = arTreeContractInitService.getTree(archiveTreeContracts);
|
|
|
|
|
|
//todo 等测试OK再打开,wbs contract树有很多数据错乱节点。
|
|
|
// List<ArchiveTreeContract> addNodes = arTreeContractInitService.getContractProcExtNodes(tenantId,projectId,wbsId,newTree);
|
|
|
// archiveTreeContracts.addAll(addNodes);
|
|
|
|
|
|
- //初始化祖先节点和排序
|
|
|
- arTreeContractInitService.InitTreeSort(archiveTreeContracts, tree);
|
|
|
- //todo 同步质检资料动态节点,处理文件提名
|
|
|
-
|
|
|
- //todo 同步立卷规则
|
|
|
-
|
|
|
- //todo 同步划分树节点到案卷列表
|
|
|
- arTreeContractInitService.syncArchiveAutoList(archiveTreeContracts, contractInfoVOS);
|
|
|
-
|
|
|
- this.saveBatch(archiveTreeContracts);
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContractVO> lazyTree(String tenantId, Long parentId, Long projectId) {
|
|
|
- if (AuthUtil.isAdministrator()) {
|
|
|
- tenantId = StringPool.EMPTY;
|
|
|
- }
|
|
|
- return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId, projectId));
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContractVO> tree(String tenantId, Integer disPlayTree, Integer nodeType, Long projectId) {
|
|
|
- return ForestNodeMerger.merge(baseMapper.tree(tenantId, disPlayTree, nodeType, projectId));
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContractVO2> lazyTree2(String tenantId, Long parentId, Long projectId, Long contractId) {
|
|
|
- if (AuthUtil.isAdministrator()) {
|
|
|
- tenantId = StringPool.EMPTY;
|
|
|
- }
|
|
|
- return ForestNodeMergerEx.merge(baseMapper.lazyTree2(tenantId, parentId, projectId, getAuthCode(contractId), getAuthContractId(contractId)));
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContractVO2> tree2(String tenantId, Integer disPlayTree, Integer nodeType, Long projectId, Long contractId) {
|
|
|
-
|
|
|
- return ForestNodeMergerEx.merge(baseMapper.tree2(tenantId, disPlayTree, nodeType, projectId, getAuthCode(contractId), getAuthContractId(contractId)));
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContractVO2> tree2Root(String tenantId, Integer disPlayTree, Integer nodeType, Long projectId, Long contractId) {
|
|
|
-
|
|
|
- return ForestNodeMergerEx.mergeOnlyRoot(baseMapper.tree2(tenantId, disPlayTree, nodeType, projectId, getAuthCode(contractId), getAuthContractId(contractId)));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContract> selectByParentIdOrId(String id) {
|
|
|
- return baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
- .eq(ArchiveTreeContract::getId, id)
|
|
|
- .or()
|
|
|
- .eq(ArchiveTreeContract::getParentId, id)
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean submit(ArchiveTreeContractDTO archiveTreeContractDTO) {
|
|
|
- if (Func.isEmpty(archiveTreeContractDTO.getParentId())) {
|
|
|
- archiveTreeContractDTO.setTenantId(AuthUtil.getTenantId());
|
|
|
- archiveTreeContractDTO.setParentId(BladeConstant.TOP_PARENT_ID);
|
|
|
- archiveTreeContractDTO.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
|
|
|
- }
|
|
|
- if (archiveTreeContractDTO.getParentId() > 0) {
|
|
|
- ArchiveTreeContract parent = getById(archiveTreeContractDTO.getParentId());
|
|
|
- if (Func.toLong(archiveTreeContractDTO.getParentId()) == Func.toLong(archiveTreeContractDTO.getId())) {
|
|
|
- throw new ServiceException("父节点不可选择自身!");
|
|
|
- }
|
|
|
- archiveTreeContractDTO.setTenantId(parent.getTenantId());
|
|
|
- String ancestors = parent.getAncestors() + StringPool.COMMA + archiveTreeContractDTO.getParentId();
|
|
|
- archiveTreeContractDTO.setAncestors(ancestors);
|
|
|
- archiveTreeContractDTO.setTreeSort(parent.getTreeSort());
|
|
|
- archiveTreeContractDTO.setContractId(parent.getContractId());
|
|
|
- archiveTreeContractDTO.setTreeCode(parent.getTreeCode());
|
|
|
-
|
|
|
- archiveTreeContractDTO.setArchiveAutoNodeId(parent.getArchiveAutoNodeId());
|
|
|
- archiveTreeContractDTO.setArchiveAutoType(parent.getArchiveAutoType());
|
|
|
- archiveTreeContractDTO.setArchiveAutoGroupId(parent.getArchiveAutoGroupId());
|
|
|
- archiveTreeContractDTO.setArchiveAutoGroupSelect(0);
|
|
|
- }
|
|
|
-
|
|
|
- archiveTreeContractDTO.setIsDeleted(BladeConstant.DB_NOT_DELETED);
|
|
|
- archiveTreeContractDTO.setFullName(archiveTreeContractDTO.getNodeName());
|
|
|
- if (archiveTreeContractDTO.getNodeType() == 1) {
|
|
|
- archiveTreeContractDTO.setIsStorageNode(1);
|
|
|
- }
|
|
|
- if (archiveTreeContractDTO.getId() == null) {
|
|
|
- List<ArchiveTreeContract> trees = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
- .eq(ArchiveTreeContract::getParentId, archiveTreeContractDTO.getParentId())
|
|
|
- );
|
|
|
-
|
|
|
- List<ArchiveTreeContract> collect = trees.stream().filter(f -> {
|
|
|
- if (f.getSort() == null) {
|
|
|
- f.setSort(0);
|
|
|
- }
|
|
|
- return true;
|
|
|
- }).collect(Collectors.toList());
|
|
|
- Optional<ArchiveTreeContract> max = collect.stream().max(Comparator.comparingInt(ArchiveTreeContract::getSort));
|
|
|
- Integer sort = 0;
|
|
|
- if (max.isPresent()) {
|
|
|
- sort = max.get().getSort();
|
|
|
- }
|
|
|
- archiveTreeContractDTO.setSort(sort + 1);
|
|
|
- String treeSort = archiveTreeContractDTO.getTreeSort();
|
|
|
- if (StringUtils.isNotEmpty(treeSort)) {
|
|
|
- treeSort = treeSort + 100 + archiveTreeContractDTO.getSort();
|
|
|
- archiveTreeContractDTO.setTreeSort(treeSort);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return save(archiveTreeContractDTO);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContract> getSameGradeNode(String id) {
|
|
|
- ArchiveTreeContract archiveTree = baseMapper.selectById(id);
|
|
|
- return baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
- .eq(ArchiveTreeContract::getParentId, archiveTree.getParentId())
|
|
|
- .orderByAsc(ArchiveTreeContract::getSort));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean submitArchiveTreeSort(List<ArchiveTreeContractDTO> listSort) {
|
|
|
- int sortNumber = 1;
|
|
|
- List<ArchiveTreeContract> changeList = new ArrayList<>();
|
|
|
-
|
|
|
-
|
|
|
- ArchiveTreeContract parent = null;
|
|
|
- for (ArchiveTreeContractDTO archiveTreeSortDTO : listSort) {
|
|
|
- if (archiveTreeSortDTO.getSort() != sortNumber) {
|
|
|
- ArchiveTreeContract archiveTreeContract = getById(archiveTreeSortDTO.getId());
|
|
|
- if (archiveTreeContract != null) {
|
|
|
- archiveTreeContract.setSort(sortNumber);
|
|
|
- if (parent == null) {
|
|
|
- parent = getById(archiveTreeSortDTO.getParentId());
|
|
|
- }
|
|
|
- if (parent != null && StringUtils.isNotEmpty(parent.getTreeSort())) {
|
|
|
- Integer sort = archiveTreeContract.getSort() + 100;
|
|
|
- archiveTreeContract.setTreeSort(parent.getTreeSort() + sort);
|
|
|
- }
|
|
|
- changeList.add(archiveTreeContract);
|
|
|
- }
|
|
|
- }
|
|
|
- sortNumber++;
|
|
|
- }
|
|
|
-
|
|
|
- this.saveOrUpdateBatch(changeList);
|
|
|
-
|
|
|
- //有子节点,并且父节点排序号不为空,则排序子节点
|
|
|
- List<Long> changeIds = changeList.stream().map(s -> s.getId()).collect(Collectors.toList());
|
|
|
-
|
|
|
- List<ArchiveTreeContract> childrens = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
- .in(ArchiveTreeContract::getParentId, changeIds)
|
|
|
- .eq(ArchiveTreeContract::getIsDeleted, 0)
|
|
|
- );
|
|
|
- if (StringUtils.isNotEmpty(parent.getTreeSort()) &&
|
|
|
- (childrens == null || childrens.size() == 0)) {
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- this.sortChildren(changeList);
|
|
|
-
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean submitDisplayConfigTree(String ids) {
|
|
|
- if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isEmpty(ids)) {
|
|
|
- baseMapper.updateBatch3();
|
|
|
- return true;
|
|
|
- }
|
|
|
- List<ArchiveTreeContract> archiveTrees = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
- .eq(ArchiveTreeContract::getIsUploadFileDisplayConfigurationTree, 1));
|
|
|
- String[] idList = ids.split(",");
|
|
|
- List<String> idQ = Arrays.asList(idList);
|
|
|
- List<String> idList1 = idQ.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
|
|
|
- List<String> idList2 = new ArrayList<>();
|
|
|
- archiveTrees.forEach(id -> {
|
|
|
- idList2.add(String.valueOf(id.getId()));
|
|
|
- });
|
|
|
- List<String> diffRent = DiffListUtil.getDiffRent(idList1, idList2);
|
|
|
- if (diffRent.size() == 0) {
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- int row;
|
|
|
- if (idList1.size() > idList2.size()) {
|
|
|
- row = baseMapper.updateBatch(diffRent);
|
|
|
- } else {
|
|
|
- row = baseMapper.updateBatch2(diffRent);
|
|
|
- }
|
|
|
- return row > 0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 返回所属的合同段,没有则范围“”
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public String getAuthContractId(Long contractId) {
|
|
|
-
|
|
|
- BladeUser bladeUser = AuthUtil.getUser();
|
|
|
-
|
|
|
- return contractId == null ? "" : contractId.toString();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 施工则返回“C”,监理则返回“S”,其他返回“”
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public String getAuthCode(Long contractId) {
|
|
|
- String code = "";
|
|
|
- BladeUser bladeUser = AuthUtil.getUser();
|
|
|
- if (AuthUtil.isAdministrator() || contractId == null) {
|
|
|
- return code;
|
|
|
- }
|
|
|
-
|
|
|
- //查询合同段信息
|
|
|
- ContractInfo contractInfo = contractInfoService.getById(contractId);
|
|
|
- switch (contractInfo.getContractType()) {
|
|
|
- case 2:
|
|
|
- code = "S";
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- code = "";
|
|
|
- break;
|
|
|
- default:
|
|
|
- code = "C";
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- return code;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContract> getArchiveTreeContractListByIds(String ids) {
|
|
|
- List<String> idsList = Arrays.asList(ids.split(","));
|
|
|
- return baseMapper.getArchiveTreeContractListByIds(idsList);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 同步项目级
|
|
|
- *
|
|
|
- * @param dstNode
|
|
|
- * @return
|
|
|
- */
|
|
|
- public boolean syncProjectTree(ArchiveTreeContract dstNode) {
|
|
|
- if (dstNode.getProjectId() == 0) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- //如果在合同段节点上点同步,它的fromId是没有的,需要取它的上级节点施工或者监理总节点来同步
|
|
|
- ArchiveTree srcNode = null;
|
|
|
- if (dstNode.isContractRoot() && dstNode.getFromId() == null) {
|
|
|
- ArchiveTreeContract parentNode = this.getById(dstNode.getParentId());
|
|
|
- if (parentNode != null) {
|
|
|
- srcNode = archiveTreeService.getById(parentNode.getFromId());
|
|
|
- }
|
|
|
- } else {
|
|
|
- srcNode = archiveTreeService.getById(dstNode.getFromId());
|
|
|
- }
|
|
|
-
|
|
|
- if (srcNode == null) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- //取出
|
|
|
- List<ArchiveTreeVO2> srcTrees = archiveTreeService.tree2(AuthUtil.getTenantId(), dstNode.getProjectId(),
|
|
|
- null, null, null, false);
|
|
|
- ArchiveTreeVO2 srcTree = srcTrees.get(0);
|
|
|
- if (srcTree == null) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- //先更新所有节点属性
|
|
|
+ //初始化祖先节点和排序
|
|
|
+ arTreeContractInitService.InitTreeSort(archiveTreeContracts,tree);
|
|
|
+ //todo 同步质检资料动态节点,处理文件提名
|
|
|
+
|
|
|
+ //todo 同步立卷规则
|
|
|
+
|
|
|
+ //todo 同步划分树节点到案卷列表
|
|
|
+ arTreeContractInitService.syncArchiveAutoList(archiveTreeContracts,contractInfoVOS);
|
|
|
+
|
|
|
+ this.saveBatch(archiveTreeContracts);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContractVO> lazyTree(String tenantId, Long parentId,Long projectId) {
|
|
|
+ if (AuthUtil.isAdministrator()) {
|
|
|
+ tenantId = StringPool.EMPTY;
|
|
|
+ }
|
|
|
+ return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId,projectId));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContractVO> tree(String tenantId, Integer disPlayTree, Integer nodeType, Long projectId) {
|
|
|
+ return ForestNodeMerger.merge(baseMapper.tree(tenantId, disPlayTree, nodeType,projectId));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContractVO2> lazyTree2(String tenantId, Long parentId, Long projectId, Long contractId) {
|
|
|
+ if (AuthUtil.isAdministrator()) {
|
|
|
+ tenantId = StringPool.EMPTY;
|
|
|
+ }
|
|
|
+ return ForestNodeMergerEx.merge(baseMapper.lazyTree2(tenantId, parentId,projectId,getAuthCode(contractId),getAuthContractId(contractId)));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContractVO2> tree2(String tenantId, Integer disPlayTree, Integer nodeType, Long projectId, Long contractId) {
|
|
|
+
|
|
|
+ return ForestNodeMergerEx.merge(baseMapper.tree2(tenantId, disPlayTree, nodeType,projectId,getAuthCode(contractId),getAuthContractId(contractId)));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContractVO2> tree2Root(String tenantId, Integer disPlayTree, Integer nodeType, Long projectId, Long contractId) {
|
|
|
+
|
|
|
+ return ForestNodeMergerEx.mergeOnlyRoot(baseMapper.tree2(tenantId, disPlayTree, nodeType,projectId,getAuthCode(contractId),getAuthContractId(contractId)));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContract> selectByParentIdOrId(String id) {
|
|
|
+ return baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
+ .eq(ArchiveTreeContract::getId, id)
|
|
|
+ .or()
|
|
|
+ .eq(ArchiveTreeContract::getParentId, id)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean submit(ArchiveTreeContractDTO archiveTreeContractDTO) {
|
|
|
+ if (Func.isEmpty(archiveTreeContractDTO.getParentId())) {
|
|
|
+ archiveTreeContractDTO.setTenantId(AuthUtil.getTenantId());
|
|
|
+ archiveTreeContractDTO.setParentId(BladeConstant.TOP_PARENT_ID);
|
|
|
+ archiveTreeContractDTO.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
|
|
|
+ }
|
|
|
+ if (archiveTreeContractDTO.getParentId() > 0) {
|
|
|
+ ArchiveTreeContract parent = getById(archiveTreeContractDTO.getParentId());
|
|
|
+ if (Func.toLong(archiveTreeContractDTO.getParentId()) == Func.toLong(archiveTreeContractDTO.getId())) {
|
|
|
+ throw new ServiceException("父节点不可选择自身!");
|
|
|
+ }
|
|
|
+ archiveTreeContractDTO.setTenantId(parent.getTenantId());
|
|
|
+ String ancestors = parent.getAncestors() + StringPool.COMMA + archiveTreeContractDTO.getParentId();
|
|
|
+ archiveTreeContractDTO.setAncestors(ancestors);
|
|
|
+ archiveTreeContractDTO.setTreeSort(parent.getTreeSort());
|
|
|
+ archiveTreeContractDTO.setContractId(parent.getContractId());
|
|
|
+ archiveTreeContractDTO.setTreeCode(parent.getTreeCode());
|
|
|
+
|
|
|
+ archiveTreeContractDTO.setArchiveAutoNodeId(parent.getArchiveAutoNodeId());
|
|
|
+ archiveTreeContractDTO.setArchiveAutoType(parent.getArchiveAutoType());
|
|
|
+ archiveTreeContractDTO.setArchiveAutoGroupId(parent.getArchiveAutoGroupId());
|
|
|
+ archiveTreeContractDTO.setArchiveAutoGroupSelect(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ archiveTreeContractDTO.setIsDeleted(BladeConstant.DB_NOT_DELETED);
|
|
|
+ archiveTreeContractDTO.setFullName(archiveTreeContractDTO.getNodeName());
|
|
|
+ if (archiveTreeContractDTO.getNodeType() == 1) {
|
|
|
+ archiveTreeContractDTO.setIsStorageNode(1);
|
|
|
+ }
|
|
|
+ if (archiveTreeContractDTO.getId() == null) {
|
|
|
+ List<ArchiveTreeContract> trees = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
+ .eq(ArchiveTreeContract::getParentId, archiveTreeContractDTO.getParentId())
|
|
|
+ );
|
|
|
+
|
|
|
+ List<ArchiveTreeContract> collect = trees.stream().filter(f -> {
|
|
|
+ if (f.getSort() == null) {
|
|
|
+ f.setSort(0);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ Optional<ArchiveTreeContract> max = collect.stream().max(Comparator.comparingInt(ArchiveTreeContract::getSort));
|
|
|
+ Integer sort = 0;
|
|
|
+ if (max.isPresent()) {
|
|
|
+ sort = max.get().getSort();
|
|
|
+ }
|
|
|
+ archiveTreeContractDTO.setSort(sort + 1);
|
|
|
+ String treeSort = archiveTreeContractDTO.getTreeSort();
|
|
|
+ if (StringUtils.isNotEmpty(treeSort)) {
|
|
|
+ treeSort = treeSort + 100 + archiveTreeContractDTO.getSort();
|
|
|
+ archiveTreeContractDTO.setTreeSort(treeSort);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return save(archiveTreeContractDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContract> getSameGradeNode(String id) {
|
|
|
+ ArchiveTreeContract archiveTree = baseMapper.selectById(id);
|
|
|
+ return baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
+ .eq(ArchiveTreeContract::getParentId, archiveTree.getParentId())
|
|
|
+ .orderByAsc(ArchiveTreeContract::getSort));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean submitArchiveTreeSort(List<ArchiveTreeContractDTO> listSort) {
|
|
|
+ int sortNumber = 1;
|
|
|
+ List<ArchiveTreeContract> changeList = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+ ArchiveTreeContract parent = null;
|
|
|
+ for (ArchiveTreeContractDTO archiveTreeSortDTO : listSort) {
|
|
|
+ if (archiveTreeSortDTO.getSort() != sortNumber) {
|
|
|
+ ArchiveTreeContract archiveTreeContract = getById(archiveTreeSortDTO.getId());
|
|
|
+ if (archiveTreeContract!= null ) {
|
|
|
+ archiveTreeContract.setSort(sortNumber);
|
|
|
+ if (parent == null ) {
|
|
|
+ parent = getById(archiveTreeSortDTO.getParentId());
|
|
|
+ }
|
|
|
+ if (parent != null && StringUtils.isNotEmpty(parent.getTreeSort())){
|
|
|
+ Integer sort = archiveTreeContract.getSort() + 100;
|
|
|
+ archiveTreeContract.setTreeSort(parent.getTreeSort() + sort);
|
|
|
+ }
|
|
|
+ changeList.add(archiveTreeContract);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sortNumber++;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.saveOrUpdateBatch(changeList);
|
|
|
+
|
|
|
+ //有子节点,并且父节点排序号不为空,则排序子节点
|
|
|
+ List<Long> changeIds = changeList.stream().map(s->s.getId()).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<ArchiveTreeContract> childrens = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
+ .in(ArchiveTreeContract::getParentId, changeIds)
|
|
|
+ .eq(ArchiveTreeContract::getIsDeleted, 0)
|
|
|
+ );
|
|
|
+ if (StringUtils.isNotEmpty(parent.getTreeSort()) &&
|
|
|
+ (childrens == null || childrens.size() == 0)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.sortChildren(changeList);
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean submitDisplayConfigTree(String ids) {
|
|
|
+ if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isEmpty(ids)) {
|
|
|
+ baseMapper.updateBatch3();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ List<ArchiveTreeContract> archiveTrees = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
+ .eq(ArchiveTreeContract::getIsUploadFileDisplayConfigurationTree, 1));
|
|
|
+ String[] idList = ids.split(",");
|
|
|
+ List<String> idQ = Arrays.asList(idList);
|
|
|
+ List<String> idList1 = idQ.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
|
|
|
+ List<String> idList2 = new ArrayList<>();
|
|
|
+ archiveTrees.forEach(id -> {
|
|
|
+ idList2.add(String.valueOf(id.getId()));
|
|
|
+ });
|
|
|
+ List<String> diffRent = DiffListUtil.getDiffRent(idList1, idList2);
|
|
|
+ if (diffRent.size() == 0) {
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ int row;
|
|
|
+ if (idList1.size() > idList2.size()) {
|
|
|
+ row = baseMapper.updateBatch(diffRent);
|
|
|
+ } else {
|
|
|
+ row = baseMapper.updateBatch2(diffRent);
|
|
|
+ }
|
|
|
+ return row > 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回所属的合同段,没有则范围“”
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getAuthContractId(Long contractId) {
|
|
|
+
|
|
|
+ BladeUser bladeUser = AuthUtil.getUser();
|
|
|
+
|
|
|
+ return contractId == null?"":contractId.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 施工则返回“C”,监理则返回“S”,其他返回“”
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getAuthCode(Long contractId) {
|
|
|
+ String code ="";
|
|
|
+ BladeUser bladeUser = AuthUtil.getUser();
|
|
|
+ if (AuthUtil.isAdministrator() || contractId == null) {
|
|
|
+ return code;
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询合同段信息
|
|
|
+ ContractInfo contractInfo = contractInfoService.getById(contractId);
|
|
|
+ switch (contractInfo.getContractType()){
|
|
|
+ case 2:
|
|
|
+ code = "S";
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ code = "";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ code = "C";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return code;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContract> getArchiveTreeContractListByIds(String ids) {
|
|
|
+ List<String> idsList = Arrays.asList(ids.split(","));
|
|
|
+ return baseMapper.getArchiveTreeContractListByIds(idsList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 同步项目级
|
|
|
+ * @param dstNode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public boolean syncProjectTree(ArchiveTreeContract dstNode) {
|
|
|
+ if ( dstNode.getProjectId() == 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果在合同段节点上点同步,它的fromId是没有的,需要取它的上级节点施工或者监理总节点来同步
|
|
|
+ ArchiveTree srcNode = null;
|
|
|
+ if (dstNode.isContractRoot() && dstNode.getFromId() == null ) {
|
|
|
+ ArchiveTreeContract parentNode = this.getById(dstNode.getParentId());
|
|
|
+ if (parentNode!= null) {
|
|
|
+ srcNode = archiveTreeService.getById(parentNode.getFromId());
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ srcNode = archiveTreeService.getById(dstNode.getFromId());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (srcNode == null ) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //取出
|
|
|
+ List<ArchiveTreeVO2> srcTrees = archiveTreeService.tree2(AuthUtil.getTenantId(), dstNode.getProjectId(),
|
|
|
+ null, null,null,false);
|
|
|
+ ArchiveTreeVO2 srcTree = srcTrees.get(0);
|
|
|
+ if (srcTree == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ //先更新所有节点属性
|
|
|
// ArchiveTreeVO2 subTree = ForestNodeMergerEx.getSubTree(srcTree,srcNode.getId());
|
|
|
// UpdateByArchiveTree(dstNode.getProjectId(),subTree);
|
|
|
|
|
|
|
|
|
- List<ArchiveTreeContractVO2> dstTrees = this.tree2Root(AuthUtil.getTenantId(), null, null, dstNode.getProjectId(), null);
|
|
|
- List<ArchiveTreeContract> saveList = new ArrayList<>();
|
|
|
- List<ArchiveTreeContract> upList = new ArrayList<>();
|
|
|
- List<ArchiveTreeContract> saveContractList = new ArrayList<>();
|
|
|
- ArchiveTreeContractVO2 dstTree = dstTrees.get(0);
|
|
|
- if (dstTree == null) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- List<ContractInfo> contractInfos = contractInfoService.selectContractInfoPageByPid(dstNode.getProjectId().toString());
|
|
|
-
|
|
|
- boolean bHasContract = true;
|
|
|
- if (contractInfos == null || contractInfos.size() == 0) {
|
|
|
- bHasContract = false;
|
|
|
- }
|
|
|
-
|
|
|
- //看看有没有合同段要复制
|
|
|
- if (bHasContract) {
|
|
|
- addNewContract(contractInfos, srcTree, dstTree, dstNode, saveList);
|
|
|
- }
|
|
|
-
|
|
|
- if (dstNode.getId().equals(dstTree.getId())) {
|
|
|
- addNewRootChild(contractInfos, srcTree, dstTree, dstNode, saveList);
|
|
|
- }
|
|
|
-
|
|
|
- //如果有新的合同段,合并新增代码到
|
|
|
- if (saveList.size() > 0) {
|
|
|
- archiveTreeContractSync.mergerToTree(dstTree, saveList, null);
|
|
|
- }
|
|
|
-
|
|
|
- //没有合同段直接同步
|
|
|
- if (!bHasContract) {
|
|
|
- saveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
|
|
|
- srcTrees.get(0), dstNode.getId(), dstTrees.get(0));
|
|
|
- } else {
|
|
|
-
|
|
|
- //同步业主,监理各个合同段,施工各个合同段
|
|
|
- syncAllContracts(srcTree, dstTree, srcNode, dstNode, saveContractList);
|
|
|
- }
|
|
|
-
|
|
|
- //更新排序,把排序,自动组卷这种变化,刷新到新增节点和修改节点上
|
|
|
- //archiveTreeContractSync.InitTreeSort(dstTree,saveContractList,upList,srcTrees);
|
|
|
- saveList.addAll(saveContractList);
|
|
|
- archiveTreeContractSync.InitTreeSort(dstTree, saveContractList, upList, srcTrees, saveList);
|
|
|
-
|
|
|
- //同步生成案卷
|
|
|
- arTreeContractInitService.syncArchiveAutoList(saveList, contractInfos);
|
|
|
-
|
|
|
- this.saveBatch(saveList);
|
|
|
- this.updateBatchById(upList);
|
|
|
-
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 新增合同段时,要复制一份合同段的分支出来
|
|
|
- *
|
|
|
- * @param contractInfos
|
|
|
- * @param srcTree
|
|
|
- * @param dstTree
|
|
|
- * @param dstNode
|
|
|
- * @param saveList
|
|
|
- */
|
|
|
- void addNewContract(List<ContractInfo> contractInfos, ArchiveTreeVO2 srcTree, ArchiveTreeContractVO2 dstTree,
|
|
|
- ArchiveTreeContract dstNode, List<ArchiveTreeContract> saveList) {
|
|
|
- Map<Long, ContractInfo> contractMap = new LinkedHashMap<>();
|
|
|
-
|
|
|
- for (ContractInfo contractInfo : contractInfos) {
|
|
|
- contractInfo.setStatus(0);
|
|
|
- contractMap.put(contractInfo.getId(), contractInfo);
|
|
|
- }
|
|
|
-
|
|
|
- dstTree.setValue(1L);
|
|
|
- for (ArchiveTreeContractVO2 ar : dstTree.getChildren()) {
|
|
|
- //施工和监理
|
|
|
- ar.setValue(1L);
|
|
|
- if (ar.getTreeCode() != null && (
|
|
|
- ar.getTreeCode().equals("C") || ar.getTreeCode().equals("S"))) {
|
|
|
-
|
|
|
- if (ar.getChildren() == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- //处理合同节点
|
|
|
- int contractNum = 0;
|
|
|
- for (ArchiveTreeContractVO2 contractNode : ar.getChildren()) {
|
|
|
- if (contractNode.isContractRoot()) {
|
|
|
- //需要删除
|
|
|
- contractNum++;
|
|
|
-
|
|
|
- contractNode.setValue(1L);
|
|
|
-
|
|
|
- //设置哪个合同已经设置了。
|
|
|
- ContractInfo c = contractMap.get(Long.parseLong(contractNode.getTreeCode()));
|
|
|
- if (c != null) {
|
|
|
- c.setStatus(1);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (contractNum == 0) {
|
|
|
- //删除树的子节点
|
|
|
- deleteTreeChildren(ar);
|
|
|
- }
|
|
|
-
|
|
|
- for (Map.Entry<Long, ContractInfo> entry : contractMap.entrySet()) {
|
|
|
- ContractInfo contractInfo = entry.getValue();
|
|
|
-
|
|
|
- if (contractInfo.getStatus() == 0) {
|
|
|
- if (ar.getTreeCode().equals("C") && contractInfo.getContractType() == 1) {
|
|
|
- //复制施工
|
|
|
- List<ArchiveTreeContract> tmpSaveList =
|
|
|
- archiveTreeContractSync.getContractSaveList(srcTree, ar, contractInfo, dstNode);
|
|
|
- saveList.addAll(tmpSaveList);
|
|
|
- }
|
|
|
- if (ar.getTreeCode().equals("S") && contractInfo.getContractType() == 2) {
|
|
|
- //复制监理
|
|
|
- List<ArchiveTreeContract> tmpSaveList =
|
|
|
- archiveTreeContractSync.getContractSaveList(srcTree, ar, contractInfo, dstNode);
|
|
|
- saveList.addAll(tmpSaveList);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 同步业主,监理各合同段,施工合同段,新增的普通节点,同步wbs节点
|
|
|
- *
|
|
|
- * @param srcTree
|
|
|
- * @param dstTree
|
|
|
- * @param srcNode
|
|
|
- * @param dstNode
|
|
|
- * @param saveList
|
|
|
- */
|
|
|
- void syncAllContracts(ArchiveTreeVO2 srcTree, ArchiveTreeContractVO2 dstTree, ArchiveTree srcNode,
|
|
|
- ArchiveTreeContract dstNode, List<ArchiveTreeContract> saveList) {
|
|
|
-
|
|
|
- //获取范围看是在业主,监理各合同段,施工合同段,
|
|
|
- ArchiveTreeContractVO2 dstScopeTree = ForestNodeMergerEx.getSubTreeByValue(dstTree, dstNode.getId(), 1L);
|
|
|
- for (ArchiveTreeContractVO2 ar : dstTree.getChildren()) {
|
|
|
- if (StringUtils.isEmpty(ar.getTreeCode())) {
|
|
|
- //同步
|
|
|
- if (dstNode.getParentId() == 0 || dstScopeTree.getId().equals(ar.getId())) {
|
|
|
- //同步
|
|
|
- List<ArchiveTreeContract> tmpSaveList = null;
|
|
|
- if (dstNode.getParentId() == 0) {
|
|
|
- ArchiveTreeVO2 tmpSubTree = ForestNodeMergerEx.getSubTree(srcTree, ar.getFromId());
|
|
|
- if (tmpSubTree == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(tmpSubTree.getId(),
|
|
|
- tmpSubTree, ar.getId(), ar);
|
|
|
- } else {
|
|
|
- tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
|
|
|
- srcTree, dstNode.getId(), ar);
|
|
|
- }
|
|
|
-
|
|
|
- saveList.addAll(tmpSaveList);
|
|
|
- }
|
|
|
- } else {
|
|
|
- for (ArchiveTreeContractVO2 contractNode : ar.getChildren()) {
|
|
|
-
|
|
|
- List<ArchiveTreeContract> tmpSaveList = null;
|
|
|
- if (dstNode.getParentId() == 0 || dstScopeTree.getId().equals(contractNode.getId())
|
|
|
- || dstScopeTree.getId().equals(contractNode.getParentId())) {
|
|
|
-
|
|
|
- ArchiveTreeVO2 tmpSubTree = srcTree;
|
|
|
- Long dstNodeId = dstNode.getId();
|
|
|
- if (dstNode.getParentId() == 0 || dstScopeTree.getId().equals(contractNode.getParentId())) {
|
|
|
- tmpSubTree = ForestNodeMergerEx.getSubTree(srcTree, ar.getFromId());
|
|
|
- dstNodeId = contractNode.getId();
|
|
|
- }
|
|
|
- if (tmpSubTree == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- //getNormalSaveList 接口除了同步新增节点,还会同步已有节点的属性。
|
|
|
- //因为关联工序的位置是固定的,先不考虑新增一个关联工序节点,且一次同步完成情况
|
|
|
- tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
|
|
|
- tmpSubTree, dstNodeId, contractNode);
|
|
|
- saveList.addAll(tmpSaveList);
|
|
|
-
|
|
|
- //获取工序节点
|
|
|
- List<ArchiveTreeContract> extSaveList = archiveTreeContractSync.getExtSaveList(dstNodeId,
|
|
|
- contractNode, dstNode.getProjectId());
|
|
|
- saveList.addAll(extSaveList);
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除树的所有子节点
|
|
|
- *
|
|
|
- * @param tree
|
|
|
- * @return
|
|
|
- */
|
|
|
- public boolean deleteTreeChildren(ArchiveTreeContractVO2 tree) {
|
|
|
-
|
|
|
- List<Long> ids = ForestNodeMergerEx.getChildrenIds(tree);
|
|
|
-
|
|
|
- return this.deleteLogic(ids);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 同步修改
|
|
|
- *
|
|
|
- * @param archiveTree
|
|
|
- * @return
|
|
|
- */
|
|
|
- public boolean UpdateByArchiveTree(ArchiveTree archiveTree) {
|
|
|
-
|
|
|
- List<ArchiveTreeContract> archiveTreeContracts = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
- .eq(ArchiveTreeContract::getFromId, archiveTree.getId())
|
|
|
- .eq(ArchiveTreeContract::getProjectId, archiveTree.getProjectId())
|
|
|
- .eq(ArchiveTreeContract::getIsDeleted, 0)
|
|
|
- );
|
|
|
-
|
|
|
- for (ArchiveTreeContract archiveTreeContract : archiveTreeContracts) {
|
|
|
- archiveTreeContract.sync(archiveTree);
|
|
|
- }
|
|
|
-
|
|
|
- this.saveOrUpdateBatch(archiveTreeContracts);
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除子树
|
|
|
- *
|
|
|
- * @param id
|
|
|
- * @return
|
|
|
- */
|
|
|
- public boolean deleteTree(Long id) {
|
|
|
- ArchiveTreeContract dstNode = this.getById(id);
|
|
|
- if (dstNode == null) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- List<ArchiveTreeContractVO2> dstTrees = this.tree2Root(AuthUtil.getTenantId(), null, null, dstNode.getProjectId(), null);
|
|
|
- if (dstTrees == null || dstTrees.size() == 0) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- ArchiveTreeContractVO2 subTree = ForestNodeMergerEx.getSubTree(dstTrees.get(0), id);
|
|
|
-
|
|
|
- List<Long> ids = ForestNodeMergerEx.getChildrenIds(subTree);
|
|
|
-
|
|
|
- ids.add(id);
|
|
|
-
|
|
|
- return this.deleteLogic(ids);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量更新
|
|
|
- *
|
|
|
- * @param projectId
|
|
|
- * @param srcTree
|
|
|
- * @return
|
|
|
- */
|
|
|
- public boolean UpdateByArchiveTree(Long projectId, ArchiveTreeVO2 srcTree) {
|
|
|
-
|
|
|
- List<Long> ids = new ArrayList<>();
|
|
|
- List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
|
|
|
-
|
|
|
- ForestNodeMergerEx.getTreeList(srcTree, archiveTreeVO2List);
|
|
|
- ids = ForestNodeMergerEx.getChildrenIds(srcTree);
|
|
|
-
|
|
|
- Map<Long, ArchiveTreeVO2> map = new LinkedHashMap<>();
|
|
|
- for (ArchiveTreeVO2 ar : archiveTreeVO2List) {
|
|
|
- map.put(ar.getId(), ar);
|
|
|
- }
|
|
|
-
|
|
|
- List<ArchiveTreeContract> archiveTreeContracts = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
- .in(ArchiveTreeContract::getFromId, ids)
|
|
|
- .eq(ArchiveTreeContract::getProjectId, projectId)
|
|
|
- .eq(ArchiveTreeContract::getIsDeleted, 0)
|
|
|
- );
|
|
|
-
|
|
|
- List<ArchiveTreeContract> upList = new ArrayList<>();
|
|
|
- for (ArchiveTreeContract archiveTreeContract : archiveTreeContracts) {
|
|
|
- ArchiveTreeVO2 archiveTreeVO2 = map.get(archiveTreeContract.getFromId());
|
|
|
- if (archiveTreeVO2 != null) {
|
|
|
- archiveTreeContract.sync(archiveTreeVO2);
|
|
|
- upList.add(archiveTreeContract);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- this.saveOrUpdateBatch(upList);
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 递归设置
|
|
|
- *
|
|
|
- * @param archiveTreeContracts
|
|
|
- */
|
|
|
- void sortChildren(List<ArchiveTreeContract> archiveTreeContracts) {
|
|
|
-
|
|
|
- if (archiveTreeContracts == null || archiveTreeContracts.size() == 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- List<ArchiveTreeContractVO2> trees = this.tree2Root(AuthUtil.getTenantId(), null, null, archiveTreeContracts.get(0).getProjectId(), null);
|
|
|
- if (trees.size() == 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
- ArchiveTreeContractVO2 tree = trees.get(0);
|
|
|
-
|
|
|
- ForestNodeMergerEx.InitTreeSort(tree, "", 0);
|
|
|
-
|
|
|
- List<ArchiveTreeContractVO2> changeList = new ArrayList<>();
|
|
|
-
|
|
|
- for (ArchiveTreeContract ar : archiveTreeContracts) {
|
|
|
- ArchiveTreeContractVO2 subTree = ForestNodeMergerEx.getSubTree(tree, ar.getId());
|
|
|
- List<ArchiveTreeContractVO2> tmpList = new ArrayList<>();
|
|
|
- ForestNodeMergerEx.getTreeList(subTree, tmpList);
|
|
|
- changeList.addAll(tmpList);
|
|
|
- }
|
|
|
-
|
|
|
- Map<Long, ArchiveTreeContractVO2> map = new HashMap<>();
|
|
|
- List<Long> ids = new ArrayList<>();
|
|
|
- for (ArchiveTreeContractVO2 ar : changeList) {
|
|
|
- ids.add(ar.getId());
|
|
|
- map.put(ar.getId(), ar);
|
|
|
- }
|
|
|
-
|
|
|
- List<ArchiveTreeContract> changeArchiveList = baseMapper.selectBatchIds(ids);
|
|
|
- for (ArchiveTreeContract changeNode : changeArchiveList) {
|
|
|
- ArchiveTreeContractVO2 ar = map.get(changeNode.getId());
|
|
|
- if (ar != null) {
|
|
|
- changeNode.setTreeSort(ar.getTreeSort());
|
|
|
- }
|
|
|
- }
|
|
|
- this.saveOrUpdateBatch(changeArchiveList);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 补充默认的组卷信息
|
|
|
- *
|
|
|
- * @param trees
|
|
|
- * @param projectId
|
|
|
- */
|
|
|
- public void fillDefaultArchiveAutoInfo(List<ArchiveTreeContractVO2> trees, Long projectId) {
|
|
|
-
|
|
|
- List<ContractInfo> contractInfos = contractInfoService.selectContractInfoPageByPid(projectId.toString());
|
|
|
- if (contractInfos == null || contractInfos.size() == 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
- Map<Long, ContractInfo> contractMap = new LinkedHashMap<>();
|
|
|
- for (ContractInfo contractInfo : contractInfos) {
|
|
|
- if (contractInfo.getContractType() == 3) {
|
|
|
- contractMap.put(0L, contractInfo);
|
|
|
- }
|
|
|
- contractMap.put(contractInfo.getId(), contractInfo);
|
|
|
- }
|
|
|
-
|
|
|
- for (ArchiveTreeContractVO2 child : trees) {
|
|
|
- Long contractId = 0L;
|
|
|
- if (child.getContractId() != null) {
|
|
|
- contractId = child.getContractId();
|
|
|
- }
|
|
|
- ContractInfo contractInfo = contractMap.get(contractId);
|
|
|
- if (contractInfo != null) {
|
|
|
- fillDefaultArchiveAutoInfo(child, contractInfo);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * @param node
|
|
|
- * @param contractInfo
|
|
|
- */
|
|
|
- public void fillDefaultArchiveAutoInfo(ArchiveTreeContractVO2 node, ContractInfo contractInfo) {
|
|
|
- if (StringUtils.isEmpty(node.getFileNumberPrefix())) {
|
|
|
- node.setFileNumberPrefix(contractInfo.getPrefix());
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(node.getStorageTime()) && contractInfo.getStoragePeriod() != null) {
|
|
|
- node.setStorageTime(contractInfo.getStoragePeriod().toString());
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(node.getRollor())) {
|
|
|
- node.setRollor(contractInfo.getFiler());
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(node.getReviewer())) {
|
|
|
- node.setReviewer(contractInfo.getReviewer());
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(node.getSpecification())) {
|
|
|
- //默认30mm ,对应枚举 1
|
|
|
- node.setSpecification("1");
|
|
|
- }
|
|
|
- //没有默认
|
|
|
- if (StringUtils.isEmpty(node.getArchiveNameSuffix())) {
|
|
|
- //node.setArchiveNameSuffix(contractInfo.getPrefix());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 填充基本信息
|
|
|
- *
|
|
|
- * @param archiveTreeContracts
|
|
|
- */
|
|
|
- public void fillDefaultArchiveAutoInfo(List<ArchiveTreeContract> archiveTreeContracts) {
|
|
|
- Long projectId = archiveTreeContracts.get(0).getProjectId();
|
|
|
- List<ContractInfo> contractInfos = contractInfoService.selectContractInfoPageByPid(projectId.toString());
|
|
|
- if (contractInfos == null || contractInfos.size() == 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
- Map<Long, ContractInfo> contractMap = new LinkedHashMap<>();
|
|
|
- for (ContractInfo contractInfo : contractInfos) {
|
|
|
- if (contractInfo.getContractType() == 3) {
|
|
|
- contractMap.put(0L, contractInfo);
|
|
|
- }
|
|
|
- contractMap.put(contractInfo.getId(), contractInfo);
|
|
|
- }
|
|
|
-
|
|
|
- for (ArchiveTreeContract node : archiveTreeContracts) {
|
|
|
- Long contractId = 0L;
|
|
|
- if (node.getContractId() != null) {
|
|
|
- contractId = node.getContractId();
|
|
|
- }
|
|
|
- ContractInfo contractInfo = contractMap.get(contractId);
|
|
|
- if (contractInfo != null) {
|
|
|
- if (StringUtils.isEmpty(node.getFileNumberPrefix())) {
|
|
|
- node.setFileNumberPrefix(contractInfo.getPrefix());
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(node.getStorageTime()) && contractInfo.getStoragePeriod() != null) {
|
|
|
- node.setStorageTime(contractInfo.getStoragePeriod().toString());
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(node.getRollor())) {
|
|
|
- node.setRollor(contractInfo.getFiler());
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(node.getReviewer())) {
|
|
|
- node.setReviewer(contractInfo.getReviewer());
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(node.getSpecification())) {
|
|
|
- //默认30mm ,对应枚举 1
|
|
|
- node.setSpecification("30");
|
|
|
- }
|
|
|
- //没有默认
|
|
|
- if (StringUtils.isEmpty(node.getArchiveNameSuffix())) {
|
|
|
- //node.setArchiveNameSuffix(contractInfo.getPrefix());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<Map<String, Object>> getArchiveTreeAndArchiveCount(Long projectId, Long nodeId) {
|
|
|
- return baseMapper.getArchiveTreeAndArchiveCount(projectId, nodeId);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 档案查询,目录树,根据类型获取目录
|
|
|
- *
|
|
|
- * @param projectId
|
|
|
- * @param contractId
|
|
|
- * @param nodeType
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContractVO3> getArchiveTreeByNodeType(Long projectId, Long contractId, Integer nodeType) {
|
|
|
- //获取合同段类型
|
|
|
- ContractInfo contractInfo = contractInfoService.selectById(contractId + "");
|
|
|
- Integer contractType = contractInfo.getContractType();
|
|
|
- //根据用户在当前合同段的权限,判断返回
|
|
|
- BladeUser user = AuthUtil.getUser();
|
|
|
- String name = baseMapper.getUserRoleName(projectId, contractId, user.getUserId());
|
|
|
- if (name.contains("超级管理员") || contractType == 3) {
|
|
|
- //
|
|
|
- if (nodeType == 1) {
|
|
|
- return baseMapper.getArchiveTreeByNodeType2(projectId);
|
|
|
- } else if (nodeType == 2) {
|
|
|
- return baseMapper.getArchiveTreeByNodeType(projectId, null, "C");
|
|
|
- } else if (nodeType == 3) {
|
|
|
- return baseMapper.getArchiveTreeByNodeType(projectId, null, "S");
|
|
|
- } else {
|
|
|
- return null;
|
|
|
- }
|
|
|
- } else {
|
|
|
- //只返回当前合同段
|
|
|
- if (contractType == 1 && nodeType == 2) {
|
|
|
- return baseMapper.getArchiveTreeByNodeType(projectId, contractId, "C");
|
|
|
- } else if (contractType == 2 && nodeType == 3) {
|
|
|
- return baseMapper.getArchiveTreeByNodeType(projectId, contractId, "S");
|
|
|
- } else {
|
|
|
- return null;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<ArchiveTreeContractVO3> getChildrenNodeByNodeId(Long nodeId) {
|
|
|
- return baseMapper.getChildrenNodeByNodeId(nodeId);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 新增合同段时,要复制一份合同段的分支出来
|
|
|
- *
|
|
|
- * @param contractInfos
|
|
|
- * @param srcTree
|
|
|
- * @param dstTree
|
|
|
- * @param dstNode
|
|
|
- * @param saveList
|
|
|
- */
|
|
|
- void addNewRootChild(List<ContractInfo> contractInfos, ArchiveTreeVO2 srcTree, ArchiveTreeContractVO2 dstTree,
|
|
|
- ArchiveTreeContract dstNode, List<ArchiveTreeContract> saveList) {
|
|
|
-
|
|
|
- //
|
|
|
- List<ArchiveTreeVO2> srcChilds = srcTree.getChildren();
|
|
|
- List<ArchiveTreeContractVO2> dstChilds = dstTree.getChildren();
|
|
|
- Map<Long, Long> dstMap = new HashMap<>();
|
|
|
-
|
|
|
- for (ArchiveTreeContractVO2 dst : dstChilds) {
|
|
|
- if (dst.getFromId() != null) {
|
|
|
- dstMap.put(dst.getFromId(), dst.getId());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- for (ArchiveTreeVO2 src : srcChilds) {
|
|
|
- if (dstMap.get(src.getId()) == null) {
|
|
|
- List<ArchiveTreeContract> tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(src.getId(), src, dstNode.getId(), dstTree);
|
|
|
- saveList.addAll(tmpSaveList);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ List<ArchiveTreeContractVO2> dstTrees = this.tree2Root(AuthUtil.getTenantId(),null,null,dstNode.getProjectId(),null);
|
|
|
+ List<ArchiveTreeContract> saveList = new ArrayList<>();
|
|
|
+ List<ArchiveTreeContract> upList = new ArrayList<>();
|
|
|
+ List<ArchiveTreeContract> saveContractList = new ArrayList<>();
|
|
|
+ ArchiveTreeContractVO2 dstTree = dstTrees.get(0);
|
|
|
+ if (dstTree == null ) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ContractInfo> contractInfos = contractInfoService.selectContractInfoPageByPid(dstNode.getProjectId().toString());
|
|
|
+
|
|
|
+ boolean bHasContract = true;
|
|
|
+ if (contractInfos == null || contractInfos.size() == 0) {
|
|
|
+ bHasContract = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //看看有没有合同段要复制
|
|
|
+ if (bHasContract) {
|
|
|
+ addNewContract(contractInfos,srcTree,dstTree,dstNode,saveList);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dstNode.getId().equals(dstTree.getId())) {
|
|
|
+ addNewRootChild(contractInfos,srcTree,dstTree,dstNode,saveList);
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果有新的合同段,合并新增代码到
|
|
|
+ if (saveList.size() > 0) {
|
|
|
+ archiveTreeContractSync.mergerToTree(dstTree,saveList,null);
|
|
|
+ }
|
|
|
+
|
|
|
+ //没有合同段直接同步
|
|
|
+ if (!bHasContract) {
|
|
|
+ saveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
|
|
|
+ srcTrees.get(0),dstNode.getId(),dstTrees.get(0));
|
|
|
+ }else {
|
|
|
+
|
|
|
+ //同步业主,监理各个合同段,施工各个合同段
|
|
|
+ syncAllContracts(srcTree,dstTree,srcNode,dstNode,saveContractList);
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新排序,把排序,自动组卷这种变化,刷新到新增节点和修改节点上
|
|
|
+ //archiveTreeContractSync.InitTreeSort(dstTree,saveContractList,upList,srcTrees);
|
|
|
+ saveList.addAll(saveContractList);
|
|
|
+ archiveTreeContractSync.InitTreeSort(dstTree,saveContractList,upList,srcTrees,saveList);
|
|
|
+
|
|
|
+ //同步生成案卷
|
|
|
+ arTreeContractInitService.syncArchiveAutoList(saveList,contractInfos);
|
|
|
+
|
|
|
+ this.saveBatch(saveList);
|
|
|
+ this.updateBatchById(upList);
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增合同段时,要复制一份合同段的分支出来
|
|
|
+ * @param contractInfos
|
|
|
+ * @param srcTree
|
|
|
+ * @param dstTree
|
|
|
+ * @param dstNode
|
|
|
+ * @param saveList
|
|
|
+ */
|
|
|
+ void addNewContract(List<ContractInfo> contractInfos,ArchiveTreeVO2 srcTree,ArchiveTreeContractVO2 dstTree,
|
|
|
+ ArchiveTreeContract dstNode,List<ArchiveTreeContract> saveList){
|
|
|
+ Map<Long,ContractInfo> contractMap = new LinkedHashMap<>();
|
|
|
+
|
|
|
+ for (ContractInfo contractInfo: contractInfos) {
|
|
|
+ contractInfo.setStatus(0);
|
|
|
+ contractMap.put(contractInfo.getId(),contractInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ dstTree.setValue(1L);
|
|
|
+ for (ArchiveTreeContractVO2 ar: dstTree.getChildren()) {
|
|
|
+ //施工和监理
|
|
|
+ ar.setValue(1L);
|
|
|
+ if (ar.getTreeCode()!= null && (
|
|
|
+ ar.getTreeCode().equals("C") || ar.getTreeCode().equals("S"))) {
|
|
|
+
|
|
|
+ if (ar.getChildren() == null ) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ //处理合同节点
|
|
|
+ int contractNum = 0;
|
|
|
+ for (ArchiveTreeContractVO2 contractNode : ar.getChildren()) {
|
|
|
+ if (contractNode.isContractRoot()){
|
|
|
+ //需要删除
|
|
|
+ contractNum++;
|
|
|
+
|
|
|
+ contractNode.setValue(1L);
|
|
|
+
|
|
|
+ //设置哪个合同已经设置了。
|
|
|
+ ContractInfo c = contractMap.get(Long.parseLong(contractNode.getTreeCode()));
|
|
|
+ if (c!= null) {
|
|
|
+ c.setStatus(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (contractNum == 0) {
|
|
|
+ //删除树的子节点
|
|
|
+ deleteTreeChildren(ar);
|
|
|
+ }
|
|
|
+
|
|
|
+ for(Map.Entry<Long,ContractInfo> entry : contractMap.entrySet()){
|
|
|
+ ContractInfo contractInfo = entry.getValue();
|
|
|
+
|
|
|
+ if (contractInfo.getStatus() == 0) {
|
|
|
+ if (ar.getTreeCode().equals("C") && contractInfo.getContractType() == 1) {
|
|
|
+ //复制施工
|
|
|
+ List<ArchiveTreeContract> tmpSaveList =
|
|
|
+ archiveTreeContractSync.getContractSaveList(srcTree,ar,contractInfo,dstNode);
|
|
|
+ saveList.addAll(tmpSaveList);
|
|
|
+ }
|
|
|
+ if (ar.getTreeCode().equals("S") && contractInfo.getContractType() == 2) {
|
|
|
+ //复制监理
|
|
|
+ List<ArchiveTreeContract> tmpSaveList =
|
|
|
+ archiveTreeContractSync.getContractSaveList(srcTree,ar,contractInfo,dstNode);
|
|
|
+ saveList.addAll(tmpSaveList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 同步业主,监理各合同段,施工合同段,新增的普通节点,同步wbs节点
|
|
|
+ * @param srcTree
|
|
|
+ * @param dstTree
|
|
|
+ * @param srcNode
|
|
|
+ * @param dstNode
|
|
|
+ * @param saveList
|
|
|
+ */
|
|
|
+ void syncAllContracts(ArchiveTreeVO2 srcTree,ArchiveTreeContractVO2 dstTree,ArchiveTree srcNode,
|
|
|
+ ArchiveTreeContract dstNode,List<ArchiveTreeContract> saveList){
|
|
|
+
|
|
|
+ //获取范围看是在业主,监理各合同段,施工合同段,
|
|
|
+ ArchiveTreeContractVO2 dstScopeTree = ForestNodeMergerEx.getSubTreeByValue(dstTree,dstNode.getId(),1L);
|
|
|
+ for (ArchiveTreeContractVO2 ar: dstTree.getChildren()) {
|
|
|
+ if (StringUtils.isEmpty(ar.getTreeCode())) {
|
|
|
+ //同步
|
|
|
+ if (dstNode.getParentId() == 0 || dstScopeTree.getId().equals(ar.getId()) ) {
|
|
|
+ //同步
|
|
|
+ List<ArchiveTreeContract> tmpSaveList = null;
|
|
|
+ if (dstNode.getParentId() == 0) {
|
|
|
+ ArchiveTreeVO2 tmpSubTree = ForestNodeMergerEx.getSubTree(srcTree,ar.getFromId());
|
|
|
+ if (tmpSubTree == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(tmpSubTree.getId(),
|
|
|
+ tmpSubTree,ar.getId(),ar);
|
|
|
+ }else {
|
|
|
+ tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
|
|
|
+ srcTree,dstNode.getId(),ar);
|
|
|
+ }
|
|
|
+
|
|
|
+ saveList.addAll(tmpSaveList);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ for (ArchiveTreeContractVO2 contractNode : ar.getChildren()){
|
|
|
+
|
|
|
+ List<ArchiveTreeContract> tmpSaveList = null;
|
|
|
+ if (dstNode.getParentId() == 0 || dstScopeTree.getId().equals(contractNode.getId())
|
|
|
+ || dstScopeTree.getId().equals(contractNode.getParentId())) {
|
|
|
+
|
|
|
+ ArchiveTreeVO2 tmpSubTree = srcTree;
|
|
|
+ Long dstNodeId = dstNode.getId();
|
|
|
+ if (dstNode.getParentId() == 0 || dstScopeTree.getId().equals(contractNode.getParentId()) ) {
|
|
|
+ tmpSubTree = ForestNodeMergerEx.getSubTree(srcTree,ar.getFromId());
|
|
|
+ dstNodeId = contractNode.getId();
|
|
|
+ }
|
|
|
+ if (tmpSubTree == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ //getNormalSaveList 接口除了同步新增节点,还会同步已有节点的属性。
|
|
|
+ //因为关联工序的位置是固定的,先不考虑新增一个关联工序节点,且一次同步完成情况
|
|
|
+ tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(srcNode.getId(),
|
|
|
+ tmpSubTree,dstNodeId,contractNode);
|
|
|
+ saveList.addAll(tmpSaveList);
|
|
|
+
|
|
|
+ //获取工序节点
|
|
|
+ List<ArchiveTreeContract> extSaveList = archiveTreeContractSync.getExtSaveList(dstNodeId,
|
|
|
+ contractNode,dstNode.getProjectId());
|
|
|
+ saveList.addAll(extSaveList);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除树的所有子节点
|
|
|
+ * @param tree
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public boolean deleteTreeChildren(ArchiveTreeContractVO2 tree) {
|
|
|
+
|
|
|
+ List<Long> ids = ForestNodeMergerEx.getChildrenIds(tree);
|
|
|
+
|
|
|
+ return this.deleteLogic(ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 同步修改
|
|
|
+ * @param archiveTree
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public boolean UpdateByArchiveTree(ArchiveTree archiveTree){
|
|
|
+
|
|
|
+ List<ArchiveTreeContract> archiveTreeContracts = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
+ .eq(ArchiveTreeContract::getFromId, archiveTree.getId())
|
|
|
+ .eq(ArchiveTreeContract::getProjectId, archiveTree.getProjectId())
|
|
|
+ .eq(ArchiveTreeContract::getIsDeleted, 0)
|
|
|
+ );
|
|
|
+
|
|
|
+ for (ArchiveTreeContract archiveTreeContract : archiveTreeContracts) {
|
|
|
+ archiveTreeContract.sync(archiveTree);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.saveOrUpdateBatch(archiveTreeContracts);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除子树
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public boolean deleteTree(Long id) {
|
|
|
+ ArchiveTreeContract dstNode = this.getById(id);
|
|
|
+ if (dstNode == null ) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ArchiveTreeContractVO2> dstTrees = this.tree2Root(AuthUtil.getTenantId(),null,null,dstNode.getProjectId(),null);
|
|
|
+ if (dstTrees == null || dstTrees.size() == 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ ArchiveTreeContractVO2 subTree = ForestNodeMergerEx.getSubTree(dstTrees.get(0),id);
|
|
|
+
|
|
|
+ List<Long> ids = ForestNodeMergerEx.getChildrenIds(subTree);
|
|
|
+
|
|
|
+ ids.add(id);
|
|
|
+
|
|
|
+ return this.deleteLogic(ids);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量更新
|
|
|
+ * @param projectId
|
|
|
+ * @param srcTree
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public boolean UpdateByArchiveTree(Long projectId, ArchiveTreeVO2 srcTree){
|
|
|
+
|
|
|
+ List<Long> ids = new ArrayList<>();
|
|
|
+ List<ArchiveTreeVO2> archiveTreeVO2List = new ArrayList<>();
|
|
|
+
|
|
|
+ ForestNodeMergerEx.getTreeList(srcTree,archiveTreeVO2List);
|
|
|
+ ids = ForestNodeMergerEx.getChildrenIds(srcTree);
|
|
|
+
|
|
|
+ Map<Long, ArchiveTreeVO2> map = new LinkedHashMap<>();
|
|
|
+ for (ArchiveTreeVO2 ar : archiveTreeVO2List) {
|
|
|
+ map.put(ar.getId(),ar);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ArchiveTreeContract> archiveTreeContracts = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
|
|
|
+ .in(ArchiveTreeContract::getFromId, ids)
|
|
|
+ .eq(ArchiveTreeContract::getProjectId, projectId)
|
|
|
+ .eq(ArchiveTreeContract::getIsDeleted, 0)
|
|
|
+ );
|
|
|
+
|
|
|
+ List<ArchiveTreeContract> upList = new ArrayList<>();
|
|
|
+ for (ArchiveTreeContract archiveTreeContract : archiveTreeContracts) {
|
|
|
+ ArchiveTreeVO2 archiveTreeVO2 = map.get(archiveTreeContract.getFromId());
|
|
|
+ if (archiveTreeVO2!= null) {
|
|
|
+ archiveTreeContract.sync(archiveTreeVO2);
|
|
|
+ upList.add(archiveTreeContract);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ this.saveOrUpdateBatch(upList);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 递归设置
|
|
|
+ * @param archiveTreeContracts
|
|
|
+ */
|
|
|
+ void sortChildren(List<ArchiveTreeContract> archiveTreeContracts){
|
|
|
+
|
|
|
+ if (archiveTreeContracts == null || archiveTreeContracts.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ArchiveTreeContractVO2> trees = this.tree2Root(AuthUtil.getTenantId(),null,null,archiveTreeContracts.get(0).getProjectId(),null);
|
|
|
+ if (trees.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ArchiveTreeContractVO2 tree = trees.get(0);
|
|
|
+
|
|
|
+ ForestNodeMergerEx.InitTreeSort(tree,"",0);
|
|
|
+
|
|
|
+ List<ArchiveTreeContractVO2> changeList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (ArchiveTreeContract ar: archiveTreeContracts) {
|
|
|
+ ArchiveTreeContractVO2 subTree = ForestNodeMergerEx.getSubTree(tree,ar.getId());
|
|
|
+ List<ArchiveTreeContractVO2> tmpList = new ArrayList<>();
|
|
|
+ ForestNodeMergerEx.getTreeList(subTree,tmpList);
|
|
|
+ changeList.addAll(tmpList);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long,ArchiveTreeContractVO2> map = new HashMap<>();
|
|
|
+ List<Long> ids = new ArrayList<>();
|
|
|
+ for (ArchiveTreeContractVO2 ar : changeList) {
|
|
|
+ ids.add(ar.getId());
|
|
|
+ map.put(ar.getId(),ar);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ArchiveTreeContract> changeArchiveList = baseMapper.selectBatchIds(ids);
|
|
|
+ for (ArchiveTreeContract changeNode: changeArchiveList) {
|
|
|
+ ArchiveTreeContractVO2 ar = map.get(changeNode.getId());
|
|
|
+ if (ar!= null ){
|
|
|
+ changeNode.setTreeSort(ar.getTreeSort());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.saveOrUpdateBatch(changeArchiveList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 补充默认的组卷信息
|
|
|
+ * @param trees
|
|
|
+ * @param projectId
|
|
|
+ */
|
|
|
+ public void fillDefaultArchiveAutoInfo(List<ArchiveTreeContractVO2> trees,Long projectId){
|
|
|
+
|
|
|
+ List<ContractInfo> contractInfos = contractInfoService.selectContractInfoPageByPid(projectId.toString());
|
|
|
+ if (contractInfos == null || contractInfos.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Map<Long,ContractInfo> contractMap = new LinkedHashMap<>();
|
|
|
+ for (ContractInfo contractInfo: contractInfos) {
|
|
|
+ if (contractInfo.getContractType() == 3) {
|
|
|
+ contractMap.put(0L,contractInfo);
|
|
|
+ }
|
|
|
+ contractMap.put(contractInfo.getId(),contractInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (ArchiveTreeContractVO2 child: trees) {
|
|
|
+ Long contractId = 0L;
|
|
|
+ if (child.getContractId() != null ) {
|
|
|
+ contractId = child.getContractId();
|
|
|
+ }
|
|
|
+ ContractInfo contractInfo = contractMap.get(contractId);
|
|
|
+ if (contractInfo != null) {
|
|
|
+ fillDefaultArchiveAutoInfo(child,contractInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param node
|
|
|
+ * @param contractInfo
|
|
|
+ */
|
|
|
+ public void fillDefaultArchiveAutoInfo(ArchiveTreeContractVO2 node,ContractInfo contractInfo){
|
|
|
+ if (StringUtils.isEmpty(node.getFileNumberPrefix())) {
|
|
|
+ node.setFileNumberPrefix(contractInfo.getPrefix());
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(node.getStorageTime()) && contractInfo.getStoragePeriod() != null) {
|
|
|
+ node.setStorageTime(contractInfo.getStoragePeriod().toString());
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(node.getRollor())) {
|
|
|
+ node.setRollor(contractInfo.getFiler());
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(node.getReviewer())) {
|
|
|
+ node.setReviewer(contractInfo.getReviewer());
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(node.getSpecification())) {
|
|
|
+ //默认30mm ,对应枚举 1
|
|
|
+ node.setSpecification("30");
|
|
|
+ }
|
|
|
+ //没有默认
|
|
|
+ if (StringUtils.isEmpty(node.getArchiveNameSuffix())) {
|
|
|
+ //node.setArchiveNameSuffix(contractInfo.getPrefix());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 填充基本信息
|
|
|
+ * @param archiveTreeContracts
|
|
|
+ */
|
|
|
+ public void fillDefaultArchiveAutoInfo(List<ArchiveTreeContract> archiveTreeContracts){
|
|
|
+ Long projectId = archiveTreeContracts.get(0).getProjectId();
|
|
|
+ List<ContractInfo> contractInfos = contractInfoService.selectContractInfoPageByPid(projectId.toString());
|
|
|
+ if (contractInfos == null || contractInfos.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Map<Long,ContractInfo> contractMap = new LinkedHashMap<>();
|
|
|
+ for (ContractInfo contractInfo: contractInfos) {
|
|
|
+ if (contractInfo.getContractType() == 3) {
|
|
|
+ contractMap.put(0L,contractInfo);
|
|
|
+ }
|
|
|
+ contractMap.put(contractInfo.getId(),contractInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (ArchiveTreeContract node: archiveTreeContracts) {
|
|
|
+ Long contractId = 0L;
|
|
|
+ if (node.getContractId() != null ) {
|
|
|
+ contractId = node.getContractId();
|
|
|
+ }
|
|
|
+ ContractInfo contractInfo = contractMap.get(contractId);
|
|
|
+ if (contractInfo != null) {
|
|
|
+ if (StringUtils.isEmpty(node.getFileNumberPrefix())) {
|
|
|
+ node.setFileNumberPrefix(contractInfo.getPrefix());
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(node.getStorageTime()) && contractInfo.getStoragePeriod() != null) {
|
|
|
+ node.setStorageTime(contractInfo.getStoragePeriod().toString());
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(node.getRollor())) {
|
|
|
+ node.setRollor(contractInfo.getFiler());
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(node.getReviewer())) {
|
|
|
+ node.setReviewer(contractInfo.getReviewer());
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(node.getSpecification())) {
|
|
|
+ //默认30mm ,对应枚举 1
|
|
|
+ node.setSpecification("30");
|
|
|
+ }
|
|
|
+ //没有默认
|
|
|
+ if (StringUtils.isEmpty(node.getArchiveNameSuffix())) {
|
|
|
+ //node.setArchiveNameSuffix(contractInfo.getPrefix());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> getArchiveTreeAndArchiveCount(Long projectId,Long nodeId) {
|
|
|
+ return baseMapper.getArchiveTreeAndArchiveCount(projectId,nodeId);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 档案查询,目录树,根据类型获取目录
|
|
|
+ * @param projectId
|
|
|
+ * @param contractId
|
|
|
+ * @param nodeType
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContractVO3> getArchiveTreeByNodeType(Long projectId, Long contractId,Integer nodeType) {
|
|
|
+ //获取合同段类型
|
|
|
+ ContractInfo contractInfo = contractInfoService.selectById(contractId + "");
|
|
|
+ Integer contractType = contractInfo.getContractType();
|
|
|
+ //根据用户在当前合同段的权限,判断返回
|
|
|
+ BladeUser user = AuthUtil.getUser();
|
|
|
+ String name = baseMapper.getUserRoleName(projectId,contractId,user.getUserId());
|
|
|
+ if (name.contains("超级管理员") || contractType == 3) {
|
|
|
+ //
|
|
|
+ if (nodeType == 1) {
|
|
|
+ return baseMapper.getArchiveTreeByNodeType2(projectId);
|
|
|
+ } else if (nodeType == 2) {
|
|
|
+ return baseMapper.getArchiveTreeByNodeType(projectId,null, "C");
|
|
|
+ } else if (nodeType == 3) {
|
|
|
+ return baseMapper.getArchiveTreeByNodeType(projectId,null, "S");
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //只返回当前合同段
|
|
|
+ if (contractType == 1 && nodeType == 2){
|
|
|
+ return baseMapper.getArchiveTreeByNodeType(projectId,contractId, "C");
|
|
|
+ } else if (contractType == 2 && nodeType == 3) {
|
|
|
+ return baseMapper.getArchiveTreeByNodeType(projectId, contractId,"S");
|
|
|
+ }else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<ArchiveTreeContractVO3> getChildrenNodeByNodeId(Long nodeId) {
|
|
|
+ return baseMapper.getChildrenNodeByNodeId(nodeId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增合同段时,要复制一份合同段的分支出来
|
|
|
+ * @param contractInfos
|
|
|
+ * @param srcTree
|
|
|
+ * @param dstTree
|
|
|
+ * @param dstNode
|
|
|
+ * @param saveList
|
|
|
+ */
|
|
|
+ void addNewRootChild(List<ContractInfo> contractInfos,ArchiveTreeVO2 srcTree,ArchiveTreeContractVO2 dstTree,
|
|
|
+ ArchiveTreeContract dstNode,List<ArchiveTreeContract> saveList){
|
|
|
+
|
|
|
+ //
|
|
|
+ List<ArchiveTreeVO2> srcChilds = srcTree.getChildren();
|
|
|
+ List<ArchiveTreeContractVO2> dstChilds = dstTree.getChildren();
|
|
|
+ Map<Long,Long> dstMap = new HashMap<>();
|
|
|
+
|
|
|
+ for (ArchiveTreeContractVO2 dst: dstChilds) {
|
|
|
+ if (dst.getFromId()!= null ) {
|
|
|
+ dstMap.put(dst.getFromId(),dst.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (ArchiveTreeVO2 src : srcChilds) {
|
|
|
+ if (dstMap.get(src.getId()) == null ) {
|
|
|
+ List<ArchiveTreeContract> tmpSaveList = archiveTreeContractSync.getNormalSaveListEx(src.getId(),src,dstNode.getId(),dstTree);
|
|
|
+ saveList.addAll(tmpSaveList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|