package cn.iocoder.yudao.module.chain.service.blockcertificate;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.chain.controller.admin.blockcertificate.vo.*;
import cn.iocoder.yudao.module.chain.dal.dataobject.blockcertificate.BlockCertificateDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 区块证书 Service 接口
 *
 * @author 芋道源码
 */
public interface BlockCertificateService {

    /**
     * 批量创建区块证书
     * @param createReqVO 区块证书集合
     */
    List<BlockCertificateDO> createBlockCertificate(@Valid List<BlockCertificateCreateReqVO> createReqVO);

    /**
     * 更新区块证书
     *
     * @param updateReqVO 更新信息
     */
    void updateBlockCertificate(@Valid BlockCertificateUpdateReqVO updateReqVO);

    /**
     * 批量更新区块证书
     *
     * @param updateReqVOs 区块证书集合
     */
    void updateBlockCertificateBatch(@Valid List<BlockCertificateUpdateReqVO> updateReqVOs);

    /**
     * 删除区块证书
     *
     * @param id 编号
     */
    void deleteBlockCertificate(Long id);

    /**
     * 批量删除区块证书
     * @param ids
     */
    void deleteBlockCertificateBatch(List<Long> ids);

    /**
     * 获得区块证书
     * @param blockCertificate 入参
     * @return 区块证书集合
     */
    List<BlockCertificateRespVO> getBlockCertificateList(BlockCertificateReqVO blockCertificate);

    /**
     * 获得区块证书分页
     *
     * @param pageReqVO 分页查询
     * @return 区块证书分页
     */
    PageResult<BlockCertificateDO> getBlockCertificatePage(BlockCertificatePageReqVO pageReqVO);

    /**
     * 批量新增并上链
     * @param createReqVO 入参
     */
    List<BlockCertificateRespVO> createAndUpChainBatch(BlockCertificateUpChainReqVO createReqVO);

    /**
     * 更新状态
     * @param updateReqVOS 入参
     */
    void updateStatusBatch(List<UpdateStatusReqVO> updateReqVOS);

    /**
     * 上链
     * @param id 区块证书ID
     */
    void upChain(Long id);

}
