package cn.iocoder.yudao.module.system.dal.mysql.robot;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.mqtt.api.path.dto.RobotDimensionsDTO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 车辆信息 Mapper
 *
 * @author 陈宾顺
 */
@Mapper
public interface RobotInformationMapper extends BaseMapperX<RobotInformationDO> {

    default PageResult<RobotInformationDO> selectPage(RobotInformationPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<RobotInformationDO>()
                .eqIfPresent(RobotInformationDO::getRobotModelId, reqVO.getRobotModelId())
                .eqIfPresent(RobotInformationDO::getRobotModelNumber, reqVO.getRobotModelNumber())
                .likeIfPresent(RobotInformationDO::getRobotNo, reqVO.getRobotNo())
                .eqIfPresent(RobotInformationDO::getRobotTaskModel, reqVO.getRobotTaskModel())
                .eqIfPresent(RobotInformationDO::getMacAddress, reqVO.getMacAddress())
                .eqIfPresent(RobotInformationDO::getUrl, reqVO.getUrl())
                .eqIfPresent(RobotInformationDO::getRobotStatus, reqVO.getRobotStatus())
                .betweenIfPresent(RobotInformationDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(RobotInformationDO::getId));
    }


    /**
     * 更新机器人状态
     *
     * @param robotNo
     * @param robotStatus
     */
    void updateRobotStatus(@Param("robotNo") String robotNo, @Param("robotStatus") Integer robotStatus);

    /**
     * 查询
     *
     * @param query
     * @return
     */
    List<RobotInformationDO> queryAllByLimit(RobotInformationDO query);

    /**
     * 根据机器人编号查询
     *
     * @param robotNos
     * @return
     */
    List<RobotInformationDO> selectByRobotNos(@Param("robotNos") Set<String> robotNos);

    /**
     * 更新任务模式（0：拒收任务、1：正常）
     *
     * @param robotNos
     * @param robotTaskModel
     */
    void updateRobotTaskModel(@Param("robotNo") String robotNo,
                              @Param("robotTaskModel") Integer robotTaskModel);

    /**
     * 批量更新机器人状态
     * @param robotNo
     * @param robotStatus
     */
    void updateRobotListStatus(@Param("robotNo") String robotNo,
                               @Param("robotStatus") Integer robotStatus,
                               @Param("taskDetailId") Long taskDetailId);

    /**
     * 查询车辆尺寸
     * @return
     */
    List<RobotDimensionsDTO> selectRobotDimensions();
    /**
     * 根据地图id获取地图下的机器人信息
     *
     * @param mapId
     * @return
     */
    List<RobotInformationDO> getListByMapId(@Param("mapId") Long mapId);

    RobotInformationDO selectByRobotNoAndIdNotIn(@Param("robotNo") String robotNo, @Param("id") Long id);

    RobotInformationDO selectByMacAndIdNotIn(@Param("macAddress") String macAddress,@Param("id") Long id);

    void initRobotInformation();
}
