package com.prolog.cs.biz.outbound.service;

import com.prolog.cs.biz.outbound.model.dto.OuterCheckDDTO;
import com.prolog.cs.biz.outbound.model.dto.WaveBillDODTO;
import com.prolog.cs.biz.outbound.model.dto.check.CheckMakeRedDTO;
import com.prolog.cs.biz.outbound.model.entity.BarcodeHDO;
import com.prolog.cs.biz.outbound.model.vo.OuterCheckPickUpVO;
import com.prolog.cs.biz.outbound.model.vo.check.OuterCheckGainVO;
import com.prolog.framework.bz.common.print.PrintData;
import com.prolog.framework.bz.common.print.ReportData;
import com.prolog.framework.core.pojo.Page;

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

/**
 * @author zzz
 * @desc
 * @date 2022/1/4
 */
public interface BarCodeService {

//    /**
//     * 外复核-索取任务
//     * @param operatorCode
//     * @param warehouseId
//     */
//    Integer outerCheckGain(String bldgId,String containerCode, String srcBillCodes, String operatorCode, String warehouseId);

    /**
     * 外复核-索取任务
     * @param vos
     */
    Integer outerCheckGain(List<OuterCheckGainVO> vos);

    /**
     * 查询已索取任务主表
     * @param bldgId
     * @param warehouseId
     * @param operatorCode
     * @param srcCode
     * @param barcode
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<WaveBillDODTO> getOuterCheckH(String bldgId, String warehouseId, String operatorCode, String srcCode, String barcode, Integer pageNum, Integer pageSize);

    /**
     * 查询待索取任务主表
     * @param barcode
     * @param srcCode
     * @param type
     * @param bldgId
     * @param warehouseId
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<WaveBillDODTO> getUnOuterCheckH(String barcode,String srcCode,Integer type,String bldgId,String warehouseId,Integer pageNum, Integer pageSize);

    /**
     * 查询待索取任务主表或部分冲红任务
     * @param barcode
     * @param srcCode
     * @param type
     * @param bldgId
     * @param warehouseId
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<WaveBillDODTO> getUnOuterCheckH2(String barcode,String srcCode,Integer type,String bldgId,String warehouseId,String partlyRed,String billtypeGroup,Integer pageNum, Integer pageSize);

    /**
     * 查询草单主表
     * @param srcCode
     * @param bldgId
     * @param warehouseId
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<WaveBillDODTO> getOuterCheckHOrder(String srcCode,String bldgId,String warehouseId,Integer pageNum, Integer pageSize);

    /**
     * 根据订单号查询条码明细
     * @param srcCode
     * @param warehouseId
     * @param bldgId
     * @return
     */
    List<BarcodeHDO> getBarcodeHList(String srcCode, String warehouseId, String bldgId);

    /**
     * 查询商品明细
     * @param srcCode
     * @param warehouseId
     * @param bldgId
     * @return
     */
    List<OuterCheckDDTO> getOuterCheckD(String srcCode, String warehouseId, String bldgId);

    /**
     * 复核确认
     * @param srcCodes
     * @param operatorCode
     * @param warehouseId
     * @param bldgId
     */
    void outerCheckConfirm(List<String> srcCodes,String operatorCode,String warehouseId,String bldgId);


    /**
     * 复核确认
     * @param params
     */
    void outerCheckRed(Map<String ,Object> params);

    /**
     * 复核确认(移库冲红处理)
     * @param srcCodes
     * @param operatorCode
     * @param warehouseId
     * @param bldgId
     */
    List<ReportData> outerCheckConfirmMove(List<String> srcCodes, String operatorCode, String warehouseId, String bldgId, Map<String,String> codeMap);

    /**
     * 打印外复核草单
     * @param srcCodes
     * @param warehouseId
     * @param warehouseName
     * @return
     */
    List<PrintData> printOuterPaperSlip(List<String> srcCodes, String warehouseId, String warehouseName);

    /**
     * 打印外复核报告单
     * @param srcCodes
     * @param warehouseId
     * @param warehouseName
     * @return
     */
    List<PrintData> printReportPaperSlip(List<String> srcCodes, String warehouseId, String warehouseName,List<String> itemLots);


    /**
     * 打印出库清单、特殊订单、自提单
     * @param srcCodes
     * @param warehouseId
     * @param warehouseName
     * @return
     */
    List<PrintData> printDeliveryOuter(List<String> srcCodes, String warehouseId, String warehouseName);

    /**
     * 打印外复核单
     * @param srcCodes
     * @param warehouseId
     * @param warehouseName
     * @return
     */
    List<PrintData> printOuterPaperSlipH(List<String> srcCodes, String warehouseId, String warehouseName);

    /**
     * 自提出库外复核-复核确认
     * @param vo
     */
    void outerCheckConfirmSelf(OuterCheckPickUpVO vo);

}
