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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO;
import cn.iocoder.yudao.module.system.api.robot.vo.RobotInformationVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 车辆信息 Service 接口
 *
 * @author 陈宾顺
 */
public interface RobotInformationService extends IService<RobotInformationDO> {

    /**
     * 创建车辆信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createInformation(@Valid RobotInformationSaveReqVO createReqVO);

    /**
     * 更新车辆信息
     *
     * @param updateReqVO 更新信息
     */
    void updateInformation(@Valid RobotInformationSaveReqVO updateReqVO);

    /**
     * 删除车辆信息
     *
     * @param id 编号
     */
    void deleteInformation(Long id);

    /**
     * 获得车辆信息
     *
     * @param id 编号
     * @return 车辆信息
     */
    RobotInformationRespVO getInformation(Long id);

    /**
     * 获得车辆信息分页
     *
     * @param pageReqVO 分页查询
     * @return 车辆信息分页
     */
    PageResult<RobotInformationPageRespVO> getInformationPage(RobotInformationPageReqVO pageReqVO);

    /**
     * 统计车辆待命/任务中/离线
     *
     * @return
     */
    RobotInformationStatisticsVO statisticsInformation();

    /**
     * 获取所有AGV状态
     * @return
     */
    List<RobotInfoStatusVO> getAGVListStatusInfo();

    /**
     * 查询能正常使用的车辆
     *
     * @return
     */
    List<RobotInformationDO> getCanUseRobot();

    /**
     * 查询所有车辆
     *
     * @return
     */
    List<RobotInformationDO> getAllRobot();

    /**
     * 查询机器人编号
     *
     * @param mac
     * @return
     */
    String getRobotNoByMac(String mac);

    /**
     * @param dto
     */
    void test(@Valid RobotStatusDTO dto);

    /**
     * 获取所有的车辆信息 (缓存中获取)
     *
     * @return
     */
    Map<String, RobotInformationVO> getAllRobotByRedis();

    /**
     * 通过macAddress 获取设备基础信息 - 然后存入到redis中
     *
     * @param macAddress
     * @return
     */
    RobotInformationVO getRobotByRedis(String macAddress);

    /**
     * 根据机器人编号获取mac地址
     * @param robotNo
     * @return
     */
    String getMacByRobotNo(String robotNo);

    /**
     * 获取机器人全部信息和异常信息
     * @return
     */
    List<RobotInformationRespVO> getAllRobotAndErrorMsg();


    /**
     * 根据地图id查询车辆信息
     * @param mapId
     * @return
     */
    List<RobotInformationDO> getListByMapId(Long mapId);
}
