package com.dcsoft.system.visitor.service;

import java.util.Date;
import java.util.List;

import com.dcsoft.common.core.web.page.TableDataInfoPage;
import com.dcsoft.system.domain.SysBranch;
import com.dcsoft.system.domain.SysEmpowerRecord;
import com.dcsoft.system.domain.SysManageRecord;
import com.dcsoft.system.domain.SysPeople;
import com.dcsoft.system.domain.vo.SysFileVo;
import com.dcsoft.system.visitor.domain.*;

/**
 * 访客信息Service接口
 *
 * @author 倪春
 * @date 2023-03-09
 */
public interface IVisitorService
{
    /**
     * 查询访客信息
     *
     * @param id 访客信息主键
     * @return 访客信息
     */
    public Visitor selectVisitorById(Long id);

    /**
     * 查询访客信息列表
     *
     * @param visitor 访客信息
     * @return 访客信息集合
     */
    public List<Visitor> selectVisitorList(Visitor visitor);

    /**
     * 新增访客信息
     *
     * @param visitor 访客信息
     * @return 结果
     */
    public int insertVisitor(Visitor visitor);

    /**
     * 修改访客信息
     *
     * @param visitor 访客信息
     * @return 结果
     */
    public int updateVisitor(Visitor visitor);

    /**
     * 批量删除访客信息
     *
     * @param ids 需要删除的访客信息主键集合
     * @return 结果
     */
    public int deleteVisitorByIds(Long[] ids);

    /**
     * 删除访客信息信息
     *
     * @param id 访客信息主键
     * @return 结果
     */
    public int deleteVisitorById(Long id);

    public List<Visitor> selectVisitorItemList(Visitor item);

    public int deleteVisitorItemByParentId(Long id);

    Visitor selectByGuid(String guid);

    Visitor selectVisitorByPhone(String phone);

    /**
     * 查询访客预约信息
     */
    TableDataInfoPage queryVisitorAppointment(VisitorParamVo paramVo);

    /**
     * 查询黑名单
     */
    TableDataInfoPage selectSysBlackListList(VisitorParamVo paramVo);

    /**
     * 查询访客人员信息
     */
    PersonnelInfoVo queryPersonnelInfo(List<String> list);

    /**
     * 查询被访人
     */
    List<PersonnelInfoVo> queryPeople(Visitor paramVo);

    /**
     * 查询已审核状态信息
     */
    VisitorParamVo queryAuditedVisitor(Visitor paramVo);

    /**
     * 查询详情
     */
    VisitorInfoVo queryVisitorInfo(Visitor paramVo);

    /**
     * 修改状态
     */
    int updateState(Visitor paramVo);

    int queryVisitorByCardCount(List<String> idcards);

    /**
     * 查询访客信息
     */
    PersonnelInfoVo queryVisitorInfoById(String id);

    /**
     * 查询未签离列表
     */
    List<Visitor> queryVisitorUnsigned(VisitorParamVo paramVo);

    /**
     *
     * @param paramVo
     * @return
     */
    int updateSignOut(Visitor paramVo);

    void saveVisCheckCode(CheckCodeVo codeVo);

    CheckCodeVo queryVisCheckCodeById(String qrData);

    String queryVisCheckCode(String visitorId);

    Visitor selectVisitorInfo(SysPeople people);

    /**
     * 查询被访人授权记录
     * @param userId
     * @return
     */
    List<SysManageRecord> querySysManageRecord(Long userId);

    /**
     * 保存访客guid
     */
    void updateVisitorInfoGuid(List<Visitor> listVisitorId);

    /**
     * 查询访客guid
     * @param personId
     * @return
     */
    Visitor queryVisitorGuid(String personId);

    /**
     * 查询是否进入
     * @param id
     */
    int queryVisitorRecord(Long id);

    /**
     * 更新离开时间
     * @param record
     */
    void updateVisitorRecord(VisitorRecordVo record);

    /**
     * 新增访客识别记录
     * @param record
     */
    void saveVisitorRecord(VisitorRecordVo record);

    /**
     * 查询访客记录列表
     * @param visitor
     * @return
     */
    List<VisitorRecordVo> queryVisitorRecordList(VisitorRecordVo visitor);

    /**
     * 删除访客记录
     * @param ids
     */
    void deleteVisitorRecordList(String[] ids);

    List<SysBranch> querySysBranch(String deptType);

    /**
     * 查询访客数量（今日，本周，本月）
     * @param recordVo
     * @return
     */
    VisitorCountVo queryVisitorCount(VisitorRecordVo recordVo);

    /**
     * 首页头像展示
     * @param recordVo
     * @return
     */
    List<VisitorRecordVo> queryVisitorAvatar(VisitorRecordVo recordVo);

    VisitorRecordVo queryVisitorById(String phone);

    int queryVisitorByIdCount(List<String> phone);

    /**
     * 查询近七天的访客数据
     * @param paramVo
     * @return
     */
    List<Visitor> queryExportVisitorInfo(VisitorParamVo paramVo);

    String queryTest(VisitorRecordVo recordVo);

    /**
     * 保存访客机断线数据
     * @param visitor
     */
    void saveDisconnect(List<Visitor> visitor);

    /**
     * 保存审核记录
     * @param visitor
     */
    void saveVisitorAuditRecords(Visitor visitor);

    /**
     * 查询物业子部门访客审核人员
     * @param deptId
     * @return
     */
    List<SysPeople> queryPropertyExaminePeople(String deptId);

    void deleteFile(SysFileVo sysFile);

    void saveFile(List<SysFileVo> sysFiles);

    void saveVisitorReviewProcess(Visitor visitor);

    SysPeople queryVisitorReviewProcess(Long id);

    void updateVisitorReviewProcess(Visitor visitor);

    VisitorReviewProcessVo queryReviewProcess(VisitorReviewProcessVo visitor);

    int queryVisitorReviewProcessCount(Long id);

    List<Visitor> selectAppVisitorList(Visitor visitor);

    Visitor selectVisitorSimpleById(Long id);

    void approve(Visitor visitor);

    String selectRecordsByPhone(Long id, String telephone);

    void saveVisitorReviewProcessList(List<Visitor> list);

    int queryVisitor(Visitor visitor);

    int queryVisitorByIdCountOld(String phone);

    String queryReviewProcessOld(Visitor visitor);

    void cancel(Visitor visitor);

    List<String> addVisitorCheck(List<String> phones, Date startTime);

    List<Visitor> queryReviewList(Long peopleId);
}
