package com.ruoyi.info.collection.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionAddDTO;
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionEditDTO;
import com.ruoyi.info.collection.domain.dto.CcdiPurchaseTransactionQueryDTO;
import com.ruoyi.info.collection.domain.excel.CcdiPurchaseTransactionExcel;
import com.ruoyi.info.collection.domain.excel.CcdiPurchaseTransactionSupplierExcel;
import com.ruoyi.info.collection.domain.vo.CcdiPurchaseTransactionVO;

import java.util.List;

/**
 * 采购交易信息 服务层
 *
 * @author ruoyi
 * @date 2026-02-06
 */
public interface ICcdiPurchaseTransactionService {

    /**
     * 查询采购交易列表
     *
     * @param queryDTO 查询条件
     * @return 采购交易VO集合
     */
    List<CcdiPurchaseTransactionVO> selectTransactionList(CcdiPurchaseTransactionQueryDTO queryDTO);

    /**
     * 分页查询采购交易列表
     *
     * @param page     分页对象
     * @param queryDTO 查询条件
     * @return 采购交易VO分页结果
     */
    Page<CcdiPurchaseTransactionVO> selectTransactionPage(Page<CcdiPurchaseTransactionVO> page, CcdiPurchaseTransactionQueryDTO queryDTO);

    /**
     * 查询采购交易列表（用于导出）
     *
     * @param queryDTO 查询条件
     * @return 采购交易Excel实体集合
     */
    List<CcdiPurchaseTransactionExcel> selectTransactionListForExport(CcdiPurchaseTransactionQueryDTO queryDTO);

    /**
     * 查询采购交易详情
     *
     * @param purchaseId 采购事项ID
     * @return 采购交易VO
     */
    CcdiPurchaseTransactionVO selectTransactionById(String purchaseId);

    /**
     * 新增采购交易
     *
     * @param addDTO 新增DTO
     * @return 结果
     */
    int insertTransaction(CcdiPurchaseTransactionAddDTO addDTO);

    /**
     * 修改采购交易
     *
     * @param editDTO 编辑DTO
     * @return 结果
     */
    int updateTransaction(CcdiPurchaseTransactionEditDTO editDTO);

    /**
     * 批量删除采购交易
     *
     * @param purchaseIds 需要删除的采购事项ID
     * @return 结果
     */
    int deleteTransactionByIds(String[] purchaseIds);

    /**
     * 导入采购交易数据（异步）
     *
     * @param mainExcelList 主信息Excel实体列表
     * @param supplierExcelList 供应商明细Excel实体列表
     * @return 任务ID
     */
    String importTransaction(
        List<CcdiPurchaseTransactionExcel> mainExcelList,
        List<CcdiPurchaseTransactionSupplierExcel> supplierExcelList
    );
}
