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

import java.util.*;
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.dal.dataobject.order.OrderDO;
import cn.iocoder.yudao.module.order.vo.order.OrderBackVO;
import cn.iocoder.yudao.module.order.vo.orderMutual.*;
import cn.iocoder.yudao.module.order.dal.dataobject.orderMutual.OrderMutualDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 订单互斥 Service 接口
 *
 * @author 系统管理员
 */
public interface OrderMutualService extends IService<OrderMutualDO> {

    /**
     * 创建订单互斥
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMutual(@Valid OrderMutualCreateReqVO createReqVO);

    /**
     * 更新订单互斥
     * @param updateReqVO 更新信息
     */
    void updateMutual(@Valid OrderMutualUpdateReqVO updateReqVO);

    /**
     * 删除订单互斥
     * @param id 编号
     */
    void deleteMutual(Long id);

    /**
     * 根据订单编号删除订单互斥
     * @param orderId 订单编号
     */
    void dealMutualByOrderId(Long orderId,List<Long> splitOrderIds,int type);

    /**
     * 获得订单互斥
     * @param id 编号
     * @return 订单互斥
     */
    OrderMutualDO getMutual(Long id);

    /**
     * 获得订单互斥列表
     * @param ids 编号
     * @return 订单互斥列表
     */
    List<OrderMutualDO> getMutualList(Collection<Long> ids);

    /**
     * 获得订单互斥分页
     * @param page 分页查询
     * @param query 查询
     * @return 订单互斥分页
     */
    PageResult<OrderMutualDO> getMutualPage(OrderMutualQueryVO query, PageVO page);

    /**
     * 获得订单互斥列表, 用于 Excel 导出
     * @param query 查询
     * @return 订单互斥列表
     */
    List<OrderMutualDO> getMutualList(OrderMutualQueryVO query);

    void batchCreateMutual(List<OrderMutualCreateReqVO> createReqVOList);

    PageResult<OrderMutualBackVO> getMutualOrderByOrderId(OrderMutualQueryVO orderMutualQueryVO,PageVO pageVO);

    PageResult<OrderBackVO> getUnMutualOrderByOrderId(OrderMutualQueryVO orderMutualQueryVO,PageVO pageVO);

    void deleteMutualOrderByOrderId(OrderMutualQueryVO orderMutualQueryVO);

    void deleteBatchMutualOrderByOrderId(List<OrderMutualQueryVO> orderMutualQueryVOList);

    List<OrderMutualDO> getMutualList(Set<Long> orderIdSet);

    List<OrderDO> searchMutualOrderList(Long orderId, Set<Long> orderIdSet);
}
