package com.prolog.rdc.tms.service.intelligent;

import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.intelligent.IntelligentDispatchCallBackDTO;
import com.prolog.rdc.tms.model.dto.intelligent.IntelligentDispatchDTO;
import com.prolog.rdc.tms.model.dto.intelligent.IntelligentDispatchGroupDTO;
import com.prolog.rdc.tms.model.dto.intelligent.IntelligentDispatchLoadingDTO;
import com.prolog.rdc.tms.model.dto.intelligent.IntelligentDispatchShipCountDTO;
import com.prolog.rdc.tms.model.dto.intelligent.IntelligentDispatchShipDTO;
import com.prolog.rdc.tms.model.vo.intelligent.IntelligentDispatchGroupQueryVO;
import com.prolog.rdc.tms.model.vo.intelligent.IntelligentDispatchLoadingAdjustVO;
import com.prolog.rdc.tms.model.vo.intelligent.IntelligentDispatchLoadingQueryVO;
import com.prolog.rdc.tms.model.vo.intelligent.IntelligentDispatchLoadingVO;
import com.prolog.rdc.tms.model.vo.intelligent.IntelligentDispatchQueryVO;
import com.prolog.rdc.tms.model.vo.intelligent.IntelligentDispatchShipBillQueryVO;
import com.prolog.rdc.tms.model.vo.intelligent.IntelligentDispatchVO;

import java.util.List;

/**
 * @author hongbo.pan
 * @date 2023/8/24
 */
public interface IntelligentDispatchService {

    /**
     * queryGroup
     */
    IntelligentDispatchGroupDTO queryGroup(IntelligentDispatchGroupQueryVO queryVO);

    /**
     * queryShipBill
     */
    Page<IntelligentDispatchShipDTO> queryShipBill(IntelligentDispatchShipBillQueryVO queryVO);

    /**
     * countShipBill
     */
    IntelligentDispatchShipCountDTO countShipBill(IntelligentDispatchShipBillQueryVO queryVO);

    /**
     * 智能调度-开始调度
     * dispatch
     */
    IntelligentDispatchDTO dispatch(IntelligentDispatchVO vo);

    /**
     * 智能调度-取消调度
     * cancelDispatch
     */
    void cancelDispatch(String intelligentDispatchId);

    /**
     * 轮询进度
     * getDispatchInfo
     */
    IntelligentDispatchDTO getDispatchInfo(String intelligentDispatchId);

    /**
     * 智能调度记录查询
     * findByCondition
     */
    Page<IntelligentDispatchDTO> findByCondition(IntelligentDispatchQueryVO vo);

    /**
     * 排线结果
     * getDispatchResult
     */
    IntelligentDispatchDTO getDispatchResult(String intelligentDispatchId);

    /**
     * 排线结果过滤
     * filterDispatchLoading
     */
    List<IntelligentDispatchLoadingDTO> filterDispatchLoading(IntelligentDispatchLoadingQueryVO vo);

    /**
     * 线路调度
     * loadingDispatch
     */
    void dispatchLoading(List<String> loadingIdList);

    /**
     * 线路调度审核
     * dispatchReviewLoading
     */
    void dispatchReviewLoading(List<String> loadingIdList);

    /**
     * 线路取消
     * cancelLoading
     */
    void cancelLoading(List<String> loadingIdList);

    /**
     * 车辆司机改派/指派
     * assignVehicleDriver
     */
    void assignVehicleDriver(IntelligentDispatchLoadingVO vo);

    /**
     * 线路调整
     * adjust
     */
    void adjust(List<IntelligentDispatchLoadingAdjustVO> voList);

    /**
     * 回调处理
     * callBack
     */
    void callBack(IntelligentDispatchCallBackDTO callBackDTO);

}
