package com.ruoyi.blockchain.mapper;

import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.blockchain.domain.HashMapping;

/**
 * 哈希映射Mapper接口
 * 
 * @author ruoyi
 * @date 2025-12-17
 */
public interface HashMappingMapper 
{
    /**
     * 查询哈希映射
     * 
     * @param mappingId 哈希映射主键
     * @return 哈希映射
     */
    public HashMapping selectHashMappingByMappingId(Long mappingId);

    /**
     * 根据业务类型和业务ID查询哈希映射
     * 
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @return 哈希映射
     */
    public HashMapping selectHashMappingByBusiness(@Param("businessType") String businessType, @Param("businessId") Long businessId);

    /**
     * 根据数据哈希查询哈希映射
     * 
     * @param dataHash 数据哈希
     * @return 哈希映射
     */
    public HashMapping selectHashMappingByDataHash(String dataHash);

    /**
     * 根据区块链哈希查询哈希映射
     * 
     * @param blockchainHash 区块链哈希
     * @return 哈希映射
     */
    public HashMapping selectHashMappingByBlockchainHash(String blockchainHash);

    /**
     * 查询哈希映射列表
     * 
     * @param hashMapping 哈希映射
     * @return 哈希映射集合
     */
    public List<HashMapping> selectHashMappingList(HashMapping hashMapping);

    /**
     * 根据业务类型查询哈希映射
     * 
     * @param businessType 业务类型
     * @return 哈希映射集合
     */
    public List<HashMapping> selectHashMappingByBusinessType(String businessType);

    /**
     * 根据哈希算法查询哈希映射
     * 
     * @param hashAlgorithm 哈希算法
     * @return 哈希映射集合
     */
    public List<HashMapping> selectHashMappingByHashAlgorithm(String hashAlgorithm);

    /**
     * 根据验证状态查询哈希映射
     * 
     * @param verifyStatus 验证状态
     * @return 哈希映射集合
     */
    public List<HashMapping> selectHashMappingByVerifyStatus(String verifyStatus);

    /**
     * 根据时间范围查询哈希映射
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 哈希映射集合
     */
    public List<HashMapping> selectHashMappingByDateRange(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询待验证的哈希映射
     * 
     * @return 哈希映射集合
     */
    public List<HashMapping> selectPendingVerifyMappings();

    /**
     * 统计映射数量按业务类型分组
     * 
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> selectMappingCountByBusinessType();

    /**
     * 统计映射数量按验证状态分组
     * 
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> selectMappingCountByVerifyStatus();

    /**
     * 统计映射数量按哈希算法分组
     * 
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> selectMappingCountByHashAlgorithm();

    /**
     * 新增哈希映射
     * 
     * @param hashMapping 哈希映射
     * @return 结果
     */
    public int insertHashMapping(HashMapping hashMapping);

    /**
     * 修改哈希映射
     * 
     * @param hashMapping 哈希映射
     * @return 结果
     */
    public int updateHashMapping(HashMapping hashMapping);

    /**
     * 更新验证状态
     * 
     * @param mappingId 映射ID
     * @param verifyStatus 验证状态
     * @param verifyTime 验证时间
     * @return 结果
     */
    public int updateVerifyStatus(@Param("mappingId") Long mappingId, 
                                  @Param("verifyStatus") String verifyStatus,
                                  @Param("verifyTime") Date verifyTime);

    /**
     * 删除哈希映射
     * 
     * @param mappingId 哈希映射主键
     * @return 结果
     */
    public int deleteHashMappingByMappingId(Long mappingId);

    /**
     * 根据业务删除哈希映射
     * 
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @return 结果
     */
    public int deleteHashMappingByBusiness(@Param("businessType") String businessType, @Param("businessId") Long businessId);

    /**
     * 批量删除哈希映射
     * 
     * @param mappingIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHashMappingByMappingIds(Long[] mappingIds);

    /**
     * 校验数据哈希是否唯一
     * 
     * @param dataHash 数据哈希
     * @return 结果
     */
    public HashMapping checkDataHashUnique(String dataHash);

    /**
     * 验证哈希完整性
     * 
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @param dataHash 数据哈希
     * @return 验证结果
     */
    public boolean verifyHashIntegrity(@Param("businessType") String businessType, @Param("businessId") Long businessId, @Param("dataHash") String dataHash);
}