# 验证规则配置管理使用说明

## 概述

验证规则配置管理功能提供了灵活的规则配置机制，支持从配置文件和数据库加载验证规则，并提供热更新和配置有效性验证功能。

## 功能特性

### 1. 配置文件加载
- 支持从JSON配置文件加载验证规则
- 配置文件路径可通过 `credit.validation.rules.config-file` 属性配置
- 默认配置文件：`classpath:validation-rules.json`

### 2. 数据库集成
- 支持从数据库表 `dc_validation_rule` 加载验证规则
- 数据库中的规则优先级高于配置文件中的同名规则
- 支持将配置文件中的规则同步到数据库

### 3. 热更新机制
- 支持定时检查配置文件变化并自动重新加载
- 支持文件系统监听，实时响应配置文件变化
- 支持手动触发配置重新加载

### 4. 配置有效性验证
- 规则名称唯一性检查
- 规则类型有效性验证
- 优先级冲突检查
- 必填字段验证

### 5. 缓存管理
- 内存缓存提高查询性能
- 按类型分组索引
- 按优先级排序的激活规则列表

## 配置说明

### 应用配置 (application.yml)

```yaml
credit:
  validation:
    rules:
      # 配置文件路径
      config-file: classpath:validation-rules.json
      # 热更新配置
      hot-reload:
        enabled: true
        interval: 30
        max-retries: 3
        retry-interval: 5
      # 文件监听配置
      file-watch:
        enabled: true
        delay: 1000
        recursive: false
      # 缓存配置
      cache:
        enabled: true
        expire-time: 300
        max-size: 1000
        preload: true
```

### 规则配置文件格式 (validation-rules.json)

```json
{
  "version": "1.0.0",
  "description": "贷款管理一致性验证规则配置",
  "rules": [
    {
      "ruleName": "credit_existence_check",
      "ruleType": "CREDIT_EXISTENCE",
      "ruleExpression": "credit != null && credit.id != null",
      "priority": 1,
      "ruleStatus": "ACTIVE",
      "description": "验证债权凭证是否存在",
      "configJson": "{\"checkFields\": [\"id\", \"status\"], \"allowNull\": false}"
    }
  ]
}
```

## 规则类型

支持以下规则类型：

- `CREDIT_EXISTENCE`: 债权凭证存在性验证
- `CREDIT_VALIDITY`: 债权凭证有效性验证
- `CONTRACT_MATCH`: 合同匹配验证
- `AMOUNT_CONSISTENCY`: 金额一致性验证
- `DATE_CONSISTENCY`: 日期一致性验证
- `STATUS_VALIDATION`: 状态验证
- `CUSTOM`: 自定义规则

## 规则状态

支持以下规则状态：

- `ACTIVE`: 激活状态
- `INACTIVE`: 非激活状态
- `DRAFT`: 草稿状态
- `DEPRECATED`: 已废弃状态

## API接口

### 基础查询接口

```http
# 查询所有验证规则
GET /credit/validation-rules/list

# 查询激活的验证规则
GET /credit/validation-rules/active

# 根据类型查询规则
GET /credit/validation-rules/type/{ruleType}

# 根据ID查询规则
GET /credit/validation-rules/{ruleId}

# 根据名称查询规则
GET /credit/validation-rules/name/{ruleName}
```

### 管理接口

```http
# 新增验证规则
POST /credit/validation-rules

# 修改验证规则
PUT /credit/validation-rules

# 删除验证规则
DELETE /credit/validation-rules/{ruleIds}

# 批量更新规则状态
PUT /credit/validation-rules/status/{ruleStatus}
```

### 配置管理接口

```http
# 重新加载配置
POST /credit/validation-rules/reload

# 验证规则配置
POST /credit/validation-rules/validate

# 检查规则名称
GET /credit/validation-rules/check-name/{ruleName}

# 获取下一个优先级
GET /credit/validation-rules/next-priority

# 获取配置信息
GET /credit/validation-rules/config-info
```

## 使用示例

### 1. 程序化使用

```java
@Autowired
private ValidationRuleConfig validationRuleConfig;

// 获取所有激活规则
List<ValidationRule> activeRules = validationRuleConfig.getActiveRules();

// 根据名称获取规则
ValidationRule rule = validationRuleConfig.getRuleByName("credit_existence_check");

// 根据类型获取规则
List<ValidationRule> creditRules = validationRuleConfig.getRulesByType("CREDIT_EXISTENCE");

// 手动重新加载配置
validationRuleConfig.reloadConfig();
```

### 2. 服务层使用

```java
@Autowired
private IValidationRuleService validationRuleService;

// 新增规则
ValidationRule newRule = new ValidationRule();
newRule.setRuleName("new_rule");
newRule.setRuleType("CREDIT_VALIDITY");
newRule.setRuleExpression("credit.status == 'VALID'");
validationRuleService.insertValidationRule(newRule);

// 验证规则配置
String validationMessage = validationRuleService.validateRuleConfiguration(newRule);
if (validationMessage != null) {
    // 处理验证失败
}
```

## 最佳实践

### 1. 规则命名
- 使用有意义的规则名称
- 采用下划线分隔的命名方式
- 避免使用特殊字符

### 2. 优先级设置
- 重要规则设置较低的优先级数值（优先执行）
- 预留优先级间隔，便于后续插入新规则
- 使用 `getNextAvailablePriority()` 自动分配优先级

### 3. 规则表达式
- 保持表达式简洁明了
- 避免过于复杂的逻辑
- 考虑性能影响

### 4. 配置管理
- 定期备份配置文件
- 在生产环境中谨慎使用热更新
- 测试环境验证规则后再部署到生产环境

## 监控和日志

系统会记录以下关键事件：

- 配置文件加载成功/失败
- 规则验证通过/失败
- 热更新触发
- 缓存重建
- 规则执行异常

日志级别可通过以下配置调整：

```yaml
logging:
  level:
    com.ruoyi.credit.config.ValidationRuleConfig: INFO
    com.ruoyi.credit.service.impl.ValidationRuleServiceImpl: INFO
```

## 故障排除

### 常见问题

1. **配置文件加载失败**
   - 检查文件路径是否正确
   - 确认文件格式是否为有效JSON
   - 验证文件权限

2. **规则验证失败**
   - 检查规则名称是否唯一
   - 确认规则类型是否有效
   - 验证必填字段是否完整

3. **热更新不生效**
   - 确认热更新功能已启用
   - 检查文件监听权限
   - 查看相关日志信息

4. **性能问题**
   - 检查规则数量是否过多
   - 优化规则表达式复杂度
   - 调整缓存配置