|
@@ -10,6 +10,7 @@ import org.springblade.core.log.exception.ServiceException;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.utils.StringUtil;
|
|
|
import org.springblade.manager.entity.ContractCollectFolder;
|
|
|
+import org.springblade.manager.entity.WbsTree;
|
|
|
import org.springblade.manager.entity.WbsTreeContract;
|
|
|
import org.springblade.manager.mapper.ContractCollectFolderMapper;
|
|
|
import org.springblade.manager.service.IContractCollectFolderService;
|
|
@@ -99,7 +100,7 @@ public class ContractCollectFolderServiceImpl extends ServiceImpl<ContractCollec
|
|
|
if (vo.getType() == 0) {
|
|
|
// 取消
|
|
|
if (node == null) {
|
|
|
- throw new ServiceException("请先取消该节点下所有的收藏节点");
|
|
|
+ return true;
|
|
|
}
|
|
|
this.removeById(node.getId());
|
|
|
} else if (vo.getType() == 1) {
|
|
@@ -108,16 +109,32 @@ public class ContractCollectFolderServiceImpl extends ServiceImpl<ContractCollec
|
|
|
throw new ServiceException("收藏夹不存在");
|
|
|
}
|
|
|
if (node == null) {
|
|
|
- node = new ContractCollectFolder();
|
|
|
- node.setId(SnowFlakeUtil.getId());
|
|
|
- node.setNodeId(vo.getNodeId());
|
|
|
- node.setContractId(vo.getContractId());
|
|
|
- node.setType(1);
|
|
|
- node.setCreateUser(AuthUtil.getUserId());
|
|
|
- node.setNodeAncestors(wbsTreeContract.getAncestorsPId() + "," + vo.getNodeId());
|
|
|
- node.setParentId(vo.getId());
|
|
|
+ List<WbsTreeContract> childrenList = new ArrayList<>();
|
|
|
+ getAllChildren(Collections.singleton(vo.getNodeId()), childrenList);
|
|
|
+ childrenList.add(wbsTreeContract);
|
|
|
+ Map<Long, WbsTreeContract> nodeMap = childrenList.stream().collect(Collectors.toMap(WbsTreeContract::getPKeyId, v -> v, (v1, v2) -> v1));
|
|
|
+ List<ContractCollectFolder> list = this.list(Wrappers.<ContractCollectFolder>lambdaQuery().in(ContractCollectFolder::getNodeId, nodeMap.entrySet())
|
|
|
+ .eq(ContractCollectFolder::getType, 1).eq(ContractCollectFolder::getContractId, vo.getContractId()));
|
|
|
+ for (ContractCollectFolder contractCollectFolder : list) {
|
|
|
+ nodeMap.remove(contractCollectFolder.getNodeId());
|
|
|
+ }
|
|
|
+ if (nodeMap.isEmpty()) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ List<ContractCollectFolder> nodes = new ArrayList<>();
|
|
|
+ for (WbsTreeContract contract : nodeMap.values()) {
|
|
|
+ ContractCollectFolder node1 = new ContractCollectFolder();
|
|
|
+ node1.setId(SnowFlakeUtil.getId());
|
|
|
+ node1.setNodeId(vo.getNodeId());
|
|
|
+ node1.setContractId(vo.getContractId());
|
|
|
+ node1.setType(1);
|
|
|
+ node1.setCreateUser(AuthUtil.getUserId());
|
|
|
+ node1.setNodeAncestors(contract.getAncestorsPId() + "," + contract.getPKeyId());
|
|
|
+ node1.setParentId(vo.getId());
|
|
|
+ nodes.add(node1);
|
|
|
+ }
|
|
|
redisTemplate.delete("blade-manager::contract:collectFolder:" + vo.getContractId());
|
|
|
- return this.save(node);
|
|
|
+ return this.saveBatch(nodes);
|
|
|
}
|
|
|
ContractCollectFolder folder = this.getById(node.getParentId());
|
|
|
if (folder != null) {
|
|
@@ -150,4 +167,21 @@ public class ContractCollectFolderServiceImpl extends ServiceImpl<ContractCollec
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有子节点
|
|
|
+ */
|
|
|
+ public void getAllChildren(Collection<Long> pKeyIds, List<WbsTreeContract> childrenList) {
|
|
|
+ if (pKeyIds == null || pKeyIds.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<WbsTreeContract> list = wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().select(WbsTreeContract::getPKeyId, WbsTreeContract::getAncestorsPId)
|
|
|
+ .in(WbsTreeContract::getPId, pKeyIds).eq(WbsTreeContract::getStatus, 1).eq(WbsTreeContract::getType, 1));
|
|
|
+ if (list == null || list.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ childrenList.addAll(list);
|
|
|
+ Set<Long> ids = list.stream().map(WbsTreeContract::getPKeyId).collect(Collectors.toSet());
|
|
|
+ getAllChildren(ids, childrenList);
|
|
|
+ }
|
|
|
}
|