package com.ruoyi.bst.device.mapper;

import java.util.List;

import com.ruoyi.bst.booth.domain.BoothVO;
import com.ruoyi.bst.device.domain.Device;
import com.ruoyi.bst.device.domain.DeviceCountVO;
import com.ruoyi.bst.device.domain.DeviceVO;
import com.ruoyi.bst.device.domain.DeviceQuery;
import com.ruoyi.common.domain.vo.LongIntegerVO;
import com.ruoyi.common.domain.vo.StringIntegerVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;

import javax.validation.constraints.NotBlank;

/**
 * 设备Mapper接口
 *
 * @author ruoyi
 * @date 2025-04-23
 */
public interface DeviceMapper
{
    /**
     * 查询设备
     *
     * @param deviceId 设备主键
     * @return 设备
     */
    DeviceVO selectDeviceByDeviceId(Long deviceId);

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

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

    /**
     * 批量新增设备
     */
    int batchInsert(@Param("list") List<? extends Device> list);

    /**
     * 批量修改设备
     */
    int batchUpdate(@Param("list") List<? extends Device> list);

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

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

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

    int checkUnique(Device device);

    int logicDel(@Param("ids") List<Long> deviceIds);

    int updateOnlineStatusByMac(@Param("mac") String mac, @Param("status") String status);

    /**
     * 记录读数
     */
    int initTotalEle(@Param("deviceId") Long deviceId);

    /**
     * 设备绑定商户
     * @param deviceId 设备id
     */
    int bind(@Param("deviceId") Long deviceId, @Param("userId") Long userId);

    /**
     * 解绑商户
     * @param deviceId 设备id
     */
    int unbindStore(@Param("deviceId") Long deviceId);

    int unbindMch(@Param("deviceId") Long deviceId);
    /**
     * 根据设备编号查询
     * @param deviceNo
     * @return
     */
    DeviceVO selectByDeviceNo(String deviceNo);

    /**
     * 查询ID列表
     */
    List<Long> selectIds(@Param("query") DeviceQuery query);

    /**
     * 查询一个
     */
    DeviceVO selectOne(@Param("query") DeviceQuery query);

    public int bindBooth(@Param("deviceId") Long deviceId, @Param("deviceNo") String deviceNo, @Param("date") BoothVO booth);

    public int unbindBooth(@Param("deviceId") Long deviceId);


    /**
     * 设置设备爆灯时长
     *
     * @param deviceId 设备
     * @param time     增加的量
     */
    int setTime(@Param("deviceId") Long deviceId,@Param("lightingTime") long time);

    /**
     * 根据店铺id列表，查询设备数量
     * @param storeIds 店铺id列表
     */
    List<DeviceCountVO> selectCountByStoreIds(@Param("storeIds") List<Long> storeIds);

    /**
     * 条件查询设备
     * @param query
     * @return
     */
    List<LongIntegerVO> selectCommonCountMap(@Param("query") DeviceQuery query);

    int updateByQuery(@Param("data") Device data, @Param("query") DeviceQuery query);

    /**
     * 更改设备投放店铺
     * @param device
     * @return
     */
    int changeStore(Device device);

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

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

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