package com.prolog.rdc.tms.service;

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

import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.dto.PickingOutboundExportDTO;
import com.prolog.rdc.tms.model.dto.PickingOutboundGetShipbillDTO;
import com.prolog.rdc.tms.model.dto.PickingOutboundItemDetailDTO;
import com.prolog.rdc.tms.model.dto.PickingOutboundLoadingScanDTO;
import com.prolog.rdc.tms.model.dto.PickingOutboundPackageDetailDTO;
import com.prolog.rdc.tms.model.dto.PickingOutboundQueryByLoadbillDTO;
import com.prolog.rdc.tms.model.vo.PickingOutboundAbnormalRegisterByShipbillVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundAbnormalRegisterVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundAdvancedQueryVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundConfirmVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundDeleteDetailVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundExportAllVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundExportPageVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundFeedBackByShipbillVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundFeedBackVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundGetShipbillVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundItemDetailVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundLoadingScanVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundPackageDetailVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundQueryByLoadbillVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundStartShipmentByShipbillVO;
import com.prolog.rdc.tms.model.vo.PickingOutboundStartShipmentVO;

/**
 * 拣货出库服务层
 *
 * Company: 湖北普罗格科技股份有限公司
 *
 * @author zhangsj
 * @since 2022/6/27 14:25
 */
public interface PickingOutboundService {
    /**
     * 派车单查询
     *
     * @param pickingOutboundQueryByLoadbillVO
     * @return
     */
    Page<PickingOutboundQueryByLoadbillDTO> queryLoadbillPageData(PickingOutboundQueryByLoadbillVO pickingOutboundQueryByLoadbillVO);

    /**
     * 派车单高级查询
     *
     * @param pickingOutboundAdvancedQueryVO
     * @return
     */
    Page<PickingOutboundQueryByLoadbillDTO> advancedQueryLoadbillPageData(PickingOutboundAdvancedQueryVO pickingOutboundAdvancedQueryVO);

    /**
     * 配载运单查询
     *
     * @param pickingOutboundGetShipbillVO
     * @return
     */
    Page<PickingOutboundGetShipbillDTO> getShipbillData(PickingOutboundGetShipbillVO pickingOutboundGetShipbillVO);

    /**
     * 配载商品查询
     *
     * @param pickingOutboundItemDetailVO
     * @return
     */
    Page<PickingOutboundItemDetailDTO> itemDetailData(PickingOutboundItemDetailVO pickingOutboundItemDetailVO);

    /**
     * 配载包裹查询
     *
     * @param pickingOutboundPackageDetailVO
     * @return
     */
    Page<PickingOutboundPackageDetailDTO> packageDetailData(PickingOutboundPackageDetailVO pickingOutboundPackageDetailVO);

    /**
     * 装车扫描
     *
     * @param pickingOutboundLoadingScanVO
     * @return
     */
    PickingOutboundLoadingScanDTO loadingScanData(PickingOutboundLoadingScanVO pickingOutboundLoadingScanVO);

    /**
     * 装车确认
     *
     * @param pickingOutboundConfirmVO
     */
    void loadingConfirmData(PickingOutboundConfirmVO pickingOutboundConfirmVO);

    /**
     * 派车单启运登记
     *
     * @param pickingOutboundStartShipmentVO
     */
    void startShipmentData(PickingOutboundStartShipmentVO pickingOutboundStartShipmentVO);

    /**
     * 派车单客服反馈
     *
     * @param pickingOutboundFeedBackVO
     */
    void feedBackData(PickingOutboundFeedBackVO pickingOutboundFeedBackVO);

    /**
     * 派车单异常登记
     *
     * @param pickingOutboundAbnormalRegisterVO
     */
    void abnormalRegisterData(PickingOutboundAbnormalRegisterVO pickingOutboundAbnormalRegisterVO);

    /**
     * 运单启运登记
     *
     * @param pickingOutboundStartShipmentByShipbillVO
     */
    void shipbillStartShipmentData(PickingOutboundStartShipmentByShipbillVO pickingOutboundStartShipmentByShipbillVO);

    /**
     * 运单客服反馈
     *
     * @param pickingOutboundFeedBackByShipbillVO
     */
    void shipbillFeedBackData(PickingOutboundFeedBackByShipbillVO pickingOutboundFeedBackByShipbillVO);

    /**
     * 运单异常登记
     *
     * @param pickingOutboundAbnormalRegisterByShipbillVO
     */
    void shipbillAbnormalRegisterData(PickingOutboundAbnormalRegisterByShipbillVO pickingOutboundAbnormalRegisterByShipbillVO);

    /**
     * 导出所有数据
     *
     * @param pickingOutboundExportAllVO
     * @return
     */
    List<PickingOutboundExportDTO> exportAllData(PickingOutboundExportAllVO pickingOutboundExportAllVO);

    /**
     * 导出当前页数据
     *
     * @param pickingOutboundExportPageVO
     * @return
     */
    List<PickingOutboundExportDTO> exportPageData(PickingOutboundExportPageVO pickingOutboundExportPageVO);

    /**
     * 导出选择行数据
     *
     * @param loadbillIds
     * @return
     */
    List<PickingOutboundExportDTO> exportSelectLineData(List<String> loadbillIds);

    /**
     * 拣货出库打印
     *
     * @param loadbillIds
     * @return
     */
    Map<String, Object> printDeliveryConfirmData(List<String> loadbillIds);


    /**
     * 配载运单剔除
     *
     * @param pickingOutboundDeleteDetailVO
     */
    void deleteDetailData(PickingOutboundDeleteDetailVO pickingOutboundDeleteDetailVO);
}
