/**
* 用户操作类
*/
package com.sogou.qadev.service.cynthia.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.sogou.qadev.service.cynthia.bean.UserInfo;
import com.sogou.qadev.service.cynthia.bean.UserInfo.UserRole;
import com.sogou.qadev.service.cynthia.bean.UserInfo.UserStat;
import com.sogou.qadev.service.cynthia.bean.impl.UserInfoImpl;
import com.sogou.qadev.service.cynthia.service.DataAccessSession.ErrorCode;
import com.sogou.qadev.service.cynthia.service.DbPoolConnection;
import com.sogou.qadev.service.cynthia.util.ConfigUtil;
import com.sogou.qadev.service.cynthia.util.CynthiaUtil;
/**
* @description:user db processor
* @author:liming
* @mail:liming@sogou-inc.com
* @date:2014-5-6 下午6:03:09
* @version:v1.0
*/
public class UserInfoAccessSessionMySQL {
public UserInfoAccessSessionMySQL() {
}
/**
* @description:add user
* @date:2014-5-6 下午6:03:18
* @version:v1.0
* @param userInfo
* @return
*/
public boolean addUserInfo(UserInfo userInfo)
{
Connection conn = null;
PreparedStatement pstm = null;
try
{
conn = DbPoolConnection.getInstance().getConnection();
String sql = "insert ignore into user_info (user_name,nick_name,user_role,user_stat,password,create_time,pic_id) values (?,?,?,?,?,?,?)";
pstm = conn.prepareStatement(sql);
pstm.setString(1, userInfo.getUserName());
pstm.setString(2, userInfo.getNickName());
pstm.setString(3, userInfo.getUserRole().toString());
pstm.setString(4, userInfo.getUserStat().toString());
pstm.setString(5, userInfo.getUserPassword());
pstm.setTimestamp(6, new Timestamp(System.currentTimeMillis()));
pstm.setString(7, userInfo.getPicId());
return pstm.executeUpdate() > 0;
}catch(Exception e)
{
e.printStackTrace();
}finally
{
DbPoolConnection.getInstance().closeAll(pstm, conn);
}
return false;
}
/**
* @description:update user info
* @date:2014-5-6 下午6:03:28
* @version:v1.0
* @param userInfo
* @return
*/
public boolean updateUserInfo(UserInfo userInfo)
{
Connection conn = null;
PreparedStatement pstm = null;
try
{
conn = DbPoolConnection.getInstance().getConnection();
String sql = "update user_info set user_name=?,nick_name=?,user_role=?,user_stat=?, password = ?,last_login_time = ? ,pic_id=? where id=?";
pstm = conn.prepareStatement(sql);
pstm.setString(1, userInfo.getUserName());
pstm.setString(2, userInfo.getNickName());
pstm.setString(3, userInfo.getUserRole().toString());
pstm.setString(4, userInfo.getUserStat().toString());
pstm.setString(5, userInfo.getUserPassword());
pstm.setTimestamp(6, userInfo.getLastLoginTime());
pstm.setString(7, userInfo.getPicId());
pstm.setInt(8, userInfo.getId());
return pstm.executeUpdate()>0;
}catch(Exception e)
{
e.printStackTrace();
}finally
{
DbPoolConnection.getInstance().closeAll(pstm, conn);
}
return false;
}
/**
* @description:query user by user id
* @date:2014-5-6 下午6:03:36
* @version:v1.0
* @param id
* @return
*/
public UserInfo queryUserInfoById(int id)
{
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try
{
conn = DbPoolConnection.getInstance().getReadConnection();
String sql = "select * from user_info where id=?";
pstm = conn.prepareStatement(sql);
pstm.setInt(1, id);
rs = pstm.executeQuery();
if(rs.next())
{
UserInfo userInfo = new UserInfoImpl();
userInfo.setId(rs.getInt("id"));
userInfo.setCreateTime(rs.getTimestamp("create_time"));
userInfo.setLastLoginTime(rs.getTimestamp("last_login_time"));
userInfo.setNickName(rs.getString("nick_name"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setUserRole(UserRole.valueOf(rs.getString("user_role")));
userInfo.setUserStat(UserStat.valueOf(rs.getString("user_stat")));
userInfo.setPicId(rs.getString("pic_id"));
if (CynthiaUtil.isNull(userInfo.getPicId())) {
userInfo.setPicUrl(ConfigUtil.getCynthiaWebRoot() + "attachment/download.jsp?method=download&id=" + userInfo.getPicId());
}
return userInfo;
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
DbPoolConnection.getInstance().closeAll(rs, pstm, conn);
}
return null;
}
/**
* @description:query user by user mail
* @date:2014-5-6 下午6:03:45
* @version:v1.0
* @param userName
* @return
*/
public UserInfo queryUserInfoByUserName(String userName)
{
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try
{
conn = DbPoolConnection.getInstance().getReadConnection();
String sql = "select * from user_info where BINARY user_name=BINARY ?";
pstm = conn.prepareStatement(sql);
pstm.setString(1, userName);
rs = pstm.executeQuery();
if(rs.next())
{
UserInfo userInfo = new UserInfoImpl();
userInfo.setId(rs.getInt("id"));
userInfo.setUserPassword(rs.getString("password"));
userInfo.setCreateTime(rs.getTimestamp("create_time"));
userInfo.setLastLoginTime(rs.getTimestamp("last_login_time"));
userInfo.setNickName(rs.getString("nick_name"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setUserRole(UserRole.valueOf(rs.getString("user_role")));
userInfo.setUserStat(UserStat.valueOf(rs.getString("user_stat")));
userInfo.setPicId(rs.getString("pic_id"));
if (!CynthiaUtil.isNull(userInfo.getPicId())) {
userInfo.setPicUrl(ConfigUtil.getCynthiaWebRoot() + "attachment/download.jsp?method=download&id=" + userInfo.getPicId());
}
return userInfo;
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
DbPoolConnection.getInstance().closeAll(rs, pstm, conn);
}
return null;
}
/**
* @description:check if user exist
* @date:2014-5-6 下午6:03:54
* @version:v1.0
* @param userName
* @return
*/
public boolean isUserExisted(String userName)
{
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try
{
conn = DbPoolConnection.getInstance().getReadConnection();
//加BINARY 避免 Illegal mix of collations (latin1_general_cs,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' 错误!!
String sql = "select * from user_info where BINARY user_name=BINARY ?";
pstm = conn.prepareStatement(sql);
pstm.setString(1, userName);
rs = pstm.executeQuery();
return rs.next();
}catch(Exception e)
{
e.printStackTrace();
}finally
{
DbPoolConnection.getInstance().closeAll(rs,pstm, conn);
}
return false;
}
/**
* @description:remove user from db
* @date:2014-5-6 下午6:04:04
* @version:v1.0
* @param userInfo
* @return
*/
public boolean removeUserInfo(UserInfo userInfo)
{
Connection conn = null;
PreparedStatement pstm = null;
try
{
conn = DbPoolConnection.getInstance().getConnection();
//加BINARY 避免 Illegal mix of collations (latin1_general_cs,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' 错误!!
String sql = "delete from user_info where id=? ";
pstm = conn.prepareStatement(sql);
pstm.setInt(1, userInfo.getId());
return pstm.executeUpdate() > 0;
}catch(Exception e)
{
e.printStackTrace();
return false;
}finally
{
DbPoolConnection.getInstance().closeAll(pstm, conn);
}
}
/**
* @description:query all users
* @date:2014-5-6 下午6:04:14
* @version:v1.0
* @return
*/
public List<UserInfo> queryAllUsers()
{
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null;
List<UserInfo> relatedUserList = new ArrayList<UserInfo>();
try
{
conn = DbPoolConnection.getInstance().getReadConnection();
String sql = "select * from user_info";
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();
while(rs.next())
{
UserInfo userInfo = new UserInfoImpl();
userInfo.setId(rs.getInt("id"));
userInfo.setUserPassword(rs.getString("password"));
userInfo.setCreateTime(rs.getTimestamp("create_time"));
userInfo.setLastLoginTime(rs.getTimestamp("last_login_time"));
userInfo.setNickName(rs.getString("nick_name"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setUserRole(UserRole.valueOf(rs.getString("user_role")));
userInfo.setUserStat(UserStat.valueOf(rs.getString("user_stat")));
userInfo.setPicId(rs.getString("pic_id"));
if (CynthiaUtil.isNull(userInfo.getPicId())) {
userInfo.setPicUrl(ConfigUtil.getCynthiaWebRoot() + "attachment/download.jsp?method=download&id=" + userInfo.getPicId());
}
relatedUserList.add(userInfo);
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
DbPoolConnection.getInstance().closeAll(rs, pstm, conn);
}
return relatedUserList;
}
/**
* @description:remove user
* @date:2014-5-6 下午6:04:27
* @version:v1.0
* @param username
* @return
*/
public ErrorCode removeRelatedUser(String username)
{
UserInfo userInfo = this.queryUserInfoByUserName(username);
if(this.removeUserInfo(userInfo))
return ErrorCode.success;
return ErrorCode.unknownFail;
}
/**
* @description:query users from user array
* @date:2014-5-6 下午6:04:36
* @version:v1.0
* @param userArray
* @return
*/
public List<UserInfo> queryAllUserInfo(String[] userArray) {
List<UserInfo> allUserList = new ArrayList<UserInfo>();
if (userArray == null || userArray.length == 0) {
return allUserList;
}
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
StringBuffer userBuffer = new StringBuffer();
for (String user : userArray) {
if (user != null && user.length() > 0 && !CynthiaUtil.isChinese(user)) {
userBuffer.append(userBuffer.length() >0 ?"," :"").append("'").append(user).append("'");
}
}
try {
conn = DbPoolConnection.getInstance().getReadConnection();
stat = conn.createStatement();
rs = stat.executeQuery("select * from user_info where user_name in(" + userBuffer.toString() + ")");
while (rs.next()) {
UserInfo userInfo = new UserInfoImpl();
userInfo.setId(rs.getInt("id"));
userInfo.setCreateTime(rs.getTimestamp("create_time"));
userInfo.setUserPassword(rs.getString("password"));
userInfo.setLastLoginTime(rs.getTimestamp("last_login_time"));
userInfo.setNickName(rs.getString("nick_name"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setUserRole(UserRole.valueOf(rs.getString("user_role")));
userInfo.setUserStat(UserStat.valueOf(rs.getString("user_stat")));
userInfo.setPicId(rs.getString("pic_id"));
if (CynthiaUtil.isNull(userInfo.getPicId())) {
userInfo.setPicUrl(ConfigUtil.getCynthiaWebRoot() + "attachment/download.jsp?method=download&id=" + userInfo.getPicId());
}
allUserList.add(userInfo);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DbPoolConnection.getInstance().closeAll(rs, stat, conn);
}
return allUserList;
}
/**
* @description:query users by user stat and name
* @date:2014-5-6 下午6:04:48
* @version:v1.0
* @param userStat
* @param userName
* @return
*/
public List<UserInfo> queryAllUsersByStatAndName(String userStat, String userName) {
List<UserInfo> allUserList = new ArrayList<UserInfo>();
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("select * from user_info where 1=1 ");
if (userStat != null && userStat.length() >0) {
sqlBuffer.append(" and user_stat = '" + userStat + "' ");
}
if (userName != null && !userName.equals("null") && !userName.equals("")) {
sqlBuffer.append(" and user_name like '%" + userName + "%' or nick_name like '%" + userName + "' ");
}
try {
conn = DbPoolConnection.getInstance().getReadConnection();
stat = conn.createStatement();
rs = stat.executeQuery(sqlBuffer.toString());
while (rs.next()) {
UserInfo userInfo = new UserInfoImpl();
userInfo.setId(rs.getInt("id"));
userInfo.setUserPassword(rs.getString("password"));
userInfo.setCreateTime(rs.getTimestamp("create_time"));
userInfo.setLastLoginTime(rs.getTimestamp("last_login_time"));
userInfo.setNickName(rs.getString("nick_name"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setUserRole(UserRole.valueOf(rs.getString("user_role")));
userInfo.setUserStat(UserStat.valueOf(rs.getString("user_stat")));
userInfo.setPicId(rs.getString("pic_id"));
if (CynthiaUtil.isNull(userInfo.getPicId())) {
userInfo.setPicUrl(ConfigUtil.getCynthiaWebRoot() + "attachment/download.jsp?method=download&id=" + userInfo.getPicId());
}
allUserList.add(userInfo);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DbPoolConnection.getInstance().closeAll(rs, stat, conn);
}
return allUserList;
}
/**
* @description:TODO
* @date:2014-8-13 下午8:21:10
* @version:v1.0
* @param userMails
* @return
*/
public Map<String, UserInfo> queryUserInfoByUserNames(String[] userArray) {
Map<String, UserInfo> allUserMap = new LinkedHashMap<String,UserInfo>();
if (userArray == null || userArray.length == 0) {
return allUserMap;
}
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
StringBuffer userBuffer = new StringBuffer();
for (String user : userArray) {
if (user != null && user.length() > 0 && !CynthiaUtil.isChinese(user)) {
userBuffer.append(userBuffer.length() >0 ?"," :"").append("'").append(user).append("'");
}
}
try {
conn = DbPoolConnection.getInstance().getReadConnection();
stat = conn.createStatement();
rs = stat.executeQuery("select * from user_info where user_name in(" + userBuffer.toString() + ")");
while (rs.next()) {
UserInfo userInfo = new UserInfoImpl();
userInfo.setId(rs.getInt("id"));
userInfo.setCreateTime(rs.getTimestamp("create_time"));
userInfo.setUserPassword(rs.getString("password"));
userInfo.setLastLoginTime(rs.getTimestamp("last_login_time"));
userInfo.setNickName(rs.getString("nick_name"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setUserRole(UserRole.valueOf(rs.getString("user_role")));
userInfo.setUserStat(UserStat.valueOf(rs.getString("user_stat")));
userInfo.setPicId(rs.getString("pic_id"));
if (CynthiaUtil.isNull(userInfo.getPicId())) {
userInfo.setPicUrl(ConfigUtil.getCynthiaWebRoot() + "attachment/download.jsp?method=download&id=" + userInfo.getPicId());
}
allUserMap.put(rs.getString("user_name"), userInfo);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DbPoolConnection.getInstance().closeAll(rs, stat, conn);
}
return allUserMap;
}
}