package com.prolog.rdc.tms.dao.mapper;

import java.util.List;

import com.prolog.rdc.tms.model.dto.intransit.DeviceGpsDTO;
import com.prolog.rdc.tms.model.dto.intransit.LoadingBillHeaderPageDTO;
import com.prolog.rdc.tms.model.dto.report.YogurtOperationReportDTO;
import com.prolog.rdc.tms.model.vo.intransit.InTransitQueryVO;
import com.prolog.rdc.tms.model.vo.report.YogurtOperationReportVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.prolog.framework.dao.mapper.BaseMapper;
import com.prolog.rdc.tms.model.dto.DeliveryConfirmQueryByLoadbillDTO;
import com.prolog.rdc.tms.model.dto.OutStockOnWayPageDTO;
import com.prolog.rdc.tms.model.dto.OutsourceTrackPageDTO;
import com.prolog.rdc.tms.model.dto.PickingOutboundQueryByLoadbillDTO;
import com.prolog.rdc.tms.model.dto.QueryTypeByReceiverDTO;
import com.prolog.rdc.tms.model.dto.QueryTypeByShipbillDTO;
import com.prolog.rdc.tms.model.dto.SendCarPageDTO;
import com.prolog.rdc.tms.model.dto.StorageHalfwayQueryByLoadbillDTO;
import com.prolog.rdc.tms.model.dto.TrailerPageDTO;
import com.prolog.rdc.tms.model.dto.WaitDeliveredQueryByShipbillDTO;
import com.prolog.rdc.tms.model.dto.WaitDeliveredQueryTypeByReceiverDTO;
import com.prolog.rdc.tms.model.dto.WaitPickUpGoodsQueryByShipbillDTO;
import com.prolog.rdc.tms.model.dto.WaitPickUpGoodsQueryTypeByReceiverDTO;
import com.prolog.rdc.tms.model.dto.WholeCarDeliveryPageDTO;
import com.prolog.rdc.tms.model.entity.TmsLoadingBillHeaderModel;
import com.prolog.rdc.tms.model.vo.AdvancedQueryTypeByShipbillVO;
import com.prolog.rdc.tms.model.vo.BookingByShipbillPopVO;
import com.prolog.rdc.tms.model.vo.BookingGetShipbillPopDTO;
import com.prolog.rdc.tms.model.vo.DeliveryConfirmAdvancedQueryVO;
import com.prolog.rdc.tms.model.vo.DzxExportAllVO;
import com.prolog.rdc.tms.model.vo.DzxExportPageVO;
import com.prolog.rdc.tms.model.vo.OutStockOnWayAdvancedQueryVO;
import com.prolog.rdc.tms.model.vo.OutsourceTrackAdvancedQueryVO;
import com.prolog.rdc.tms.model.vo.OutsourceTrackQueryVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundAdvancedQueryVO;
import com.prolog.rdc.tms.model.vo.QueryTypeByReceiverVO;
import com.prolog.rdc.tms.model.vo.QueryTypeByShipbillVO;
import com.prolog.rdc.tms.model.vo.SendCarAdsQueryVO;
import com.prolog.rdc.tms.model.vo.StorageHalfwayAdvancedQueryVO;
import com.prolog.rdc.tms.model.vo.TrailerAdsQueryVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredAdvancedQueryByShipbillVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredExportAllVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredExportPageVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredQueryByShipbillVO;
import com.prolog.rdc.tms.model.vo.WaitDeliveredQueryTypeByReceiverVO;
import com.prolog.rdc.tms.model.vo.WaitPickUpGoodsAdvancedQueryByShipbillVO;
import com.prolog.rdc.tms.model.vo.WaitPickUpGoodsExportAllVO;
import com.prolog.rdc.tms.model.vo.WaitPickUpGoodsExportPageVO;
import com.prolog.rdc.tms.model.vo.WaitPickUpGoodsQueryByShipbillVO;
import com.prolog.rdc.tms.model.vo.WaitPickUpGoodsQueryTypeByReceiverVO;
import com.prolog.rdc.tms.model.vo.WholeCarDeliveryQueryVO;
import com.prolog.rdc.tms.model.vo.WholeCarDeliveryadvancedQueryVO;

/**
 * 装车单汇总表数据库访问层
 *
 * @author zhangsj
 * @since 2022-04-13 14:13:36
 */
@Repository
public interface TmsLoadingBillHeaderMapper extends BaseMapper<TmsLoadingBillHeaderModel> {

    /**
     * 运单模式查询
     * @param queryTypeByShipbillVO
     * @return
     */
    List<QueryTypeByShipbillDTO> queryTypeByShipbillPage(@Param("vo") QueryTypeByShipbillVO queryTypeByShipbillVO);

    /**
     * 收货方模式查询
     * @param queryTypeByReceiverVO
     * @return
     */
    List<QueryTypeByReceiverDTO> queryTypeByReceiverPage(@Param("vo") QueryTypeByReceiverVO queryTypeByReceiverVO);

