package com.ruoyi.credit.service;

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

import com.ruoyi.credit.domain.ValidationStatistics;

/**
 * 验证统计信息Service接口
 * 
 * @author ruoyi
 * @date 2025-01-12
 */
public interface IValidationStatisticsService 
{
    /**
     * 查询验证统计信息
     * 
     * @param statisticsId 验证统计信息主键
     * @return 验证统计信息
     */
    public ValidationStatistics selectValidationStatisticsById(Long statisticsId);

    /**
     * 根据日期查询验证统计信息
     * 
     * @param statisticsDate 统计日期
     * @return 验证统计信息
     */
    public ValidationStatistics selectValidationStatisticsByDate(Date statisticsDate);

    /**
     * 查询验证统计信息列表
     * 
     * @param validationStatistics 验证统计信息
     * @return 验证统计信息集合
     */
    public List<ValidationStatistics> selectValidationStatisticsList(ValidationStatistics validationStatistics);

    /**
     * 根据日期范围查询验证统计信息列表
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 验证统计信息集合
     */
    public List<ValidationStatistics> selectValidationStatisticsByDateRange(Date startDate, Date endDate);

    /**
     * 新增验证统计信息
     * 
     * @param validationStatistics 验证统计信息
     * @return 结果
     */
    public int insertValidationStatistics(ValidationStatistics validationStatistics);

    /**
     * 修改验证统计信息
     * 
     * @param validationStatistics 验证统计信息
     * @return 结果
     */
    public int updateValidationStatistics(ValidationStatistics validationStatistics);

    /**
     * 批量删除验证统计信息
     * 
     * @param statisticsIds 需要删除的验证统计信息主键集合
     * @return 结果
     */
    public int deleteValidationStatisticsByIds(Long[] statisticsIds);

    /**
     * 删除验证统计信息信息
     * 
     * @param statisticsId 验证统计信息主键
     * @return 结果
     */
    public int deleteValidationStatisticsById(Long statisticsId);

    /**
     * 保存或更新验证统计信息（根据日期）
     * 
     * @param validationStatistics 验证统计信息
     * @return 结果
     */
    public int saveOrUpdateValidationStatistics(ValidationStatistics validationStatistics);

    /**
     * 记录验证结果并更新统计信息
     * 
     * @param date 验证日期
     * @param passed 是否通过验证
     * @param validationTime 验证耗时（毫秒）
     * @param cacheHit 是否命中缓存
     * @param failureReason 失败原因（如果验证失败）
     */
    public void recordValidationResult(Date date, boolean passed, long validationTime, boolean cacheHit, String failureReason);

    /**
     * 获取今日验证统计信息
     * 
     * @return 今日验证统计信息
     */
    public ValidationStatistics getTodayStatistics();

    /**
     * 获取最新的统计记录
     * 
     * @param limit 限制数量
     * @return 验证统计信息集合
     */
    public List<ValidationStatistics> getLatestStatistics(int limit);

    /**
     * 计算并更新统计信息
     * 
     * @param date 统计日期
     * @return 更新后的统计信息
     */
    public ValidationStatistics calculateAndUpdateStatistics(Date date);
}