package cn.iocoder.yudao.module.system.service.equipment;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.equipment.vo.attendancemachine.*;
import cn.iocoder.yudao.module.system.controller.admin.equipment.vo.userExt.UsersExtRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.equipment.AttendanceMachineDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 考勤设备 Service 接口
 *
 * @author 符溶馨
 */
public interface AttendanceMachineService {

    /**
     * 创建考勤设备
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createAttendanceMachine(@Valid AttendanceMachineSaveReqVO createReqVO);

    /**
     * 更新考勤设备
     *
     * @param updateReqVO 更新信息
     */
    void updateAttendanceMachine(@Valid AttendanceMachineSaveReqVO updateReqVO);

    /**
     * 更新考勤设备 状态
     * @param statusUpdateVOS 更新信息
     */
    void updateAttendanceMachineStatus(List<DeviceStatusUpdateVO> statusUpdateVOS);

    /**
     * 考勤设备密码修改
     * @param updateReqVO 更新信息
     */
    void updatePassword(AttendanceMachinePasswordVO updateReqVO);

    /**
     * 获得考勤设备
     *
     * @param assetsNo 资产编号
     * @return 考勤设备
     */
    AttendanceMachineRespVO getAttendanceMachine(String assetsNo);

    /**
     * 获得考勤设备
     *
     * @param deviceNo 设备编号
     * @return 考勤设备
     */
    List<AttendanceMachineDO> getAttendanceMachineByDeviceNo(List<String> deviceNo);

    /**
     * 获得考勤设备分页
     *
     * @param pageReqVO 分页查询
     * @return 考勤设备分页
     */
    PageResult<AttendanceMachineRespVO> getAttendanceMachinePage(AttendanceMachinePageReqVO pageReqVO);

    /**
     * 获得该设备下 已下发的用户列表
     * @param pageReqVO 分页查询
     * @return 用户列表
     */
    PageResult<UsersExtRespVO> getUserByDeviceNo(UserExtPageReqVO pageReqVO);

    /**
     * 考勤设备 实时下发用户
     * @param addReqVO 下发信息
     */
    void addUserToAttendanceMachine(AddUserToAttendanceMachineVO addReqVO);

    /**
     * 获得所有在线的设备
     * @return 设备列表
     */
    List<AttendanceMachineDO> getListByStatus();

    /**
     * 获得指定部门绑定的设备列表
     * @param deptId 部门编号
     * @return 设备信息列表
     */
    List<AttendanceMachineDO> getListByDeptId(Long deptId);
}