    /**
     * 导出所有数据查询
     * @param dzxExportAllVO
     * @return
     */
    List<QueryTypeByShipbillDTO> exportAllShipbillData(@Param("vo") DzxExportAllVO dzxExportAllVO);

    /**
     * 导出当前页数据查询
     * @param dzxExportPageVO
     * @return
     */
    List<QueryTypeByShipbillDTO> exportPageShipbillData(@Param("vo") DzxExportPageVO dzxExportPageVO);

    /**
     * 导出选中行数据查询
     * @param shipbillIds
     * @return
     */
    List<QueryTypeByShipbillDTO> exportSelectLineShipbillData(@Param("shipbillIds") String[] shipbillIds);

    /**
     * 外包跟踪主界面分页查询
     *
     * @param
     * @return
     */
    //List<OutsourceTrackPageDTO> queryOutsourceTrackPage(@Param("vo") OutsourceTrackQueryVO vo);

    /**
     * 外包跟踪
     *
     * @param
     * @return
     */
    List<OutsourceTrackPageDTO> queryOutsourceTrackPage(
        @Param("vo") OutsourceTrackQueryVO vo
    );

    /**
     * 待提货-运单模式查询
     * @param waitPickUpGoodsQueryByShipbillVO
     * @return
     */
    List<WaitPickUpGoodsQueryByShipbillDTO> waitPickUpGoodsQueryByShipbillPage(@Param("vo")WaitPickUpGoodsQueryByShipbillVO waitPickUpGoodsQueryByShipbillVO);

    /**
     * 待提货-收货方模式查询
     * @param waitPickUpGoodsQueryTypeByReceiverVO
     * @return
     */
    List<WaitPickUpGoodsQueryTypeByReceiverDTO> waitPickUpGoodsQueryTypeByReceiverPage(@Param("vo")WaitPickUpGoodsQueryTypeByReceiverVO waitPickUpGoodsQueryTypeByReceiverVO);

    /**
     * 待提货-导出所有数据查询
     * @param waitPickUpGoodsExportAllVO
     * @return
     */
    List<WaitPickUpGoodsQueryByShipbillDTO> waitPickUpGoodsExportAllShipbillData(@Param("vo")WaitPickUpGoodsExportAllVO waitPickUpGoodsExportAllVO);

    /**
     * 待提货-导出当前页数据查询
     * @param waitPickUpGoodsExportPageVO
     * @return
     */
    List<WaitPickUpGoodsQueryByShipbillDTO> waitPickUpGoodsExportPageShipbillData(@Param("vo")WaitPickUpGoodsExportPageVO waitPickUpGoodsExportPageVO);


    /**
     * 待提货-导出选中行数据查询
     *
     * @param shipbillIds
     * @return
     */
    List<WaitPickUpGoodsQueryByShipbillDTO> waitPickUpGoodsExportSelectLineShipbillData(@Param("shipbillIds") String[] shipbillIds);

    /**
     * 整车直发-派车单查询
     *
     * @param
     * @return
     */
    List<WholeCarDeliveryPageDTO> queryWholeCarDeliveryPage(@Param("vo") WholeCarDeliveryQueryVO vo);


    /**
     * 待送达-运单模式查询
     *
     * @param waitDeliveredQueryByShipbillVO
     * @return
     */
    List<WaitDeliveredQueryByShipbillDTO> waitDeliveredQueryByShipbillPage(@Param("vo")WaitDeliveredQueryByShipbillVO waitDeliveredQueryByShipbillVO);

    /**
     * 待送达-收货方模式查询
     *
     * @param waitDeliveredQueryTypeByReceiverVO
     * @return
     */
    List<WaitDeliveredQueryTypeByReceiverDTO> waitDeliveredQueryTypeByReceiverPage(@Param("vo")WaitDeliveredQueryTypeByReceiverVO waitDeliveredQueryTypeByReceiverVO);

    /**
     * 待送达-导出所有数据查询
     *
     * @param waitDeliveredExportAllVO
     * @return
     */
    List<WaitDeliveredQueryByShipbillDTO> waitDeliveredExportAllShipbillData(@Param("vo")WaitDeliveredExportAllVO waitDeliveredExportAllVO);

    /**
     * 待送达-导当前页数据查询
     *
     * @param waitDeliveredExportPageVO
     * @return
     */
    List<WaitDeliveredQueryByShipbillDTO> waitDeliveredExportPageShipbillData(@Param("vo")WaitDeliveredExportPageVO waitDeliveredExportPageVO);

    /**
     * 待送达-导出选择行数据
     *
     * @param shipbillIds
     * @return
     */
    List<WaitDeliveredQueryByShipbillDTO> waitDeliveredExportSelectLineShipbillData(@Param("shipbillIds")String[] shipbillIds);

