瀏覽代碼

wbs树优化

liuyc 1 年之前
父節點
當前提交
80ee02d319

+ 29 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -353,8 +353,21 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                         if (data != null) {
                             nodesAllTemp = JSON.parseArray(data.toString(), WbsTreeContractLazyVO.class);
                         } else {
-                            nodesAllTemp = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id,(SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND type = 1 AND b.contract_id = " + contractId + " AND b.is_deleted = 0 ) AS hasChildren from m_wbs_tree_contract a where type = 1 and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
+                            nodesAllTemp = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
                             if (nodesAllTemp.size() > 0) {
+                                //判断是否有子级,赋值
+                                Map<Long, List<WbsTreeContractLazyVO>> groupedByParentId = nodesAllTemp.stream().collect(Collectors.groupingBy(WbsTreeContractLazyVO::getParentId));
+                                for (WbsTreeContractLazyVO vo : nodesAllTemp) {
+                                    if (vo.getParentId() == 0) {
+                                        vo.setHasChildren(1);
+                                    }
+                                    List<WbsTreeContractLazyVO> childNodes = groupedByParentId.getOrDefault(vo.getId(), null);
+                                    if (childNodes != null && childNodes.size() > 0) {
+                                        vo.setHasChildren(1);
+                                    } else {
+                                        vo.setHasChildren(0);
+                                    }
+                                }
                                 JSONArray array = JSONArray.parseArray(JSON.toJSONString(nodesAllTemp));
                                 redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + contractId, JSON.toJSON(array).toString());
                             }
@@ -490,10 +503,23 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                             if (data != null) {
                                 nodesAllTemp = JSON.parseArray(data.toString(), WbsTreeContractLazyVO.class);
                             } else {
-                                nodesAllTemp = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id,(SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND type = 1 AND b.contract_id = " + contractRelationJlyz.getContractIdSg() + " AND b.is_deleted = 0 ) AS hasChildren from m_wbs_tree_contract a where type = 1 and status = 1 and is_deleted = 0 and contract_id = " + contractRelationJlyz.getContractIdSg(), new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
+                                nodesAllTemp = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + contractRelationJlyz.getContractIdSg(), new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
                                 if (nodesAllTemp.size() > 0) {
+                                    //判断是否有子级,赋值
+                                    Map<Long, List<WbsTreeContractLazyVO>> groupedByParentId = nodesAllTemp.stream().collect(Collectors.groupingBy(WbsTreeContractLazyVO::getParentId));
+                                    for (WbsTreeContractLazyVO vo : nodesAllTemp) {
+                                        if (vo.getParentId() == 0) {
+                                            vo.setHasChildren(1);
+                                        }
+                                        List<WbsTreeContractLazyVO> childNodes = groupedByParentId.getOrDefault(vo.getId(), null);
+                                        if (childNodes != null && childNodes.size() > 0) {
+                                            vo.setHasChildren(1);
+                                        } else {
+                                            vo.setHasChildren(0);
+                                        }
+                                    }
                                     JSONArray array = JSONArray.parseArray(JSON.toJSONString(nodesAllTemp));
-                                    redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + contractId, JSON.toJSON(array).toString());
+                                    redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + contractRelationJlyz.getContractIdSg(), JSON.toJSON(array).toString());
                                 }
                             }
 

+ 69 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -690,8 +690,21 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     if (data != null) {
                         nodesAll = JSON.parseArray(data.toString(), WbsTreeContractLazyVO.class);
                     } else {
-                        nodesAll = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id,(SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND type = 1 AND b.contract_id = " + contractId + " AND b.is_deleted = 0 ) AS hasChildren from m_wbs_tree_contract a where type = 1 and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
+                        nodesAll = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
                         if (nodesAll.size() > 0) {
+                            //判断是否有子级,赋值
+                            Map<Long, List<WbsTreeContractLazyVO>> groupedByParentId = nodesAll.stream().collect(Collectors.groupingBy(WbsTreeContractLazyVO::getParentId));
+                            for (WbsTreeContractLazyVO vo : nodesAll) {
+                                if (vo.getParentId() == 0) {
+                                    vo.setHasChildren(1);
+                                }
+                                List<WbsTreeContractLazyVO> childNodes = groupedByParentId.getOrDefault(vo.getId(), null);
+                                if (childNodes != null && childNodes.size() > 0) {
+                                    vo.setHasChildren(1);
+                                } else {
+                                    vo.setHasChildren(0);
+                                }
+                            }
                             JSONArray array = JSONArray.parseArray(JSON.toJSONString(nodesAll));
                             redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + contractId, JSON.toJSON(array).toString());
                         }
