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.AccessRecordsDto;
import com.sptg.estate.api.entity.AccessRecords;

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

/**
 * title: AccessRecordsServiceInterface
 * package: com.sptg.estate.biz.security
 * description:出入记录 服务层接口
 *
 *             
 *                 
 */
public interface AccessRecordsServiceInterface extends IService<AccessRecords> {
    /**
     * 功能描述:出入记录列表查询
     * @param accessRecordsDto 出入记录业务对象（含分页及查询条件）
     * @return ResultBean<Page<UserFaceImage>>
     *             
     *                       
     */
    ResultBean<Page<AccessRecords>> showAccessRecordsList(AccessRecordsDto accessRecordsDto);


    /**
     * 功能描述:出入记录列表查询
     * @param accessRecordsDto 出入记录业务对象（含分页及查询条件）
     * @return ResultBean<Page<UserFaceImage>>
     *
     *
     */
    ResultBean<Page<AccessRecords>> accessRecordsList(AccessRecordsDto accessRecordsDto);

    /**
     * 功能描述:根据Id查出入记录
     * @param id 必填
     * @return AccessRecords
     *             
     *                       
     */
    AccessRecords findAccessRecordsById(Long id);

    /**
     * 功能描述:编辑出入记录
     * @param accessRecordsDto 出入记录业务对象
     * @return ResultBean<Boolean>
     *             
     *                       
     */
    ResultBean<Boolean> updateAccessRecords(AccessRecordsDto accessRecordsDto);

    /**
     * 功能描述:删除出入记录
     * @param accessRecordsDto 出入记录业务对象
     * @return ResultBean<Boolean>
     *             
     *                       
     */
    ResultBean<Boolean> deleteAccessRecords(AccessRecordsDto accessRecordsDto);

    /**
     * 功能描述:分组查询某时间出入次数
     * @param accessRecordsDto
     * {
     *     beginDate 查询开始时间
     *     endDate 查询截止时间
     *     accessDate 查询时间
     *     groupType  数据分组类型  0 按时  1按日 2按周  3按月
     *     orgPosition 机构位置
     * }
     * @return List<Map<String, Object>>
     *                
     *                      
     */
    List<Map<String, Object>> accessCountListForGroupType(AccessRecordsDto accessRecordsDto);

    /**
     * 功能描述:查询不同方式出入次数
     * @param accessRecordsDto
     * {
     *     orgPosition 机构位置
     * }
     * @return Map<String, Object>
     *                
     *                     
     */
    Map<String, Object> accessCountForOpenWay(AccessRecordsDto accessRecordsDto);

    /**
     * 功能描述:获取出入次数
     * @param accessRecordsDto
     * @return Long
     *                
     *                     
     */
    Long getAccessRecordsCount(AccessRecordsDto accessRecordsDto);

    /**
     * 功能描述:根据userId查询
     * @param userIds
     * @return ResultBean<AccessRecords>
     *               
     *                     
     */
    ResultBean<AccessRecords> getListByUserId(List<Long> userIds);

    /**
     * 功能描述:获取当日开门次数
     * @param accessRecordsDto{
     *           residentialId:小区Id必填
     * }
     * @return int
     *                      
     */
    int getAccessRecordsCountByDay(AccessRecordsDto accessRecordsDto);

    /**
     * 功能描述:分页查询设备开门次数
     * @param accessRecordsDto
     * @return Page<Map<String, Object>>
     *                
     *                      
     */
    Page<Map<String, Object>> getDeviceOpenCountList(AccessRecordsDto accessRecordsDto);

    /**
     * 查询密码开门
     * @param accessRecordsDto
     * @return
     */
    ResultBean<Page<AccessRecords>> getAccessRecordsList(AccessRecordsDto accessRecordsDto);

    AccessRecords findByOldId(String oldId);

    int addAccessRecordsSync(AccessRecords accessRecords);

    int updateAccessRecordsSync(AccessRecords accessRecords);

    ResultBean<Page<AccessRecords>> getListByMemberId(AccessRecordsDto accessRecordsDto);

    List<AccessRecords> getListByCondition(AccessRecordsDto accessRecordsDto);
}
