package com.ruoyi.bst.device.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ruoyi.bst.device.domain.Device;
import com.ruoyi.bst.device.domain.DeviceQuery;
import com.ruoyi.bst.device.domain.DeviceVO;
import com.ruoyi.bst.device.domain.vo.DeviceMacSnVO;
import com.ruoyi.common.domain.vo.StringIntegerVO;

/**
 * 设备Mapper接口
 *
 * @author ruoyi
 * @date 2025-03-20
 */
public interface DeviceMapper {
    /**
     * 查询设备
     *
     * @param id 设备主键
     * @return 设备
     */
    DeviceVO selectDeviceById(Long id);

    /**
     * 查询设备列表
     *
     * @param query 设备
     * @return 设备集合
     */
    List<DeviceVO> selectDeviceList(@Param("query") DeviceQuery query);

    /**
     * 新增设备
     *
     * @param device 设备
     * @return 结果
     */
    int insertDevice(Device device);

    /**
     * 修改设备
     *
     * @param device 设备
     * @return 结果
     */
    public int updateDevice(@Param("data") Device device);

    /**
     * 删除设备
     *
     * @param id 设备主键
     * @return 结果
     */
    int deleteDeviceById(Long id);

    /**
     * 批量删除设备
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDeviceByIds(Long[] ids);

    /**
     * 逻辑删除设备
     *
     * @param ids 需要删除的设备主键集合
     * @return 结果
     */
    int logicDel(@Param("ids") List<Long> ids);

    /**
     * 查询设备ID列表
     *
     * @param query
     * @return
     */
    List<Long> selectIdList(@Param("query") DeviceQuery query);

    /**
     * 根据条件更新设备
     *
     * @param data
     * @param query
     * @return
     */
    int updateByQuery(@Param("data") Device data, @Param("query") DeviceQuery query);

    /**
     * 根据条件查询简单的设备信息，仅包含了定位日志所需的数据
     *
     * @param query
     * @return
     */
    DeviceVO selectSimpleForLocationLog(@Param("query") DeviceQuery query);

    /**
     * 清除设备当前订单ID
     *
     * @param id            设备ID
     * @param orderDeviceId 订单设备ID
     * @return 结果
     */
    int clearCurrentOrderDevice(@Param("id") Long id, @Param("orderDeviceId") Long orderDeviceId);

    /**
     * 查询设备状态数量
     *
     * @param query
     * @return
     */
    List<StringIntegerVO> selectStatusCount(@Param("query") DeviceQuery query);

    /**
     * 查询设备在线状态数量
     *
     * @param query
     * @return
     */
    List<StringIntegerVO> selectOnlineStatusCount(@Param("query") DeviceQuery query);

    /**
     * 查询设备数量
     *
     * @param query
     * @return
     */
    Integer selectCount(@Param("query") DeviceQuery query);

    /**
     * 清空设备的车型
     *
     * @param id 设备ID
     * @return 结果
     */
    int resetModel(@Param("id") Long id);

    /**
     * 解绑所属商户
     *
     * @param ids
     * @return
     */
    int unbindMch(@Param("ids") List<Long> ids);

    /**
     * 解绑运营区
     *
     * @param ids
     * @return
     */
    int unbindArea(@Param("ids") List<Long> ids);

    /**
     * 根据mac查询订单ID
     *
     * @param mac
     * @return
     */
    Long selectOrderIdByMac(@Param("mac") String mac);

    /**
     * 根据mac查询SN
     *
     * @param query
     * @return
     */
    List<DeviceMacSnVO> selectMacSnList(@Param("query") DeviceQuery query);

    /**
     * 条件更新（简单版）
     *
     * @param data
     * @param query
     * @return
     */
    int updateByQuerySimple(@Param("data") Device data, @Param("query") DeviceQuery query);

    /**
     * 批量更新IOT数据
     *
     * @param list
     * @return
     */
    int batchUpdateIot(@Param("list") List<Device> list);

    /**
     * 查询全部设备MAC
     *
     * @param query
     * @return
     */
    List<String> selectMacList(@Param("query") DeviceQuery query);

}
