package com.prolog.rdc.tms.service;

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

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

import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.SelfPickUpRegApprovalDTO;
import com.prolog.rdc.tms.model.dto.SelfWithdrawalConfirmQueryDTO;
import com.prolog.rdc.tms.model.dto.SelfWithdrawalDetailDTO;
import com.prolog.rdc.tms.model.dto.SmartSplitDTO;
import com.prolog.rdc.tms.model.dto.WaitForSelfWithdrawalExportDTO;
import com.prolog.rdc.tms.model.dto.WaitForSelfWithdrawalItemDTO;
import com.prolog.rdc.tms.model.dto.WaitForSelfWithdrawalPackageDTO;
import com.prolog.rdc.tms.model.dto.WaitForSelfWithdrawalPageDTO;
import com.prolog.rdc.tms.model.vo.DetailItemSplitVO;
import com.prolog.rdc.tms.model.vo.SelfPickUpApprovalVO;
import com.prolog.rdc.tms.model.vo.SelfPickUpRegApprovalInfoVO;
import com.prolog.rdc.tms.model.vo.SelfPickUpVehicleRegisterVO;
import com.prolog.rdc.tms.model.vo.SelfWithdrawalConfirmQueryVO;
import com.prolog.rdc.tms.model.vo.SelfWithdrawalConfirmVO;
import com.prolog.rdc.tms.model.vo.SmartSplitStrategyVO;
import com.prolog.rdc.tms.model.vo.SmartSplitVO;
import com.prolog.rdc.tms.model.vo.SplitVO;
import com.prolog.rdc.tms.model.vo.WaitForSelfAdsQueryVO;
import com.prolog.rdc.tms.model.vo.WaitForSelfWithdrawalItemQueryVO;
import com.prolog.rdc.tms.model.vo.WaitForSelfWithdrawalPackageQueryVO;
import com.prolog.rdc.tms.model.vo.WaitForSelfWithdrawalPrintQueryVO;
import com.prolog.rdc.tms.model.vo.WaitForSelfWithdrawalQueryVO;

/**
 * 待自提服务层
 *
 * Company: 湖北普罗格科技股份有限公司
 *
 * @author xyf
 * @since 2022/6/1 12:43
 */
public interface WaitForSelfWithdrawalService {

	/**
	 * 待自提主界面分页查询
	 *
	 * @param vo
	 * @return
	 */
	Page<WaitForSelfWithdrawalPageDTO> queryPage(WaitForSelfWithdrawalQueryVO vo);

	/**
	 * 运单高级查询
	 *
	 * @param adsQueryVO
	 * @return
	 */
	Page<WaitForSelfWithdrawalPageDTO> pageAdvanced(@RequestBody WaitForSelfAdsQueryVO adsQueryVO);

	/**
	 * 商品详情查询
	 *
	 * @param waitForSelfWithdrawalItemQueryVO
	 * @return
	 */
	Page<WaitForSelfWithdrawalItemDTO> queryItemDetail(WaitForSelfWithdrawalItemQueryVO waitForSelfWithdrawalItemQueryVO);

	/**
	 * 包裹详情查询
	 *
	 * @param waitForSelfWithdrawalPackageQueryVO
	 * @return
	 */
	Page<WaitForSelfWithdrawalPackageDTO> queryPackageDetail(WaitForSelfWithdrawalPackageQueryVO waitForSelfWithdrawalPackageQueryVO);

	/**
	 * 导出所有页
	 *
	 * @param vo
	 * @return
	 */
	List<WaitForSelfWithdrawalExportDTO> exportAllPage(WaitForSelfWithdrawalQueryVO vo);

	/**
	 * 导出当前页
	 *
	 * @param vo
	 * @return
	 */
	List<WaitForSelfWithdrawalExportDTO> exportCurrentPage(WaitForSelfWithdrawalQueryVO vo);

	/**
	 * 导出选择行
	 *
	 * @param shipbillIdList
	 * @return
	 */
	List<WaitForSelfWithdrawalExportDTO> exportsSelectLine(List<String> shipbillIdList);

	/**
	 * 自提确认
	 *
	 * @param vo
	 * @return
	 */
	void selfWithdrawalConfirm(SelfWithdrawalConfirmVO vo);

	/**
	 * 自提确认查询
	 *
	 * @param vo
	 * @return
	 */
	SelfWithdrawalConfirmQueryDTO confirmQuery(SelfWithdrawalConfirmQueryVO vo);

	/**
	 * 自提车辆登记
	 *
	 * @param vehicleRegisterVO
	 * @return
	 */
	void vehicleRegister(SelfPickUpVehicleRegisterVO vehicleRegisterVO);

	/**
	 * 打印
	 *
	 * @param
	 * @return
	 */
	Map<String, Object> print(WaitForSelfWithdrawalPrintQueryVO waitForSelfWithdrawalPrintQueryVO);

	// STD-DEVELOP20220823 lhb bwc0823003 20220824 自提拆分 start
	/**
	 * 待自提折分商品信息查询
	 *
	 * @param detailItemSplitVO
	 * @return
	 */
	List<SelfWithdrawalDetailDTO> splitListShipbillDetail(DetailItemSplitVO detailItemSplitVO);

	/**
	 * 智能拆分
	 *
	 * @param smartSplitVO
	 * @return
	 */
	List<SmartSplitDTO> smartSplitData(SmartSplitVO smartSplitVO);

	/**
	 * 智能拆分(选择策略)
	 *
	 * @param smartSplitStrategyVOS
	 */
	void smartSplitStrategyData(List<SmartSplitStrategyVO> smartSplitStrategyVOS);

	/**
	 * 待自提按商品拆分
	 *
	 * @param splitVO
	 */
	void goodsSplit(SplitVO splitVO);

	// STD-DEVELOP20220823 lhb bwc0823003 20220824 自提拆分 end

	// STD-DEVELOP20220823 lhb bwc0825001 20220905 自提拆分 start
	/**
	 * 自提登记审核信息查询
	 *
	 * @param approvalInfoVO
	 */
	SelfPickUpRegApprovalDTO getApprovalInfoData(SelfPickUpRegApprovalInfoVO approvalInfoVO);

	/**
	 * 自提登记审批作废
	 *
	 * @param approvalInvalidVO
	 */
	void regApprovalInvalidData(SelfPickUpRegApprovalInfoVO approvalInvalidVO);

	/**
	 * 自提登记审批流撤回
	 *
	 * @param approvalRetractVO
	 */
	void regApprovalRetractData(SelfPickUpRegApprovalInfoVO approvalRetractVO);

	/**
	 * 自提登记审批流提交
	 *
	 * @param approvalSubmitVO
	 */
	void regApprovalSubmitData(SelfPickUpRegApprovalInfoVO approvalSubmitVO);

	/**
	 * 自提登记审批流审核
	 *
	 * @param approvalVO
	 */
	void regApprovalData(SelfPickUpApprovalVO approvalVO);
	// STD-DEVELOP20220823 lhb bwc0825001 20220905 自提拆分 end
}
