package com.zg.project.wisdom.service;

import com.zg.project.wisdom.domain.AgvTaskResult;
import com.zg.project.wisdom.domain.dto.AgvDTO;
import com.zg.project.wisdom.domain.dto.OutGoodsDTO;

import java.util.List;

public interface IAgvTaskResultService {
    /** 根据主键查询AGV任务结果 */
    AgvTaskResult selectAgvTaskResultById(Long id);

    /** 查询AGV任务结果列表 */
    List<AgvTaskResult> selectAgvTaskResultList(AgvTaskResult agvTaskResult);

    /** 插入新的AGV任务结果记录 */
    int insertAgvTaskResult(AgvTaskResult agvTaskResult);

    /** 更新AGV任务结果记录 */
    int updateAgvTaskResult(AgvTaskResult agvTaskResult);

    /** 根据主键删除AGV任务结果 */
    int deleteAgvTaskResultById(Long id);

    /** 根据主键数组批量删除AGV任务结果 */
    int deleteAgvTaskResultByIds(Long[] ids);

    /** 处理AGV回调 */
    void handleAgvCallback(AgvDTO dto);

    /**
     * 上架任务处理（调用 WCS）
     * @param taskNo 调度任务编号
     * @param materialStatus 物料状态（0=空托盘，1=有货）
     * @return 上架任务 taskId
     */
    String handleUpGoods(String taskNo, Integer materialStatus);

    /** 下架 */
    void handleOutGoods(OutGoodsDTO dto);

    /**
     * 判断指定 requestId + status 是否存在记录
     * @param requestId 请求唯一标识
     * @param status 状态码
     * @return true 存在，false 不存在
     */
    boolean existsByRequestIdAndStatus(String requestId, String status);
}
