package com.norteksoft.product.util;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.norteksoft.product.api.entity.Department;
import com.norteksoft.product.api.entity.Workgroup;
import com.norteksoft.acs.web.authorization.JsTreeUtil1;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.api.entity.User;
import com.norteksoft.product.util.tree.TreeAttr;
import com.norteksoft.product.util.tree.TreeNode;
import com.norteksoft.tags.tree.DepartmentDisplayType;
public class TreeUtils{
private static String DEPARTMENT="department";
private static String WORKGROUP="workGroup";
private static String NOTINDEPARTMENT="notInDepartment";
//"_"--->"~~"
private static String SPLIT_ONE="~~";
//"="--->"=="
private static String SPLIT_TWO="==";
//"-"--->"*#"
private static String SPLIT_THREE="*#";
//"|"--->"|#"
private static String SPLIT_FOUR="|#";
//"+"--->"+#"
private static String SPLIT_FIVE="+#";
//"~"--->"~#"
private static String SPLIT_SIX="~#";
//"*"--->"**"
private static String SPLIT_SEVEN="**";
//","--->"=#"
private static String SPLIT_EIGHT="=#";
/**
* 部门和工作组人员树
* @param onlineVisible
*/
public static String getCreateManDepartmentGroupTree(Long companyId,String currentId, boolean onlineVisible,DepartmentDisplayType departmentDisplayType,boolean userWithoutDeptVisible) {
StringBuilder tree = new StringBuilder();
List<Department> departments = ApiFactory.getAcsService().getDepartments();
String[] str = currentId.split(SPLIT_ONE);
if (currentId.equals("0")) {
tree.append(defaultTreeTwo(departments,companyId,onlineVisible,departmentDisplayType,userWithoutDeptVisible));
}else if(str[0].equals("department")) {
tree.append(departmentTreeChange(Long.parseLong(str[1].substring(0,str[1].indexOf("="))),onlineVisible));
}else if(str[0].equals("workGroup")){
tree.append(workGroupTree(Long.parseLong(str[1].substring(0,str[1].indexOf("="))),onlineVisible));
}
return tree.toString();
}
private static String defaultTreeTwo(List<Department> departments,Long companyId,boolean onlineVisible,DepartmentDisplayType departmentDisplayType,boolean userWithoutDeptVisible){
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
TreeNode root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"open",
ContextUtils.getCompanyName());
List<TreeNode> headNode = new ArrayList<TreeNode>();
//封装部门树节点
TreeNode headDepartmentTreeContent = null;
if(departments.size()>0){
headDepartmentTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"open",
"部门");
}else{
headDepartmentTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"",
"部门");
}
//封装部门子节点
//如果显示无部门人员,则封装子节点
if(userWithoutDeptVisible){
//封装子节点
List<TreeNode> childrenTreeNode = new ArrayList<TreeNode>();
childrenTreeNode.addAll(departmentsTree(departments,departmentDisplayType));
//封装无部门人员节点
TreeNode noDepartmentUserTreeContent = new TreeNode(
new TreeAttr("NODEPARTMENT"+SPLIT_ONE+"0"+SPLIT_TWO,"folder"),
"",
"无部门人员");
noDepartmentUserTreeContent.setChildren(usersNotInDepartment());
childrenTreeNode.add(noDepartmentUserTreeContent);
headDepartmentTreeContent.setChildren(childrenTreeNode);
}else{
headDepartmentTreeContent.setChildren(departmentsTree(departments,departmentDisplayType));
}
headNode.add(headDepartmentTreeContent);
//封装工作组树节点
TreeNode headWorkGroupTreeContent = null;
List<Workgroup> workGroups = ApiFactory.getAcsService().getWorkgroups();
if(workGroups.size()>0){
headWorkGroupTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"open",
"工作组");
}else{
headWorkGroupTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"",
"工作组");
}
//封装工作组子节点
headWorkGroupTreeContent.setChildren(workGroupsTree(workGroups, departments,onlineVisible));
headNode.add(headWorkGroupTreeContent);
root.setChildren(headNode);
treeNodes.add(root);
return JsonParser.object2Json(treeNodes);
}
/**
* 部门人员树
* @param onlineVisible
*/
public static String getCreateManDepartmentTree(Long companyId,String currentId, boolean onlineVisible,DepartmentDisplayType departmentDisplayType,boolean userWithoutDeptVisible) {
StringBuilder tree = new StringBuilder();
List<Department> departments = ApiFactory.getAcsService().getDepartments();
String[] str = currentId.split(SPLIT_ONE);
if (currentId.equals("0")) {
tree.append(defaultTreeThree(departments,companyId,departmentDisplayType,userWithoutDeptVisible));
}else if(str[0].equals("department")) {
tree.append(departmentTreeChange(Long.parseLong(str[1].substring(0,str[1].indexOf("="))),onlineVisible));
}else if(currentId.equals("INITIALIZED_USERS")) {
tree.append(defaultTreeThreeIncludeDeleted(departments,companyId,departmentDisplayType));
}
return tree.toString();
}
public static String getCreateManDepartmentTreeIncludeDeleted(Long companyId,String currentId,boolean onlineVisible,DepartmentDisplayType departmentDisplayType,boolean userWithoutDeptVisible) {
StringBuilder tree = new StringBuilder();
List<Department> departments = ApiFactory.getAcsService().getDepartments();
String[] str = currentId.split(SPLIT_ONE);
if (currentId.equals("0")) {
tree.append(defaultTreeThree(departments,companyId,departmentDisplayType,userWithoutDeptVisible));
}else if(str[0].equals("department")) {
tree.append(departmentTreeChange(Long.parseLong(str[1].substring(0,str[1].indexOf("="))),onlineVisible));
}
return tree.toString();
}
private static String departmentTreeChange(Long departmentId,boolean onlineVisible){
List<Department> childer = ApiFactory.getAcsService().getSubDepartmentList(departmentId);
List<User> users = ApiFactory.getAcsService().getUsersByDepartmentId(departmentId);
Department department=ApiFactory.getAcsService().getDepartmentById(departmentId);
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
//加载此部门下用户
List<TreeNode> userTreeNode = usersTree(users,department.getId().toString(),department.getName(),DEPARTMENT,onlineVisible);
//加载此部门下的子部门
List<TreeNode> childTreeNode = childerTreeChange(childer,onlineVisible);
treeNodes.addAll(userTreeNode);
treeNodes.addAll(childTreeNode);
return JsonParser.object2Json(treeNodes);
}
private static List<TreeNode> childerTreeChange(List<Department> childer,boolean onlineVisible){
List<TreeNode> childenTreeNodes = new ArrayList<TreeNode>();
TreeNode childTreeContent = null;
for (Department department : childer) {
List<User> users1 = ApiFactory.getAcsService().getUsersByDepartmentId(department.getId());
if (users1 != null && users1.size() > 0) {
List<Department> subDepts =ApiFactory.getAcsService().getSubDepartmentList(department.getId());
childTreeContent = new TreeNode(
new TreeAttr("department"+SPLIT_ONE+ department.getId()+SPLIT_TWO+department.getName()+SPLIT_THREE+department.getName(),"folder"),
"closed",
department.getName());
//封装子节点
List<TreeNode> childenSubTreeNodes = new ArrayList<TreeNode>();
// childenSubTreeNodes.addAll(usersTree(users1,department.getId().toString(),department.getName(),DEPARTMENT,onlineVisible));
//递归
childenSubTreeNodes.addAll(childerTreeChange(subDepts,onlineVisible));
childTreeContent.setChildren(childenSubTreeNodes);
childenTreeNodes.add(childTreeContent);
}else {
// 如果子部门下没有人员,则不显示(可以将下面代码注释)
List<Department> subDepts =ApiFactory.getAcsService().getSubDepartmentList(department.getId());
childTreeContent = new TreeNode(
new TreeAttr("department"+SPLIT_ONE+ department.getId()+SPLIT_TWO+department.getName()+SPLIT_THREE+department.getName(),"folder"),
"",
department.getName());
//封装子节点
List<TreeNode> childenSubTreeNodes = new ArrayList<TreeNode>();
//递归
childenSubTreeNodes.addAll(childerTreeChange(subDepts,onlineVisible));
childTreeContent.setChildren(childenSubTreeNodes);
childenTreeNodes.add(childTreeContent);
}
}
return childenTreeNodes;
}
private static String defaultTreeThree(List<Department> departments,Long companyId,DepartmentDisplayType departmentDisplayType,boolean userWithoutDeptVisible){
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
TreeNode root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"open",
ContextUtils.getCompanyName());
List<TreeNode> headNode = new ArrayList<TreeNode>();
TreeNode headTreeContent = null;
if(departments.size()>0){
headTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"open",
"部门");
}else{
headTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"",
"部门");
}
//如果显示无部门人员,则封装子节点
if(userWithoutDeptVisible){
//封装子节点
List<TreeNode> childrenTreeNode = new ArrayList<TreeNode>();
childrenTreeNode.addAll(departmentsTree(departments,departmentDisplayType));
//封装无部门人员节点
TreeNode noDepartmentUserTreeContent = new TreeNode(
new TreeAttr("NODEPARTMENT"+SPLIT_ONE+"0"+SPLIT_TWO,"folder"),
"",
"无部门人员");
noDepartmentUserTreeContent.setChildren(usersNotInDepartment());
childrenTreeNode.add(noDepartmentUserTreeContent);
headTreeContent.setChildren(childrenTreeNode);
}else{
headTreeContent.setChildren(departmentsTree(departments,departmentDisplayType));
}
headNode.add(headTreeContent);
root.setChildren(headNode);
treeNodes.add(root);
return JsonParser.object2Json(treeNodes);
}
private static String defaultTreeThreeIncludeDeleted(List<Department> departments,Long companyId,DepartmentDisplayType departmentDisplayType){
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
TreeNode root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"open",
ContextUtils.getCompanyName());
List<TreeNode> headNode = new ArrayList<TreeNode>();
TreeNode headTreeContent = null;
if(departments.size()>0){
headTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"open",
"部门");
}else{
headTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"",
"部门");
}
//封装子节点
List<TreeNode> childrenTreeNode = new ArrayList<TreeNode>();
childrenTreeNode.addAll(departmentsTree(departments,departmentDisplayType));
//封装无部门人员节点
TreeNode noDepartmentUserTreeContent = new TreeNode(
new TreeAttr("NODEPARTMENT"+SPLIT_ONE+"0"+SPLIT_TWO,""),
"",
"无部门人员");
noDepartmentUserTreeContent.setChildren(usersNotInDepartment());
childrenTreeNode.add(noDepartmentUserTreeContent);
headTreeContent.setChildren(childrenTreeNode);
headNode.add(headTreeContent);
root.setChildren(headNode);
treeNodes.add(root);
return JsonParser.object2Json(treeNodes);
}
public static String generateJsTreeNodeNewUser(String id, String state, String data,String rel,Long companyId){
StringBuilder node = new StringBuilder();
List<User> userInfoList = ApiFactory.getAcsService().getUsersWithoutDepartment();
node.append("{ \"attr\": {").append(JsTreeUtil1.treeAttrBefore).append(id).append(JsTreeUtil1.treeAttrMiddle).append(rel).append(JsTreeUtil1.treeAttrAfter).append("}");
if(state != null && !"".equals(state.trim())){
node.append(",\"state\" : \"").append(state).append("\"");
}
node.append(", \"data\": \"").append(data).append("\" ,\"children\":[");
node.append(delComma(usersTree(userInfoList)));
node.append("]},");
return node.toString();
}
private static String usersTree(List<User> usersList){
StringBuilder tree = new StringBuilder();
for (User user : usersList) {
tree.append(JsTreeUtil1.generateJsTreeNodeNew("user"+SPLIT_ONE+user.getId()+SPLIT_TWO+user.getName()+SPLIT_THREE+user.getLoginName()+SPLIT_FOUR+"nondepartment"+SPLIT_FIVE+"nondepartment"+SPLIT_SIX+"0"+SPLIT_EIGHT+user.getEmail()+SPLIT_SEVEN+user.getHonorificName()+SPLIT_SEVEN+user.getWeight(), "", user.getName(),"user")).append(",");
}
return tree.toString();
}
/**
* 工作组人员树
* @param onlineVisible
*/
public static String getCreateManGroupTree(Long companyId,String currentId, boolean onlineVisible) {
StringBuilder tree = new StringBuilder();
List<Department> departments = ApiFactory.getAcsService().getDepartments();
String[] str = currentId.split(SPLIT_ONE);
if (currentId.equals("0")) {
tree.append(defaultTreeFour(departments,companyId,onlineVisible));
}else if(str[0].equals("workGroup")){
tree.append(workGroupTree(Long.parseLong(str[1].substring(0,str[1].indexOf("="))),onlineVisible));
}
return tree.toString();
}
private static String defaultTreeFour(List<Department> departments,Long companyId,boolean onlineVisible){
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
TreeNode root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"open",
ContextUtils.getCompanyName());
List<Workgroup> workGroups = ApiFactory.getAcsService().getWorkgroups();
List<TreeNode> headNode = new ArrayList<TreeNode>();
TreeNode headTreeContent = null;
if(workGroups.size()>0){
headTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"open",
"工作组");
}else{
headTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"",
"工作组");
}
headTreeContent.setChildren(workGroupsTree(workGroups, departments,onlineVisible));
headNode.add(headTreeContent);
root.setChildren(headNode);
treeNodes.add(root);
return JsonParser.object2Json(treeNodes);
}
/**
* 部门树
*/
public static String getCreateDepartmentTree(Long companyId,String currentId,DepartmentDisplayType departmentDisplayType) {
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
TreeNode root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"open",
ContextUtils.getCompanyName());
List<Department> departments = ApiFactory.getAcsService().getDepartments();
if (currentId.equals("0")) {
root.setChildren(defaultTreeFive(departments,companyId,departmentDisplayType));
treeNodes.add(root);
}
return JsonParser.object2Json(treeNodes);
}
private static List<TreeNode> defaultTreeFive(List<Department> departments,Long companyId,DepartmentDisplayType departmentDisplayType){
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
TreeNode headTreeContent = null;
if(departments.size()>0){
headTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"open",
"部门");
}else{
headTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"",
"部门");
}
headTreeContent.setChildren(departmentsOnlyTree(departments,departmentDisplayType));
treeNodes.add(headTreeContent);
return treeNodes;
}
public static String getCreateDepartmentTreeIncludeDeleted(Long companyId,String currentId,DepartmentDisplayType departmentDisplayType) {
StringBuilder tree = new StringBuilder();
tree.append("[");
tree.append("{\"attr\":{").append(JsTreeUtil1.treeAttrBefore).append("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司").append(JsTreeUtil1.treeAttrMiddle).append("company").append(JsTreeUtil1.treeAttrAfter).append("},\"state\":\"open\",\"data\":\""+ContextUtils.getCompanyName() + "\",\"children\":");
List<Department> departments = ApiFactory.getAcsService().getDepartments();
if(currentId.equals("INITIALIZED_USERS")) {
tree.append(defaultTreeFiveIncludeDeleted(departments,companyId));
}else if (currentId.equals("INITIALIZED")) {
tree.append(defaultTreeFive(departments,companyId,departmentDisplayType));
}
tree.append("}");
tree.append("]");
return tree.toString();
}
//wj
private static String defaultTreeFiveIncludeDeleted(List<Department> departments,Long companyId){
StringBuilder tree = new StringBuilder();
tree.append("[");
if(departments.size()>0){
tree.append("{\"attr\":{").append(JsTreeUtil1.treeAttrBefore).append("allDepartment"+SPLIT_ONE+companyId+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门").append(JsTreeUtil1.treeAttrMiddle).append("folder").append(JsTreeUtil1.treeAttrAfter).append("},\"state\":\"open\",\"data\":\""+ "部门" + "\",\"children\":[");
}else{
tree.append("{\"attr\":{").append(JsTreeUtil1.treeAttrBefore).append("allDepartment"+SPLIT_ONE+companyId+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门").append(JsTreeUtil1.treeAttrMiddle).append("folder").append(JsTreeUtil1.treeAttrAfter).append("},\"state\":\"\",\"data\":\""+ "部门" + "\",\"children\":[");
}
//tree.append(delComma(departmentsOnlyTree(departments)));
tree.append("]},");
tree.append(JsTreeUtil1.generateJsTreeNodeNew("NODEPARTMENT"+SPLIT_ONE+"0"+SPLIT_TWO,"","无部门人员","")).append(",");
tree.append(JsTreeUtil1.generateJsTreeNodeNew("DELETED"+SPLIT_ONE+"0"+SPLIT_TWO,"","已删除用户",""));
tree.append("]");
return tree.toString();
}
private static List<TreeNode> departmentsOnlyTree(List<Department> departments,DepartmentDisplayType departmentDisplayType){
List<TreeNode> departmentNode = new ArrayList<TreeNode>();
for (Department department : departments) {
departmentNode.add(generatSubDeptNode(department,departmentDisplayType));
}
return departmentNode;
}
private static TreeNode generatSubDeptNode(Department department,DepartmentDisplayType departmentDisplayType){
if(departmentDisplayType == null) departmentDisplayType = DepartmentDisplayType.NAME;
String deptDisplayInfor = "";
switch (departmentDisplayType) {
case CODE:
deptDisplayInfor = department.getCode();
break;
case NAME:
deptDisplayInfor = department.getName();
break;
case SHORTTITLE:
deptDisplayInfor = department.getShortTitle();
break;
case SUMMARY:
deptDisplayInfor = department.getSummary();
break;
default:
deptDisplayInfor = department.getName();
break;
}
TreeNode departmentTreeContent = null;
List<Department> subDepts = ApiFactory.getAcsService().getSubDepartmentList(department.getId());
if(subDepts.isEmpty()){
departmentTreeContent = new TreeNode(
new TreeAttr("department"+SPLIT_ONE+department.getId()+SPLIT_TWO+deptDisplayInfor+SPLIT_THREE+department.getName(),"folder"),
"open",
deptDisplayInfor);
}else{
List<TreeNode> subDepartmentNode = new ArrayList<TreeNode>();
for(Department subDept : subDepts){
subDepartmentNode.add(generatSubDeptNode(subDept,departmentDisplayType));
}
departmentTreeContent = new TreeNode(
new TreeAttr("department"+SPLIT_ONE+department.getId()+SPLIT_TWO+deptDisplayInfor+SPLIT_THREE+department.getName(),"folder"),
"open",
deptDisplayInfor);
departmentTreeContent.setChildren(subDepartmentNode);
}
return departmentTreeContent;
}
/**
* 部门工作组树
*/
public static String getCreateDepartmentWorkgroupTree(Long companyId,String currentId,DepartmentDisplayType departmentDisplayType) {
StringBuilder tree = new StringBuilder();
List<Department> departments = ApiFactory.getAcsService().getDepartments();
String[] str = currentId.split(SPLIT_ONE);
if (currentId.equals("0")) {
tree.append(defaultTreeSeven(departments,companyId,departmentDisplayType));
}else if(str[0].equals("department")) {
tree.append(departmentTreeSeven(Long.parseLong(str[1].substring(0,str[1].indexOf("=")))));
}
return tree.toString();
}
private static String defaultTreeSeven(List<Department> departments,Long companyId,DepartmentDisplayType departmentDisplayType){
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
TreeNode root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"open",
ContextUtils.getCompanyName());
List<TreeNode> headNode = new ArrayList<TreeNode>();
//封装部门节点
TreeNode headDepartmentTreeContent = null;
if(departments.size()>0){
headDepartmentTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"open",
"部门");
}else{
headDepartmentTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"",
"部门");
}
headDepartmentTreeContent.setChildren(departmentsOnlyTree(departments,departmentDisplayType));
headNode.add(headDepartmentTreeContent);
//封装工作组节点
List<Workgroup> workGroups = ApiFactory.getAcsService().getWorkgroups();
TreeNode headWorkGroupTreeContent = null;
if(workGroups.size()>0){
headWorkGroupTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"open",
"工作组");
headWorkGroupTreeContent.setChildren(workGroupsTreeSeven(workGroups, departments));
headNode.add(headWorkGroupTreeContent);
}else{
headWorkGroupTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"",
"工作组");
headNode.add(headWorkGroupTreeContent);
}
root.setChildren(headNode);
treeNodes.add(root);
return JsonParser.object2Json(treeNodes);
}
private static List<TreeNode> workGroupsTreeSeven(List<Workgroup> workGroups,List<Department> departments){
List<TreeNode> workGroupTreeNodes = new ArrayList<TreeNode>();
TreeNode workGroupTreeContent = null;
for (Workgroup workGroup : workGroups) {
workGroupTreeContent = new TreeNode(
new TreeAttr("workGroup"+SPLIT_ONE+ workGroup.getId()+SPLIT_TWO+workGroup.getName()+SPLIT_THREE+workGroup.getName(),"folder"),
"",
workGroup.getName());
workGroupTreeNodes.add(workGroupTreeContent);
}
return workGroupTreeNodes;
}
private static String departmentTreeSeven(Long departmentId){
List<Department> childer = ApiFactory.getAcsService().getSubDepartmentList(departmentId);
return JsonParser.object2Json(childerTreeSeven(childer));
}
private static List<TreeNode> childerTreeSeven(List<Department> childer){
List<TreeNode> departmentTreeNode = new ArrayList<TreeNode>();
TreeNode departmentTreeContent = null;
for (Department department : childer) {
departmentTreeContent = new TreeNode(
new TreeAttr("department"+SPLIT_ONE+ department.getId()+SPLIT_TWO+department.getName()+SPLIT_THREE+department.getName(),"folder"),
"closed",
department.getName());
departmentTreeNode.add(departmentTreeContent);
}
return departmentTreeNode;
}
/**
* 工作组树
*/
public static String getCreateGroupTree(Long companyId,String currentId) {
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
List<Workgroup> workGroups = ApiFactory.getAcsService().getWorkgroups();
TreeNode root = null;
if(currentId.equals("INITIALIZED")){
root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"open",
ContextUtils.getCompanyName());
//封装子工作组
root.setChildren(defaultTreeSix(workGroups));
treeNodes.add(root);
}else{
if(workGroups.size()>0){
root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"open",
ContextUtils.getCompanyName());
if (currentId.equals("0")) {
root.setChildren(defaultTreeSix(workGroups));
}
treeNodes.add(root);
}else{
root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"",
ContextUtils.getCompanyName());
treeNodes.add(root);
}
}
return JsonParser.object2Json(treeNodes);
}
private static List<TreeNode> defaultTreeSix(List<Workgroup> workGroups){
List<TreeNode> workGroupTreeNodes = new ArrayList<TreeNode>();
TreeNode headTreeContent = null;
if(workGroups.size()>0){
headTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"open",
"工作组");
headTreeContent.setChildren(workGroupsOnlyTree(workGroups));
}else{
headTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"",
"工作组");
}
workGroupTreeNodes.add(headTreeContent);
return workGroupTreeNodes;
}
private static List<TreeNode> workGroupsOnlyTree(List<Workgroup> workGroups){
List<TreeNode> workGroupsTreeNodes = new ArrayList<TreeNode>();
TreeNode workGroupsTreeContent = null;
for (Workgroup workGroup : workGroups) {
workGroupsTreeContent = new TreeNode(
new TreeAttr("workGroup"+SPLIT_ONE+ workGroup.getId()+SPLIT_TWO+workGroup.getName()+SPLIT_THREE+workGroup.getName(),"folder"),
"",
workGroup.getName());
workGroupsTreeNodes.add(workGroupsTreeContent);
}
return workGroupsTreeNodes;
}
/**
* 公司人员树
* @param onlineVisible
*/
public static String getCreateManCompanyTree(Long companyId,String companyName,String currentId, boolean onlineVisible,DepartmentDisplayType departmentDisplayType,boolean userWithoutDeptVisible) {
StringBuilder tree = new StringBuilder();
List<Department> departments = ApiFactory.getAcsService().getDepartments();
List<User> usersList = ApiFactory.getAcsService().getUsersWithoutDepartment();
String[] str = currentId.split(SPLIT_ONE);
if (currentId.equals("0")) {
tree.append(defaultTree(companyName,departments,usersList,companyId,onlineVisible,departmentDisplayType,userWithoutDeptVisible));
}else if(str[0].equals("department")) {
tree.append(departmentTreeChange(Long.parseLong(str[1].substring(0,str[1].indexOf("="))),onlineVisible));
}else if(str[0].equals("workGroup")){
tree.append(workGroupTree(Long.parseLong(str[1].substring(0,str[1].indexOf("="))),onlineVisible));
}
return tree.toString();
}
/**
* 只查部门,工作组和没有部门的用户
* @param departments
* @param usersList
* @return
*/
private static String defaultTree(String companyName,List<Department> departments,List<User> usersList,Long companyId,boolean onlineVisible,DepartmentDisplayType departmentDisplayType,boolean userWithoutDeptVisible){
List<TreeNode> treeNodes = new ArrayList<TreeNode>();
TreeNode root = new TreeNode(
new TreeAttr("company"+SPLIT_ONE+"company"+SPLIT_TWO+"全公司"+SPLIT_THREE+"全公司","company"),
"open",
ContextUtils.getCompanyName());
//封装部门子节点
List<TreeNode> headDepartmentNode = new ArrayList<TreeNode>();
TreeNode headDepartmentTreeContent = null;
if(departments.size()>0){
headDepartmentTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"open",
"部门");
}else{
headDepartmentTreeContent = new TreeNode(
new TreeAttr("allDepartment"+SPLIT_ONE+"allDepartment"+SPLIT_TWO+"所有部门"+SPLIT_THREE+"部门","folder"),
"",
"部门");
}
//如果显示无部门人员,则封装子节点
if(userWithoutDeptVisible){
//封装子节点
List<TreeNode> childrenTreeNode = new ArrayList<TreeNode>();
childrenTreeNode.addAll(departmentsTree(departments,departmentDisplayType));
//封装无部门人员节点
TreeNode noDepartmentUserTreeContent = new TreeNode(
new TreeAttr("NODEPARTMENT"+SPLIT_ONE+"0"+SPLIT_TWO,"folder"),
"",
"无部门人员");
noDepartmentUserTreeContent.setChildren(usersNotInDepartment());
childrenTreeNode.add(noDepartmentUserTreeContent);
headDepartmentTreeContent.setChildren(childrenTreeNode);
}else{
headDepartmentTreeContent.setChildren(departmentsTree(departments,departmentDisplayType));
}
headDepartmentNode.add(headDepartmentTreeContent);
//封装工作组子节点
List<Workgroup> workGroups = ApiFactory.getAcsService().getWorkgroups();
List<TreeNode> headWorkGroupNode = new ArrayList<TreeNode>();
TreeNode headWorkGroupTreeContent = null;
if(workGroups.size()>0){
headWorkGroupTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"open",
"工作组");
}else{
headWorkGroupTreeContent = new TreeNode(
new TreeAttr("allWorkGroup"+SPLIT_ONE+"allWorkGroup"+SPLIT_TWO+"工作组"+SPLIT_THREE+"工作组","folder"),
"",
"工作组");
}
headWorkGroupTreeContent.setChildren(workGroupsTree(workGroups, departments,onlineVisible));
headWorkGroupNode.add(headWorkGroupTreeContent);
List<TreeNode> togetherTreeNode = new ArrayList<TreeNode>();
togetherTreeNode.addAll(headDepartmentNode);
togetherTreeNode.addAll(headWorkGroupNode);
root.setChildren(togetherTreeNode);
treeNodes.add(root);
return JsonParser.object2Json(treeNodes);
}
/**
* 只查部门
* @param departments
* @param usersList
* @return
*/
private static List<TreeNode> departmentsTree(List<Department> departments,DepartmentDisplayType departmentDisplayType){
List<TreeNode> departmentsTreeNode = new ArrayList<TreeNode>();
TreeNode childTreeContent = null;
String deptDisplayInfor="";
if(departmentDisplayType == null) departmentDisplayType = DepartmentDisplayType.NAME;
for (Department department : departments) {
List<Department> childer = ApiFactory.getAcsService().getSubDepartmentList(department.getId());
List<User> users = ApiFactory.getAcsService().getUsersByDepartmentId(department.getId());
switch (departmentDisplayType) {
case CODE:
deptDisplayInfor = department.getCode();
break;
case NAME:
deptDisplayInfor = department.getName();
break;
case SHORTTITLE:
deptDisplayInfor = department.getShortTitle();
break;
case SUMMARY:
deptDisplayInfor = department.getSummary();
break;
default:
deptDisplayInfor = department.getName();
break;
}
if ((childer != null && childer.size() > 0|| users != null && users.size() > 0)) {
childTreeContent = new TreeNode(
new TreeAttr("department"+SPLIT_ONE+ department.getId()+SPLIT_TWO+deptDisplayInfor+SPLIT_THREE+department.getName(),"folder"),
"closed",
deptDisplayInfor);
}else{
childTreeContent = new TreeNode(
new TreeAttr("department"+SPLIT_ONE+ department.getId()+SPLIT_TWO+deptDisplayInfor+SPLIT_THREE+department.getName(),"folder"),
"",
deptDisplayInfor);
}
departmentsTreeNode.add(childTreeContent);
}
return departmentsTreeNode;
}
/**
* 只查工作组
* @param departments
* @param usersList
* @return
*/
private static List<TreeNode> workGroupsTree(List<Workgroup> workGroups,List<Department> departments,boolean onlineVisible){
List<TreeNode> workGroupsChildNode = new ArrayList<TreeNode>();
TreeNode workGroupsChildContent = null;
for (Workgroup workGroup : workGroups) {
List<User> users = ApiFactory.getAcsService().getUsersByWorkgroupId(workGroup.getId());
if (workGroups != null && workGroups.size() > 0&&users != null && users.size() > 0) {
workGroupsChildContent = new TreeNode(
new TreeAttr("workGroup"+SPLIT_ONE+workGroup.getId()+SPLIT_TWO+workGroup.getName()+SPLIT_THREE+workGroup.getName(),"folder"),
"closed",
workGroup.getName());
//加载工作组下面人员
//workGroupsChildContent.setChildren(usersTree(users,workGroup.getId().toString(),workGroup.getName(),WORKGROUP,onlineVisible));
}else{
workGroupsChildContent = new TreeNode(
new TreeAttr("workGroup"+SPLIT_ONE+workGroup.getId()+SPLIT_TWO+workGroup.getName()+SPLIT_THREE+workGroup.getName(),"folder"),
"",
workGroup.getName());
}
workGroupsChildNode.add(workGroupsChildContent);
}
return workGroupsChildNode;
}
// /**
// * 不属于任何部门的用户
// * @param departments
// * @param usersList
// * @return
// */
// private static String usersNotInDeptTree(List<User> usersList){
// StringBuilder tree = new StringBuilder();
// tree.append(JsTreeUtil.generateJsTreeNodeNew("usersNotIndept_usersNotIndept=无部门人员", "closed", "无部门人员",generateUsersNotInDept(usersList),"folder")).append(",");
//
// return tree.toString();
// }
// private static String generateUsersNotInDept(List<User> usersList){
// StringBuilder tree = new StringBuilder();
// for (User user : usersList) {
// tree.append(JsTreeUtil.generateJsTreeNodeNew("user_" +user.getId() + "="+ user.getName()+"-"+user.getLoginName(), "", user.getName(),"user")).append(",");
// }
// return tree.toString();
// }
/**
* 2查部门及下面的用户和子部门
* @param departments
* @param usersList
* @return
*/
@SuppressWarnings("unused")
private static String departmentTree(Long departmentId,boolean onlineVisible){
List<Department> childer = ApiFactory.getAcsService().getSubDepartmentList(departmentId);
List<User> users = ApiFactory.getAcsService().getUsersByDepartmentId(departmentId);
Department department=ApiFactory.getAcsService().getDepartmentById(departmentId);
StringBuilder tree = new StringBuilder();
tree.append("[");
tree.append(delComma(usersTree(users,department.getId().toString(),department.getName(),DEPARTMENT,onlineVisible)+childerTree(childer)));
tree.append("]");
return tree.toString();
}
private static List<TreeNode> usersTree(List<User> usersList,String departId,String name,String type,boolean onlineVisible){
List<TreeNode> usersTreeNodes = new ArrayList<TreeNode>();
TreeNode userTreeContent = null;
List<Long> onlineUserIds = ApiFactory.getAcsService().getOnlineUserIds();
for (User user : usersList) {
if(onlineVisible){
if(onlineUserIds.contains(user.getId())){
userTreeContent = new TreeNode(
new TreeAttr("user"+SPLIT_ONE+user.getId()+SPLIT_TWO+ user.getName()+SPLIT_THREE+user.getLoginName()+SPLIT_FOUR+type+SPLIT_FIVE+name+SPLIT_SIX+departId+SPLIT_EIGHT+user.getEmail()+SPLIT_SEVEN+user.getHonorificName()+SPLIT_SEVEN+user.getWeight(),"onlineUser"),
"",
user.getName());
usersTreeNodes.add(userTreeContent);
}else{
userTreeContent = new TreeNode(
new TreeAttr("user"+SPLIT_ONE+user.getId()+SPLIT_TWO+ user.getName()+SPLIT_THREE+user.getLoginName()+SPLIT_FOUR+type+SPLIT_FIVE+name+SPLIT_SIX+departId+SPLIT_EIGHT+user.getEmail()+SPLIT_SEVEN+user.getHonorificName()+SPLIT_SEVEN+user.getWeight(),"user"),
"",
user.getName());
usersTreeNodes.add(userTreeContent);
}
}else{
userTreeContent = new TreeNode(
new TreeAttr("user"+SPLIT_ONE+user.getId()+SPLIT_TWO+ user.getName()+SPLIT_THREE+user.getLoginName()+SPLIT_FOUR+type+SPLIT_FIVE+name+SPLIT_SIX+departId+SPLIT_EIGHT+user.getEmail()+SPLIT_SEVEN+user.getHonorificName()+SPLIT_SEVEN+user.getWeight(),"user"),
"",
user.getName());
usersTreeNodes.add(userTreeContent);
}
}
return usersTreeNodes;
}
//无部门用户
private static List<TreeNode> usersNotInDepartment(){
List<User> usersList = ApiFactory.getAcsService().getUsersWithoutDepartment();
List<TreeNode> usersTreeNodes = new ArrayList<TreeNode>();
TreeNode userTreeContent = null;
for (User user : usersList) {
userTreeContent = new TreeNode(
new TreeAttr("user"+SPLIT_ONE+user.getId()+SPLIT_TWO+ user.getName()+SPLIT_THREE+user.getLoginName()+SPLIT_FOUR+NOTINDEPARTMENT+SPLIT_FIVE+NOTINDEPARTMENT+SPLIT_SIX+NOTINDEPARTMENT+SPLIT_EIGHT+user.getEmail()+SPLIT_SEVEN+user.getHonorificName()+SPLIT_SEVEN+user.getWeight(),"user"),
"",
user.getName());
usersTreeNodes.add(userTreeContent);
}
return usersTreeNodes;
}
private static String childerTree(List<Department> childer){
StringBuilder tree = new StringBuilder();
for (Department department : childer) {
List<User> users1 = ApiFactory.getAcsService().getUsersByDepartmentId(department.getId());
if (users1 != null && users1.size() > 0) {
tree.append(JsTreeUtil1.generateJsTreeNodeNew("department"+SPLIT_ONE+ department.getId()+SPLIT_TWO+department.getName()+SPLIT_THREE+department.getName(), "closed", department.getName(),"folder")).append(",");
}else {
// 如果子部门下没有人员,则不显示(可以将下面代码注释)
tree.append(JsTreeUtil1.generateJsTreeNodeNew("department"+SPLIT_ONE+ department.getId()+SPLIT_TWO+department.getName()+SPLIT_THREE+department.getName(), "", department.getName(),"folder")).append(",");
}
}
return tree.toString();
}
/**
* 3查工作组及下面的用户
* @param departments
* @param usersList
* @return
*/
private static String workGroupTree(Long workGroupId,boolean onlineVisible){
List<User> users = ApiFactory.getAcsService().getUsersByWorkgroupId(workGroupId);
Workgroup group=ApiFactory.getAcsService().getWorkgroupById(workGroupId);
return JsonParser.object2Json(usersTree(users,group.getId().toString(),group.getName(),WORKGROUP,onlineVisible));
}
/**
* 去逗号
* @param str
* @return
*/
private static String delComma(String str){
if(StringUtils.endsWith(str, ","))str= str.substring(0,str.length() - 1);
return str;
}
}