package com.ruoyi.credit.mapper;

import java.util.List;
import com.ruoyi.credit.domain.ValidationRule;
import org.apache.ibatis.annotations.Param;

/**
 * 验证规则配置Mapper接口
 * 
 * @author ruoyi
 * @date 2025-12-30
 */
public interface ValidationRuleMapper 
{
    /**
     * 查询验证规则配置
     * 
     * @param ruleId 验证规则配置主键
     * @return 验证规则配置
     */
    public ValidationRule selectValidationRuleByRuleId(Long ruleId);

    /**
     * 根据规则名称查询验证规则
     * 
     * @param ruleName 规则名称
     * @return 验证规则配置
     */
    public ValidationRule selectValidationRuleByRuleName(String ruleName);

    /**
     * 查询验证规则配置列表
     * 
     * @param validationRule 验证规则配置
     * @return 验证规则配置集合
     */
    public List<ValidationRule> selectValidationRuleList(ValidationRule validationRule);

    /**
     * 查询激活状态的验证规则列表（按优先级排序）
     * 
     * @return 激活的验证规则集合
     */
    public List<ValidationRule> selectActiveValidationRules();

    /**
     * 根据规则类型查询验证规则
     * 
     * @param ruleType 规则类型
     * @return 验证规则集合
     */
    public List<ValidationRule> selectValidationRulesByType(@Param("ruleType") String ruleType);

    /**
     * 根据规则状态查询验证规则
     * 
     * @param ruleStatus 规则状态
     * @return 验证规则集合
     */
    public List<ValidationRule> selectValidationRulesByStatus(@Param("ruleStatus") String ruleStatus);

    /**
     * 根据优先级范围查询验证规则
     * 
     * @param minPriority 最小优先级
     * @param maxPriority 最大优先级
     * @return 验证规则集合
     */
    public List<ValidationRule> selectValidationRulesByPriorityRange(@Param("minPriority") Integer minPriority, @Param("maxPriority") Integer maxPriority);

    /**
     * 查询指定创建人的验证规则
     * 
     * @param createdBy 创建人
     * @return 验证规则集合
     */
    public List<ValidationRule> selectValidationRulesByCreatedBy(@Param("createdBy") String createdBy);

    /**
     * 检查规则名称是否已存在
     * 
     * @param ruleName 规则名称
     * @param excludeRuleId 排除的规则ID（用于更新时检查）
     * @return 存在的规则数量
     */
    public int checkRuleNameExists(@Param("ruleName") String ruleName, @Param("excludeRuleId") Long excludeRuleId);

    /**
     * 获取下一个可用的优先级值
     * 
     * @return 下一个优先级值
     */
    public Integer getNextAvailablePriority();

    /**
     * 统计各状态的规则数量
     * 
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> countRulesByStatus();

    /**
     * 新增验证规则配置
     * 
     * @param validationRule 验证规则配置
     * @return 结果
     */
    public int insertValidationRule(ValidationRule validationRule);

    /**
     * 批量新增验证规则配置
     * 
     * @param ruleList 验证规则列表
     * @return 结果
     */
    public int batchInsertValidationRules(@Param("ruleList") List<ValidationRule> ruleList);

    /**
     * 修改验证规则配置
     * 
     * @param validationRule 验证规则配置
     * @return 结果
     */
    public int updateValidationRule(ValidationRule validationRule);

    /**
     * 批量更新规则状态
     * 
     * @param ruleIds 规则ID列表
     * @param ruleStatus 新状态
     * @return 结果
     */
    public int batchUpdateRuleStatus(@Param("ruleIds") List<Long> ruleIds, @Param("ruleStatus") String ruleStatus);

    /**
     * 更新规则优先级
     * 
     * @param ruleId 规则ID
     * @param priority 新优先级
     * @return 结果
     */
    public int updateRulePriority(@Param("ruleId") Long ruleId, @Param("priority") Integer priority);

    /**
     * 删除验证规则配置
     * 
     * @param ruleId 验证规则配置主键
     * @return 结果
     */
    public int deleteValidationRuleByRuleId(Long ruleId);

    /**
     * 批量删除验证规则配置
     * 
     * @param ruleIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteValidationRuleByRuleIds(Long[] ruleIds);

    /**
     * 删除指定状态的规则（用于清理废弃规则）
     * 
     * @param ruleStatus 规则状态
     * @return 结果
     */
    public int deleteValidationRulesByStatus(@Param("ruleStatus") String ruleStatus);
}