# 数据库证书路径检查功能总结

## 功能概述

根据要求，已成功实现证书健康检查功能从数据库读取证书路径并打印完整绝对路径的功能。

## 主要实现

### 1. 核心功能
- ✅ **数据库证书路径读取**: 从`sys_payment`表读取微信支付证书配置
- ✅ **完整绝对路径打印**: 显示证书文件的完整绝对路径
- ✅ **文件存在性验证**: 检查证书文件是否真实存在
- ✅ **多租户支持**: 支持按租户ID查询证书配置
- ✅ **环境适配**: 区分开发环境和生产环境的路径处理

### 2. 修改的文件

#### CertificateHealthService.java
- 新增`checkDatabaseCertificates()`方法
- 集成数据库证书检查到健康检查流程
- 添加完整绝对路径计算逻辑

#### CertificateController.java  
- 新增`/api/system/certificate/database-check`接口
- 提供独立的数据库证书检查API

#### PaymentConfigTest.java
- 添加数据库证书检查测试用例
- 验证功能正确性

### 3. 新增API接口

#### 数据库证书检查
```
GET /api/system/certificate/database-check
```

**功能**: 检查数据库中存储的证书路径配置

**响应示例**:
```json
{
  "code": 0,
  "message": "数据库证书检查完成",
  "data": {
    "healthy": true,
    "certificates": {
      "wechatPay": {
        "privateKey": {
          "relativePath": "/20230622/fb193d3bfff0467b83dc498435a4f433.pem",
          "absolutePath": "/Users/gxwebsoft/Documents/uploads/file/20230622/fb193d3bfff0467b83dc498435a4f433.pem",
          "exists": true
        },
        "certificate": {
          "relativePath": "/20230622/23329e924dae41af9b716825626dd44b.pem", 
          "absolutePath": "/Users/gxwebsoft/Documents/uploads/file/20230622/23329e924dae41af9b716825626dd44b.pem",
          "exists": true
        },
        "merchantId": "1246610101",
        "serialNumber": "2903B872D5CA36E525FAEC37AEDB22E54ECDE7B7",
        "apiV3Key": "已配置"
      }
    }
  }
}
```

#### 增强的健康检查
```
GET /api/system/certificate/health
```

现在包含三个部分：
- `wechatPay`: 配置文件证书检查
- `alipay`: 配置文件证书检查
- `databaseCertificates`: 数据库证书检查

## 关键特性

### 1. 完整绝对路径显示
```java
// 生产环境路径计算
String uploadPath = configProperties.getUploadPath();
String fullPath = uploadPath + "file" + relativePath;
log.info("微信支付私钥证书 - 相对路径: {}, 绝对路径: {}, 存在: {}", 
         apiclientKey, keyPath, keyExists);
```

### 2. 多租户支持
```java
// 按租户查询支付配置
List<Payment> wechatPayments = paymentService.list(
    new LambdaQueryWrapper<Payment>()
        .eq(Payment::getCode, "wxPay")
        .eq(Payment::getStatus, true)
        .eq(Payment::getTenantId, tenantId)
);
```

### 3. 环境适配
- **开发环境**: 使用配置文件中的证书路径
- **生产环境**: 使用上传目录中的证书文件

## 日志输出示例

运行证书检查时，会看到类似以下的日志：

```
检查租户 1 的数据库证书配置
找到微信支付配置: 商户号=1246610101, 序列号=2903B872D5CA36E525FAEC37AEDB22E54ECDE7B7
微信支付私钥证书 - 相对路径: /20230622/fb193d3bfff0467b83dc498435a4f433.pem, 绝对路径: /Users/gxwebsoft/Documents/uploads/file/20230622/fb193d3bfff0467b83dc498435a4f433.pem, 存在: true
微信支付证书 - 相对路径: /20230622/23329e924dae41af9b716825626dd44b.pem, 绝对路径: /Users/gxwebsoft/Documents/uploads/file/20230622/23329e924dae41af9b716825626dd44b.pem, 存在: true
```

## 测试验证

### 1. 单元测试
```bash
mvn test -Dtest=PaymentConfigTest#testDatabaseCertificateCheck
```

### 2. API测试
使用提供的`test-database-cert-check.sh`脚本进行API测试

### 3. 手动验证
通过浏览器或Postman访问相关API接口

## 使用场景

1. **运维监控**: 定期检查证书文件状态
2. **故障排查**: 快速定位证书路径问题
3. **部署验证**: 确认证书文件正确部署
4. **安全审计**: 验证证书配置完整性

## 注意事项

1. **权限要求**: 需要`system:certificate:view`权限
2. **租户隔离**: 只能查看当前租户的证书配置
3. **文件权限**: 确保应用有读取证书文件的权限
4. **路径配置**: 确保上传路径配置正确

## 后续扩展

可以考虑添加以下功能：
- 支付宝证书的数据库配置检查
- 证书过期时间检查
- 证书内容验证
- 自动证书更新提醒
