package com.sptg.permissions.biz.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.sptg.device.api.entity.Device;
import com.sptg.permissions.api.dto.DeviceAuthorizeDto;
import com.sptg.permissions.api.dto.RegionDto;
import com.sptg.permissions.api.entity.DeviceAuthorize;
import com.sptg.permissions.api.entity.Region;

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

/**
 * title: DeviceAuthorizeServiceInterface
 * package: com.sptg.permissions.biz.security
 * description: 设备权限-服务层接口
 *
 *                  
 *                
 */
public interface DeviceAuthorizeServiceInterface extends IService<DeviceAuthorize> {

    /**
     * 功能描述: 根据跟机构Id查询设备授权列表
     * @param orgId 根机构Id
     * @return List<DeviceAuthorize>
     *                  
     *                      
     */
    List<DeviceAuthorize> selectByRootOrgId(Long orgId);

    /**
     * 功能描述: 根据机构的position或小区的Id删除授权设备
     * @param position 机构位置
     * @param residentialId 小区Id
     *                  
     *                      
     */
    void deleteByOrgPositionOrResidentialId(String position,Long residentialId);

    /**
     * 功能描述: 根据机构的position和小区的Id删除授权设备
     * @param position 机构位置
     * @param residentialId 小区Id
     *                  
     *                      
     */
    void deleteByOrgPositionAndResidentialId(String position,Long residentialId);

    /**
     * 功能描述: 分页查询授权区域信息
     * @param dto 查询条件
     * @param page 分页信息
     * @return Page<Region>
     *                  
     *                       
     */
    Page<Region> pagingQueryRegion(RegionDto dto,Page<Region> page);

    /**
     * 功能描述:创建授权对象
     * @param device 设备信息
     * @return DeviceAuthorize
     *                  
     *                       
     */
    DeviceAuthorize createAuthorizeObj(Device device);

    /**
     * 功能描述:根据位置查询覆盖数量
     * @param dto
     * {
     *    orgPosition : 位置信息
     *    addressType : 查询类型
     * }
     * @return Long
     *             
     *                      
     */
    Long getDeviceCoverAccount(DeviceAuthorizeDto dto);

    /**
     * 功能描述:根据位置查询覆盖数量
     * @param dto
     * {
     *    orgPosition : 位置信息
     *    addressType : 查询类型
     * }
     * @return Long
     *             
     *                      
     */
    Long  getDeviceAccount(DeviceAuthorizeDto dto);

    /**
     * 功能描述:统计各个省份覆盖数量
     * @param dto
     * {
     *    deviceRegionProvince :省份信息
     *    orgPosition : 位置信息
     * }
     * @return List<Map<String,Object>>
     *                
     *                      
     */
    List<Map<String,Object>> getDeviceCountForArea(DeviceAuthorizeDto dto);

    /**
     * 功能描述:
     * @param dto
     * {
     *    onlineStatus :是否离线
     *    orgPosition : 位置信息
     * }
     * @return Long
     *                
     *                     
     */
    Long getDeviceCount(DeviceAuthorizeDto dto);

    /**
     * 功能描述:查询不同设备安装位置数量(小区，单元，停车设备总数)
     * @param dto
     * {
     *    orgPosition : 位置信息
     * }
     * @return  Map<String,Object>
     *                
     *                     
     */
    Map<String,Object> getDeviceCountForInstallPathType(DeviceAuthorizeDto dto);

    /**
     * 功能描述:统计某月的设备数量
     * @param dto
     * {
     *    deviceRegionProvince : 省
     *    deviceRegionCity : 市
     *    deviceRegionArea : 区
     *    selectYear : 查询年份条件
     *    orgPosition : 位置信息
     * }
     * @return List<Map<String,Object>>
     *                
     *                     
     */
    List<Map<String,Object>> getDeviceCountForMonth(DeviceAuthorizeDto dto);

}
