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

import com.prolog.cs.biz.outbound.model.OmsDoBillHDO;
import com.prolog.cs.biz.outbound.model.dto.WavesCreateDTO;
import com.prolog.cs.biz.outbound.model.dto.check.CheckInfoDTO;
import com.prolog.cs.biz.outbound.model.entity.BarcodeHDO;
import com.prolog.cs.biz.outbound.model.entity.OmsDoBillDDO;
import com.prolog.cs.biz.outbound.model.entity.WaveDO;
import com.prolog.cs.biz.outbound.model.vo.PrintVO;
import com.prolog.cs.biz.outbound.model.vo.check.InnerCheckBillVO;
import com.prolog.framework.authority.core.dto.UserDTO;
import com.prolog.framework.bz.common.print.PrintData;
import com.prolog.framework.common.message.RestMessage;
import com.prolog.function.annotation.Func;

import java.util.List;


public interface InnerCheckFunc {

    @Func(name = "内复核索取", category = "出库/内复核/内复核索取", description = "内复核索取")
    @FunctionalInterface
    public interface getCurrentContainer {
        RestMessage<InnerCheckBillVO> getContainerInfo(String containerCode, String stationCode);
    }

    @Func(name = "商品内复核", category = "出库/内复核/商品内复核", description = "商品内复核")
    @FunctionalInterface
    public interface checkItem {
        RestMessage<InnerCheckBillVO> checkItem(CheckInfoDTO checkInfoDTO);
    }

    @Func(name = "打印拼箱", category = "出库/内复核/打印拼箱", description = "打印拼箱")
    @FunctionalInterface
    public interface printLcl {
        PrintVO printLcl(String containerCode, String billGroupId, String lclNo);
    }

    @Func(name = "打印拼箱明细", category = "出库/内复核/打印拼箱明细", description = "打印拼箱明细")
    @FunctionalInterface
    public interface printLclDetail {
        PrintData printLclDetail(String stationCode, String billGroupId, String lclNo);
    }

    @Func(name = "拼箱", category = "出库/内复核/拼箱", description = "拼箱")
    @FunctionalInterface
    public interface addLcl {
        RestMessage<BarcodeHDO> addLcl(String stationCode, String billGroupId, String containerCode);
    }

    @Func(name = "整件拆分", category = "出库/内复核/整件拆分", description = "整件拆分")
    @FunctionalInterface
    public interface pieceBreak {
        RestMessage<Boolean> pieceBreak(String billGroupId, String containerCode, String stationCode);
    }

    @Func(name = "二次拼箱", category = "出库/内复核/二次拼箱", description = "二次拼箱")
    @FunctionalInterface
    public interface lclSecond {
        String lclSecond(WavesCreateDTO wavesCreateVO, WaveDO waveDo, UserDTO userDTO,List<OmsDoBillHDO> billHList, List<OmsDoBillDDO> billDList);
    }

}