package com.ruoyi.blockchain.mapper;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ruoyi.blockchain.domain.OracleData;

/**
 * Oracle数据Mapper接口
 * 
 * @author ruoyi
 * @date 2025-12-19
 */
public interface OracleDataMapper {
    
    /**
     * 查询Oracle数据
     * 
     * @param oracleDataId Oracle数据主键
     * @return Oracle数据
     */
    public OracleData selectOracleDataByOracleDataId(Long oracleDataId);

    /**
     * 根据Oracle名称查询Oracle数据
     * 
     * @param oracleName Oracle名称
     * @return Oracle数据列表
     */
    public List<OracleData> selectOracleDataByOracleName(String oracleName);

    /**
     * 根据Oracle名称和数据键查询Oracle数据
     * 
     * @param oracleName Oracle名称
     * @param dataKey 数据键
     * @return Oracle数据
     */
    public OracleData selectOracleDataByNameAndKey(@Param("oracleName") String oracleName, @Param("dataKey") String dataKey);

    /**
     * 根据Oracle地址查询Oracle数据
     * 
     * @param oracleAddress Oracle地址
     * @return Oracle数据列表
     */
    public List<OracleData> selectOracleDataByOracleAddress(String oracleAddress);

    /**
     * 根据数据类型查询Oracle数据
     * 
     * @param dataType 数据类型
     * @return Oracle数据列表
     */
    public List<OracleData> selectOracleDataByDataType(String dataType);

    /**
     * 根据Oracle状态查询Oracle数据
     * 
     * @param oracleStatus Oracle状态
     * @return Oracle数据列表
     */
    public List<OracleData> selectOracleDataByOracleStatus(String oracleStatus);

    /**
     * 根据验证状态查询Oracle数据
     * 
     * @param validationStatus 验证状态
     * @return Oracle数据列表
     */
    public List<OracleData> selectOracleDataByValidationStatus(String validationStatus);

    /**
     * 查询需要更新的Oracle数据
     * 
     * @return Oracle数据列表
     */
    public List<OracleData> selectOracleDataForUpdate();

    /**
     * 查询活跃的Oracle数据
     * 
     * @return Oracle数据列表
     */
    public List<OracleData> selectActiveOracleData();

    /**
     * 查询Oracle数据列表
     * 
     * @param oracleData Oracle数据
     * @return Oracle数据集合
     */
    public List<OracleData> selectOracleDataList(OracleData oracleData);

    /**
     * 新增Oracle数据
     * 
     * @param oracleData Oracle数据
     * @return 结果
     */
    public int insertOracleData(OracleData oracleData);

    /**
     * 修改Oracle数据
     * 
     * @param oracleData Oracle数据
     * @return 结果
     */
    public int updateOracleData(OracleData oracleData);

    /**
     * 更新Oracle数据值
     * 
     * @param oracleDataId Oracle数据ID
     * @param dataValue 数据值
     * @param dataSignature 数据签名
     * @param lastUpdateTime 最后更新时间
     * @return 结果
     */
    public int updateOracleDataValue(@Param("oracleDataId") Long oracleDataId, 
                                     @Param("dataValue") String dataValue,
                                     @Param("dataSignature") String dataSignature,
                                     @Param("lastUpdateTime") Date lastUpdateTime);

    /**
     * 更新Oracle状态
     * 
     * @param oracleDataId Oracle数据ID
     * @param oracleStatus Oracle状态
     * @return 结果
     */
    public int updateOracleStatus(@Param("oracleDataId") Long oracleDataId, @Param("oracleStatus") String oracleStatus);

    /**
     * 更新验证状态
     * 
     * @param oracleDataId Oracle数据ID
     * @param validationStatus 验证状态
     * @return 结果
     */
    public int updateValidationStatus(@Param("oracleDataId") Long oracleDataId, @Param("validationStatus") String validationStatus);

    /**
     * 删除Oracle数据
     * 
     * @param oracleDataId Oracle数据主键
     * @return 结果
     */
    public int deleteOracleDataByOracleDataId(Long oracleDataId);

    /**
     * 批量删除Oracle数据
     * 
     * @param oracleDataIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteOracleDataByOracleDataIds(Long[] oracleDataIds);

    /**
     * 根据Oracle名称删除Oracle数据
     * 
     * @param oracleName Oracle名称
     * @return 结果
     */
    public int deleteOracleDataByOracleName(String oracleName);

    /**
     * 校验Oracle名称和数据键组合是否唯一
     * 
     * @param oracleName Oracle名称
     * @param dataKey 数据键
     * @return 结果
     */
    public OracleData checkOracleDataUnique(@Param("oracleName") String oracleName, @Param("dataKey") String dataKey);
}