package com.prolog.rdc.tms.service;

import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.*;
import com.prolog.rdc.tms.model.vo.*;

import java.util.List;
import java.util.Map;

/**
 * 待装卸服务层
 *
 * Company: 湖北普罗格科技股份有限公司
 *
 * @author zhangsj
 * @since 2022/6/6 10:35
 */
public interface WaitLoadingAndUnloadingService {
    /**
     * 运单模式分页查询
     *
     * @param queryTypeByShipbillVO
     * @return
     */
    Page<QueryTypeByShipbillDTO> queryTypeByShipbillPageData(QueryTypeByShipbillVO queryTypeByShipbillVO);

    /**
     * 运单模式高级查询
     *
     * @param advancedQueryTypeByShipbillVO
     * @return
     */
    Page<QueryTypeByShipbillDTO> advancedQueryTypeByShipbillPageData(AdvancedQueryTypeByShipbillVO advancedQueryTypeByShipbillVO);


    /**
     * 收货方模式分页查询
     *
     * @param queryTypeByReceiverVO
     * @return
     */
    Page<QueryTypeByReceiverDTO> queryTypeByReceiverPageData(QueryTypeByReceiverVO queryTypeByReceiverVO);

    /**
     * 预约单模式分页查询
     *
     * @param queryTypeByAppointmentVO
     * @return
     */
    Page<QueryTypeByAppointmentDTO> queryAppointmentTypePage(QueryTypeByAppointmentVO queryTypeByAppointmentVO);


    /**
     * 收货方模式-配载运单查询
     *
     * @param receiverGetShipbillVO
     * @return
     */
    Page<ReceiverGetShipbillDTO> receiverGetShipbillData(ReceiverGetShipbillVO receiverGetShipbillVO);

    /**
     * 配载商品查询
     *
     * @param dzxItemDetailVO
     * @return
     */
    Page<DzxItemDetailDTO> itemDetailData(DzxItemDetailVO dzxItemDetailVO);

    /**
     * 配载包裹查询
     *
     * @param dzxPackageDetailVO
     * @return
     */
    Page<DzxPackageDetailDTO> packageDetailData(DzxPackageDetailVO dzxPackageDetailVO);

    /**
     * 开始装卸
     *
     * @param shipbillIds
     */
    void startedWorkData(List<String> shipbillIds);

    /**
     * 装卸完成
     *
     * @param shipbillIds
     */
    void completeWorkData(List<String> shipbillIds);

    /**
     * 导出所有数据
     *
     * @param dzxExportAllVO
     * @return
     */
    List<DzxExportShipbillDTO> exportAllShipbillData(DzxExportAllVO dzxExportAllVO);

    /**
     * 导出当前页数据
     *
     * @param dzxExportPageVO
     * @return
     */
    List<DzxExportShipbillDTO> exportPageShipbill(DzxExportPageVO dzxExportPageVO);

    /**
     * 导出选择行数据
     *
     * @param shipbillIds
     * @return
     */
    List<DzxExportShipbillDTO> exportSelectLineShipbillData(List<String> shipbillIds);

    /**
     * 待装卸打印
     *
     * @param shipbillId
     * @return
     */
    Map<String, Object> printShipbillData(String shipbillId);


    /**
     * 装车扫描
     *
     * @param loadingScanVO
     * @return
     */
    LoadingScanDTO loadingScanData(LoadingScanVO loadingScanVO);

    void shipBillOut(WaitPickUpConfirmVO vo);

    /**
     * 装车确认
     *
     * @param waitPickUpConfirmVO
     */
    LoadingScanConfirmDTO loadingConfirmData(WaitPickUpConfirmVO waitPickUpConfirmVO);

    /**
     * 根据装车单查询运单
     *
     * @param loadingBillId
     */
    LoadingScanDTO queryShipbillByLoadingBillData(String loadingBillId);

    /**
     * 获取派车单扫描信息
     *
     * @param vo
     */
    LoadingScanDTO queryLoadingBillScanInfo(QueryTypeByShipbillVO vo);

    /**
     * 根据装车单查询运单明细
     *
     * @param loadingBillId
     */
    LoadingScanDTO queryShipbillDetailByLoadingBillData(String loadingBillId);
}
