f
This commit is contained in:
159
deploy/sql/天元API调用记录修改说明.md
Normal file
159
deploy/sql/天元API调用记录修改说明.md
Normal file
@@ -0,0 +1,159 @@
|
||||
# 天元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)
|
||||
|
||||
Reference in New Issue
Block a user