package com.prolog.rdc.tms.service;

import java.util.List;

import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.BookingExportDTO;
import com.prolog.rdc.tms.model.dto.BookingGetShipbillDTO;
import com.prolog.rdc.tms.model.dto.BookingItemDetailDTO;
import com.prolog.rdc.tms.model.dto.BookingPackageDetailDTO;
import com.prolog.rdc.tms.model.dto.BookingQueryDTO;
import com.prolog.rdc.tms.model.dto.BookingViewByOneDTO;
import com.prolog.rdc.tms.model.vo.BookingAdvancedQueryVO;
import com.prolog.rdc.tms.model.vo.BookingByIDVO;
import com.prolog.rdc.tms.model.vo.BookingByShipbillPopVO;
import com.prolog.rdc.tms.model.vo.BookingGetShipbillPopDTO;
import com.prolog.rdc.tms.model.vo.BookingGetShipbillVO;
import com.prolog.rdc.tms.model.vo.BookingItemDetailVO;
import com.prolog.rdc.tms.model.vo.BookingPackageDetailVO;
import com.prolog.rdc.tms.model.vo.BookingQueryExportAllVO;
import com.prolog.rdc.tms.model.vo.BookingQueryExportPageVO;
import com.prolog.rdc.tms.model.vo.BookingQueryVO;
import com.prolog.rdc.tms.model.vo.BookingUpdateBatchVO;
import com.prolog.rdc.tms.model.vo.BookingUpdateOneVO;

/**
 * 园区管理-预约管理服务层
 *
 * Company: 湖北普罗格科技股份有限公司
 *
 * @author zhangsj
 * @since 2022/7/5 10:29
 */
public interface BookingService {

	/**
	 * 主界面分页查询
	 *
	 * @param bookingQueryVO
	 * @return
	 */
	Page<BookingQueryDTO> queryPageData(BookingQueryVO bookingQueryVO);

	/**
	 * 主界面高级查询
	 *
	 * @param bookingAdvancedQueryVO
	 * @return
	 */
	Page<BookingQueryDTO> advancedQueryPageData(BookingAdvancedQueryVO bookingAdvancedQueryVO);

	/**
	 * 配载运单查询
	 *
	 * @param bookingGetShipbillVO
	 * @return
	 */
	Page<BookingGetShipbillDTO> getShipbillData(BookingGetShipbillVO bookingGetShipbillVO);

	/**
	 * 配载商品查询
	 *
	 * @param bookingItemDetailVO
	 * @return
	 */
	Page<BookingItemDetailDTO> itemDetailData(BookingItemDetailVO bookingItemDetailVO);

	/**
	 * 配载包裹查询
	 *
	 * @param bookingPackageDetailVO
	 * @return
	 */
	Page<BookingPackageDetailDTO> packageDetailData(BookingPackageDetailVO bookingPackageDetailVO);

	/**
	 * 预约单审核
	 *
	 * @param appointmentIds
	 */
	void reviewData(List<String> appointmentIds);

	/**
	 * 预约单取消
	 *
	 * @param appointmentIds
	 */
	void cancelData(List<String> appointmentIds);

	/**
	 * 预约管理导出所有数据
	 *
	 * @param bookingQueryExportAllVO
	 * @return
	 */
	List<BookingExportDTO> exportAllData(BookingQueryExportAllVO bookingQueryExportAllVO);

	/**
	 * 预约管理导出当前页数据
	 *
	 * @param bookingQueryExportPageVO
	 * @return
	 */
	List<BookingExportDTO> exportPageData(BookingQueryExportPageVO bookingQueryExportPageVO);

	/**
	 * 预约管理导出选择行数据
	 *
	 * @param appointmentIds
	 * @return
	 */
	List<BookingExportDTO> exportSelectLineData(List<String> appointmentIds);

	/**
	 * 单个调整添加运单弹窗
	 *
	 * @param bookingByShipbillPopVO
	 * @return
	 */
	Page<BookingGetShipbillPopDTO> shipbillPopData(BookingByShipbillPopVO bookingByShipbillPopVO);

	/**
	 * 调整查询(单个)
	 *
	 * @param bookingByIDVO
	 * @return
	 */
	BookingViewByOneDTO viewOneData(BookingByIDVO bookingByIDVO);

	/**
	 * 预约单调整(单个)
	 *
	 * @param bookingUpdateOneVO
	 */
	void updateOneData(BookingUpdateOneVO bookingUpdateOneVO);

	/**
	 * 预约单调整(批量)
	 *
	 * @param bookingUpdateBatchVO
	 */
	void updateBatchData(BookingUpdateBatchVO bookingUpdateBatchVO);

	void cancelAppointment(List<String> shipbillIds);
}
