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.ServerUserDto;
import com.sptg.estate.api.entity.AccessCard;
import com.sptg.estate.api.entity.ServerUser;
import com.sptg.estate.api.vo.DevicesAccessPushVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * title: ServerUserServiveInterface
 * package: com.sptg.estate.biz.security
 * description:服务人员-服务层接口
 *
 *
 *
 */
public interface ServerUserServiceInterface extends IService<ServerUser> {
    /**
     * 功能描述:服务人员列表查询（含分页）
     *
     * @param serverUserDto 服务人员传输对象（含查询条件）
     * @return Page<ServerUser>
     *
     *
     */
    Page<ServerUser> showServerUserList(ServerUserDto serverUserDto);

    ResultBean<Page<ServerUser>> pagingByServerUserIds(ServerUserDto serverUserDto);

    /**
     * 功能描述:根据id查询服务人员
     * @param id
     * @return ServerUser
     *
     *
     */
    ServerUser findServerUserById(long id);
    /**
     * 功能描述:删除服务人员
     * @param id
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> deleteServerUser(long id);
    /**
     * 功能描述:批量删除服务人员
     * @param serverUserDto
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> deleteServerUserList(ServerUserDto serverUserDto);

    /**
     * 功能描述:更新服务人员启用状态
     * @param id
     * @param enable
     * @return boolean
     *
     *
     */
    boolean updateIsEnable(long id, int enable);

    /**
     * 功能描述:添加修改服务人员开门权限（保存人脸，门禁卡信息）
     * @param serverUser
     * @return ResultBean<Boolean>
     *
     *
     */
    @Transactional(rollbackFor = {Exception.class} )
    ResultBean<Boolean> addOrEditOpenPermission(ServerUser serverUser);

    /**
     * 功能描述:下发或禁用服务人员开门权限
     * @param devicesAccessPushVO
     * @return ResultBean<Boolean>
     *
     *
     */
    @Transactional(rollbackFor = {Exception.class} )
    ResultBean<Boolean> accessDevicesManualPush(DevicesAccessPushVO devicesAccessPushVO);

    /**
     * 功能描述:获取服务人员数量
     * @param serverUserDto
     * @return int
     *
     *
     */
    int getServerUserCount(ServerUserDto serverUserDto);


    List<ServerUser> getServerUserByCondition(ServerUserDto serverUserDto);
}
