package com.shkj.wms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.shkj.common.core.domain.Result;
import com.shkj.wms.bo.BaseBarcodesOutAddBo;
import com.shkj.wms.bo.BaseBarcodesOutQueryBo;
import com.shkj.wms.bo.BaseBarcodesOutThirdPointBo;
import com.shkj.wms.bo.BaseBarcodesOutThirdSyncBo;
import com.shkj.wms.domain.BaseBarcodesOut;
import com.shkj.wms.third.ykl.ThirdYklResult;
import com.shkj.wms.vo.BaseBarcodesOutTaskVo;
import com.shkj.wms.vo.BaseBarcodesOutVo;

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

/**
 * 出库条码信息Service接口
 *
 * @author zjx
 * @date 2023-04-06
 */
public interface IBaseBarcodesOutService  extends IService<BaseBarcodesOut> {


    /**
     * PQM系统实时向立体库推送纠正信息
     *
     * @param bo 出库信息过点时间
     * @return 是否成功
     */
    ThirdYklResult thirdSyncBaseBarcodesOutPoint(List<BaseBarcodesOutThirdPointBo> bo);

    /**
     * PQM系统定时向立体库推送车辆队列信息
     * @param bo 出库条码信息
     * @return 是否成功
     */
    ThirdYklResult thirdSyncBaseBarcodesOut(List<BaseBarcodesOutThirdSyncBo> bo);

    /**
     * 根据车型代码/派生查询待出库数据
     * @param bo 出库条码信息
     * @return 是否成功
     */
    List<BaseBarcodesOutVo> getBarcodesOutData(BaseBarcodesOutQueryBo bo);

    /**
     * 查询当前状态为初始化的数据
     */
    List<BaseBarcodesOutVo> getBarcodesnoOutData();

    /**
     * 查询待出库的队列
     */
    List<BaseBarcodesOutAddBo> selectVinOutboundList(BaseBarcodesOutQueryBo bo);

    BaseBarcodesOutAddBo selectVinOutboundListOne(BaseBarcodesOutQueryBo bo);

    /**
     * 获取出库队列中任务状态
     * @param bo
     * @return
     */
    List<BaseBarcodesOutTaskVo> getBarcodesOutDataTaskInfo(BaseBarcodesOutQueryBo bo);

    /**
     * 获取出库队列中的未下发任务明细
     * @param bo
     * @return
     */
    List<BaseBarcodesOutVo> getBarcodesOutDataTaskInfoDetail(BaseBarcodesOutQueryBo bo);

    /**
     * 手动下发出库队列任务
     * @param bo
     * @return
     */
    Result<Boolean> handMoveOutboundInfoTask(BaseBarcodesOutQueryBo bo);

    /**
     * 手动下发出库任务
     * @author Comair
     * @date 2023/7/27 11:14
 * @param vin
 * @param status
 * @return com.shkj.common.core.domain.Result<java.lang.Boolean>
     */
    Result<Boolean> handOutboundInfoTask(String vin,String status);

    /**
     * 切换出库方式
     * @author Comair
     * @date 2023/8/12 15:21
     * @param status
     * @return com.shkj.common.core.domain.Result<java.lang.Boolean>
     */
    Result<Boolean> handOutboundStatus(String status);
    Result<Boolean> handOutEmptyStatus(String status);

    /**
     * 手动下发出库队列任务-暂停
     * @param bo
     * @return
     */
    Result<Boolean> handMoveOutboundInfoTaskForPause(BaseBarcodesOutQueryBo bo);

    /**
     * 手动下发出库队列任务-取消
     * @param bo
     * @return
     */
    Result<Boolean> handMoveOutboundInfoTaskForCancel(BaseBarcodesOutQueryBo bo);

    /**
     *
     * @author Comair
     * @date 2023/8/29 15:19
 * @return java.util.List<java.util.Map<java.lang.String,java.lang.String>>
     */
    List<Map<String,String>> getOutEmptyInfo();
}
