package com.sunxung.factoring.mapper.sys;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.sunxung.factoring.entity.sys.Org;
import com.sunxung.factoring.entity.sys.vo.SearchOrg;

@Mapper
public interface OrgMapper {

    void add(Org org);

    int update(Org org);

    int delete(Long id);

    /**
     * 根据parentId删除子节点 <br/>
     *
     * @param id
     * @return
     */
    int deleteByParentId(Long parentid);

    /**
     * 修改子组织机构数、子组织机构最大数
     *
     * @param id 组织机构id
     * @param subCountMax 子组织机构最大数
     * @param subCount 子组织机构数
     * @return
     */
    int modifySubCountMaxAndSubCountById(@Param("id") Long id, @Param("subCount") int subCount,
            @Param("subCountMax") int subCountMax);

    /**
     * 修改子组织机构数
     *
     * @param id 组织机构id
     * @param subCount 子组织机构数
     * @return
     */
    int modifySubCountById(@Param("id") Long id, @Param("subCount") int subCount);

    Org get(Long id);

    List<Org> findByParentId(@Param("parentId") Long parentId);

    List<Org> findAll();

    List<Org> findOperationCenter(@Param("parentId") Long parentId);

    Org getByCode(String code);

    Integer countBySearch(SearchOrg search);

    List<Org> findBySearch(SearchOrg search);

    List<String> findRoleIdByOrgId(Long orgId);

    /**
     * 判断该父部门下是否有重复的子部门
     *
     * @param parentId 父部门的ID
     * @param name 部门名称
     * @return
     */
    Org getByParentIdAndName(@Param("parentId") Long parentId, @Param("name") String name);

    /**
     * 调整部门顺序
     *
     * @param orgId 部门ID
     * @param gradation 顺序
     * @return int
     */
    int adjustOrder(@Param("orgId") Long orgId, @Param("gradation") int gradation);

    /**
     * 验证同一层级，部门名称唯一
     *
     * @param orgId 父部门的ID
     * @param name 部门名称
     * @return Org 返回组织机构对象
     */
    Org findOrgByNameAndParentId(@Param("parentId") Long orgId, @Param("orgName") String name);

    /**
     * 根据部门code值查询该部门下所有成员及子部门下所有成员（去重复用户）. <br/>
     *
     * @param code
     * @return
     */
    List<Long> findUserIdByOrgCode(String code);

    /**
     * 查询用户所属部门是否为长安银科
     * @param userId
     * @return
     */
    Org findRootByUseId(Long userId);

    /**
     * 查看用户为部门负责人的所有部门
     * @param userId
     * @return
     */
    List<Org> findIdentityByUseId(Long userId);

    /**
     * 根据部门名称查询
     *
     * @param name
     * @return
     */
    Org findByName(String name);
}
