package cn.iocoder.yudao.module.pms.service.yanfan.device;

import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.module.pms.controller.admin.yanfan.device.vo.DeviceShortOutput;
import cn.iocoder.yudao.module.pms.controller.admin.yanfan.device.vo.YfIotDevicePageReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.yanfan.device.vo.YfIotDeviceRespVO;
import cn.iocoder.yudao.module.pms.controller.admin.yanfan.device.vo.YfIotDeviceSaveReqVO;
import cn.iocoder.yudao.module.pms.dal.dataobject.yanfan.device.YfIotDeviceDO;
import liquibase.pro.packaged.Y;
import org.quartz.SchedulerException;

import javax.validation.Valid;

/**
 * 设备 Service 接口
 *
 * @author 超级管理员
 */
public interface YfIotDeviceService {
    void updateDevice(YfIotDeviceDO device);
    int updateDeviceStatusAndLocation(YfIotDeviceDO device, String ipAddress);
    YfIotDeviceDO selectDeviceBySerialNumber(String serialNumber);
    void deleteDeviceByDeviceId(Long deviceId) throws SchedulerException;
    List<DeviceShortOutput> selectDeviceShortList(YfIotDeviceSaveReqVO device);
    String generationDeviceNum(Integer type);
    YfIotDeviceRespVO selectDeviceByDeviceId(Long deviceId);
    /**
     * 创建设备
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    YfIotDeviceDO createYfIotDevice(@Valid YfIotDeviceSaveReqVO createReqVO);

    /**
     * 更新设备
     *
     * @param updateReqVO 更新信息
     */
    void updateYfIotDevice(@Valid YfIotDeviceSaveReqVO updateReqVO);

    /**
     * 删除设备
     *
     * @param id 编号
     */
    void deleteYfIotDevice(Long id);

    /**
     * 获得设备
     *
     * @param id 编号
     * @return 设备
     */
    YfIotDeviceDO getYfIotDevice(Long id);

    /**
     * 获得设备分页
     *
     * @param pageReqVO 分页查询
     * @return 设备分页
     */
    PageResult<YfIotDeviceDO> getYfIotDevicePage(YfIotDevicePageReqVO pageReqVO);
    int insertDeviceAuto(String serialNumber, Long userId, Long productId);

}
