package com.norteksoft.acs.service.query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.norteksoft.acs.base.orm.hibernate.SimpleHibernateTemplate;
import com.norteksoft.acs.base.utils.log.LogUtilDao;
import com.norteksoft.acs.entity.authorization.Function;
import com.norteksoft.acs.entity.authorization.Role;
import com.norteksoft.acs.entity.authorization.RoleFunction;
import com.norteksoft.acs.entity.authorization.RoleUser;
import com.norteksoft.acs.entity.log.LoginLog;
import com.norteksoft.acs.entity.organization.Department;
import com.norteksoft.acs.entity.organization.DepartmentUser;
import com.norteksoft.acs.entity.organization.UserInfo;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
/**
*综合查询接口
*
* @author 陈成虎 2009-3-2上午11:43:36
*/
@Service
@Transactional
@SuppressWarnings({ "unused" })
public class QueryManager {
private static String userHql = "select new list(user.loginName,userInfo.trueName,userInfo.email,userInfo.telephone,dep_user.department.departmentName,role_u.role.name) "
+ " from UserInfo userInfo join userInfo.user user join user.departmentUsers dep_user "
+ " join dep_user.user.roleUsers role_u "
+ " where userInfo.companyId=? and userInfo.dr=? and userInfo.deleted=? and dep_user.deleted=? and role_u.deleted=? and dep_user.department.deleted=? and role_u.role.deleted=?";
private static String departmentHql = "select new list(user.loginName,dep.name,user.userInfo.trueName,user.userInfo.email,user.userInfo.telephone) from DepartmentUser department_u join department_u.department dep "
+ "join department_u.user user where department_u.deleted=? and dep.deleted=? and user.deleted=? "
+ "and department_u.companyId=?";
private static String roleHql = "select new list(role.name,user.loginName,user.userInfo.trueName,user.userInfo.email,user.userInfo.telephone) from RoleUser role_u join role_u.role role join role_u.user user "
+ "where 1=1 and role_u.deleted=? and role.deleted=? and user.deleted=? and role_u.companyId=?";
private static String functionHql = "select new list(user.loginName,user.userInfo.trueName,user.userInfo.email,user.userInfo.telephone,depUser.department.name,function.name) from RoleFunction role_f join role_f.function function "
+ "join role_f.role role join role.roleUsers role_u "
+ "join role_u.user user join user.departmentUsers as depUser "
+ "where role_f.deleted=? and function.deleted=? and role.deleted=? and role_u.deleted=? "
+ "and user.deleted=? and depUser.deleted=? "
+ "and role_f.companyId=?";
private static String functionHql2 = "select user from User user join user.departmentUsers dep_user "
+ "join dep_user.user.roleUsers role_user join role_user.role role "
+ "join role.roleFunctions role_fun join role_fun.function function "
+ "where user.deleted=? and dep_user.deleted=? and role_user.deleted=? and role.deleted=? "
+ "and role_fun.deleted=? and function.deleted=?"
+ "and user.companyId=?";
private static String loginUserLogHql = "from LoginLog as loginLog where loginLog.exitTime is null and loginLog.companyId=? and loginLog.deleted=?";
private SimpleHibernateTemplate<UserInfo, Long> userInfoDao;
private SimpleHibernateTemplate<DepartmentUser, Long> department_uDao;
private SimpleHibernateTemplate<RoleUser, Long> roleUserDao;
private SimpleHibernateTemplate<RoleFunction, Long> role_fDao;
private SimpleHibernateTemplate<LoginLog, Long> loginUserLogDao;
private LogUtilDao logUtilDao;
private Long companyId;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
userInfoDao = new SimpleHibernateTemplate<UserInfo, Long>(
sessionFactory, UserInfo.class);
loginUserLogDao = new SimpleHibernateTemplate<LoginLog, Long>(
sessionFactory, LoginLog.class);
roleUserDao = new SimpleHibernateTemplate<RoleUser, Long>(
sessionFactory, RoleUser.class);
department_uDao = new SimpleHibernateTemplate<DepartmentUser, Long>(
sessionFactory, DepartmentUser.class);
role_fDao = new SimpleHibernateTemplate<RoleFunction, Long>(
sessionFactory, RoleFunction.class);
logUtilDao = new LogUtilDao(sessionFactory);
}
/**
* 用户查询
*
* @return
*/
@Transactional(readOnly = true)
public Page<UserInfo> getListByUser(Page<UserInfo> page, UserInfo userInfo,
String initialListView) {
StringBuilder userInfoHql = new StringBuilder(userHql);
if ("yes".equals(initialListView)) {
return userInfoDao.find(page, userInfoHql.toString(),
ContextUtils.getCompanyId(), 0, false, false, false,
false, false);
} else if (userInfo != null) {
String userName = userInfo.getUser() != null ? userInfo.getUser().getLoginName() : null;
String trueName = userInfo.getUser().getName();
if (userName != null && !"".equals(userName) && trueName != null
&& !"".equals(trueName)) {
userInfoHql.append(" and user.loginName like ?");
userInfoHql.append(" and userInfo.trueName like ?");
return userInfoDao.find(page, userInfoHql.toString(),
ContextUtils.getCompanyId(), 0, false, false,
false, false, false, "%" + userName + "%", "%"
+ trueName + "%");
}
if (userName != null && !"".equals(userName)) {
userInfoHql.append(" and user.loginName like ?");
return userInfoDao.find(page, userInfoHql.toString(),
ContextUtils.getCompanyId(), 0, false, false,
false, false, false, "%" + userName + "%");
}
if (trueName != null && !"".equals(trueName)) {
userInfoHql.append(" and userInfo.trueName like ?");
return userInfoDao.find(page, userInfoHql.toString(),
ContextUtils.getCompanyId(), 0, false, false,
false, false, false, "%" + trueName + "%");
}
}
return userInfoDao.find(page, userInfoHql.toString(),
ContextUtils.getCompanyId(), 0, false, false, false,
false, false);
}
/**
* 部门查询
*
* @return
*/
@Transactional(readOnly = true)
public Page<DepartmentUser> getListByDepartment(
Page<DepartmentUser> page, Department department) {
StringBuffer hql = new StringBuffer(departmentHql);
if (department != null && department.getName() != null
&& !department.getName().equals("")) {
hql.append(" and dep.name like ? ");
return department_uDao.find(page, hql.toString(), false, false,
false, getCompanyId(), "%" + department.getName()
+ "%");
}
return department_uDao.find(page, hql.toString(), false, false, false,
getCompanyId());
}
/**
* 角色查询
*
* @return
*/
@Transactional(readOnly = true)
public Page<RoleUser> getListByRole(Page<RoleUser> page, Role role) {
StringBuffer hql = new StringBuffer(roleHql);
if (role != null && role.getName() != null
&& !role.getName().equals("")) {
hql.append(" and role.name like ? ");
return roleUserDao.find(page, hql.toString(), false, false, false,
getCompanyId(), "%" + role.getName() + "%");
}
return roleUserDao.find(page, hql.toString(), false, false, false,
getCompanyId());
}
/**
* 权限查询
*
* @return
*/
@Transactional(readOnly = true)
public Page<RoleFunction> getListByFunction(Page<RoleFunction> page,
Function function) {
StringBuffer hql = new StringBuffer(functionHql);
if (function != null && function.getName() != null
&& !function.getName().equals("")) {
hql.append(" and function.name like ? ");
return role_fDao.find(page, hql.toString(), false, false, false,
false, false, false, getCompanyId(), "%"
+ function.getName() + "%");
}
return role_fDao.find(page, hql.toString(), false, false, false, false,
false, false, getCompanyId());
}
/**
* 在线用户查询
*/
public Page<LoginLog> getListByLoginUserLog(Page<LoginLog> page,
LoginLog loginUserLog) {
loginUserLogDao.searchPageByHql(page, loginUserLogHql,
ContextUtils.getCompanyId(), false);
return page;
}
/**
* 查询在线用户数量
* @return
*/
public Long getOnlineUserCount(){
return loginUserLogDao.findLong(
"select count(u) from LoginLog u where u.exitTime is null and u.companyId=? and u.deleted=?",
getCompanyId(), false);
}
public Long getCompanyId() {
if (companyId == null) {
return ContextUtils.getCompanyId();
} else
return companyId;
}
public void setCompanyId(Long companyId) {
this.companyId = companyId;
}
}