package cn.iocoder.yudao.module.order.service.orderControlLog;

import java.util.*;
import java.util.concurrent.Future;
import javax.validation.*;
import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.framework.mybatis.core.service.IService;
import cn.iocoder.yudao.module.order.vo.orderControlLog.*;
import cn.iocoder.yudao.module.order.dal.dataobject.orderControlLog.OrderControlLogDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 订单控货日志 Service 接口
 *
 * @author 江楠
 */
public interface OrderControlLogService extends IService<OrderControlLogDO> {

    /**
     * 创建订单控货日志
     * @param createReqVO 创建信息
     * @return 编号
     */
    Future<Boolean> createOrderControlLog(@Valid OrderControlLogCreateReqVO createReqVO);


    /**
     * 创建订单控货日志
     * @param createReqVOList 创建信息
     * @return 编号
     */
    Future<Boolean> batchCreateOrderControlLogs(@Valid List<OrderControlLogCreateReqVO> createReqVOList);

    /**
     * 更新订单控货日志
     * @param updateReqVO 更新信息
     */
    void updateOrderControlLog(@Valid OrderControlLogUpdateReqVO updateReqVO);

    /**
     * 删除订单控货日志
     * @param id 编号
     */
    void deleteOrderControlLog(Long id);

    /**
     * 获得订单控货日志
     * @param id 编号
     * @return 订单控货日志
     */
    OrderControlLogDO getOrderControlLog(Long id);

    /**
     * 获得订单控货日志列表
     * @param ids 编号
     * @return 订单控货日志列表
     */
    List<OrderControlLogDO> getOrderControlLogList(Collection<Long> ids);

    /**
     * 获得订单控货日志分页
     * @param page 分页查询
     * @param query 查询
     * @return 订单控货日志分页
     */
    PageResult<OrderControlLogDO> getOrderControlLogPage(OrderControlLogQueryVO query, PageVO page);

    /**
     * 获得订单控货日志列表, 用于 Excel 导出
     * @param query 查询
     * @return 订单控货日志列表
     */
    List<OrderControlLogDO> getOrderControlLogList(OrderControlLogQueryVO query);

    /**
     * @param orderId 订单ID
     * @param typeKeys 控货日志类型key值：1 新增控货 2 更新控货 3 转移控货 4 放货 5 放货复核 6 放货取消  7 放货修改申请 8 放货反复核申请
     *             9 被调货申请 10 调货申请 11 取消放货申请 12 放货修改失败 13 放货反复核失败 14 被调货失败 15 调货失败 16 取消放货失败 17 放货修改通过
     *             18 放货反复核通过 19 调货审批通过 20 被调货审批通过 21 取消放货审批通过
     * @return
     */
    List<OrderControlLogDO> getOrderControlLogListByOrderId(Long orderId, Collection<Integer> typeKeys);

}
