package com.bonus.canteen.core.device.mapper;

import java.util.List;
import com.bonus.canteen.core.device.domain.DeviceInfo;
import org.apache.ibatis.annotations.Param;

/**
 * 设备资料Mapper接口
 * 
 * @author xsheng
 * @date 2025-05-25
 */
public interface DeviceInfoMapper {
    /**
     * 查询设备资料
     * 
     * @param deviceId 设备资料主键
     * @return 设备资料
     */
    public DeviceInfo selectDeviceInfoByDeviceId(Long deviceId);

    /**
     * 查询设备资料列表
     * 
     * @param deviceInfo 设备资料
     * @return 设备资料集合
     */
    public List<DeviceInfo> selectDeviceInfoList(DeviceInfo deviceInfo);

    /**
     * 新增设备资料
     * 
     * @param deviceInfo 设备资料
     * @return 结果
     */
    public int insertDeviceInfo(DeviceInfo deviceInfo);

    /**
     * 修改设备资料
     * 
     * @param deviceInfo 设备资料
     * @return 结果
     */
    public int updateDeviceInfo(DeviceInfo deviceInfo);

    /**
     * 删除设备资料
     * 
     * @param deviceId 设备资料主键
     * @return 结果
     */
    public int deleteDeviceInfoByDeviceId(Long deviceId);

    /**
     * 批量删除设备资料
     * 
     * @param deviceIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDeviceInfoByDeviceIds(@Param("deviceIds") Long[] deviceIds);

    /**
     * 校验设备名称是否唯一
     *
     * @param deviceInfo 设备名称
     * @return 结果
     */
    int checkDeviceNameUnique(DeviceInfo deviceInfo);

    /**
     * 校验设备编号是否唯一
     *
     * @param deviceInfo 设备编号
     * @return 结果
     */
    int checkDeviceNumberUnique(DeviceInfo deviceInfo);

    /**
     * 校验设备序列号是否唯一
     *
     * @param deviceInfo 设备序列号
     * @return 结果
     */
    int checkDeviceSnUnique(DeviceInfo deviceInfo);

    /**
     * 新增设备绑定关系
     *
     * @param deviceInfo 设备绑定关系
     * @return 结果
     */
    int insertDeviceBinding(DeviceInfo deviceInfo);

    /**
     * 修改设备绑定关系
     *
     * @param deviceInfo 设备绑定关系
     * @return 结果
     */
    int updateDeviceBinding(DeviceInfo deviceInfo);

    /**
     * 新增设备菜谱关系
     *
     * @param deviceInfo 设备菜谱关系
     * @return 结果
     */
    int insertDeviceRecipeBinding(DeviceInfo deviceInfo);

    /**
     * 修改设备菜谱关系
     *
     * @param deviceInfo 设备菜谱关系
     * @return 结果
     */
    int updateDeviceRecipeBinding(DeviceInfo deviceInfo);

    /**
     * 查询设备菜谱关系
     *
     * @param deviceInfo 设备菜谱关系
     * @return 结果
     */
    String selectDeviceRecipeBinding(DeviceInfo deviceInfo);

    /**
     * 批量删除设备绑定关系
     *
     * @param deviceIds 需要删除的数据主键集合
     */
    void deleteDeviceBinding(@Param("deviceIds") Long[] deviceIds);

    /**
     * 批量删除设备菜谱关系
     *
     * @param deviceIds 需要删除的数据主键集合
     */
    void deleteDeviceRecipeBinding(@Param("deviceIds") Long[] deviceIds);

    /**
     * 更新设备在线状态
     *
     * @param sn 设备序列号
     * @return 结果
     */
    int updateTimeBySn(String sn);
}
