Bläddra i källkod

质检合同段节点收藏只收藏当前节点及所有子节点,不收藏父节点

lvy 1 vecka sedan
förälder
incheckning
b4ded09917

+ 44 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractCollectFolderServiceImpl.java

@@ -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);
+    }
 }

+ 16 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -1509,15 +1509,15 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
             for (ContractCollectFolder contractCollectFolder : query) {
                 Long nodeId = contractCollectFolder.getNodeId();
                 collectNodes.put(nodeId, "");
-                String nodeAncestors = contractCollectFolder.getNodeAncestors();
-                if (nodeAncestors != null) {
-                    String[] split = nodeAncestors.split(",");
-                    for (String s : split) {
-                        if (StringUtil.isNumeric(s)) {
-                            collectNodes.put(Long.parseLong(s), "");
-                        }
-                    }
-                }
+//                String nodeAncestors = contractCollectFolder.getNodeAncestors();
+//                if (nodeAncestors != null) {
+//                    String[] split = nodeAncestors.split(",");
+//                    for (String s : split) {
+//                        if (StringUtil.isNumeric(s)) {
+//                            collectNodes.put(Long.parseLong(s), "");
+//                        }
+//                    }
+//                }
                 String ids = collectNodes.keySet().stream().map(item -> item + "").collect(Collectors.joining(","));
                 redisTemplate.opsForValue().set("blade-manager::contract:collectFolder:" + contractId, ids, 60 * 60 * 40L, TimeUnit.SECONDS);
             }
@@ -1586,6 +1586,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         List<ContractCollectFolder> contractCollectNodes = jdbcTemplate.query("select * from m_contract_collect_folder where type = 1 and parent_id = " + folderId, new BeanPropertyRowMapper<>(ContractCollectFolder.class));
         if (!contractCollectNodes.isEmpty()) {
             Set<Long> pKeyIds = new LinkedHashSet<>();
+            Map<Long, String> collectMap = new HashMap<>();
             for (ContractCollectFolder node : contractCollectNodes) {
                 String ancestors = node.getNodeAncestors();
                 if (ancestors != null) {
@@ -1596,6 +1597,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                         }
                     }
                 }
+                collectMap.put(node.getNodeId(), "");
                 pKeyIds.add(node.getNodeId());
             }
             List<WbsTreeContract> wbsTreeContractList = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>lambdaQuery().in(WbsTreeContract::getPKeyId, pKeyIds));
@@ -1628,7 +1630,11 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                                         //判断是否展示同步标识
                                         vo.setIsSync(syncPKeyIds.contains(vo.getPrimaryKeyId().toString()) ? 1 : 0);
                                     }
-                                    vo.setIsCollect(1);
+                                    if (collectMap.containsKey(node.getPKeyId())) {
+                                        vo.setIsCollect(1);
+                                    } else {
+                                        vo.setIsCollect(0);
+                                    }
                                 }
                                 return vo;
                             }).collect(Collectors.toList());

+ 9 - 9
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -1164,15 +1164,15 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
             for (ContractCollectFolder contractCollectFolder : query) {
                 Long nodeId = contractCollectFolder.getNodeId();
                 collectNodes.put(nodeId, "");
-                String nodeAncestors = contractCollectFolder.getNodeAncestors();
-                if (nodeAncestors != null) {
-                    String[] split = nodeAncestors.split(",");
-                    for (String s : split) {
-                        if (StringUtil.isNumeric(s)) {
-                            collectNodes.put(Long.parseLong(s), "");
-                        }
-                    }
-                }
+//                String nodeAncestors = contractCollectFolder.getNodeAncestors();
+//                if (nodeAncestors != null) {
+//                    String[] split = nodeAncestors.split(",");
+//                    for (String s : split) {
+//                        if (StringUtil.isNumeric(s)) {
+//                            collectNodes.put(Long.parseLong(s), "");
+//                        }
+//                    }
+//                }
                 String ids = collectNodes.keySet().stream().map(item -> item + "").collect(Collectors.joining(","));
                 redisTemplate.opsForValue().set("blade-manager::contract:collectFolder:" + contractId, ids, 60 * 60 * 40L, TimeUnit.SECONDS);
             }