package com.zt.plat.module.contractorder.service.entrustorder;

import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.contractorder.controller.admin.entrustorder.vo.EntrustOrderDetailRespVO;
import com.zt.plat.module.contractorder.controller.admin.entrustorder.vo.EntrustOrderOrderPageReqVO;
import com.zt.plat.module.contractorder.controller.admin.entrustorder.vo.EntrustOrderOrderRespVO;
import com.zt.plat.module.contractorder.controller.admin.entrustorder.vo.EntrustOrderOrderSaveReqVO;
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.DownOrUpOrderReqVO;
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.DownOrUpOrderRespVO;
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.LinkOrderReqVO;
import com.zt.plat.module.contractorder.dal.dataobject.entrustorder.EntrustOrderOrderDO;
import jakarta.validation.Valid;

import java.util.List;

/**
 * 采购订单 Service 接口
 *
 * @author 后台管理-1
 */
public interface EntrustOrderOrderService {

    /**
     * 创建采购订单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    EntrustOrderOrderRespVO createEntrustOrderOrder(@Valid EntrustOrderOrderSaveReqVO createReqVO);

    /**
     * 更新采购订单
     *
     * @param updateReqVO 更新信息
     */
    void updateEntrustOrderOrder(@Valid EntrustOrderOrderSaveReqVO updateReqVO);

    /**
     * 删除采购订单
     *
     * @param id 编号
     */
    void deleteEntrustOrderOrder(Long id);

    /**
     * 批量删除采购订单
     *
     * @param ids 编号
     */
    void deleteEntrustOrderOrderListByIds(List<Long> ids);

    /**
     * 获得采购订单
     *
     * @param id 编号
     * @return 采购订单
     */
    EntrustOrderOrderDO getEntrustOrderOrder(Long id);

    /**
     * 获得采购订单分页
     *
     * @param pageReqVO 分页查询
     * @return 采购订单分页
     */
    PageResult<EntrustOrderOrderDO> getEntrustOrderOrderPage(EntrustOrderOrderPageReqVO pageReqVO);
    /**
     * 关联订单
     *
     * @param req 关联订单请求
     * @return 是否成功
     */
    boolean linkOrder(LinkOrderReqVO req);
    /**
     * 获取上或下游订单
     *
     * @param reqVO 查询条件
     * @return 上或下游订单
     */
    List<DownOrUpOrderRespVO> getOrderByOrderIdAndType(DownOrUpOrderReqVO reqVO);
    /**
     * 获取关联订单
     *
     * @param reqVO 查询条件
     * @return 关联订单
     */
    List<EntrustOrderOrderRespVO> getBindOrderByOrder(DownOrUpOrderReqVO reqVO);
    /**
     * 关闭订单
     *
     * @param ids 编号
     */
    void closeOrder(List<Long> ids);

    List<EntrustOrderDetailRespVO> getEntrustOrderDetailListByOrderId(Long id);

    void submitErp061(Long id);
    /**
     * 提交erp062
     *
     * @param updateReqVO 编号
     */
    void submitErpUpdate062(EntrustOrderOrderSaveReqVO updateReqVO);

}