package com.youchain.businessdata.service;

import com.youchain.basicdata.domain.Item;
import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.domain.Stock;
import com.youchain.businessdata.domain.AgvTask;

public interface KMReService {
    /**
     * 容器入场JSON
     *
     * @param containerCode 容器编号
     * @param position      点位
     */
    String containerInJson(String containerCode, String position);

    /**
     * 容器入场
     *
     * @param containerCode 容器
     * @param position      点位
     * @param itemCode      物料
     */
    void containerIn(String containerCode, String position, String itemCode);

    /**
     * 容器出场JSON
     *
     * @param containerCode 容器编号
     */
    String containerOutJson(String containerCode);

    /**
     * 容器出场
     *
     * @param containerCode 容器
     */
    void containerOut(String containerCode);

    /**
     * 下发容器入场或出场或放行
     *
     * @param url  接口地址
     * @param json 接口json
     */
    void sendAgvTaskToContainer(String url, String json);

    /**
     * 查询容器JSON
     *
     * @param areaCode 库区编号
     */
    String containerQuery(String areaCode);

    /**
     * 容器同步
     *
     * @param areaCode 库区编号
     */
    void containerSynchronized(String areaCode);

    /**
     * 下发agv叉车任务JSON
     *
     * @param agvTask 任务
     */
    String sendAgvTaskCcJson(AgvTask agvTask);


    /**
     * 下发agv货架任务JSON
     *
     * @param agvTask 任务
     */
    String sendAgvTaskHjJson(AgvTask agvTask);

    /**
     * 下发agv滚筒任务JSON
     *
     * @param agvTask 任务
     */
    String sendAgvTaskGtJson(AgvTask agvTask);

    /**
     * 下发agv任务
     *
     * @param agvTasks 任务
     */
    void sendAgvTask(AgvTask agvTasks, String json);

    /**
     * 任务回报更新状态
     *
     * @param agvTask         任务
     * @param status          状态
     * @param containerCode   容器
     * @param currentPosition 当前位置
     */
    void missionStateCallback(AgvTask agvTask, String status, String containerCode, String currentPosition);

    /**
     * 托盘回库
     *
     * @param srcPoint 起点
     * @param stock    容器
     * @param item     物料
     */
    void returnFBAgvTask(Point srcPoint, Stock stock, Item item);


    /**
     * 任务放行Json
     *
     * @param agvTask 任务
     */
    String operationFeedbackJson(AgvTask agvTask);

}
