userserviceimp.java

来自「一个jsp写的bbs」· Java 代码 · 共 837 行 · 第 1/2 页

JAVA
837
字号
package com.laoer.bbscs.service.imp;

import java.io.*;
import java.util.*;

import org.apache.commons.io.*;
import org.apache.commons.lang.math.*;
import org.apache.commons.logging.*;
import com.laoer.bbscs.bean.*;
import com.laoer.bbscs.comm.*;
import com.laoer.bbscs.dao.*;
import com.laoer.bbscs.exception.*;
import com.laoer.bbscs.fio.*;
import com.laoer.bbscs.service.*;
import com.laoer.bbscs.service.config.*;
import com.laoer.bbscs.service.web.*;
import com.laoer.comm.util.*;
import com.laoer.bbscs.service.singleton.UserLevelSingleton;

/**
 * <p>Title: 天乙社区</p>
 *
 * <p>Description: BBSCS</p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: Laoer.com</p>
 *
 * @author Gong Tianyi
 * @version 7.0
 */
public class UserServiceImp
    implements UserService {

  private static final Log logger = LogFactory.getLog(UserServiceImp.class);

  private UserInfoDAO userInfoDAO;

  private UserDetailDAO userDetailDAO;

  private UserGroupDAO userGroupDAO;

  private PermissionDAO permissionDAO;

  private SysConfig sysConfig;

  private String safePath;

  private UserInfoFileIO userInfoFileIO;

  private Cache userPermissionCache;

  private UserLevelSingleton userLevelSingleton;

  public UserServiceImp() {
  }

  /**
   * 创建用户
   *
   * @param userInfo UserInfo
   * @param userDetail UserDetail
   * @throws BbscsException
   * @todo Implement this com.laoer.bbscs.service.UserService method
   */
  /*
     public void createUserInfo(UserInfo userInfo, UserDetail userDetail) throws BbscsException {
    try {
      userInfo = this.getUserInfoDAO().saveUserInfo(userInfo);
      userDetail.setUserID(userInfo.getId());
      this.getUserDetailDAO().saveUserDetail(userDetail);
    }
    catch (Exception ex) {
      logger.error(ex);
      throw new BbscsException(ex);
    }
     }*/

  /**
   * 根据用户ID取得UserDetail对象
   *
   * @param userID String
   * @return UserDetail
   * @todo Implement this com.laoer.bbscs.service.UserService method
   */
  /*
     public UserDetail findUserDetailByUserID(String userID) {
    return this.getUserDetailDAO().findUserDetailByUserID(userID);
     }*/

  /**
   * 根据Email查找UserInfo对象
   *
   * @param email String
   * @return UserInfo
   * @todo Implement this com.laoer.bbscs.service.UserService method
   */
  public UserInfo findUserInfoByEmail(String email) {
    return this.getUserInfoDAO().findUserInfoByEmail(email);
  }

  /**
   * 根据主键查找UserInfo对象
   *
   * @param id String
   * @return UserInfo
   * @todo Implement this com.laoer.bbscs.service.UserService method
   */
  public UserInfo findUserInfoById(String id) {
    return this.getUserInfoDAO().findUserInfoById(id);
  }

  /**
   * 根据用户名查找UserInfo对象
   *
   * @param userName String
   * @return UserInfo
   * @todo Implement this com.laoer.bbscs.service.UserService method
   */
  public UserInfo findUserInfoByUserName(String userName) {
    return this.getUserInfoDAO().findUserInfoByUserName(userName);
  }

  /**
   * 取得用户分页列表
   *
   * @param orderby String
   * @param ascordesc String
   * @param pages Pages
   * @return PageList
   * @todo Implement this com.laoer.bbscs.service.UserService method
   */
  public PageList findUserInfoList(String orderby, String ascordesc, Pages pages) {
    PageList pl = new PageList();

    if (pages.getTotalNum() == -1) {
      pages.setTotalNum(this.getAllUserNum());
    }
    pages.executeCount();

    List l = this.getUserInfoDAO().findUserInfoList(orderby, ascordesc,
        pages.getSpage(), pages.getPerPageNum());

    pl.setObjectList(l);
    pl.setPages(pages);
    return pl;
  }

  /**
   * 取得所有用户数量
   *
   * @return int
   * @todo Implement this com.laoer.bbscs.service.UserService method
   */
  public int getAllUserNum() {
    return this.getUserInfoDAO().getAllUserNum();
  }

  /**
   * 保存或更新UserDetail对象
   *
   * @param userDetail UserDetail
   * @return UserDetail
   * @throws BbscsException
   * @todo Implement this com.laoer.bbscs.service.UserService method
   */
  /*
     public UserDetail saveUserDetail(UserDetail userDetail) throws BbscsException {
    return null;
     }*/

  /**
   * 保存或更新UserInfo对象
   *
   * @param userInfo UserInfo
   * @return UserInfo
   * @throws BbscsException
   * @todo Implement this com.laoer.bbscs.service.UserService method
   */
  public UserInfo saveUserInfo(UserInfo userInfo) throws BbscsException {
    try {
      return this.getUserInfoDAO().saveUserInfo(userInfo);
    }
    catch (Exception ex) {
      logger.error(ex);
      throw new BbscsException(ex);
    }
  }

  public Map[] getUserPermission(UserInfo userInfo) {
    /*
         //创建Map组,Map[0]保存用户普通权限,Map[1]保存特殊权限
         Map[] userPermission = {new HashMap(), new HashMap()};
         UserGroup ug = this.getUserGroupDAO().findUserGroupByID(userInfo.getGroupID()); //取得用户属组
         if (ug != null) {
      Iterator it = ug.getRoles().iterator(); //取得角色列表
      while (it.hasNext()) {
        Role role = (Role) it.next();
        List permissions = role.getPermissions(); //取得角色的权限ID列表
        if (permissions != null && !permissions.isEmpty()) {
          List permissionList = this.getPermissionDAO().findPermissionnIDs(permissions); //取得权限列表
          for (int i = 0; i < permissionList.size(); i++) {
            Permission permission = (Permission) permissionList.get(i);
            if (permission.getTypeID() == 0) {
              userPermission[0].put(permission.getResource() + "," + permission.getAction(),
                                    permission);
            }
            else {
              userPermission[1].put(permission.getId(), permission);
            }
          }
        }
      }
         }
         return userPermission;*/
    if (Constant.USE_PERMISSION_CACHE) {
      Map[] userPermission = (Map[])this.getUserPermissionCache().get("U_" +
          String.valueOf(userInfo.getGroupID()));
      if (userPermission == null) {
        //创建Map组,Map[0]保存用户普通权限,Map[1]保存特殊权限
        userPermission = new Map[2];
        userPermission[0] = new HashMap();
        userPermission[1] = new HashMap();
        //userPermission = {new HashMap(), new HashMap()};
        UserGroup ug = this.getUserGroupDAO().findUserGroupByID(userInfo.getGroupID()); //取得用户属组
        if (ug != null) {
          Iterator it = ug.getRoles().iterator(); //取得角色列表
          while (it.hasNext()) {
            Role role = (Role) it.next();
            List permissions = role.getPermissions(); //取得角色的权限ID列表
            if (permissions != null && !permissions.isEmpty()) {
              List permissionList = this.getPermissionDAO().findPermissionnIDs(permissions); //取得权限列表
              for (int i = 0; i < permissionList.size(); i++) {
                Permission permission = (Permission) permissionList.get(i);
                if (permission.getTypeID() == 0) {
                  userPermission[0].put(permission.getResource() + "," + permission.getAction(),
                                        permission);
                }
                else {
                  userPermission[1].put(permission.getId(), permission);
                }
              }
            }
          }
        }
        this.getUserPermissionCache().add("U_" + String.valueOf(userInfo.getGroupID()), userPermission);
      }
      return userPermission;
    }
    else {
      Map[] userPermission = {new HashMap(), new HashMap()};
      UserGroup ug = this.getUserGroupDAO().findUserGroupByID(userInfo.getGroupID()); //取得用户属组
      if (ug != null) {
        Iterator it = ug.getRoles().iterator(); //取得角色列表
        while (it.hasNext()) {
          Role role = (Role) it.next();
          List permissions = role.getPermissions(); //取得角色的权限ID列表
          if (permissions != null && !permissions.isEmpty()) {
            List permissionList = this.getPermissionDAO().findPermissionnIDs(permissions); //取得权限列表
            for (int i = 0; i < permissionList.size(); i++) {
              Permission permission = (Permission) permissionList.get(i);
              if (permission.getTypeID() == 0) {
                userPermission[0].put(permission.getResource() + "," + permission.getAction(),
                                      permission);
              }
              else {
                userPermission[1].put(permission.getId(), permission);
              }
            }
          }
        }
      }
      return userPermission;
    }
  }

  public Map[] getUserPermission(int groupID) {
    /*
         Map[] userPermission = {new HashMap(), new HashMap()};
         UserGroup ug = this.getUserGroupDAO().findUserGroupByID(groupID); //取得用户属组
         if (ug != null) {
      Iterator it = ug.getRoles().iterator(); //取得角色列表
      while (it.hasNext()) {
        Role role = (Role) it.next();
        List permissions = role.getPermissions(); //取得角色的权限ID列表
        if (permissions != null && !permissions.isEmpty()) {
          List permissionList = this.getPermissionDAO().findPermissionnIDs(permissions); //取得权限列表
          for (int i = 0; i < permissionList.size(); i++) {
            Permission permission = (Permission) permissionList.get(i);
            if (permission.getTypeID() == 0) {
              userPermission[0].put(permission.getResource() + "," + permission.getAction(),
                                    permission);
            }
            else {
              userPermission[1].put(permission.getId(), permission);
            }
          }
        }
      }
         }
         return userPermission;*/
    if (Constant.USE_PERMISSION_CACHE) {
      Map[] userPermission = (Map[])this.getUserPermissionCache().get("U_" + String.valueOf(groupID));
      if (userPermission == null) {
        userPermission = new Map[2];
        userPermission[0] = new HashMap();
        userPermission[1] = new HashMap();

        UserGroup ug = this.getUserGroupDAO().findUserGroupByID(groupID); //取得用户属组
        if (ug != null) {
          Iterator it = ug.getRoles().iterator(); //取得角色列表
          while (it.hasNext()) {
            Role role = (Role) it.next();
            List permissions = role.getPermissions(); //取得角色的权限ID列表
            if (permissions != null && !permissions.isEmpty()) {
              List permissionList = this.getPermissionDAO().findPermissionnIDs(permissions); //取得权限列表
              for (int i = 0; i < permissionList.size(); i++) {
                Permission permission = (Permission) permissionList.get(i);
                if (permission.getTypeID() == 0) {
                  userPermission[0].put(permission.getResource() + "," + permission.getAction(),
                                        permission);
                }
                else {
                  userPermission[1].put(permission.getId(), permission);
                }
              }
            }
          }
        }
        this.getUserPermissionCache().add("U_" + String.valueOf(groupID), userPermission);
      }
      return userPermission;
    }
    else {
      Map[] userPermission = {new HashMap(), new HashMap()};
      UserGroup ug = this.getUserGroupDAO().findUserGroupByID(groupID); //取得用户属组
      if (ug != null) {
        Iterator it = ug.getRoles().iterator(); //取得角色列表
        while (it.hasNext()) {
          Role role = (Role) it.next();
          List permissions = role.getPermissions(); //取得角色的权限ID列表
          if (permissions != null && !permissions.isEmpty()) {
            List permissionList = this.getPermissionDAO().findPermissionnIDs(permissions); //取得权限列表
            for (int i = 0; i < permissionList.size(); i++) {
              Permission permission = (Permission) permissionList.get(i);
              if (permission.getTypeID() == 0) {
                userPermission[0].put(permission.getResource() + "," + permission.getAction(),
                                      permission);
              }
              else {
                userPermission[1].put(permission.getId(), permission);
              }
            }
          }
        }
      }
      return userPermission;
    }
  }

  public UserInfo saveAtLogin(UserInfo userInfo) throws BbscsException {
    //如果本次登录时间距上次上次登录时间超过30分钟,才增加登录次数和经验值
    try {
      if ( (System.currentTimeMillis() - userInfo.getLastLoginTime().getTime()) > 30 * 60000) {
        userInfo.setLoginTimes(userInfo.getLoginTimes() + 1);
        userInfo.setExperience(userInfo.getExperience() + 1);
      }

      return this.getUserInfoDAO().saveUserInfo(userInfo);
    }
    catch (Exception ex) {
      logger.error(ex);
      throw new BbscsException(ex);
    }
  }

  public String getUserFilePath(String userID) {
    StringBuffer sb = new StringBuffer();
    int num = Math.abs(userID.hashCode());
    sb.append(this.getSafePath());
    sb.append("user/");
    sb.append(num % 100);
    sb.append("/");
    sb.append(userID);
    sb.append("/");
    File ft = new File(sb.toString());
    if (!ft.exists()) {
      ft.mkdirs();
    }
    return sb.toString();
  }

  public void writeUserFile(UserInfo userInfo) {
    /*
         StringBuffer sb = new StringBuffer();
         sb.append(userInfo.getId());
         sb.append("|");
         sb.append(userInfo.getRegTime().getTime());
         sb.append("|");
         sb.append(userInfo.getLoginTime().getTime());
         sb.append("|");
         sb.append(userInfo.getArticleNum());
         sb.append("|");
         sb.append(userInfo.getArticleEliteNum());
         sb.append("|");
         sb.append(userInfo.getUserTitle());
         sb.append("|");
         sb.append(userInfo.getLifeForce());
         sb.append("|");
         sb.append(userInfo.getCoin());
         sb.append("|");
         sb.append(userInfo.getLiterary());
         sb.append("|");
         sb.append(userInfo.getUserKnow());
         sb.append("|");
         sb.append(userInfo.getExperience());
         sb.append("|");
         sb.append(userInfo.getHavePic());
         sb.append("|");

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?