5.4 KiB
天元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脚本
# 在数据库中执行迁移脚本
mysql -u root -p ycc < ycc-proxy-server/deploy/sql/tianyuanapi_cost_migration.sql
2. 生成Model代码
cd ycc-proxy-server/deploy/sql
bash generate_tianyuanapi_models.sh
3. 更新 servicecontext.go
在 svc/servicecontext.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调用方法示例
原代码:
resp, err := a.callTianyuanApiWithLog(ctx, "", "QYGLB4C0", map[string]interface{}{
"id_card": idCard.String(),
})
修改后:
resp, err := a.callTianyuanApiWithLog(ctx, featureID, "QYGLB4C0", map[string]interface{}{
"id_card": idCard.String(),
})
需要修改的方法列表(共32个)
-
ProcessPersonEnterpriseProRequest- 需要修改2处- 第253行:
QYGLB4C0- 主接口 - 第455行:
QYGL8271- 涉诉信息查询
- 第253行:
-
ProcessFLXG0V4BRequest- 第586行:FLXG0V4B -
ProcessFLXG0687Request- 第608行:FLXG0687 -
ProcessFLXG3D56Request- 第638行:FLXG3D56 -
ProcessIVYZ5733Request- 第692行:IVYZ5733 -
ProcessIVYZ9A2BRequest- 第748行:IVYZ9A2B -
ProcessYYSYBE08Request- 第819行:YYSYBE08 -
ProcessJRZQ0A03Request- 第861行:JRZQ0A03 -
ProcessJRZQ8203Request- 第918行:JRZQ8203 -
ProcessJRZQ4AA8Request- 第975行:JRZQ4AA8 -
ProcessQYGL8271Request- 第1024行:QYGL8271 -
ProcessQYGL6F2DRequest- 第1082行:QYGL6F2D -
ProcessQCXG7A2BRequest- 第1123行:QCXG7A2B -
ProcessYYSY09CDRequest- 第1143行:YYSY09CD -
ProcessDWBG8B4DRequest- 第1254行:DWBG8B4D -
ProcessDWBG6A2CRequest- 第1279行:DWBG6A2C -
ProcessJRZQ4B6CRequest- 第1303行:JRZQ4B6C -
ProcessJRZQ09J8Request- 第1327行:JRZQ09J8 -
ProcessJRZQ5E9FRequest- 第1351行:JRZQ5E9F -
ProcessQYGL3F8ERequest- 第1373行:QYGL3F8E -
ProcessIVYZ81NCRequest- 第1393行:IVYZ81NC -
ProcessIVYZ7F3ARequest- 第1414行:IVYZ7F3A -
ProcessDWBG7F3ARequest- 第1437行:DWBG7F3A -
ProcessJRZQ8A2DRequest- 第1460行:JRZQ8A2D -
ProcessYYSY8B1CRequest- 第1482行:YYSY8B1C -
ProcessYYSY7D3ERequest- 第1501行:YYSY7D3E -
ProcessFLXG7E8FRequest- 第1522行:FLXG7E8F -
ProcessIVYZ8I9JRequest- 第1545行:IVYZ8I9J -
ProcessJRZQ7F1ARequest- 第1568行:JRZQ7F1A -
ProcessIVYZ3P9MRequest- 第1591行:IVYZ3P9M -
ProcessJRZQ6F2ARequest- 第1612行:JRZQ6F2A
注意事项
- featureID获取:每个方法中已经有了
feature对象,直接使用feature.Id即可 - context传递:需要从方法签名中获取
ctx context.Context参数 - 错误处理:
callTianyuanApiWithLog已经包含了错误处理,无需额外处理 - 批量修改建议:可以使用查找替换功能批量修改
- 查找:
a.callTianyuanApiWithLog(ctx, "", " - 替换为:
a.callTianyuanApiWithLog(ctx, feature.Id, "
- 查找:
统计功能使用示例
// 获取某个功能在某个时间段的调用统计
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)
}
验证步骤
- 执行SQL脚本,检查表是否创建成功
- 运行Model生成脚本,检查Model文件是否生成
- 编译项目,检查是否有编译错误
- 运行项目,发起一个API请求
- 检查
tianyuanapi_call_log表,验证记录是否正确插入 - 检查成本价是否正确计算(成功调用有成本,失败调用成本为0)