    /**
     * 待装卸-高级查询
     *
     * @param advancedQueryTypeByShipbillVO
     * @return
     */
    List<QueryTypeByShipbillDTO> advancedQueryTypeByShipbillPage(@Param("vo")AdvancedQueryTypeByShipbillVO advancedQueryTypeByShipbillVO);

    /**
     * 待提货-高级查询
     *
     * @param waitPickUpGoodsAdvancedQueryByShipbillVO
     * @return
     */
    List<WaitPickUpGoodsQueryByShipbillDTO> waitPickUpGoodsAdvancedQueryByShipbillPage(@Param("vo")WaitPickUpGoodsAdvancedQueryByShipbillVO waitPickUpGoodsAdvancedQueryByShipbillVO);

    /**
     * 待送达-高级查询
     *
     * @param waitDeliveredAdvancedQueryByShipbillVO
     * @return
     */
    List<WaitDeliveredQueryByShipbillDTO> waitDeliveredAdvancedQueryByShipbillPage(WaitDeliveredAdvancedQueryByShipbillVO waitDeliveredAdvancedQueryByShipbillVO);

    /**
     * 派车单-高级查询
     *
     * @param sendCarAdsQueryVO
     * @return
     */
    List<SendCarPageDTO> sendCarAdvanceQuery(@Param("vo") SendCarAdsQueryVO sendCarAdsQueryVO);

    /**
     * 托运单-高级查询
     *
     * @param trailerAdsQueryVO
     * @return
     */
    List<TrailerPageDTO> trailerCarAdvanceQuery(@Param("vo") TrailerAdsQueryVO trailerAdsQueryVO);

    /**
     * 入库在途-高级查询
     *
     * @param storageHalfwayAdvancedQueryVO
     * @return
     */
    List<StorageHalfwayQueryByLoadbillDTO> storageHalfwayAdvancedQuery(@Param("vo") StorageHalfwayAdvancedQueryVO storageHalfwayAdvancedQueryVO);

    /**
     * 提货确认-高级查询
     *
     * @param deliveryConfirmAdvancedQueryVO
     * @return
     */
    List<DeliveryConfirmQueryByLoadbillDTO> deliveryConfirmAdvancedQuery(@Param("vo") DeliveryConfirmAdvancedQueryVO deliveryConfirmAdvancedQueryVO);

    /**
     * 整车直发-高级查询
     *
     * @param vo
     * @return
     */
    List<WholeCarDeliveryPageDTO> wholeCarDeliveryAdvancedQuery(@Param("vo")WholeCarDeliveryadvancedQueryVO vo);

    /**
     * 拣货出库-高级查询
     *
     * @param pickingOutboundAdvancedQueryVO
     * @return
     */
    List<PickingOutboundQueryByLoadbillDTO> pickingOutboundAdvancedQuery(@Param("vo")PickingOutboundAdvancedQueryVO pickingOutboundAdvancedQueryVO);

    /**
     * 外包跟踪-高级查询
     *
     * @param vo
     * @return
     */
    List<OutsourceTrackPageDTO> outsourceTrackAdvancedQuery(@Param("vo")OutsourceTrackAdvancedQueryVO vo);

    /**
     * 出库在途-高级查询
     *
     * @param vo
     * @return
     */
    List<OutStockOnWayPageDTO> outStockOnWayAdvancedQuery(@Param("vo")OutStockOnWayAdvancedQueryVO vo);

    /**
     * 预约调整-运单弹窗
     *
     * @param bookingByShipbillPopVO
     * @return
     */
    List<BookingGetShipbillPopDTO> bookingFindShipbillPop(@Param("vo")BookingByShipbillPopVO bookingByShipbillPopVO);

    /**
     * 在途管理-派车单查询
     * @param vo
     * @return
     */
    List<LoadingBillHeaderPageDTO> getInTransitLoadingBill(@Param("vo") InTransitQueryVO vo);

    /**
     * 在途管理-设备派车单查询
     * @param vo
     * @return
     */
    List<LoadingBillHeaderPageDTO> getInTransitDeviceLoadingBill(@Param("vo") InTransitQueryVO vo);

    /**
     * 在途管理-设备派车单查询
     * @param vo
     * @return
     */
    List<LoadingBillHeaderPageDTO> getInTransitDeviceLinkLoadingBill(@Param("vo") InTransitQueryVO vo);


    /**
     * 在途管理-设备gps查询
     * @param vo
     * @return
     */
    List<DeviceGpsDTO> getInTransitDeviceGps(@Param("vo") InTransitQueryVO vo);

    /**
     * 酸奶运营统计报表查询
     * @param vo
     * @return
     */
    List<YogurtOperationReportDTO> queryYogurtOperationReport(@Param("vo") YogurtOperationReportVO vo);

    /**
     * 获取司机扫描派车单
     * @param vo
     * @return
     */
    List<String> getLoadingScanLoadingBill(@Param("vo") QueryTypeByShipbillVO vo);
}
