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

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.PositionMapItemSynDTO;
import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.RobotPositionMapDTO;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 仓库点位地图子表 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface PositionMapItemMapper extends BaseMapperX<PositionMapItemDO> {

    default PageResult<PositionMapItemDO> selectPage(PositionMapItemPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<PositionMapItemDO>()
                .eqIfPresent(PositionMapItemDO::getPositionMapId, reqVO.getPositionMapId())
                .eqIfPresent(PositionMapItemDO::getLocationX, reqVO.getLocationX())
                .eqIfPresent(PositionMapItemDO::getLocationY, reqVO.getLocationY())
                .eqIfPresent(PositionMapItemDO::getType, reqVO.getType())
                .betweenIfPresent(PositionMapItemDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(PositionMapItemDO::getId));
    }

    /**
     * 根据库位id查询
     *
     * @param locationId
     * @return
     */
    Pose2ds selectByLocationId(Long locationId);

    /**
     * 根据position_map_id 查询
     *
     * @param positionMapId
     * @return
     */
    List<PositionMapItemSynDTO> getAllByMapId(Long positionMapId);

    /**
     * 将areaId设为空
     *
     * @param mapId
     * @param areaId
     */
    void emptyAreaId(@Param("mapId") Long mapId, @Param("areaId") Long areaId);

    /**
     * 将laneId设为空
     *
     * @param mapId
     * @param laneId
     */
    void emptyLaneId(@Param("mapId") Long mapId, @Param("laneId") Long laneId);

    /**
     * @param list
     * @return
     */
    List<PositionMapItemDO> selectInWaitList(@Param("list") List<RobotPositionMapDTO> list);

    /**
     * 删除这个地图的点
     *
     * @param mapId
     */
    void deleteByMapId(@Param("mapId") Long mapId);

    /**
     * 更新车辆编号
     *
     * @param oldRobotNo
     * @param newRobotNo
     */
    void updateRobotNo(@Param("oldRobotNo") String oldRobotNo, @Param("newRobotNo") String newRobotNo);

    /**
     * 释放车辆
     *
     * @param robotNo
     */
    void clearRobotNo(@Param("robotNo") String robotNo);

    /**
     * @param ids
     * @return
     */
    /*@MapKey("id")
    Map<Long, Long> selectSortNumByIds(@Param("ids") List<Long> ids);*/
    List<PositionMapItemDO> selectSortNumByIds(@Param("ids") List<Long> ids);

    /**
     * 设置点位使用中
     *
     * @param id
     * @param robotNo
     */
    void setMapItemUse(@Param("id") Long id, @Param("robotNo") String robotNo);
}
