package com.sptg.estate.biz.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.sptg.common.core.beans.ResultBean;
import com.sptg.estate.api.dto.ResidentialDto;
import com.sptg.estate.api.entity.Residential;

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

/**
 * title: ResidentialServiceInterface
 * package: com.sptg.estate.biz.security
 * description: 小区 服务层接口
 *
 *             
 *                
 */
public interface ResidentialServiceInterface extends IService<Residential>{

    /**
     * 功能描述:小区列表查询
     * @param residentialDto 小区业务对象（含分页及查询条件）
     * @return ResultBean<Page<Residential>>
     *             
     *                      
     */
    ResultBean<Page<Residential>> showResidentialList(ResidentialDto residentialDto);
    
    /**
     * 功能描述:添加小区
     * @param residentialDto 小区业务对象
     * @return ResultBean<Boolean>
     *             
     *                      
     */
    ResultBean<Residential> addResidential(ResidentialDto residentialDto);

    /**
     * 功能描述:根据Id查找小区
     * @param id 必填
     * @return Residential
     *             
     *                      
     */
    Residential findResidentialById(Long id);

    /**
     * 功能描述:根据小区编号查找小区
     * @param residentialNumber 必填
     * @return Residential
     *             
     *                      
     */
    Residential findResidentialByNumber(String residentialNumber);
    
    /**
     * 功能描述:编辑小区
     * @param residentialDto 小区业务对象
     * @return ResultBean<Boolean>
     *             
     *                       
     */
    ResultBean<Boolean> updateResidential(ResidentialDto residentialDto);

    /**
     * 功能描述:根据Id删除小区
     * @param residentialDto 小区业务对象
     * @return ResultBean<Boolean>
     *             
     *                       
     */
    ResultBean<Boolean> deleteResidential(ResidentialDto residentialDto);

    /**
     * 功能描述:小区放入垃圾箱
     * @param residentialDto 小区业务对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> trashOrRecover(ResidentialDto residentialDto);
    
    /**
     * 功能描述:根据Id集合批量删除小区
     * @param residentialDto 小区业务对象
     * @throws Exception
     * @return ResultBean<Boolean>
     *             
     *                      
     */
    ResultBean<Boolean> deleteResidentialList(ResidentialDto residentialDto) throws Exception;

    /**
     * 功能描述:根据位置查找小区
     * @param residentialDto 小区业务对象
     * @return ResultBean<Residential>
     *             
     *                       
     */
    ResultBean<Residential> findListByPosition(ResidentialDto residentialDto);

    /**
     * 功能描述:按小区分组统计住户人数列表
     * @param residentialDto
     * @return Page<Residential>
     *                
     *                       
     */
    Page<Residential> statisticsUserCountList(ResidentialDto residentialDto);

    /**
     * 功能描述:获取按小区分组统计住户人数列表
     * @param residentialDto
     * @return  List<Residential>
     *                
     *                      
     */
    List<Residential> getStatisticsUserCountList(ResidentialDto residentialDto);

    /**
     * 功能描述:住户总数
     * @param orgPosition 机构位置
     * @return long
     *                
     *                       
     */
    long statisticsUserCount(String orgPosition);

    /**
     * 功能描述:导入小区
     * @param list 小区业务对象集合
     * @throws Exception
     * @return ResultBean<Boolean>
     *             
     *                     
     */
    ResultBean<Boolean> importResidentialList(List<ResidentialDto> list) throws Exception;

    /**
     * 功能描述:根据位置查询小区数量
     * @param residentialDto
     * {
     *    orgPosition : 位置信息
     *    isAllType : 查询类型
     * }
     * @return int
     *             
     *                      
     */
    int getResidentialAccount(ResidentialDto residentialDto);
    /**
     * 功能描述:根据区编号查询小区--国家标准省市区编号
     * @param residential
     * @return
     *               
     *                      
     */
    ResultBean<Residential> getByRegionArea(Residential residential);

    /**
     * 功能描述:查询单元数量
     * @param residentialDto
     * {
     *    orgPosition : 位置信息
     * }
     * @return long
     *                
     *                      
     */
    long getUnitCount(ResidentialDto residentialDto);

    /**
     * 功能描述:按城市分组设备,小区,住户(跨数据库查询)
     * @param regionProvince 省份
     * @param orgPosition   机构位置
     * @return  List<Map<String,Object>>
     *                
     *                      
     */
    List<Map<String,Object>> statisticsCityCountList(String regionProvince, String orgPosition);

    /**
     * 功能描述:根据名称和地址查询
     * @param residentialDto 小区业务对象
     * @return int 数量
     *             
     *                      
     */
    int getResidentialByNameAndRegion(ResidentialDto residentialDto);

    /**
     * 功能描述:获取有区域权限小区用户数量
     * @param orgPosition 机构位置
     * @return int
     *                
     *                      
     */
    long getUserCountForRegionAuthorize(String orgPosition);

    ResultBean<Boolean> updateResidentialEntity(Residential residential);

    ResultBean<Residential> getListByCondition(ResidentialDto residentialDto);

    List<Residential> getListByLikeName(ResidentialDto dto);

    Residential getResidentialByOldId(String oldId);

    int addResidentialBySync(Residential residential);

    /**
     * 功能描述:得到所有的小区列表
     *
     * @return  List<Residential>
     *
     *
     */
    List<Residential> getList();
}
