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

import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 机器人任务主表 Mapper
 *
 * @author 陈宾顺
 */
@Mapper
public interface RobotTaskMapper extends BaseMapperX<RobotTaskDO> {

    default PageResult<RobotTaskDO> selectPage(RobotTaskPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<RobotTaskDO>()
                .eqIfPresent(RobotTaskDO::getMontageTask, reqVO.getMontageTask())
                .eqIfPresent(RobotTaskDO::getMontageNumber, reqVO.getMontageNumber())
                .eqIfPresent(RobotTaskDO::getSkuInfo, reqVO.getSkuInfo())
                .eqIfPresent(RobotTaskDO::getSkuBatch, reqVO.getSkuBatch())
                .eqIfPresent(RobotTaskDO::getSkuNumber, reqVO.getSkuNumber())
                .eqIfPresent(RobotTaskDO::getPriority, reqVO.getPriority())
                .eqIfPresent(RobotTaskDO::getOtherMsg, reqVO.getOtherMsg())
                .eqIfPresent(RobotTaskDO::getDoCycle, reqVO.getDoCycle())
                .eqIfPresent(RobotTaskDO::getDoMoveAll, reqVO.getDoMoveAll())
                .eqIfPresent(RobotTaskDO::getCycleNumber, reqVO.getCycleNumber())
                .eqIfPresent(RobotTaskDO::getRemainingCycleNumber, reqVO.getRemainingCycleNumber())
                .likeIfPresent(RobotTaskDO::getTaskNo, reqVO.getTaskNo())
                .eqIfPresent(RobotTaskDO::getTaskStatus, reqVO.getTaskStatus())
                .eqIfPresent(RobotTaskDO::getTaskStage, reqVO.getTaskStage())
                .betweenIfPresent(RobotTaskDO::getStartTime, reqVO.getStartTime())
                .betweenIfPresent(RobotTaskDO::getEndTime, reqVO.getEndTime())
                .betweenIfPresent(RobotTaskDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(RobotTaskDO::getId));
    }

    /**
     * 更新
     * @param robotTaskDO
     */
    void updateRobot(RobotTaskDO robotTaskDO);

    /**
     * 获取未完成的订单id
     * @return
     */
    List<Long> getUnDoAndDoingTaskIds(@Param("montageTask") Integer montageTask,
                                      @Param("ids") List<Long> ids );

    /**
     * 分页查询
     * @param mpPage
     * @param pageReqVO
     * @return
     */
    IPage<RobotTaskDO> selectPageList(@Param("mpPage") IPage mpPage,
                                      @Param("pageReqVO") RobotTaskPageReqVO pageReqVO);

    /**
     * 任务日志
     * @param mpPage
     * @param pageReqVO
     * @return
     */
    IPage<RobotTaskDetailLogResoVO> selectLogPageList(@Param("mpPage") IPage mpPage,
                                                      @Param("pageReqVO") RobotTaskDetailLogVO pageReqVO);

    /**
     * 更新任务完成
     * @param ids
     */
    void updateDoneByIds(@Param("ids") List<Long> ids);

    /**
     * 查询车辆当前在做的任务
     * @param robotNo
     * @return
     */
    List<RobotTaskDO> selectDoingTaskByRobotNo(@Param("robotNo") String robotNo);

    /**
     * 清除所有数据
     */
    void truncate();

    void setTaskUnDo(@Param("ids") Set<Long> ids);
}