package com.bonus.system.dept.dao;

import com.bonus.system.basic.domain.SysTree;
import com.bonus.system.dept.entity.ProDeptRoleBean;
import com.bonus.system.dept.entity.ProDeptRoleDo;
import com.bonus.system.dept.entity.SubOrgBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 组织 数据层
 * 
 * @author zys
 */
@Mapper
public interface SubOrgDao {

    /**
     * 查询组织列表
     *
     * @param SubOrgBean 组织信息
     * @return 菜单列表
     */
    List<SubOrgBean> selectOrgList(SubOrgBean SubOrgBean);

    /**
     * 根据组织编号获取详细信息
     * @param orgId 组织编号
     * @return bean
     */
    SubOrgBean selectOrgById(Long orgId);

    /**
     * 新增组织
     * @param org 组织对象
     * @return 1|0
     */
    int insertOrg(SubOrgBean org);

    /**
     * 校验组织名称是否唯一
     * @param orgName 组织名称
     * @param parentId 父级编号
     * @return bean
     */
    SubOrgBean checkOrgNameUnique(@Param("orgName") String orgName, @Param("parentId") Long parentId);

    /**
     * 修改组织
     * @param org 组织对象
     * @return 1|0
     */
    int updateOrg(SubOrgBean org);

    /**
     * 查询组织是否有父子级
     * @param orgId 组织编号
     * @return 1|0
     */
    int hasChildByOrgId(Long orgId);

    /**
     * 检查组织是否绑定用户
     * @param orgId 组织编号
     * @return 1|0
     */
    int checkOrgExistUser(Long orgId);

    /**
     * 删除组织
     * @param orgId 组织编号
     * @return 1|0
     */
    int deleteOrgById(@Param("orgId") Long orgId, @Param("updateUserId") Long updateUserId);

    /**
     * 查询组织人员
     * @return
     */
    List<SysTree> orgPersonSelect();

    /**
     * 查询各个角色人员
     * @param orgId
     * @return
     */
    List<ProDeptRoleBean> getDeptRoleList(Long orgId);
    /**
     * 查询组织下所有角色id
     * @param orgId
     * @return
     */
    List<Integer> getDepartmentIdByOrgId(Long orgId);

    /**
     * 删除组织下角色绑定的人员
     * @param deptIdList
     */
    void deleteDeptRoleUser(List<Integer> deptIdList);
    /**
     * 删除组织下的角色
     * @param deptIdList
     */
    void deleteDeptRole(List<Integer> deptIdList);

    int updateOrgStatus(SubOrgBean org);

    /**
     * 查询八个角色id
     * @param id
     * @return
     */
    List<ProDeptRoleBean> getDeptRoleByOrgId(long id);

    List<ProDeptRoleDo> getRoleListByOrgId(long id);

    void delRoleUserByUserId(Long userId);
}
