package edu.sjtu.infosec.ismp.manager.SYSM.user.self.dao.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.dao.UserDao;
import edu.sjtu.infosec.ismp.manager.comm.model.page.Page;
import edu.sjtu.infosec.ismp.manager.comm.model.page.PageResult;
import edu.sjtu.infosec.ismp.manager.comm.model.page.PageUtil;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.User;
public class UserDaoImp extends HibernateDaoSupport implements UserDao {
//模糊查询
public PageResult getBlurUserDao(User us,Page page,Integer rid) {
Criteria cri=this.termMaker(us,this.getSession());
if(rid!=null&&rid!=-1&&rid!=0){
Query query = getSession().createSQLQuery("select user_id from ismp_user_role where role_id=?");
query.setInteger(0, rid);
List<Integer> list = query.list();
cri.add(Restrictions.in("id", list));
// cri.add(Restrictions.e);
}
int count = getCountUserDao(us,rid);
// int count =13;
page = PageUtil.createPage(page.getEveryPage(), page.getCurrentPage(), count);
//判断需不需要分页
if(page!=null){
cri.setFirstResult(page.getBeginIndex());
cri.setMaxResults(page.getEveryPage());
}
PageResult rs=new PageResult();
page = PageUtil.createPage(page.getEveryPage(), page.getCurrentPage(), (int)count);
rs.setPage(page);
rs.setPageList(cri.list());
// this.getSession().flush();
return rs;
}
//查询条件生成器
public Criteria termMaker(User us,Session session){
Criteria cri=session.createCriteria(User.class);
if(us!=null){
if(us.getPassword()!=null){
cri.add(Restrictions.eq("password", us.getPassword())) ;
}
if(us.getEnabled()!=null){
cri.add(Restrictions.eq("enabled",us.getEnabled()));
}
if(us.getEmail()!=null&&us.getEmail().trim().length()>0){
cri.add(Restrictions.like("email", "%"+us.getEmail()+"%"));
}
if(us.getJob()!=null&&us.getJob().trim().length()>0){
cri.add(Restrictions.like("job", "%"+us.getJob()+"%"));
}
if(us.getMobile()!=null&&us.getMobile().trim().length()>0){
cri.add(Restrictions.like("mobile", "%"+us.getMobile()+"%"));
}
if(us.getUsername()!=null&&us.getUsername().trim().length()>0){
cri.add(Restrictions.like("username","%"+us.getUsername()+"%"));
}
if(us.getLoginName()!=null){
cri.add(Restrictions.like("loginName", "%"+us.getLoginName()+"%"));
}
}
return cri;
}
// //用户登录的方法
// public List loginDao(UserBO us,String ipaddress) {
// // TODO Auto-generated method stub
// List list=new ArrayList(3);
// Timestamp curdate=new Timestamp(System.currentTimeMillis());
// Criteria cri1=getSession().createCriteria(UserBO.class);
// cri1.add(Restrictions.eq("username", us.getUsername()));
// UserBO user1=(UserBO) cri1.uniqueResult();
// if(user1==null){
// list.add(0,null);
// list.add(1,"001");//代表用户错误!
// return list;
// }else{
// //先检查是否连续登陆后被禁用了
// String forbid="";
// String forbidstr=user1.getForbidtime();
// if(forbidstr!=null&&forbidstr.trim().length()>0){
// String forbidstrs[]= forbidstr.split(",");
// Timestamp ts=null;
// int cout=0;
// for (String string : forbidstrs) {
// if(string.indexOf("-")!=-1){
// ts=Timestamp.valueOf(string);
// }else{
// cout=Integer.valueOf(string);
// }
// }
// //判断是否登录失败了三次
// //如果失败后就判断是否过来30分钟了
// long l=(curdate.getTime()-ts.getTime());
// if(cout>=3){
// if(l/(60 * 1000)<30){
// list.add(0,null);
// list.add(1,(l / (60 * 1000)));//代表三次失败了告诉用户还有多久能登陆
// return list;
// }else{
// forbid="003";//设置状态代表禁止后已经超过了三十分钟
// }
// }
// }
// Criteria cri=getSession().createCriteria(UserBO.class);
// cri.add(Restrictions.eq("username", us.getUsername()));
// cri.add(Restrictions.eq("password", us.getPassword()));
// UserBO user=(UserBO) cri.uniqueResult();
// list.add(0,user);//用户信息存储取来
// if(user==null) {
// if(forbid.length()>0){
// list.add(1,forbid);//代表密码错误;
// }else{
// list.add(1,"002");//代表密码错误;
// }
// }else{
// if(user.getStatus()==null||(!user.getStatus())){
// list.add(0,null);
// list.add(1,"005");
// }else{
// list.add(1,"200");
// }
// }
// }
// return list;
// }
//
//更新用户
public void updateUserDao(User us) {
// TODO Auto-generated method stub
if(us!=null){
getHibernateTemplate().saveOrUpdate(us);
}
}
//添加用户
public void saveUserDao(User usEntity) {
// TODO Auto-generated method stub
getHibernateTemplate().save(usEntity);
}
//删除用户
public void deleteUserDao(User userEntity) {
// TODO Auto-generated method stub
getHibernateTemplate().delete(userEntity);
}
//ID 查询
public User getUserByIdDao(Integer id) {
// TODO Auto-generated method stub
return (User) getHibernateTemplate().get(User.class, id);
}
/**
* 查询所有域信息
*/
@SuppressWarnings("unchecked")
public List<Domain> getAllDomain() {
String Hql="select d from Domain d";
Query query = this.getSession().createQuery(Hql);
return query.list();
}
/**
* 查询域及其子域信息
* @param set
*/
@SuppressWarnings("unchecked")
public List<Domain> getCasecadeDomain(Set<Domain> set) {
if(set!=null&&set.size()!=0){
List result = new ArrayList(set);
// result.addAll();
for(Domain domain:set){
List qr = getDomianByParent(domain,result);
result.addAll(qr);
}
return result;
}
return null;
}
/**
* 递归查询子域信息
* @param set
*/
@SuppressWarnings("unchecked")
private List<Domain> getDomianByParent(Domain domain,List result){
Query query = this.getSession().createQuery("select d from Domain d where d.parentDomain =:fDomain");
query.setParameter("fDomain", domain);
List<Domain> pr = query.list();
if(pr!=null&&pr.size()!=0){
result.addAll(pr);
for(Domain yu:pr){
List<Domain> anore = getDomianByParent(yu,result);
result.addAll(anore);
}
}
return result;
}
//统计函数
public int getCountUserDao(User UserBOEntity,Integer rid){
Criteria cri=termMaker(UserBOEntity,this.getSession());
if(rid!=null&&rid!=-1&&rid!=0){
Query query = getSession().createSQLQuery("select user_id from ismp_user_role where role_id=?");
query.setInteger(0, rid);
List<Integer> list = query.list();
cri.add(Restrictions.in("id", list));
// cri.add(Restrictions.e);
}
int count=((Integer)cri.setProjection(Projections.rowCount()).uniqueResult()).intValue();
return count;
}
//
// //DWR调用
// public boolean getUserNameCountDao(String usrername) {
// Criteria cri=getSession().createCriteria(UserBO.class);
// cri.add(Restrictions.eq("username", usrername));
// if(((Integer)cri.setProjection(Projections.rowCount()).uniqueResult()).intValue()>0){
// return true;
// }
// return false;
// }
// //检查旧密码是否正确
// public boolean checkPwdDao(String username, String pwd) {
// Criteria cri=getSession().createCriteria(UserBO.class);
// cri.add(Restrictions.eq("username", username));
// cri.add(Restrictions.eq("password", pwd));
// if(((Integer)cri.setProjection(Projections.rowCount()).uniqueResult()).intValue()>0){
// return true;
// }
// return false;
// }
//
public User getUserByUnameAndPwd(User UserBOEntity) {
Criteria cri=getSession().createCriteria(User.class);
cri.add(Restrictions.eq("loginName", UserBOEntity.getLoginName()));
cri.add(Restrictions.eq("password", UserBOEntity.getPassword()));
return (User) cri.uniqueResult();
}
// //根据用户ID检查用户是否是管理员
// public boolean checkAdminDao(int uid) {
// String hql = "from RoleBO role where role.id in (select pos.roleId from UserToRoleBO pos where pos.userId=:userId) and role.rolename='admin'";
// Query query = getSession().createQuery(hql);
// query.setParameter("userId", uid);
// if(query.list().size()>0){
// return true;
// }
// return false;
// }
//
// //达梦根据用户查询用户信息
// public UserBO getUserByNameDao(String uname) {
// // TODO Auto-generated method stub
// Criteria cri=getSession().createCriteria(UserBO.class);
// cri.add(Restrictions.eq("username", uname));
// return (UserBO) cri.uniqueResult();
// }
/**
* 根据用户名获得用户信息
*/
public User getUserinfoByNameDao(String username) {
Criteria cri=getSession().createCriteria(User.class);
cri.add(Restrictions.eq("loginName", username));
Object obj=cri.uniqueResult();
if(obj!=null){
return (User) obj;
}
return null;
}
// public boolean checkManagerNameDao(String managerName) {
// if(managerName==null||managerName.trim().length()<=0){
// return false;
// }
// Criteria cri=getSession().createCriteria(ManagerBO.class);
// cri.add(Restrictions.eq("managerName", managerName));
// List list= cri.list();
// if(list!=null&&list.size()>0){
// return true;
// }
// return false;
// }
public List<User> getAllUserDao() {
List<User> allUserList = null;
allUserList = getHibernateTemplate().loadAll(User.class);
return allUserList;
}
public void updateUser(User user) {
getSession().update(user);
}
public void batchUser(String ids){
Session session = getSession();
Query query = session.createSQLQuery("delete from ismp_user_domain where domain_id in(:ids)");
query.setString("ids", ids);
query.executeUpdate();
}
}