/* ==================================================================
* 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.dao;
import java.util.Collection;
import java.util.List;
import com.jinhe.tss.component.support.persistence.ITreeSupportDao;
import com.jinhe.tss.component.support.persistence.pagequery.PageInfo;
import com.jinhe.tss.um.entity.Group;
import com.jinhe.tss.um.entity.User;
import com.jinhe.tss.um.helper.UMQueryCondition;
public interface IGroupDao extends ITreeSupportDao<Group>{
/**
* 创建或修改Group信息
* @param group
*/
Group saveGroup(Group group);
/**
* 删除主(其他)用户组的所有子组,且包含用户
* @param group
* @return
*/
Group removeGroup(Group group);
/**
* 删除辅助用户组的所有子组,但不包含用户
* @param group
* @return
*/
Group removeAssistmentGroup(Group group);
/**
* <p>
* 根据用户组的id获取此用户组拥有的角色
* (不包括转授策略,转授策略只能在权限转授中删除对应关系)
* </p>
* @param groupId
* @return List
*/
List<?> findRolesByGroupId(Long groupId);
/**
* <p>
* 移动组资源。
* PermissionInterceptor将会拦截本方法。
* 移动改变了父节点,必须改变roleResOpt关系, 来补齐
* </p>
* @param group
*/
Group moveGroup(Group group);
/**
* 根据用户组的id获取用户组对用户的信息
* @param groupId
* @return List
*/
List<?> findGroup2UserByGroupId(Long groupId);
/**
* 根据用户组的id获取用户组对角色的信息
* @param groupId
* @return List
*/
List<?> findGroup2RoleByGroupId(Long groupId);
/**
* <p>
* 根据用户id找到该用户所在的主用户组.
* 启用用户的时候如果需要启用其所属的主用户组,则取出该指定ID的启用User所在的主用户组。
* </p>
* @param userId
* @return
* 未找到返回null
*/
Group findMainGroupByUserId(Long userId);
/**
* <p>
* 根据groupId获得该组下可查看的子节点
* </p>
* @param groupId
* @return
*/
List<?> getVisibleSubGroups(Long groupId);
/**
* <p>
* 根据一批组下的用户。用于复制、导入等操作。
* </p>
* @param groupIds
* @return
*/
List<User> getUsersByGroupIds(Collection<Long> groupIds);
/**
* <p>
* 判断操作用户是否在操作的组或者该组的子组中
* </p>
* @param groupId
* @param operatorId
* @return
*/
boolean isOperatorInGroup(Long groupId, Long operatorId);
/**
* <p>
* 根据组下的用户
* 包括子组.
* gu.decode like group.getDecode(),有可能删除【组的decode值】和【与该组平级的用户】的docode(在GroupUser中)一样,所以这里还要加个条件
* gu.decode <> group.getDecode()
* </p>
* @param groupId
* @return
*/
List<User> getUsersByGroupIdDeeply(Long groupId);
/**
* 获取指定类型的用户组,并按“查看组”操作权限Id进行过滤
* @param groupType
* @param operatorId
* @return
*/
List<?> getGroupsByType(Integer groupType, Long operatorId);
/**
* 获取指定类型的用户组,并按指定的操作权限Id进行过滤
* @param groupType
* @param operatorId
* @param operationId
* @return
*/
List<?> getGroupsByType(Integer groupType, Long operatorId, String operationId);
/**
* 按操作选项获取一系列组的所有父组
* @param groupType
* @param groupId
* @param operatorId
* @param operationId
* @return
*/
List<?> getParentGroupByGroupIds(Integer groupType, List<Long> groupIds, Long operatorId, String operationId);
/**
* <p>
* 获取所有操作用户可见的用户(即有浏览权限的组下的用户)
* </p>
* @param operatorId
* @return
*/
List<?> getVisibleMainUsers(Long operatorId);
/**
* <p>
* 获取所有操作用户可见的用户 以及 用户和用户组的关系
* </p>
* @param operatorId
* @return
*/
List<?> getUsersAndRelation(Long operatorId);
/**
* <p>
* 根据用户组获取用户。用于展示。
* </p>
* @param groupId
* @return
*/
List<User> getUsersByGroupId(Long groupId);
/**
* <p>
* 根据用户的id获取所在拥有此用户所在的用户组。
* 如果是在辅助用户组,则可能对应多个辅助组。
* </p>
*
* @param userId
* @return List
*/
List<?> findGroupsByUserId(Long userId);
/**
* <p>
* 根据用户id找到用户所在组所有父节点
* </p>
* @param userId
* @return
*/
List<?> getFatherGroupsByUserId(Long userId);
//******************************************* 按组或按查询条件查询用户 *******************************************
PageInfo searchUser(UMQueryCondition condition, Integer pageNum);
PageInfo searchOtherUser(UMQueryCondition condition, Integer pageNum);
/**
* 根据用户组获取用户
* 分页
* @param groupId
* @param pageNum
* @param orderBy
* @return
*/
PageInfo getUsersByGroup(Long groupId, Integer pageNum, String...orderBy);
/**
* 根据用户组获取用户 无权限
* @param groupId
* @param pageNum
* @param fields
* @param orderType
* @return
*/
PageInfo getUsersByOtherGroupNoPermission(Long groupId, Integer pageNum, String...orderBy);
}