package com.prolog.rdc.tms.service;

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

import com.prolog.framework.core.pojo.Page;
import com.prolog.product.core.framework.entity.UserEntity;
import com.prolog.rdc.tms.model.dto.*;
import com.prolog.rdc.tms.model.vo.*;

/**
 * 已托运服务层
 *
 * Company: 湖北普罗格科技股份有限公司
 *
 * @author zhangsj
 * @since 2022/4/18 12:43
 */
public interface TrailerService {

	/**
	 * 已托运分页查询
	 * 
	 * @param trailerPageVO
	 * @return
	 */
	Page<TrailerPageDTO> trailerPageData(TrailerPageVO trailerPageVO);

	/**
	 * 已托运高级查询
	 *
	 * @param advancedQueryVO
	 * @return
	 */
	Page<TrailerPageDTO> pageAdvanced(TrailerAdsQueryVO advancedQueryVO);
	/**
	 * 已托运审核
	 * 
	 * @param ids
	 */
	void trailerAuditData(List<String> ids);

	/**
	 * 自动已托运审核
	 *
	 * @param ids
	 */
	void autoTrailerAuditData(List<String> ids, UserEntity user, Date date);

	/**
	 * 已托运运单撤销
	 * 
	 * @param ids
	 */
	void trailerUndoData(List<String> ids);

	/**
	 * 托运单查看
	 * 
	 * @param id
	 * @return
	 */
	TrailerViewDTO viewTrailerData(String id);

	/**
	 * 托运单根据单号查看
	 * 
	 * @param id
	 * @return
	 */
	TrailerViewByIdDTO viewTrailerByIdData(String id);

	/**
	 * 导出所有数据
	 * 
	 * @param trailerExportAllVO
	 * @return
	 */
	List<ExportTrailerDTO> exportAllTrailerData(TrailerExportAllVO trailerExportAllVO);

	/**
	 * 导出当前页数据
	 * 
	 * @param trailerExportPageVO
	 * @return
	 */
	List<ExportTrailerDTO> exportPageTrailerData(TrailerExportPageVO trailerExportPageVO);

	/**
	 * 导出选中数据
	 * 
	 * @param ids
	 * @return
	 */
	List<ExportTrailerDTO> exportChooseTrailerData(List<String> ids);

	/**
	 * 打印托车单
	 * 
	 * @param id
	 * @return
	 */
	Map<String, Object> printTrailerData(String id);

	/**
	 * 已托运配载运单查询
	 * 
	 * @param trailerPageDetailVO
	 * @return
	 */
	Page<TrailerPageDetailDTO> pageDetailTrailerData(TrailerPageDetailVO trailerPageDetailVO);

	/**
	 * 已托运配载运单添加
	 * 
	 * @param trailerAddDetailVO
	 */
	List<ShipbillHeaderPageDTO> addDetailTrailerData(TrailerAddDetailVO trailerAddDetailVO);

	/**
	 * 已托运配载运单剔除
	 * 
	 * @param trailerDeleteDetailVO
	 */
	void deleteDetailTrailerData(TrailerDeleteDetailVO trailerDeleteDetailVO);

	/**
	 * 已托运配载运单移动
	 * 
	 * @param trailerMobileDetailVO
	 */
	void mobileDetailTrailerData(TrailerMobileDetailVO trailerMobileDetailVO);

	/**
	 * 已托运配载商品查询
	 * 
	 * @param trailerItemDetailVO
	 * @return
	 */
	Page<TrailerItemPageDTO> itemDetailTrailerData(TrailerItemDetailVO trailerItemDetailVO);

	/**
	 * 已托运配载包裹查询
	 * 
	 * @param trailerPackageDetailVO
	 * @return
	 */
	Page<TrailerPackagePageDTO> packageDetailTrailerData(TrailerPackageDetailVO trailerPackageDetailVO);

	/**
	 * 已托运修改
	 * 
	 * @param trailerUpdateVO
	 */
	void updateTrailerData(TrailerUpdateVO trailerUpdateVO);

	/**
	 * 已托运修改—运单添加
	 * 
	 * @param trailerUpdateAddDetailVO
	 */
	List<ShipbillHeaderPageDTO> updateAddDetailTrailerData(TrailerUpdateAddDetailVO trailerUpdateAddDetailVO);

	/**
	 * 已托运修改—运单剔除
	 * 
	 * @param trailerUpdateDeleteDetailVO
	 */
	void updateDeleteDetailTrailerData(TrailerUpdateDeleteDetailVO trailerUpdateDeleteDetailVO);

	/**
	 * 已托运修改—运单移动
	 * 
	 * @param trailerUpdateMobileDetailVO
	 */
	void updateMobileDetailTrailerData(TrailerUpdateMobileDetailVO trailerUpdateMobileDetailVO);

	/**
	 * 调度单审核信息查询
	 *
	 * @param approvalInfoVO
	 * @return
	 */
	DispatchCkApprovalSCDTO getApprovalInfoData(DispatchApprovalInfoVO approvalInfoVO);

	/**
	 * 调度单审批作废
	 *
	 * @param approvalInvalidVO
	 */
	void dispatchApprovalInvalidData(DispatchCkApprovalInvalidVO approvalInvalidVO);

	/**
	 * 调度单审批流撤回
	 *
	 * @param approvalRetractVO
	 */
	void dispatchApprovalRetractData(DispatchApprovalRetractVO approvalRetractVO);

	/**
	 * 调度单审批流提交
	 *
	 * @param approvalSubmitVO
	 */
	void dispatchApprovalSubmitData(DispatchApprovalSubmitVO approvalSubmitVO);

	/**
	 * 调度单审批流审核
	 *
	 * @param approvalVO
	 */
	void dispatchApprovalData(DispatchApprovalVO approvalVO);

	void autoReceiveShipbillData(List<String> ids, Date date,UserEntity user);
}
