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

5.4 KiB
Raw Blame History

天元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个

  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, "

统计功能使用示例

// 获取某个功能在某个时间段的调用统计
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