package cn.iocoder.yudao.module.system.service.robot.mapstop;

import java.util.*;
import javax.validation.*;

import cn.iocoder.yudao.module.system.controller.admin.robot.mapstop.RobotMapStopPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.mapstop.RobotMapStopSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotMapStopDO;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 车辆(地图)急停记录 Service 接口
 *
 * @author 陈宾顺
 */
public interface RobotMapStopService extends IService<RobotMapStopDO> {

    /**
     * 创建车辆(地图)急停记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMapStop(@Valid RobotMapStopSaveReqVO createReqVO);

    /**
     * 更新车辆(地图)急停记录
     *
     * @param updateReqVO 更新信息
     */
    void updateMapStop(@Valid RobotMapStopSaveReqVO updateReqVO);

    /**
     * 删除车辆(地图)急停记录
     *
     * @param id 编号
     */
    void deleteMapStop(Long id);

    /**
     * 获得车辆(地图)急停记录
     *
     * @param id 编号
     * @return 车辆(地图)急停记录
     */
    RobotMapStopDO getMapStop(Long id);

    /**
     * 获得车辆(地图)急停记录分页
     *
     * @param pageReqVO 分页查询
     * @return 车辆(地图)急停记录分页
     */
    PageResult<RobotMapStopDO> getMapStopPage(RobotMapStopPageReqVO pageReqVO);

    /**
     * 查询暂停的地图
     * @return
     */
    List<Long> getStopMapIds();

    /**
     * 查询这张地图暂停的车辆
     * @param id
     * @return
     */
    List<String> getStopRobotNoByMapIds(Long id);

    /**
     * 添加暂停
     * @param id
     * @param robotNos
     */
    void createRobotMapStop(Long id, List<String> robotNos);

    /**
     * 根据地图id删除
     * @param id
     */
    void deleteRobotMapStopByMapId(Long id);

    /**
     * 根据地图id查询，该地图的暂停信息
     * @param id
     * @return
     */
    List<RobotMapStopDO> getByMapId(Long id);

    /**
     * 获取所有的暂停信息
     * @param type
     * @return
     */
    List<RobotMapStopDO> getAllRobotMapStops(Integer type);

    /**
     * 根据车辆编号查询暂停信息
     * @param robotNo
     * @return
     */
    List<RobotMapStopDO> getStopRobotNoByRobotNo(String robotNo);

    /**
     * 远遥暂停车辆
     * @param robotNo
     * @return
     */
    void remoteStopRobot(String robotNo);

    /**
     * 根据车辆编号删除
     * @param robotNos
     */
    void deleteRobotMapStopByRobotNos(List<String> robotNos);

    /**
     * 远遥恢复车辆
     * @param robotNo
     */
    void remoteRecoveryRobot(String robotNo);

    /**
     * 查询已经暂停的车辆
     * @param robotNos
     * @return
     */
    List<RobotMapStopDO> getStopRobotNoByRobotNoList(List<String> robotNos);

    void rcsStopRobotAddLog(String robotNo);

    void rcsDeleteStopRobotAddLog(String robotNo);
}
