package com.sptg.permissions.biz.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.sptg.permissions.api.dto.RegionAuthorizeDto;
import com.sptg.permissions.api.entity.Organization;
import com.sptg.permissions.api.entity.Region;
import com.sptg.permissions.api.entity.RegionAuthorize;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * title: RegionAuthorizeMapper
 * package: com.sptg.permissions.biz.mapper
 * description: 区域授权-DAO接口
 *
 *                  
 *                 
 */
public interface RegionAuthorizeMapper extends BaseMapper<RegionAuthorize> {

    /**
     * 功能描述: 获取某机构的授权区域列表（不包括此机构的下级）
     * @param position 机构位置
     * @return List<Region>
     *                  
     *                     
     */
    List<Region> selectAuthorizeRegionList(@Param(value = "position") String position);

    /**
     * 功能描述: 获取某用户的授权区域列表（包括此机构的下级）
     * @param dto
     * {
     *  orgPosition     :   必填,用户所属的机构位置,用来做筛选
     *  groupBy         :   必填,分组条件{ 1：省，2：市，3：区 }
     *  pid             :   选填
     * }
     * @return List<Region>
     *                  
     *                       
     */
    List<Region> selectAuthorizeRegion(@Param(value = "dto")RegionAuthorizeDto dto);

    /**
     * 功能描述: 获取授权小区列表
     * @param dto
     * {
     *      userOrgPosition :   必填，用户所属的机构位置,用来做筛选
     *      isAuthorized    :   选填，{ 1：已授权，2：未授权，null：全部 }
     *      orgPosition     :   选填，若 isAuthorized=1 则必填
     *      orgIdList       :   选填，若 isAuthorized=2 则必填
     *      areaId          :   选填,区域Id
     *      residentialName :   选填,小区名称
     * }
     * @param excludeList 需要过滤的小区Id列表
     * @param page 分页信息
     * @return List<RegionAuthorize>
     *                  
     *                      
     */
    List<RegionAuthorize> selectAuthorizeList(@Param(value = "dto")RegionAuthorizeDto dto,@Param(value = "excludeList")List<Object> excludeList,@Param(value = "page") Page<RegionAuthorize> page);

    /**
     * 功能描述: 查询授权小区和上级机构列表
     * @param dto
     * {
     *      orgPosition     :   必填,用户所属的机构位置,用来做筛选
     *      isSelectParent  :   选填,是否查询父级
     *      pid             :   选填,指定某机构的的数据
     * }
     * @return List<Organization>
     *                  
     *                       
     */
    List<Organization> selectAuthorizeOrgList(@Param(value = "dto")RegionAuthorizeDto dto);

    /**
     * 功能描述: 查询授权小区和上级机构列表
     * @param dto
     * {
     *      orgPosition :   必填,用户所属的机构位置,用来做筛选
     * }
     * @param page 分页信息
     * @return List<Organization>
     *                  
     *                       
     */
    List<Organization> selectAuthorizeOrgList(@Param(value = "dto") RegionAuthorizeDto dto, @Param(value = "page")Page page);

   /**
    * 功能描述: 查询授权小区和上级机构列表(设备授权的小区条件排除)
    * @param dto
    * {
    *      orgPosition :   必填,用户所属的机构位置,用来做筛选
    * }
    * @return List<Organization>
    *                
    *                     
    */
    List<Organization> selectAuthorizeOrgListTwo(@Param(value = "dto") RegionAuthorizeDto dto);
}
