package com.prolog.rdc.tms.service;

import java.util.List;

import org.springframework.web.bind.annotation.RequestBody;

import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.AppLoadingPackageDTO;
import com.prolog.rdc.tms.model.dto.AppLoadingShipBillDetailDTO;
import com.prolog.rdc.tms.model.dto.AppLoadingShipbillDTO;
import com.prolog.rdc.tms.model.dto.AppointmentConsigneeQueryDTO;
import com.prolog.rdc.tms.model.dto.AppointmentExportShipbillDTO;
import com.prolog.rdc.tms.model.dto.AppointmentLoadingBillQueryDTO;
import com.prolog.rdc.tms.model.dto.AppointmentQueryDTO;
import com.prolog.rdc.tms.model.dto.AppointmentShipperQueryDTO;
import com.prolog.rdc.tms.model.dto.PickUpAppointmentDTO;
import com.prolog.rdc.tms.model.dto.print.AppointmentPrintDTO;
import com.prolog.rdc.tms.model.vo.AppConfirmShipbillVO;
import com.prolog.rdc.tms.model.vo.AppLoadingShipbillPageVO;
import com.prolog.rdc.tms.model.vo.AppointmentAdsQueryVO;
import com.prolog.rdc.tms.model.vo.AppointmentPrintVO;
import com.prolog.rdc.tms.model.vo.AppointmentQueryVO;
import com.prolog.rdc.tms.model.vo.PickUpAppointmentConfirmVO;
import com.prolog.rdc.tms.model.vo.PickUpAppointmentVO;

/**
 * 运输管理-待预约服务层
 *
 * @author lhb
 * @since 2022-04-11 14:45:00
 */
public interface AppointmentService {

	/**
	 * 待预约运单模式分页查询
	 *
	 * @param appointmentQueryVO
	 * @return
	 */
	Page<AppointmentQueryDTO> pageAppointmentShipbill(AppointmentQueryVO appointmentQueryVO);

	/**
	 * 待预约派车单模式分页查询
	 *
	 * @param appointmentQueryVO
	 * @return
	 */
	Page<AppointmentLoadingBillQueryDTO> pageAppointmentLoadingBill(AppointmentQueryVO appointmentQueryVO);

	/**
	 * 待预约高级查询
	 *
	 * @param appointmentAdsQueryVO
	 * @return
	 */
	Page<AppointmentQueryDTO> pageAdvanced(@RequestBody AppointmentAdsQueryVO appointmentAdsQueryVO);

	/**
	 * 待预约收货方模式分页查询
	 *
	 * @param appointmentQueryVO
	 * @return
	 */
	Page<AppointmentConsigneeQueryDTO> pageAppointmentConsignee(AppointmentQueryVO appointmentQueryVO);

	/**
	 * 待预约收货方模式分页查询
	 *
	 * @param appointmentQueryVO
	 * @return
	 */
	Page<AppointmentShipperQueryDTO> pageAppointmentShipper(AppointmentQueryVO appointmentQueryVO);

	/**
	 * 配载运单查询
	 *
	 * @param shipbillPageVO
	 * @return
	 */
	Page<AppLoadingShipbillDTO> loadingShipbillQuery(AppLoadingShipbillPageVO shipbillPageVO);

	/**
	 * 预约确认运查询
	 *
	 * @param shipbillVO
	 * @return
	 */
	List<AppLoadingShipbillDTO> confirmShipbillQuery(AppConfirmShipbillVO shipbillVO);

	/**
	 * 配载商品查询
	 *
	 * @param vo
	 * @return
	 */
	Page<AppLoadingShipBillDetailDTO> loadingShipbillDetail(AppLoadingShipbillPageVO vo);

	/**
	 * 配载包裹查询
	 *
	 * @param vo
	 * @return
	 */
	Page<AppLoadingPackageDTO> loadingShipbillPackage(AppLoadingShipbillPageVO vo);

	/**
	 * 导出所有数据
	 *
	 * @param vo
	 * @return
	 */
	List<AppointmentExportShipbillDTO> exportAllShipbill(AppointmentQueryVO vo);

	/**
	 * 导出当前页数据
	 *
	 * @param vo
	 * @return
	 */
	List<AppointmentExportShipbillDTO> exportCurrentPageShipbill(AppointmentQueryVO vo);

	/**
	 * 导出选择行数据
	 *
	 * @param shipbillIdList
	 * @return
	 */
	List<AppointmentExportShipbillDTO> exportSelectLineShipbill(List<String> shipbillIdList);

	/**
	 * 待预约打印
	 *
	 * @param appointPrintVO
	 * @return
	 */
	AppointmentPrintDTO shipbillPrint(AppointmentPrintVO appointPrintVO);

	/**
	 * 提货预约
	 *
	 * @param appointmentVO
	 * @return
	 */
	PickUpAppointmentDTO pickUpAppointmentQuery(PickUpAppointmentVO appointmentVO) throws Exception;

	/**
	 * 提货预约确认
	 *
	 * @param confirmVO
	 * @return
	 */
	void pickUpAppointmentConfirm(PickUpAppointmentConfirmVO confirmVO) throws Exception;
}
