package com.prolog.rdc.tms.service;

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

import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.*;
import com.prolog.rdc.tms.model.vo.WaitDeliveredAdvancedQueryByShipbillVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredDeliveredConfirmVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredExportAllVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredExportPageVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredItemDetailVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredPackageDetailVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredQueryByShipbillVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredQueryTypeByReceiverVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredReceiverGetShipbillVO;

/**
 * Company: 湖北普罗格科技股份有限公司
 *
 * @author zhangsj
 * @since 2022/6/15 9:47
 */
public interface WaitDeliveredService {
    /**
     * 运单模式分页查询
     *
     * @param waitDeliveredQueryByShipbillVO
     * @return
     */
    Page<WaitDeliveredQueryByShipbillDTO> queryTypeByShipbillPageData(WaitDeliveredQueryByShipbillVO waitDeliveredQueryByShipbillVO);

    /**
     * 运单模式高级查询
     *
     * @param waitDeliveredAdvancedQueryByShipbillVO
     * @return
     */
    Page<WaitDeliveredQueryByShipbillDTO> advancedQueryTypeByShipbillPageData(WaitDeliveredAdvancedQueryByShipbillVO waitDeliveredAdvancedQueryByShipbillVO);


    /**
     * 收货方模式分页查询
     *
     * @param waitDeliveredQueryTypeByReceiverVO
     * @return
     */
    Page<WaitDeliveredQueryTypeByReceiverDTO> queryTypeByReceiverPageData(WaitDeliveredQueryTypeByReceiverVO waitDeliveredQueryTypeByReceiverVO);

    /**
     * 配载运单查询
     *
     * @param waitDeliveredReceiverGetShipbillVO
     * @return
     */
    Page<WaitDeliveredReceiverGetShipbillDTO> receiverGetShipbillData(WaitDeliveredReceiverGetShipbillVO waitDeliveredReceiverGetShipbillVO);

    /**
     * 配载商品查询
     *
     * @param waitDeliveredItemDetailVO
     * @return
     */
    Page<WaitDeliveredItemDetailDTO> itemDetailData(WaitDeliveredItemDetailVO waitDeliveredItemDetailVO);

    /**
     * 配载包裹查询
     *
     * @param waitDeliveredPackageDetailVO
     * @return
     */
    Page<WaitDeliveredPackageDetailDTO> packageDetailData(WaitDeliveredPackageDetailVO waitDeliveredPackageDetailVO);

    /**
     * 导出所有数据
     *
     * @param waitDeliveredExportAllVO
     * @return
     */
    List<WaitDeliveredExportShipbillDTO> exportAllShipbillData(WaitDeliveredExportAllVO waitDeliveredExportAllVO);

    /**
     * 导出当前页数据
     *
     * @param waitDeliveredExportPageVO
     * @return
     */
    List<WaitDeliveredExportShipbillDTO> exportPageShipbill(WaitDeliveredExportPageVO waitDeliveredExportPageVO);

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

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

    /**
     * 待送达-送达确认
     *
     * @param waitDeliveredDeliveredConfirmVO
     */
    void deliveredConfirmData(WaitDeliveredDeliveredConfirmVO waitDeliveredDeliveredConfirmVO);

    /**
     * 待送达-运单容器查询
     *
     * @param shipbillIds
     */
    List<TmsShipbillContainerDTO> deliveredContainerQuery(List<String> shipbillIds);

    void autoDeliveredConfirmData(WaitDeliveredDeliveredConfirmVO waitDeliveredDeliveredConfirmVO);
}
