From 5f0224ad3b7aea6113ac7d0c91a720245f3a5d36 Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Wed, 25 Mar 2026 15:03:45 +0800 Subject: [PATCH] f --- .../external/shujubao/shujubao_errors.go | 11 +++++++++ .../external/shujubao/shujubao_service.go | 24 ++++++++++++++----- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/internal/infrastructure/external/shujubao/shujubao_errors.go b/internal/infrastructure/external/shujubao/shujubao_errors.go index cd5fc94..6368b4c 100644 --- a/internal/infrastructure/external/shujubao/shujubao_errors.go +++ b/internal/infrastructure/external/shujubao/shujubao_errors.go @@ -4,6 +4,17 @@ import ( "fmt" ) +// GetQueryEmptyErrByCode 将数据宝错误码归类为“查询为空/不扣费”错误。 +// 说明:上游通常依赖 errors.Is(err, ErrQueryEmpty) 来决定是否扣费。 +func GetQueryEmptyErrByCode(code string) error { + switch code { + case "10001", "10006": + return ErrQueryEmpty + default: + return nil + } +} + // ShujubaoError 数据宝服务错误 type ShujubaoError struct { Code string `json:"code"` diff --git a/internal/infrastructure/external/shujubao/shujubao_service.go b/internal/infrastructure/external/shujubao/shujubao_service.go index 86afebc..d19f9c7 100644 --- a/internal/infrastructure/external/shujubao/shujubao_service.go +++ b/internal/infrastructure/external/shujubao/shujubao_service.go @@ -292,14 +292,26 @@ func (s *ShujubaoService) CallAPI(ctx context.Context, apiPath string, params ma } code := shujubaoResp.Code - if code == "10001" || code == "10006" { - // 查空/查无:返回空数组,不视为错误 - return []interface{}{}, nil - } - if code != "10000" { + + // 成功码只有这三类:其它 code 都走统一错误映射返回 + if code != "10000" && code != "200" && code != "0" { + // 将上游失败返回码单独记录到日志参数中,便于排查与统计 + logParams := paramsForLog(params) + if logParams == nil { + logParams = map[string]interface{}{} + } + logParams["shujubao_return_code"] = code + shujubaoErr := NewShujubaoErrorFromCode(code, shujubaoResp.Message) + if queryEmptyErr := GetQueryEmptyErrByCode(code); queryEmptyErr != nil { + err = errors.Join(queryEmptyErr, shujubaoErr) + if s.logger != nil { + s.logger.LogError(requestID, transactionID, apiPath, err, logParams) + } + return nil, err + } if s.logger != nil { - s.logger.LogError(requestID, transactionID, apiPath, shujubaoErr, paramsForLog(params)) + s.logger.LogError(requestID, transactionID, apiPath, shujubaoErr, logParams) } return nil, errors.Join(ErrDatasource, shujubaoErr) }