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.entity.OmsDoBillDDO;
import com.prolog.cs.biz.outbound.model.entity.WaveDO;
import com.prolog.framework.authority.core.dto.UserDTO;
import com.prolog.function.annotation.Func;

import java.util.List;

public class WaveCreateFunc {

    @Func(name = "波次创建入参校验", category = "出库/波次管理/波次创建", description = "波次创建入参校验")
    @FunctionalInterface
    public interface validInputParam {
        void validInputParam(WavesCreateDTO wavesCreateVO);
    }

    @Func(name = "波次创建查询出库头集合", category = "出库/波次管理/波次创建", description = "波次创建查询出库头集合")
    @FunctionalInterface
    public interface queryOmsDoBillHList {
        List<OmsDoBillHDO> queryOmsDoBillHList(WavesCreateDTO wavesCreateVO);
    }

    @Func(name = "波次创建订单已波次下发校验", category = "出库/波次管理/波次创建", description = "波次创建订单已波次下发校验")
    @FunctionalInterface
    public interface validBillPickQty {
        void validBillPickQty(List<OmsDoBillHDO> billHList);
    }

    @Func(name = "波次创建查询出库行集合", category = "出库/波次管理/波次创建", description = "波次创建查询出库行集合")
    @FunctionalInterface
    public interface queryOmsDoBillDList {
        List<OmsDoBillDDO> queryOmsDoBillDList(List<OmsDoBillHDO> billHList);
    }

    @Func(name = "波次创建校验捡选模式", category = "出库/波次管理/波次创建", description = "波次创建校验捡选模式")
    @FunctionalInterface
    public interface validModel {
        void validModel(WavesCreateDTO wavesCreateVO,UserDTO userDTO,List<OmsDoBillDDO> billDList);
    }

    @Func(name = "波次创建保存", category = "出库/波次管理/波次创建", description = "波次创建保存")
    @FunctionalInterface
    public interface saveWaveDO {
        WaveDO saveWaveDO(WavesCreateDTO wavesCreateVO, UserDTO userDTO, List<OmsDoBillHDO> billHList);
    }

    @Func(name = "波次创建波次分组并保存", category = "出库/波次管理/波次创建", description = "波次创建波次分组并保存")
    @FunctionalInterface
    public interface saveWaveGroup {
        String[] saveWaveGroup(WavesCreateDTO wavesCreateVO, WaveDO waveDo, UserDTO userDTO,List<OmsDoBillHDO> billHList, List<OmsDoBillDDO> billDList);
    }
}