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

import java.util.*;

import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.contractorder.api.dto.order.OrderAndPlanDataReqDTO;
import com.zt.plat.module.contractorder.controller.admin.purchaseorder.vo.*;
import com.zt.plat.module.contractorder.controller.admin.salesorder.vo.SalesOrderSaveReqVO;
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
import jakarta.validation.*;

import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.PageParam;

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

    /**
     * 创建采购订单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    PurchaseOrderRespVO createPurchaseOrder(@Valid PurchaseOrderSaveReqVO createReqVO);

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

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

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

    /**
     * 获得采购订单
     *
     * @param id 编号
     * @return 采购订单
     */
    PurchaseOrderDO getPurchaseOrder(Long id,String splyBsnTp);

    /**
     * 获得采购订单分页
     *
     * @param pageReqVO 分页查询
     * @return 采购订单分页
     */
    PageResult<PurchaseOrderDO> getPurchaseOrderPage(PurchaseOrderPageReqVO pageReqVO);

    String submitOrder(Long id);

    String submitErp061(List<Long> ids);

    boolean submitErp062ByUpdate(Long id);

    boolean submitErp062ByDelete(Long id);

    /**
     * 通过订单id更新订单状态
     *
     * @param orderId status 订单id 订单状态
     * @return boolean
     */
    boolean updateOrderStatus(Long orderId, String status);
    /**
     * 通过订单编号查询订单信息
     *
     * @param orderNo 订单编号
     * @return 订单信息
     */
    List<PurchaseOrderDetailsRespVO> getOrderByOrderNo(List<String> orderNo);
    /**
     * 通过订单编号查询订单信息
     *
     * @param purchaseOrderRespVO 订单信息
     *
     */
    void setOrderDetails(PurchaseOrderRespVO purchaseOrderRespVO);
    /**
     * 修改订单状态
     *
     * @param reqVO 订单状态
     *
     */
    void updateOrderStatusByIdOrOrderNo(OrderStsReqVO reqVO);
    /**
     * 获取物料
     *
     * @param orderNo 订单号
     *
     */
    CommonResult<MaterialRespVO> getMaterial(String orderNo);

    /**
     * 订单审核通过和不通过
     *
     * @param purchaseorderReqVO 采购审核
     *
     */
    boolean orderPassReject(PurchaseorderReqVO purchaseorderReqVO);

    List<DownOrUpOrderRespVO> getOrderByOrderIdAndType(DownOrUpOrderReqVO reqVO);

   List<PurchaseOrderRespVO> getBindOrderByOrder(DownOrUpOrderReqVO reqVO);

    /**
     * 关联订单；该接口仅供订单关联使用
     *
     * @param LinkOrderReqVO 订单信息
     * @return 结果
     */
    Boolean linkOrder(@Valid  LinkOrderReqVO LinkOrderReqVO);
    /**
     * 获取订单详情
     *
     * @param ids 订单id
     * @return 订单详情
     */
    List<PurchaseOrderDetailsRespVO>  getOrderByIds(List<Long> ids);
    /**
     * 获取订单详情
     *
     * @param orderNos 订单编号
     * @return 订单详情
     */
    List<PurchaseOrderDO> getOrderByNos(List<String> orderNos);
    /**
     * 获取订单详情
     *
     * @param ids 订单id
     * @return 订单详情
     */
    List<PurchaseOrderDO> getOrdersByIds(List<String> ids);

    /**
     * 查询订单和计划数据
     *
     * @param reqDTO 查询条件
     * @return 订单和计划数据
     */
    PageResult<PurchaseOrderDO>  queryOrderAndPlanData(OrderAndPlanDataReqDTO reqDTO);
    /**
     * 分页查询订单数据
     *
     * @param pageReqVO 查询条件
     * @return 订单数据
     */
    PageResult<PurchaseOrderDO> pageOrderNoPermission(PurchaseOrderPageReqVO pageReqVO);
    void boundOrder(BoundOrderReqVO reqVO);
}
