package com.bonus.system.basic.dao;

import com.bonus.system.api.domain.MapVo;
import com.bonus.system.basic.domain.SysOrg;
import com.bonus.system.basic.domain.SysOrgImport;
import com.bonus.system.basic.domain.SysTree;
import com.bonus.system.holiday.entity.HolidayKeyBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

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

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

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

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

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

    /**
     * 修改组织
     * @param org 组织对象
     * @return 1|0
     */
    int updateOrg(SysOrg 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 bean
     */
    List<SysTree> orgPersonSelect();

    /**
     * 查询人员的名称和编号
     * @param name 姓名
     * @return map
     */
    Map<String, Object> selectUserByName(String name);

    /**
     * 根据父级编号查询组织名称
     * @param orgName 组织名称
     * @return 父级编号
     */
    Long getParentIdByName(String orgName);

    /**
     * 新增组织的部门负责人
     * @param listHead list bean
     * @param id 组织编号
     * @return 1|0
     */
    int insertOrgHead(@Param("list") List<String> listHead, @Param("orgId") long id);

    /**
     * 删除组织部门负责人
     * @param id 组织编号
     */
    void deleteOrgHead(long id);

    List<SysOrgImport> getOrgList();

    List<SysOrgImport> getPersonList();

    /**
     * 根据用户编号查询组织编号
     * @param userId
     */
    List<MapVo> getOrgIdList(Long userId);


    /**
     * 根据用户编号查询组织编号 管理员
     * @param userId
     */
    List<MapVo> getOrgIdListAdministrators(Long userId);

    /**
     * 根据用户编号查询组织编号 部门负责人
     * @param userId
     */
    List<MapVo> getOrgIdListManager(Long userId);

    /**
     * 根据用户编号查询组织信息 （个人的）
     * @param sysOrg
     * @return
     */
    List<SysOrg> selectOrgListPerson(@Param("bean")SysOrg sysOrg);
}
