package cn.estsh.i3plus.core.api.iservice.busi;

import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import cn.estsh.i3plus.pojo.platform.bean.SysRefRoleMenu;
import cn.estsh.i3plus.pojo.platform.bean.SysRole;
import cn.estsh.i3plus.pojo.platform.bean.SysUser;
import io.swagger.annotations.ApiOperation;

import java.util.List;

/**
 * @Description : 系统角色业务接口 
 * @Reference   :
 * @Author      : wei.peng
 * @Date        : 2018-10-22 16:58:43.771
 * @Modify      :
 **/
public interface ISysRoleService {

    /**
     * 修改数据
     *
     * @param sysRole
     */
    @ApiOperation(value = "更新角色信息",notes = "更新角色信息")
    void updateSysRole(SysRole sysRole);

    /**
     * 修改权限状态
     * @param id        修改权限状态
     * @param status    状态
     * @param user      当前用户会话
     * @return
     */
    @ApiOperation(value = "更新角色信息",notes = "更新角色状态信息")
    void updateSysRoleStatus(Long id, int status, SessionUser user);

    /**
     * 批量修改状态
     * @param ids
     * @param status
     * @param user
     */
    @ApiOperation(value = "更新角色信息",notes = "根据ID 批量更新角色状态信息")
    void updateSysRoleStatusByIds(Long[] ids, int status, SessionUser user);

    /**
     * 根据Key 删除数据
     * @param id
     */
    @ApiOperation(value = "删除角色信息",notes = "根据ID 删除角色信息")
    void deleteSysRoleById(Long id);

    /**
     * 根据id批量删除
     * @param ids id数组
     * @return
     */
    @ApiOperation(value = "删除角色信息",notes = "根据ID 批量删除角色信息")
    void deleteSysRoleByIds(Long[] ids);

    /**
     * 新增数据
     *
     * @param sysRole
     * @return
     */
    @ApiOperation(value = "新增角色信息")
    SysRole insertSysRole(SysRole sysRole);

    /**
     * 刷新角色权限
     * @param roleId
     * @param ids
     */
    @ApiOperation(value = "刷新角色菜单关系",notes = "刷新 角色 菜单关系信息")
    void refreshSysRoleRef(Long roleId,Long[] ids,String userName);

    /**
     * 刷新角色权限
     * @param roleIds
     * @param ids
     */
    @ApiOperation(value = "刷新角色菜单关系",notes = "批量刷新 角色 菜单关系信息")
    void refreshBatchSysRoleRef(Long[] roleIds,Long[] ids,String userName);

    /**
     *
     * @param roleId
     * @return
     */
    @ApiOperation(value = "查信角色菜单关系",notes = "查询 ID 查询角色菜单关系")
    List<SysRefRoleMenu> findSysRefRoleMenuByRoleId(Long roleId);

    /**
     * 查询所有数据
     *
     * @return
     */
    @ApiOperation(value = "查信角色信息",notes = "查询所有角色信息")
    List<SysRole> findSysRoleAll();

    @ApiOperation(value = "查信角色信息",notes = "查询指定角色信息")
    List<SysRole> findSysRoleByInId(Long[] ids);

    @ApiOperation(value = "查信角色信息",notes = "根据ID + 角色状态查询角色信息")
    List<SysRole> findSysRoleByInIdAndStatus(Long[] ids,Integer status);

    @ApiOperation(value = "查信用户的所有角色信息",notes = "查信用户的所有角色信息")
    List<SysRole> findSysRoleByUser(SysUser user);

    /**
     * 根据id 数据
     *
     * @param id
     * @return
     */
    @ApiOperation(value = "查信角色信息",notes = "根据 ID 查询角色信息")
    SysRole getSysRoleById(Long id);

    /**
     * 复杂查询
     * @param role
     * @param pager
     * @return
     */
    @ApiOperation(value = "查信角色信息",notes = "查询角色信息(分页/组合)")
    ListPager<SysRole> querySysRole(SysRole role, Pager pager);

    @ApiOperation(value = "角色唯一检查")
    void checkSysRoleOnly(SysRole role);

}
