package com.prolog.upcloud.base.wh.operate.service;

import com.prolog.framework.bz.common.print.ReportData;
import com.prolog.framework.bz.core.collection.ValidList;
import com.prolog.framework.core.pojo.Page;
import com.prolog.upcloud.base.wh.operate.enums.OmsMoveBillType;
import com.prolog.upcloud.base.wh.operate.enums.WmsMoveBillType;
import com.prolog.upcloud.base.wh.operate.vo.*;

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

/**
 * @author wujunjie
 */
public interface MoveService {


    /**
     * 新增移库单
     *
     * @param saveVO 移库信息
     */
    void saveMoveInfo(WmsMoveSaveVO saveVO);

    /**
     * 新增移库单
     *
     * @param saveVO 移库信息
     */
    List<ReportData> saveMoveInfoBackPrint(WmsMoveSaveVO saveVO);

    /**
     * pda移位
     *
     * @param move pda移位信息
     */
    void saveMoveLocatorInfoPda(WmsMovePdaSaveVO move);

    /**
     * 移位
     *
     * @param saveVO 移位
     */
    void saveMoveLocatorInfo(WmsMoveSaveVO saveVO);

    /**
     * 移库审批拒绝
     *
     * @param lineBillId 移库单编码
     */
    void auditRejectMove(String[] lineBillId);

    /**
     * 审核移库单
     */
    void auditMove(MoveAuditParamsVO moveAuditParamsVO);

    /**
     * 移库确认
     *
     * @param moveConfirmParamsVO 移库确认信息
     */
    String confirmMove(MoveConfirmParamsVO moveConfirmParamsVO);

    String updateToW23(MoveConfirmParamsVO moveConfirmParamsVO);

    Page<MoveVO> getMoveDetailList(String headerId, String status);

    /**
     * 根据条件查询移库信息
     *
     * @param moveQueryDVO 查询参数
     * @return 移库信息列表
     */
    Page<MoveDListVO> getMoveDetailList(MoveQueryDVO moveQueryDVO);

    Page<MoveListVO> getMoveList(MoveQueryVO moveQueryDVO);

    Page<MoveErpListVO> getErpMoveList(String erpBillId, String erpBillNo, OmsMoveBillType billType);

    Page<MoveErpHeadListVO> getErpMoveHeadList(String warehouseId, OmsMoveBillType billType);

    Object createMoveBill(List<MoveBillCreateVO> billCreateVOList, WmsMoveBillType billType);

    Page<PdaMoveListVO> getMoveDetails(String headerId, String code, String containercode, String status);

    PdaMoveDetailVO getMoveDetail(String moveLineId);

    String move(String moveLineId, Integer inOrOut);

    Object inReceive(Map<String, Object> map);

    Object outReceive(Map<String, Object> map);

    void saveStereo(ValidList<MoveStereoAddVO> list);

    Page<StereoDtlVO> getStereoListByContainerCode(String warehouseId, String containerCode);

    Object getMovePrintData(MovePrintDataVO vo);

    String confirmStereo(ConfirmStereoVO vo);

    void finishStereo(FinishStereoVO vo);

    /**
     * 根据条件获取移库下架任务
     *
     * @param queryVO 入参
     * @return 返回数据
     */
    List<MoveDListVO> getMoveDownShelvesTask(MoveQueryDVO queryVO);

    /**
     * 根据条件获取移库上架架任务
     *
     * @param queryVO 入参
     * @return 返回数据
     */
    List<MoveDListVO> getMoveUpShelvesTask(MoveQueryDVO queryVO);

    /**
     * 移库下架确认
     *
     * @param wmsMoveD 入参
     * @return 返回数据
     */
    void moveDownConfirm(MoveDListVO wmsMoveD);

    /**
     * 移库上架确认
     *
     * @param wmsMoveD 入参
     * @return 返回数据
     */
    void moveUpConfirm(MoveDListVO wmsMoveD);

    /**
     * 校验货格号库存商品大类
     *
     * @param wmsMoveD 入参
     */
    void checkGoodsCaseCodeStock(MoveDListVO wmsMoveD);
}
