private void get_special_hide_dept_ids(int uid) {
   Integer did = findDidByUid(uid);
   DeptMaskItem deptMaskItem = null;
   while (did != null && did != 0) {
     special_hide_dept_ids.add(did);
     deptMaskItem = IMOApp.getApp().deptInfoMap.get(did);
     if (deptMaskItem == null) return;
     did = deptMaskItem.getParent_dept_id();
   }
 }
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {

    if (isFinishing()) {
      return true;
    }

    if (keyCode == KeyEvent.KEYCODE_MENU) {}

    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
      LogFactory.d(TAG, "KEYCODE_BACK has clicked .");

      if (mStructNavView.getViewGroupChildCount() == 2) {
        mStructNavView.removeAllItemView();
        adapter.showChildNodes(rootNodeDept);
      } else {
        Node node = mStructNavView.getLastChildNode();
        if (node != null) {
          adapter.showChildNodes(node);
        } else {
          boolean keepOnline =
              (Boolean)
                  PreferenceManager.get(
                      Globe.SP_FILE, new Object[] {LoginActivity.LOGIN_KEEPONLINE, false});
          if (!keepOnline) {
            DialogFactory.promptExit(mContext).show();
          } else {
            IMOApp.getApp().hasRunInBackground = true;
            NoticeManager.updateRecoverAppNotice(notificationManager);
            Functions.backToDesk(this);
          }
        }
      }
      return true;
    }

    if (keyCode == KeyEvent.KEYCODE_SEARCH) {}

    return super.onKeyDown(keyCode, event);
  }
  /** 构建组织架构部门树 */
  private void buildOrganizeTree() {
    // 1-构建DeptNode
    if (mGlobal.deptid == null) {
      return;
    }

    for (int i = 0; i < mGlobal.deptid.length; i++) {
      int id = mGlobal.deptid[i];

      DeptMaskItem deptInfo = mGlobal.deptInfoMap.get(id);
      if (deptInfo == null) {
        IMOApp.getApp().turn2LoginForLogout();
        return;
      }
      Node deptNode = null;
      if (deptInfo.getDept_id() == 0) {
        deptNode = new Node(new NodeData("组织结构"));
      } else {
        deptNode = new Node(new NodeData(deptInfo.getName()));
      }
      deptNode.setId(deptInfo.getDept_id());
      deptNode.setDept(true);
      // if (currentDeptNeedHide(id))
      // deptNode.setNeedShow(false);
      nodeMap.put(deptInfo.getDept_id(), deptNode);
      deptNodeNextSiblingMap.put(deptInfo.getDept_id(), deptInfo.getNext_sibling());
      deptIdList.add(deptInfo.getDept_id());
    }

    for (int i = 0; i < mGlobal.deptid.length; i++) {
      int id = mGlobal.deptid[i];
      Node curDeptNode = nodeMap.get(id);
      if (id != 0) {
        DeptMaskItem deptInfo = mGlobal.deptInfoMap.get(id);

        int parentId = deptInfo.getParent_dept_id();
        Node parentNode = nodeMap.get(parentId);

        if (parentNode != null) {
          NodeManager.addChildNode(parentNode, curDeptNode);
        }

        int firstChildId = deptInfo.getFirst_child();
        if (firstChildId != -1) {
          // 添加child
          Node firstChildNode = nodeMap.get(firstChildId);
          NodeManager.addChildNode(curDeptNode, firstChildNode);
        }
      }
    }
    // 隐藏部门
    for (Integer did : IMOApp.getApp().hide_dept_ids) {
      if (nodeMap == null) break;
      Node node = nodeMap.get(did);
      if (node == null) continue;
      node.setNeedShow(false);
      ArrayList<Node> nodes = node.getChildNodes();
      for (Node node1 : nodes) {
        node1.setNeedShow(false);
      }
    }
    // 显示自己
    System.out.println("显示部门列表:" + Arrays.toString(special_hide_dept_ids.toArray()));
    for (Integer did : special_hide_dept_ids) {
      if (nodeMap == null) break;
      Node node = nodeMap.get(did);
      if (node == null) continue;
      node.setNeedShow(true);
    }

    Node rootNode = nodeMap.get(0);
    sortDeptNode(rootNode);
  }