/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.um.search;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.jinhe.tss.core.persistence.ICommonDao;
import com.jinhe.tss.core.util.EasyUtils;
import com.jinhe.tss.um.entity.Group;
import com.jinhe.tss.um.entity.Role;
import com.jinhe.tss.um.entity.Strategy;
import com.jinhe.tss.um.entity.User;
import com.jinhe.tss.um.helper.dto.SubAuthorizedUserRoleDTO;
import com.jinhe.tss.um.helper.dto.UserRoleDTO;
public class GeneralSearchServiceImpl implements GeneralSearchService {
@Autowired private ICommonDao commonDao;
public List<?> getResourceTypeListByApp(String applicationId) {
return commonDao.getEntities("from ResourceType o where o.applicationId = ? order by o.seqNo", applicationId);
}
public List<?> searchOtherUserMappingInfo(Long groupId) {
List<?> users = searchUsersByGroup(groupId);
for ( Object temp : users ) {
User user = (User) temp;
Long mappedMainUserId = user.getAppUserId();
if (mappedMainUserId == null) continue;
User mapUser = (User) commonDao.getEntity(User.class, mappedMainUserId);
if (mapUser != null) {
user.setAppUserName(mapUser.getLoginName());
}
String hql = "select g from GroupUser gu, Group g where gu.groupId = g.id and gu.userId = ? and g.groupType = ?";
List<?> groups = commonDao.getEntities(hql, mappedMainUserId, Group.MAIN_GROUP_TYPE);
if ( groups.size() > 0 ) {
Group group = (Group) groups.get(0);
user.setAppUserGroupName(group.getName());
}
}
return users;
}
// 一个组下面所有用户的因转授而获得的角色的情况
public List<SubAuthorizedUserRoleDTO> searchUserStrategyInfoByGroupId(Long groupId){
// 先取出组下所有可见的用户
queryUsersInsertTemp(groupId);
// 再取出这些用户所拥有的转授得到的角色以及相应的转授策略
List<SubAuthorizedUserRoleDTO> result = new ArrayList<SubAuthorizedUserRoleDTO>();
String hsql = "select u, r, s, creator from User u, RoleUser ru, Role r, Strategy s, User creator, Temp t " +
" where u.id=ru.userId and ru.roleId = r.id and ru.strategyId = s.id and s.creatorId = creator.id and u.id = t.id";
List<?> list = commonDao.getEntities(hsql);
for( Object temp : list ){
Object[] objs = (Object[]) temp;
User user = (User) objs[0];
Role role = (Role) objs[1];
Strategy strategy = (Strategy) objs[2];
User creator = (User) objs[3];
SubAuthorizedUserRoleDTO dto = new SubAuthorizedUserRoleDTO();
dto.setSubAuthorized2UserId(user.getId());
dto.setSubAuthorized2UserName(user.getUserName());
dto.setRoleId(role.getId());
dto.setRoleName(role.getName());
dto.setStrategyId(strategy.getId());
dto.setStrategyName(strategy.getName());
dto.setSubAuthorizedUserId(creator.getId());
dto.setSubAuthorizedUserName(creator.getUserName());
result.add(dto);
}
hsql = "select u, r, s, creator, g from User u, GroupUser gu, Group g, RoleGroup rg, Role r, Strategy s, User creator, Temp t " +
" where u.id = gu.userId and gu.groupId=g.id and g.id=rg.groupId and rg.roleId = r.id " +
" and rg.strategyId = s.id and s.creatorId = creator.id and u.id = t.id ";
list = commonDao.getEntities(hsql);
for( Object temp : list ){
Object[] objs = (Object[]) temp;
User user = (User) objs[0];
Role role = (Role) objs[1];
Strategy strategy = (Strategy) objs[2];
User creator = (User) objs[3];
Group group = (Group) objs[4];
SubAuthorizedUserRoleDTO dto = new SubAuthorizedUserRoleDTO();
dto.setSubAuthorized2UserId(user.getId());
dto.setSubAuthorized2UserName(user.getUserName());
dto.setRoleId(role.getId());
dto.setRoleName(role.getName());
dto.setStrategyId(strategy.getId());
dto.setStrategyName(strategy.getName());
dto.setSubAuthorized2GroupId(group.getId());
dto.setSubAuthorized2GroupName(group.getName());
dto.setSubAuthorizedUserId(creator.getId());
dto.setSubAuthorizedUserName(creator.getUserName());
result.add(dto);
}
return result;
}
public List<UserRoleDTO> searchUserRolesMapping(Long groupId) {
queryUsersInsertTemp(groupId);
// 再查出这些用户拥有的角色情况
String hsql = "select u, r from User u, Role r, ViewRoleUser ru, Temp t "
+ " where u.id = ru.id.userId and ru.id.roleId = r.id and u.id = t.id";
List<?> list = commonDao.getEntities(hsql);
List<UserRoleDTO> returnList = new ArrayList<UserRoleDTO>();
for ( Object temp : list ) {
Object[] objs = (Object[]) temp;
UserRoleDTO relation = new UserRoleDTO((User) objs[0], (Role) objs[1]);
if ( !returnList.contains(relation) ) {
returnList.add(relation);
}
}
return returnList;
}
/**
* 查出组下用户ID列表并插入临时表
*/
private void queryUsersInsertTemp(Long groupId) {
String hsql = "select distinct u.id from GroupUser gu, User u where gu.userId = u.id and gu.groupId = ? ";
List<?> list = commonDao.getEntities(hsql, groupId);
commonDao.insertIds2TempTable(list);
}
/**
* 查询角色授予的用户列表(包括直接授予用户的和授予组时组下的所有用户)
*/
public List<User> searchUsersByRole(Long roleId){
String sql = "select u.id, u.userName from um_User u, um_RoleUser ru where u.id=ru.userId and ru.roleId = ? " +
" union" +
" select u.id, u.userName from um_User u, um_GroupUser gu, um_RoleGroup rg where u.id = gu.userId and gu.groupId=rg.groupId and rg.roleId = ?";
List<?> list = commonDao.getEntitiesByNativeSql(sql, roleId, roleId);
List<User> result = new ArrayList<User>();
for( Object temp :list ){
Object[] objs = (Object[]) temp;
User user = new User();
user.setId( EasyUtils.convertObject2Long(objs[0]) );
user.setUserName((String)objs[1]);
result.add(user);
}
return result;
}
public List<?> searchUsersByGroup(Long groupId){
String hql = "select distinct u from GroupUser gu, User u where gu.userId = u.id and gu.groupId = ?";
return commonDao.getEntities(hql, groupId);
}
}