Index: forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java =================================================================== diff -u -r15976 -r16010 --- forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java (.../OrgUnitManagerImpl.java) (revision 15976) +++ forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java (.../OrgUnitManagerImpl.java) (revision 16010) @@ -4,9 +4,12 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -290,43 +293,87 @@ return null; } - public String getJsonChildreanNode(long parentId) { + public String getJsonChildrenNode(long parentId) { List extTreeNodes = new ArrayList(); - List childrean = null; + List children = null; if (parentId == 0) { - String companyId = AcegiHelper.getLoginUser() - .getCurrentCompanyId(); + String companyId = AcegiHelper.getLoginUser().getCurrentCompanyId(); if (StringUtils.isNotBlank(companyId) && !OrgUnit.THTreeNodeRootId.toString().equals(companyId)) { THTreeNode thTreeNode = getOrgUnitByCode(companyId); - if(thTreeNode != null){ - childrean = new ArrayList(); - childrean.add(thTreeNode); + if (thTreeNode != null) { + children = new ArrayList(); + children.add(thTreeNode); } } else { - childrean = thTreeNodeManager.findChildrenByParentId( + children = thTreeNodeManager.findChildrenByParentId( OrgUnit.class.getName(), parentId); } } else { - childrean = thTreeNodeManager.findChildrenByParentId( + children = thTreeNodeManager.findChildrenByParentId( OrgUnit.class.getName(), parentId); } - if (CollectionUtils.isNotEmpty(childrean)) { - for (THTreeNode thTreeNode : childrean) { + // 获取是否该部门为叶子节点 + ArrayList parentIds = new ArrayList(); + + if (CollectionUtils.isNotEmpty(children)){ + for (THTreeNode orgUnit : children) { + parentIds.add(orgUnit.getId()); + } + } + + String parentIdString = ""; + for (Long id : parentIds){ + parentIdString += "," + id ; + } + + if (parentIdString.startsWith(",")){ + parentIdString = parentIdString.substring(1); + } + + String sql = "select parentId, count(*) from OrgUnit where parentId in (" + parentIdString + ") group by parentId"; + + // 子节点数量的Map + Map subNodesCountMap = new HashMap(); + + ResultSet rs = objectDao.executeSql(sql); + try { + while (rs.next()) { + Long myId = rs.getLong(1); + Long subNodesCount = rs.getLong(2); + subNodesCountMap.put(myId, subNodesCount); + + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + + if (CollectionUtils.isNotEmpty(children)) { + for (THTreeNode thTreeNode : children) { ExtTreeNode extTreeNode = new ExtTreeNode(); - extTreeNode.setId(thTreeNode.getId()); + Long id = thTreeNode.getId(); + extTreeNode.setId(id); extTreeNode.setText(thTreeNode.getName()); extTreeNode.setHref("javascript:reloadGrid(" - + thTreeNode.getId() + ");"); + + id + ");"); extTreeNode.setHrefTarget("_self"); - if (thTreeNode.getChildren() != null - && thTreeNode.getChildren().size() > 0) { - extTreeNode.setLeaf(false); + + Long subNodesCount = subNodesCountMap.get(id); + boolean isLeaf = true; + + if (subNodesCount == null || subNodesCount == 0) { + isLeaf = true; + } else if (subNodesCount > 0) { + isLeaf = false; } + extTreeNode.setLeaf(isLeaf); extTreeNodes.add(extTreeNode); } @@ -676,8 +723,8 @@ /** * 设置子部门的集合,该集合也包含所有的父部门 - * @param parentDeparts - * @param allChildrenDeparts + * @param parentDeparts 所有父部门的集合。不能包含公司。 + * @param allChildrenDeparts 返回所有子部门的集合 */ private void setAllChildren(Set parentDeparts, Set allChildrenDeparts) { if (CollectionUtils.isEmpty(parentDeparts)) { @@ -693,16 +740,21 @@ ids.add(parentDepart.getId()); } } - Session session = objectDao.getHibernateSession(); - Query query = session.createQuery("from OrgUnit where parentId in (:ids)"); - query.setParameterList("ids", ids); - List children = query.list(); - if (CollectionUtils.isNotEmpty(children)){ - - allChildrenDeparts.addAll(children); + if (ids.size() > 0 ){ - setAllChildren(new HashSet(children), allChildrenDeparts); + Session session = objectDao.getHibernateSession(); + Query query = session.createQuery("from OrgUnit where parentId in (:ids)"); + query.setParameterList("ids", ids); + List children = query.list(); + + if (CollectionUtils.isNotEmpty(children)){ + + allChildrenDeparts.addAll(children); + + setAllChildren(new HashSet(children), allChildrenDeparts); + } + } } Index: forgon-core/src/main/java/com/forgon/treenode/service/THTreeNodeManagerImpl.java =================================================================== diff -u -r12386 -r16010 --- forgon-core/src/main/java/com/forgon/treenode/service/THTreeNodeManagerImpl.java (.../THTreeNodeManagerImpl.java) (revision 12386) +++ forgon-core/src/main/java/com/forgon/treenode/service/THTreeNodeManagerImpl.java (.../THTreeNodeManagerImpl.java) (revision 16010) @@ -529,9 +529,9 @@ String hql = "where po.parent=" + parentId + " order by sequenceNumber asc"; - List childrean = objectDao.findBySql(subClassName, hql); + List children = objectDao.findBySql(subClassName, hql); - return childrean; + return children; } public String getJsonChildreanNode(String subClassName, long parentId) { Index: forgon-core/src/main/java/com/forgon/directory/model/OrgUnit.java =================================================================== diff -u -r14944 -r16010 --- forgon-core/src/main/java/com/forgon/directory/model/OrgUnit.java (.../OrgUnit.java) (revision 14944) +++ forgon-core/src/main/java/com/forgon/directory/model/OrgUnit.java (.../OrgUnit.java) (revision 16010) @@ -7,6 +7,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; +import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.annotation.JsonIgnore; import com.forgon.security.model.User; import com.forgon.tools.Constants; @@ -17,6 +18,7 @@ * @author yuanbin * */ +@JsonFilter("fieldFilter") public class OrgUnit extends THTreeNode { private static final long serialVersionUID = 1L; Index: ssts-web/src/main/java/com/forgon/disinfectsystem/directory/dwr/table/OrgUnitTableManager.java =================================================================== diff -u -r14406 -r16010 --- ssts-web/src/main/java/com/forgon/disinfectsystem/directory/dwr/table/OrgUnitTableManager.java (.../OrgUnitTableManager.java) (revision 14406) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/directory/dwr/table/OrgUnitTableManager.java (.../OrgUnitTableManager.java) (revision 16010) @@ -171,7 +171,13 @@ String[] filterProperties = { "orgUserRelationes", "children", "parent", "chargeLeaderList", "currenNodeBelongCompany", - "currenNodeAllBelongCompany", "managerList", "barcodeDevice" }; + "currenNodeAllBelongCompany", "managerList", "barcodeDevice", + "currentOrgUnitCodesNoRoot", "currentOrgUnitNames", "currentNodePath", + "currentNodePathNoRoot", "thTreeNodeHiberarchy", + "userNames", "userIds", "leaderNames", "leaderIds", + "managerNames", "managerIds", + "currentOrgUnitCodesIncludeRoot", "nodePath"}; + return gridManager.renderGrid(parameterMap, OrgUnit.class.getSimpleName(), sql, filterProperties); } Index: forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java =================================================================== diff -u -r15864 -r16010 --- forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java (.../OrgUnitAction.java) (revision 15864) +++ forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java (.../OrgUnitAction.java) (revision 16010) @@ -143,7 +143,7 @@ public String treeLoad() { String parentId = StrutsParamUtils.getPraramValue("parentId", ""); - String json = orgUnitManager.getJsonChildreanNode(Long + String json = orgUnitManager.getJsonChildrenNode(Long .valueOf(parentId)); HttpServletResponse response = StrutsParamUtils.getResponse(); try { @@ -249,10 +249,13 @@ JsonConfig config = new JsonConfig(); PropertyFilter propertyFilter = new JsonPropertyFilter( new String[] { "orgUserRelationes", "children", - "chargeLeaderList", "currenNodeBelongCompany", - "currenNodeAllBelongCompany", "managerList", - "currentOrgUnitNames", - "currentNodeCodesPathIncludeRoot","barcodeDevice" }); + "parent", "chargeLeaderList", "currenNodeBelongCompany", + "currenNodeAllBelongCompany", "managerList", "barcodeDevice", + "currentOrgUnitCodesNoRoot", "currentOrgUnitNames", "currentNodePath", + "currentNodePathNoRoot", "thTreeNodeHiberarchy", + "leaderNames", "leaderIds", + "managerNames", "managerIds", + "currentOrgUnitCodesIncludeRoot"}); config.setJsonPropertyFilter(propertyFilter); Map map = new HashMap(); Index: forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManager.java =================================================================== diff -u -r15976 -r16010 --- forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManager.java (.../OrgUnitManager.java) (revision 15976) +++ forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManager.java (.../OrgUnitManager.java) (revision 16010) @@ -16,7 +16,7 @@ */ public interface OrgUnitManager { - public String getJsonChildreanNode(long parentId); + public String getJsonChildrenNode(long parentId); public String getCompanyTreeOfJsonByCompanyId(String parentId, boolean isFromTraining);