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/8 10:45
 */
public interface WaitPickUpGoodsService {
	/**
	 * 运单模式分页查询
	 *
	 * @param waitPickUpGoodsQueryByShipbillVO
	 * @return
	 */
	Page<WaitPickUpGoodsQueryByShipbillDTO> queryTypeByShipbillPageData(WaitPickUpGoodsQueryByShipbillVO waitPickUpGoodsQueryByShipbillVO);

	/**
	 * 运单模高级查询
	 *
	 * @param waitPickUpGoodsAdvancedQueryByShipbillVO
	 * @return
	 */
	Page<WaitPickUpGoodsQueryByShipbillDTO> advancedQueryTypeByShipbillPageData(WaitPickUpGoodsAdvancedQueryByShipbillVO waitPickUpGoodsAdvancedQueryByShipbillVO);

	/**
	 * 收货方模式分页查询
	 *
	 * @param waitPickUpGoodsQueryTypeByReceiverVO
	 * @return
	 */
	Page<WaitPickUpGoodsQueryTypeByReceiverDTO> queryTypeByReceiverPageData(WaitPickUpGoodsQueryTypeByReceiverVO waitPickUpGoodsQueryTypeByReceiverVO);

	/**
	 * 配载运单查询
	 * 
	 * @param waitPickUpGoodsReceiverGetShipbillVO
	 * @return
	 */
	Page<WaitPickUpGoodsReceiverGetShipbillDTO> receiverGetShipbillData(WaitPickUpGoodsReceiverGetShipbillVO waitPickUpGoodsReceiverGetShipbillVO);

	/**
	 * 配载商品查询
	 * 
	 * @param waitPickUpGoodsItemDetailVO
	 * @return
	 */
	Page<WaitPickUpGoodsItemDetailDTO> itemDetailData(WaitPickUpGoodsItemDetailVO waitPickUpGoodsItemDetailVO);

	/**
	 * 配载包裹查询
	 * 
	 * @param waitPickUpGoodsPackageDetailVO
	 * @return
	 */
	Page<WaitPickUpGoodsPackageDetailDTO> packageDetailData(WaitPickUpGoodsPackageDetailVO waitPickUpGoodsPackageDetailVO);

	/**
	 * 导出所有数据
	 *
	 * @param waitPickUpGoodsExportAllVO
	 * @return
	 */
	List<WaitPickUpGoodsExportShipbillDTO> exportAllShipbillData(WaitPickUpGoodsExportAllVO waitPickUpGoodsExportAllVO);

	/**
	 * 导出当前页数据
	 *
	 * @param waitPickUpGoodsExportPageVO
	 * @return
	 */
	List<WaitPickUpGoodsExportShipbillDTO> exportPageShipbill(WaitPickUpGoodsExportPageVO waitPickUpGoodsExportPageVO);

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

	/**
	 * 启运登记
	 *
	 * @param waitPickUpGoodsStartShipmentVO
	 */
	void startShipmentData(WaitPickUpGoodsStartShipmentVO waitPickUpGoodsStartShipmentVO);

	void autoStartShipmentData(WaitPickUpGoodsStartShipmentVO waitPickUpGoodsStartShipmentVO);

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

	/**
	 * 审核信息查询
	 *
	 * @param vo
	 * @return
	 */
	ApprovalInfoDTO getApprovalInfo(ApprovalVO vo);

	/**
	 * 审批作废
	 * @param vo
	 */
	void invalidApproval(ApprovalVO vo);

	/**
	 * 审批流撤回
	 * @param vo
	 */
	void retractApproval(ApprovalVO vo);

	/**
	 * 审批流提交
	 * @param vo
	 */
	void submitApproval(ApprovalVO vo);

	/**
	 * 审批流审核
	 * @param vo
	 */
	void reviewApproval(ApprovalVO vo);

}
