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

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.orderTime.OrderTimeDO;
import cn.iocoder.yudao.module.order.dto.OrderBackInfoDto;
import cn.iocoder.yudao.module.order.vo.merge.*;
import cn.iocoder.yudao.module.order.dal.dataobject.merge.MergeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.order.vo.order.OrderBackVO;

/**
 * 订单合单申请 Service 接口
 *
 * @author 系统管理员
 */
public interface MergeService extends IService<MergeDO> {

    /**
     * 创建订单合单申请
     * @param createReqVOS 创建信息
     * @return 编号
     */
    void createMerge(@Valid List<MergeCreateReqVO> createReqVOS);

    /**
     * 更新订单合单申请
     * @param updateReqVO 更新信息
     */
    void updateMerge(@Valid MergeUpdateReqVO updateReqVO);

    /**
     * 删除订单合单申请
     * @param id 编号
     */
    void deleteMerge(Long id);

    /**
     * 获得订单合单申请
     * @param id 编号
     * @return 订单合单申请
     */
    MergeDO getMerge(Long id);

    /**
     * 获得订单合单申请列表
     * @param ids 编号
     * @return 订单合单申请列表
     */
    List<MergeDO> getMergeList(Collection<Long> ids);

    /**
     * 获得订单合单申请分页
     * @param page 分页查询
     * @param query 查询
     * @return 订单合单申请分页
     */
    PageResult<MergeDO> getMergePage(MergeQueryVO query, PageVO page);

    /**
     * 获得订单合单申请列表, 用于 Excel 导出
     * @param query 查询
     * @return 订单合单申请列表
     */
    List<MergeDO> getMergeList(MergeQueryVO query);

    Map<String,Object> getMergeListByOrderNo(String mergedOrderNo,PageVO pageVO);

    void updateOrderMergeResult(String id,int result);

    Map<String,List<OrderTimeDO>> getMergeLogByMergedOrderNo(String mergedOrderNo);

    void cancelMerge(MergeQueryVO mergeQueryVO);

    List<OrderBackInfoDto> getMergeListByMergeId(Long id);
}
