日期:2014-05-16  浏览次数:20496 次

做通讯录时,对ztree重新构建树的算法问题
本帖最后由 lizongxian2008 于 2012-12-07 13:09:56 编辑
系统有不同的用户,要求查出所有用户,并把每个用户的通讯录目录挂在自己的用户上。
且每个节点的数据有:id,pId,path,name
如:
张三 
  公司同事 1.1.(path)
     技术部 1.1.1.
         技术一科 1.1.1.1.
     市场部 1.1.2.
     销售部 1.1.3.
  other 1.3.
目前我是这么处理这些树的但还存在一些问题:

// 对ztree进行重组
sb.append("[");
int flag = 0;
// 每个共享用户对应一个结点
for (Integer userId : userIds) {
User user = (User) us.findUserById(userId.intValue());
if (flag > 0) {
sb.append(Delimiters.COMMA);
}
List<ContactShareGroup> cg = cs.findShareContactGroup(
simpleUser.getEnterpriseId(), userId);
ContactShareGroup defaultShareGroup = cg.get(0);// 在共享通讯录中,点击用户名时显示第一组数据
sb.append(this.toUserTree(user, cg));
sb.append(Delimiters.COMMA);
flag++;
int min = -1;
int max = -1;
String minPath = cg.get(0).getContactGroup().getPath();
String maxPath = cg.get(0).getContactGroup().getPath();
int parentId = -(defaultShareGroup.getContactGroup().getId());
for (int i = 0; i < cg.size(); i++) {
if ((minPath.length()) > (cg.get(i).getContactGroup().getPath()
.length())) {
min = i;
minPath = cg.get(i).getContactGroup().getPath();
}
if ((maxPath.length()) < (cg.get(i).getContactGroup().getPath()
.length())) {
max = i;
maxPath = cg.get(i).getContactGroup().getPath();
}
}
if (min != -1) {
for(int i=0;i<cg.size();i++){
if(minPath.length()==cg.get(i).getContactGroup().getPath().length()){
cg.get(i).getContactGroup().setParentId(parentId);
}
}
} else if (max == min) {
for (int j = 0; j < cg.size(); j++) {
cg.get(j).getContactGroup().setParentId(parentId);
}
} else {
for (int k = 0; k < cg.size(); k++) {
if (cg.get(k).getContactGroup().getPath().length() == minPath
.length()) {
cg.get(k).getContactGroup().setParentId(parentId);
}
}
}

for (int m = 0; m < cg.size(); m++) {
if (m != 0)
sb.append(Delimiters.COMMA);
sb.append(cg.get(m).toZTreeJSON());
}
}
sb.append("]");


效果如下:
张三 
  公司同事 1.1.(path)
     技术部 1.1.1.
         技术一科 1.1.1.1.
     市场部 1.1.2.
     销售部 1.1.3.
other 1.3.
other和用户名平级了,本来应该是在张三这个节点下的。
目前这样还存在问题,请各位指点指点。谢谢!

------解决方案--------------------
发最后生成的JSON字符串和可以测试的js代码和html,发java代码还要看太麻烦了
------解决方案--------------------
版主有理