package com.ruoyi.credit.mapper;

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

import org.apache.ibatis.annotations.Param;

import com.ruoyi.credit.domain.ValidationLog;

/**
 * 验证日志Mapper接口
 * 
 * @author ruoyi
 * @date 2025-12-31
 */
public interface ValidationLogMapper 
{
    /**
     * 查询验证日志
     * 
     * @param logId 验证日志主键
     * @return 验证日志
     */
    public ValidationLog selectValidationLogByLogId(Long logId);

    /**
     * 查询验证日志列表
     * 
     * @param validationLog 验证日志
     * @return 验证日志集合
     */
    public List<ValidationLog> selectValidationLogList(ValidationLog validationLog);

    /**
     * 根据验证记录ID查询日志
     * 
     * @param validationId 验证记录ID
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByValidationId(Long validationId);

    /**
     * 根据贷款ID查询日志
     * 
     * @param loanId 贷款ID
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByLoanId(Long loanId);

    /**
     * 根据时间范围查询日志
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByTimeRange(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据日志级别查询日志
     * 
     * @param logLevel 日志级别
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByLevel(String logLevel);

    /**
     * 根据日志类型查询日志
     * 
     * @param logType 日志类型
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByType(String logType);

    /**
     * 根据时间范围和日志级别查询日志
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param logLevel 日志级别
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByTimeRangeAndLevel(@Param("startTime") Date startTime, 
                                                           @Param("endTime") Date endTime, 
                                                           @Param("logLevel") String logLevel);

    /**
     * 根据时间范围和日志类型查询日志
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param logType 日志类型
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByTimeRangeAndType(@Param("startTime") Date startTime, 
                                                          @Param("endTime") Date endTime, 
                                                          @Param("logType") String logType);

    /**
     * 根据操作用户查询日志
     * 
     * @param operatorUser 操作用户
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByOperatorUser(String operatorUser);

    /**
     * 根据执行步骤查询日志
     * 
     * @param executionStep 执行步骤
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByExecutionStep(String executionStep);

    /**
     * 查询异常日志
     * 
     * @return 验证日志集合
     */
    public List<ValidationLog> selectExceptionLogs();

    /**
     * 查询性能警告日志
     * 
     * @param minDuration 最小执行时长
     * @return 验证日志集合
     */
    public List<ValidationLog> selectPerformanceWarningLogs(@Param("minDuration") Long minDuration);

    /**
     * 新增验证日志
     * 
     * @param validationLog 验证日志
     * @return 结果
     */
    public int insertValidationLog(ValidationLog validationLog);

    /**
     * 批量新增验证日志
     * 
     * @param validationLogs 验证日志列表
     * @return 结果
     */
    public int batchInsertValidationLog(List<ValidationLog> validationLogs);

    /**
     * 修改验证日志
     * 
     * @param validationLog 验证日志
     * @return 结果
     */
    public int updateValidationLog(ValidationLog validationLog);

    /**
     * 删除验证日志
     * 
     * @param logId 验证日志主键
     * @return 结果
     */
    public int deleteValidationLogByLogId(Long logId);

    /**
     * 批量删除验证日志
     * 
     * @param logIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteValidationLogByLogIds(Long[] logIds);

    /**
     * 根据验证记录ID删除日志
     * 
     * @param validationId 验证记录ID
     * @return 结果
     */
    public int deleteLogsByValidationId(Long validationId);

    /**
     * 根据贷款ID删除日志
     * 
     * @param loanId 贷款ID
     * @return 结果
     */
    public int deleteLogsByLoanId(Long loanId);

    /**
     * 根据时间范围删除日志
     * 
     * @param endTime 结束时间
     * @return 结果
     */
    public int deleteLogsByTimeRange(@Param("endTime") Date endTime);

    /**
     * 统计日志数量
     * 
     * @param validationLog 查询条件
     * @return 日志数量
     */
    public int countValidationLogs(ValidationLog validationLog);

    /**
     * 统计各级别日志数量
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> countLogsByLevel(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 统计各类型日志数量
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> countLogsByType(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
}