@@ -817,7 +830,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     for (String sgContractId : contractIds) {
                         ContractInfo sgContractInfo = jdbcTemplate.query("select contract_name from m_contract_info where id = " + sgContractId, new BeanPropertyRowMapper<>(ContractInfo.class)).stream().findAny().orElse(null);
                         if (sgContractInfo != null) {
-                            //获取当前合同段所有缓存节点信息
+                            /*//获取当前合同段所有缓存节点信息
                             List<WbsTreeContractLazyVO> nodesAll;
                             Object data = redisTemplate.opsForValue().get("blade-manager::contract:wbstree:" + sgContractId);
                             if (data != null) {
@@ -828,6 +841,32 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                                     JSONArray array = JSONArray.parseArray(JSON.toJSONString(nodesAll));
                                     redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + sgContractId, JSON.toJSON(array).toString());
                                 }
+                            }*/
+
+                            //获取当前合同段所有缓存节点信息
+                            List<WbsTreeContractLazyVO> nodesAll;
+                            Object data = redisTemplate.opsForValue().get("blade-manager::contract:wbstree:" + sgContractId);
+                            if (data != null) {
+                                nodesAll = JSON.parseArray(data.toString(), WbsTreeContractLazyVO.class);
+                            } else {
+                                nodesAll = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + sgContractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
+                                if (nodesAll.size() > 0) {
+                                    //判断是否有子级,赋值
+                                    Map<Long, List<WbsTreeContractLazyVO>> groupedByParentId = nodesAll.stream().collect(Collectors.groupingBy(WbsTreeContractLazyVO::getParentId));
+                                    for (WbsTreeContractLazyVO vo : nodesAll) {
+                                        if (vo.getParentId() == 0) {
+                                            vo.setHasChildren(1);
+                                        }
+                                        List<WbsTreeContractLazyVO> childNodes = groupedByParentId.getOrDefault(vo.getId(), null);
+                                        if (childNodes != null && childNodes.size() > 0) {
+                                            vo.setHasChildren(1);
+                                        } else {
+                                            vo.setHasChildren(0);
+                                        }
+                                    }
+                                    JSONArray array = JSONArray.parseArray(JSON.toJSONString(nodesAll));
+                                    redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + sgContractId, JSON.toJSON(array).toString());
+                                }
                             }
 
                             //获取当前层懒加载节点
@@ -956,8 +995,21 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     if (data != null) {
                         nodesAll = JSON.parseArray(data.toString(), WbsTreeContractLazyVO.class);
                     } else {
-                        nodesAll = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id,(SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND type = 1 AND b.contract_id = " + contractId + " AND b.is_deleted = 0 ) AS hasChildren from m_wbs_tree_contract a where type = 1 and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
+                        nodesAll = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
                         if (nodesAll.size() > 0) {
+                            //判断是否有子级,赋值
+                            Map<Long, List<WbsTreeContractLazyVO>> groupedByParentId = nodesAll.stream().collect(Collectors.groupingBy(WbsTreeContractLazyVO::getParentId));
+                            for (WbsTreeContractLazyVO vo : nodesAll) {
+                                if (vo.getParentId() == 0) {
+                                    vo.setHasChildren(1);
+                                }
+                                List<WbsTreeContractLazyVO> childNodes = groupedByParentId.getOrDefault(vo.getId(), null);
+                                if (childNodes != null && childNodes.size() > 0) {
+                                    vo.setHasChildren(1);
+                                } else {
+                                    vo.setHasChildren(0);
+                                }
+                            }
                             JSONArray array = JSONArray.parseArray(JSON.toJSONString(nodesAll));
                             redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + contractId, JSON.toJSON(array).toString());
                         }
@@ -1058,8 +1110,21 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                             if (data != null) {
                                 nodesAll = JSON.parseArray(data.toString(), WbsTreeContractLazyVO.class);
                             } else {
-                                nodesAll = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id,(SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_wbs_tree_contract b WHERE b.parent_id = a.id AND type = 1 AND b.contract_id = " + sgContractId + " AND b.is_deleted = 0 ) AS hasChildren from m_wbs_tree_contract a where type = 1 and status = 1 and is_deleted = 0 and contract_id = " + sgContractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
+                                nodesAll = jdbcTemplate.query("select a.p_key_id,a.id,a.parent_id from m_wbs_tree_contract a where a.type = 1 and a.status = 1 and a.is_deleted = 0 and a.contract_id = " + sgContractId, new BeanPropertyRowMapper<>(WbsTreeContractLazyVO.class));
                                 if (nodesAll.size() > 0) {
+                                    //判断是否有子级,赋值
+                                    Map<Long, List<WbsTreeContractLazyVO>> groupedByParentId = nodesAll.stream().collect(Collectors.groupingBy(WbsTreeContractLazyVO::getParentId));
+                                    for (WbsTreeContractLazyVO vo : nodesAll) {
+                                        if (vo.getParentId() == 0) {
+                                            vo.setHasChildren(1);
+                                        }
+                                        List<WbsTreeContractLazyVO> childNodes = groupedByParentId.getOrDefault(vo.getId(), null);
+                                        if (childNodes != null && childNodes.size() > 0) {
+                                            vo.setHasChildren(1);
+                                        } else {
+                                            vo.setHasChildren(0);
+                                        }
+                                    }
                                     JSONArray array = JSONArray.parseArray(JSON.toJSONString(nodesAll));
                                     redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + sgContractId, JSON.toJSON(array).toString());
                                 }