/**
   * 将用户分配的权限转换成主菜单的JSON数据,输出到前台
   *
   * @param authorizedFuncs 用户分配的功能权限
   * @param funcType 主菜单
   * @return
   */
  private String convertFuncsToMenu(List<FuncModel> authorizedFuncs, Integer funcType) {
    System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
    Collections.sort(
        authorizedFuncs,
        new Comparator<FuncModel>() {
          public int compare(FuncModel obj1, FuncModel obj2) {

            return obj2.getMenuSort() - obj1.getMenuSort();
          }
        });
    String webPath = getRequest().getContextPath();

    /** 查找数据库的主菜单的顶级菜单项记录,然后将功能权限作为子菜单加入到顶级菜单中,如果顶级菜单下没有权限,将忽略不显示 */
    String hsql =
        "from FuncModel where parentId = ? and funcType = ? and deleted = ? order by menuSort";
    List<FuncModel> subSysFuncs =
        this.getBaseService().query(hsql, new Object[] {Integer.valueOf(-1), 1, false});
    JSONArray jsonArray = new JSONArray();
    for (FuncModel func : subSysFuncs) {
      List<FuncModel> childSysFuns = findChidFuncByParentId(func.getEntityId(), authorizedFuncs);
      JSONObject menuItem = new JSONObject();
      menuItem.put("id", "" + func.getEntityId());
      menuItem.put("text", func.getDescr());
      menuItem.put("icon", func.getIcon());
      JSONObject attributes = new JSONObject();
      attributes.put("url", func.getUrl());
      menuItem.put("attributes", attributes);

      JSONArray childMenuItems = new JSONArray();
      for (FuncModel childSysFunc : childSysFuns) {
        JSONObject childItem = new JSONObject();
        childItem.put("id", "" + childSysFunc.getEntityId());
        childItem.put("text", childSysFunc.getDescr());

        childItem.put("icon", childSysFunc.getIcon());
        String url = "";
        if (!StringUtil.isEmpty(childSysFunc.getUrl())) {
          url = webPath + "/" + func.getUrl() + "/" + childSysFunc.getUrl();
        }

        attributes = new JSONObject();
        attributes.put("url", url);
        childItem.put("attributes", attributes);
        childMenuItems.add(childItem);
      }
      if (childMenuItems.size() > 0) {
        menuItem.put("menu", childMenuItems);
        jsonArray.add(menuItem); // 如果父菜单下没有子菜单,就不显示在前台
      } else if (isAuthorized(func)) {
        jsonArray.add(menuItem);
      }
    }

    return jsonArray.toString();
  }
  public String login() {

    if (StringUtil.isEmpty(this.username)) {
      setMessage("用户名不能为空");
      return json(false, super.getMessage());
    }
    if (this.password == null) {
      setMessage("密码不能为空");
      return json(false, super.getMessage());
    }

    try {
      String hsql = "from UserInfo where loginName = ? and userState <> ? and deleted = ?";

      UserInfo user =
          (UserInfo)
              this.getBaseService()
                  .find(hsql, new Object[] {username, UserInfo.STATE_SUSPEND, false});

      if (user == null) {
        setMessage("用户名或密码错误");
        return json(false, super.getMessage());
      }
      String userpassword = null;

      userpassword = user.getPassword();

      String pwd = StringUtil.encodePassword(userpassword, "md5");

      if (!userpassword.equalsIgnoreCase(this.password)) {
        setMessage("用户名或密码不正确");
        return json(false, super.getMessage());
      }

      // user.setUserType(this.userType);
      String hostName = getRequest().getRemoteHost();
      user.setIp(hostName);
      if (user.getRoles().size() < 1) {
        Role role = new Role();
        role.setName("ROLE_ADMIN");
        user.getRoles().add(role);
      }
      user.setLoginTime(new Date());
      MobileOnlineUser.onlineUserMap.put(user.getEntityId(), user);
      authorizedFuncs = new ArrayList();
      if (user.getUserFlag() == UserInfo.USER_FLAG_SUPER_ADMIN) {
        // 如果是超级用户,将加所有权限,可以分配所有管理部门
        authorizedFuncs = this.getBaseService().loadAll(FuncModel.class);
      } else {
        Role r = user.getRole();
        if (r != null) {
          authorizedFuncs.addAll(r.getFuncs());
        }
      }
      // 移动端的权限
      List funcResult = new ArrayList();
      Map userInfoMap = new HashMap();
      // Map funcMap = new HashMap();
      for (FuncModel f : authorizedFuncs) {
        if (f.getFuncType() == FuncModel.FUNC_TYPE_MOBILE) {
          funcResult.add(f.getFuncName());
          // funcMap.put(f.getFuncName(), f.getFuncName());
        }
      }

      userInfoMap.put("funcs", funcResult);
      SystemConfig sc = (SystemConfig) this.getBaseService().load(SystemConfig.class, 1);

      userInfoMap.put("id", user.getEntityId());
      userInfoMap.put("name", user.getName());
      userInfoMap.put("loginName", user.getLoginName());

      userInfoMap.put("mapCenterLat", user.getMapCenterLat());
      if (user.getMapCenterLat() > 0) {
        sc.setInitLat(user.getMapCenterLat());
      }
      if (user.getMapCenterLng() > 0) {
        sc.setInitLng(user.getMapCenterLng());
      }

      userInfoMap.put("mapCenterLng", user.getMapCenterLng());

      if (user.getMapLevel() > 0) {
        userInfoMap.put("mapZoom", user.getMapLevel());

        sc.setInitZoomLevel(user.getMapLevel());
      } else {
        userInfoMap.put("mapZoom", 15);
      }

      if (user.getRoles().size() < 1) {
        // if (user.getUserType() == 0) {
        Role role = new Role();
        // role.setDescription(getText("administrator"));
        role.setName("ROLE_ADMIN");
        user.getRoles().add(role);
        // }
      }
      Role r = user.getRole();
      userInfoMap.put("roleName", r.getName());

      // JSONArray roleArray = JSONArray.fromObject(user.getRoles(),
      // this.jsonConfig);

      getSession().put(SESSION_KEY_SYSTEM_CONFIG, sc);

      super.setOnlineUser(user);
      super.setAuthorizedDep(user);

      this.LogOperation("移动端登录");

      return json(true, userInfoMap);
    } catch (Exception e) {
      this.log.error(e.getMessage(), e);
      return json(false, e.getMessage());
    }
  }