Files
ycc-proxy-server/deploy/sql/天元API调用记录修改说明.md
2026-01-13 18:30:10 +08:00

160 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 天元API调用记录功能 - 代码修改说明
## 概述
本文档说明如何修改 `apirequestService.go`为每次天元API调用添加记录功能。
## 已完成的修改
### 1. 数据库层面
- ✅ 创建 `tianyuanapi_cost_migration.sql` 脚本
-`feature` 表添加 `cost_price` 字段
- 创建 `tianyuanapi_call_log`
### 2. Service层面
- ✅ 创建 `tianyuanapiCallLogService.go` 服务
- `RecordCall()` - 记录API调用
- `GetStatistics()` - 获取统计信息
### 3. Model层面
- ⏳ 需要执行 `generate_tianyuanapi_models.sh` 生成Model代码
### 4. ApiRequestService修改
- ✅ 添加 `tianyuanapiCallLogService` 字段
- ✅ 修改构造函数,添加 `tianyuanapiCallLogService` 参数
- ✅ 创建 `callTianyuanApiWithLog()` 辅助方法
## 待完成的修改
### 1. 执行SQL脚本
```bash
# 在数据库中执行迁移脚本
mysql -u root -p ycc < ycc-proxy-server/deploy/sql/tianyuanapi_cost_migration.sql
```
### 2. 生成Model代码
```bash
cd ycc-proxy-server/deploy/sql
bash generate_tianyuanapi_models.sh
```
### 3. 更新 servicecontext.go
`svc/servicecontext.go` 中添加:
```go
// 初始化Model
tianyuanapiCallLogModel := model.NewTianyuanapiCallLogModel(db, cacheConf)
// 初始化Service
tianyuanapiCallLogService := service.NewTianyuanapiCallLogService(
tianyuanapiCallLogModel,
featureModel,
)
// 修改ApiRequestService初始化
apiRequestService := service.NewApiRequestService(
c,
featureModel,
productFeatureModel,
userFeatureWhitelistModel,
tianyuanapi,
tianyuanapiCallLogService, // 新增参数
)
// 在ServiceContext结构体中添加字段
TianyuanapiCallLogModel model.TianyuanapiCallLogModel
TianyuanapiCallLogService *service.TianyuanapiCallLogService
// 在返回的ServiceContext中添加
TianyuanapiCallLogModel: tianyuanapiCallLogModel,
TianyuanapiCallLogService: tianyuanapiCallLogService,
```
### 4. 修改API调用方法示例
#### 原代码:
```go
resp, err := a.callTianyuanApiWithLog(ctx, "", "QYGLB4C0", map[string]interface{}{
"id_card": idCard.String(),
})
```
#### 修改后:
```go
resp, err := a.callTianyuanApiWithLog(ctx, featureID, "QYGLB4C0", map[string]interface{}{
"id_card": idCard.String(),
})
```
### 需要修改的方法列表共32个
1. `ProcessPersonEnterpriseProRequest` - 需要修改2处
- 第253行`QYGLB4C0` - 主接口
- 第455行`QYGL8271` - 涉诉信息查询
2. `ProcessFLXG0V4BRequest` - 第586行`FLXG0V4B`
3. `ProcessFLXG0687Request` - 第608行`FLXG0687`
4. `ProcessFLXG3D56Request` - 第638行`FLXG3D56`
5. `ProcessIVYZ5733Request` - 第692行`IVYZ5733`
6. `ProcessIVYZ9A2BRequest` - 第748行`IVYZ9A2B`
7. `ProcessYYSYBE08Request` - 第819行`YYSYBE08`
8. `ProcessJRZQ0A03Request` - 第861行`JRZQ0A03`
9. `ProcessJRZQ8203Request` - 第918行`JRZQ8203`
10. `ProcessJRZQ4AA8Request` - 第975行`JRZQ4AA8`
11. `ProcessQYGL8271Request` - 第1024行`QYGL8271`
12. `ProcessQYGL6F2DRequest` - 第1082行`QYGL6F2D`
13. `ProcessQCXG7A2BRequest` - 第1123行`QCXG7A2B`
14. `ProcessYYSY09CDRequest` - 第1143行`YYSY09CD`
15. `ProcessDWBG8B4DRequest` - 第1254行`DWBG8B4D`
16. `ProcessDWBG6A2CRequest` - 第1279行`DWBG6A2C`
17. `ProcessJRZQ4B6CRequest` - 第1303行`JRZQ4B6C`
18. `ProcessJRZQ09J8Request` - 第1327行`JRZQ09J8`
19. `ProcessJRZQ5E9FRequest` - 第1351行`JRZQ5E9F`
20. `ProcessQYGL3F8ERequest` - 第1373行`QYGL3F8E`
21. `ProcessIVYZ81NCRequest` - 第1393行`IVYZ81NC`
22. `ProcessIVYZ7F3ARequest` - 第1414行`IVYZ7F3A`
23. `ProcessDWBG7F3ARequest` - 第1437行`DWBG7F3A`
24. `ProcessJRZQ8A2DRequest` - 第1460行`JRZQ8A2D`
25. `ProcessYYSY8B1CRequest` - 第1482行`YYSY8B1C`
26. `ProcessYYSY7D3ERequest` - 第1501行`YYSY7D3E`
27. `ProcessFLXG7E8FRequest` - 第1522行`FLXG7E8F`
28. `ProcessIVYZ8I9JRequest` - 第1545行`IVYZ8I9J`
29. `ProcessJRZQ7F1ARequest` - 第1568行`JRZQ7F1A`
30. `ProcessIVYZ3P9MRequest` - 第1591行`IVYZ3P9M`
31. `ProcessJRZQ6F2ARequest` - 第1612行`JRZQ6F2A`
### 注意事项
1. **featureID获取**:每个方法中已经有了 `feature` 对象,直接使用 `feature.Id` 即可
2. **context传递**:需要从方法签名中获取 `ctx context.Context` 参数
3. **错误处理**`callTianyuanApiWithLog` 已经包含了错误处理,无需额外处理
4. **批量修改建议**:可以使用查找替换功能批量修改
- 查找:`a.callTianyuanApiWithLog(ctx, "", "`
- 替换为:`a.callTianyuanApiWithLog(ctx, feature.Id, "`
## 统计功能使用示例
```go
// 获取某个功能在某个时间段的调用统计
filter := StatisticsFilter{
FeatureID: "feature-id-123",
StartDate: time.Now().AddDate(0, 0, -30), // 30天前
EndDate: time.Now(),
}
stats, err := ctx.TianyuanapiCallLogService.GetStatistics(context.Background(), filter)
if err == nil {
fmt.Printf("总调用次数: %d\n", stats.TotalCalls)
fmt.Printf("成功次数: %d\n", stats.SuccessCalls)
fmt.Printf("失败次数: %d\n", stats.FailedCalls)
fmt.Printf("总成本: %.2f元\n", stats.TotalCost)
}
```
## 验证步骤
1. 执行SQL脚本检查表是否创建成功
2. 运行Model生成脚本检查Model文件是否生成
3. 编译项目,检查是否有编译错误
4. 运行项目发起一个API请求
5. 检查 `tianyuanapi_call_log` 表,验证记录是否正确插入
6. 检查成本价是否正确计算成功调用有成本失败调用成本为0