From f4ad8eac516b17d16f9968ae61c5689858fdfb91 Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Wed, 6 Aug 2025 21:29:35 +0800 Subject: [PATCH] fix --- .../api/internal/service/apirequestService.go | 179 ++++++------------ pkg/lzkit/lzUtils/json.go | 23 ++- 2 files changed, 80 insertions(+), 122 deletions(-) diff --git a/app/main/api/internal/service/apirequestService.go b/app/main/api/internal/service/apirequestService.go index 27c6525..cf95306 100644 --- a/app/main/api/internal/service/apirequestService.go +++ b/app/main/api/internal/service/apirequestService.go @@ -19,7 +19,6 @@ import ( "tyc-server/pkg/lzkit/lzUtils" "github.com/Masterminds/squirrel" - "github.com/bytedance/sonic" "github.com/tidwall/gjson" "github.com/zeromicro/go-zero/core/logx" ) @@ -1275,29 +1274,28 @@ func (a *ApiRequestService) ProcessG37SC01Request(ctx context.Context, params [] request := map[string]interface{}{ "data": map[string]interface{}{ - "name": a.westDexService.Encrypt(name.String()), - "idcard": a.westDexService.Encrypt(idCard.String()), + "name": a.westDexService.Encrypt(name.String()), + "idcard": a.westDexService.Encrypt(idCard.String()), + "auth_authorizeFileCode": a.westDexService.Encrypt("CON0120250730743901"), }, } resp, callApiErr := a.westDexService.CallAPI("G37SC01", request) if callApiErr != nil { return nil, callApiErr } - // 第一步:提取外层的 data 字段 - dataResult := gjson.GetBytes(resp, "data") - if !dataResult.Exists() { - return nil, fmt.Errorf("外层 data 字段不存在") + parseResult, parseErr := lzUtils.ParseJsonResponse(resp) + if parseErr != nil { + return nil, parseErr } - - // 解析 data 字符串为 JSON 对象 - parsedData := gjson.Parse(dataResult.String()) - sxbzxr := parsedData.Get("sxbzxr") - if !sxbzxr.Exists() { - return nil, fmt.Errorf("内层 sxbzxr 字段不存在") + // 通过gjson获取指定路径的数据 + contentResult := gjson.GetBytes(parseResult, "G37SC0101.G37SC0102.content") + if contentResult.Exists() { + return &APIInternalResult{ + Data: []byte(contentResult.Raw), + }, nil + } else { + return nil, fmt.Errorf("找不到数据") } - return &APIInternalResult{ - Data: []byte(sxbzxr.Raw), - }, nil } // G36SC01 自然人限高信息 @@ -1311,29 +1309,28 @@ func (a *ApiRequestService) ProcessG36SC01Request(ctx context.Context, params [] request := map[string]interface{}{ "data": map[string]interface{}{ - "name": a.westDexService.Encrypt(name.String()), - "idcard": a.westDexService.Encrypt(idCard.String()), + "name": a.westDexService.Encrypt(name.String()), + "idcard": a.westDexService.Encrypt(idCard.String()), + "auth_authorizeFileCode": a.westDexService.Encrypt("CON0120250730743901"), }, } resp, callApiErr := a.westDexService.CallAPI("G36SC01", request) if callApiErr != nil { return nil, callApiErr } - // 第一步:提取外层的 data 字段 - dataResult := gjson.GetBytes(resp, "data") - if !dataResult.Exists() { - return nil, fmt.Errorf("外层 data 字段不存在") + parseResult, parseErr := lzUtils.ParseJsonResponse(resp) + if parseErr != nil { + return nil, parseErr } - - // 解析 data 字符串为 JSON 对象 - parsedData := gjson.Parse(dataResult.String()) - xgbzxr := parsedData.Get("xgbzxr") - if !xgbzxr.Exists() { - return nil, fmt.Errorf("内层 xgbzxr 字段不存在") + // 通过gjson获取指定路径的数据 + contentResult := gjson.GetBytes(parseResult, "G36SC0101.G36SC0102.content") + if contentResult.Exists() { + return &APIInternalResult{ + Data: []byte(contentResult.Raw), + }, nil + } else { + return nil, fmt.Errorf("找不到数据") } - return &APIInternalResult{ - Data: []byte(xgbzxr.Raw), - }, nil } // G22SC01 自然人司法模型 @@ -1347,32 +1344,30 @@ func (a *ApiRequestService) ProcessG22SC01Request(ctx context.Context, params [] request := map[string]interface{}{ "data": map[string]interface{}{ - "name": a.westDexService.Encrypt(name.String()), - "idcard": a.westDexService.Encrypt(idCard.String()), - "inquired_auth": a.westDexService.GetDateRange(), + "name": a.westDexService.Encrypt(name.String()), + "idcard": a.westDexService.Encrypt(idCard.String()), + "auth_authorizeFileCode": a.westDexService.Encrypt("CON0120250730743901"), + "inquired_auth": fmt.Sprintf("authed:%s", a.westDexService.GetDateRange()), }, } resp, callApiErr := a.westDexService.CallAPI("G22SC01", request) if callApiErr != nil { return nil, callApiErr } - // 第一步:提取外层的 data 字段 - dataResult := gjson.GetBytes(resp, "data") - if !dataResult.Exists() { - return nil, fmt.Errorf("外层 data 字段不存在") + // 正常返回 - 不管有没有deps.Options.Json都进行ParseJsonResponse + parseResult, parseErr := lzUtils.ParseJsonResponse(resp) + if parseErr != nil { + return nil, parseErr } - - parseResult, err := lzUtils.RecursiveParse(dataResult.Raw) - if err != nil { - return nil, fmt.Errorf("递归反序列化") + // 通过gjson获取指定路径的数据 + contentResult := gjson.GetBytes(parseResult, "G22SC0101.G22SC0102.content") + if contentResult.Exists() { + return &APIInternalResult{ + Data: []byte(contentResult.Raw), + }, nil + } else { + return nil, fmt.Errorf("找不到数据") } - marshal, err := sonic.Marshal(parseResult) - if err != nil { - return nil, fmt.Errorf("序列化失败: %v", err) - } - return &APIInternalResult{ - Data: marshal, - }, nil } // Q03SC01 企业涉诉信息 @@ -1386,87 +1381,29 @@ func (a *ApiRequestService) ProcessQ03SC01Request(ctx context.Context, params [] request := map[string]interface{}{ "data": map[string]interface{}{ - "uscc": a.westDexService.Encrypt(entCode.String()), - "org_name": a.westDexService.Encrypt(entName.String()), - "inquired_auth": a.westDexService.GetDateRange(), + "uscc": a.westDexService.Encrypt(entCode.String()), + "org_name": a.westDexService.Encrypt(entName.String()), + "auth_authorizeFileCode": a.westDexService.Encrypt("CON0120250730743901"), + "inquired_auth": fmt.Sprintf("authed:%s", a.westDexService.GetDateRange()), }, } resp, callApiErr := a.westDexService.CallAPI("Q03SC01", request) if callApiErr != nil { return nil, callApiErr } - // 第一步:提取外层的 data 字段 - dataResult := gjson.GetBytes(resp, "data") - if !dataResult.Exists() { - return nil, fmt.Errorf("外层 data 字段不存在") + parseResult, parseErr := lzUtils.ParseJsonResponse(resp) + if parseErr != nil { + return nil, parseErr } - - // 保留原有的递归解析和序列化逻辑 - parseResult, err := lzUtils.RecursiveParse(dataResult.Raw) - if err != nil { - return nil, fmt.Errorf("递归反序列化") - } - logx.Infof("parseResult: %v", parseResult) - marshal, err := sonic.Marshal(parseResult) - if err != nil { - return nil, fmt.Errorf("序列化失败: %v", err) - } - // 第二步:使用gjson预处理数据 - dataMap := make(map[string]interface{}) - - // 处理entout数据 - entoutArray := gjson.GetBytes(marshal, "entout").Array() - if len(entoutArray) > 0 { - // 检查是否存在count字段来判断是否有数据 - countField := entoutArray[0].Get("data.count") - if countField.Exists() { - // 有count字段,表示有数据 - entoutData := entoutArray[0].Get("data") - if entoutData.Exists() { - dataMap["data"] = json.RawMessage(entoutData.Raw) - } - } else { - // 没有count字段,使用空对象 - dataMap["data"] = json.RawMessage("{}") - } + // 通过gjson获取指定路径的数据 + contentResult := gjson.GetBytes(parseResult, "Q03SC0101.Q03SC0102.content") + if contentResult.Exists() { + return &APIInternalResult{ + Data: []byte(contentResult.Raw), + }, nil } else { - dataMap["data"] = json.RawMessage("{}") + return nil, fmt.Errorf("找不到数据") } - - // 处理sxbzxr数据(失信被执行人) - sxbzxrArray := dataResult.Get("sxbzxr").Array() - if len(sxbzxrArray) > 0 { - sxbzxrList := sxbzxrArray[0].Get("sxbzxr") - if sxbzxrList.Exists() && len(sxbzxrList.Array()) > 0 { - dataMap["sxbzxr"] = json.RawMessage(sxbzxrList.Raw) - } else { - dataMap["sxbzxr"] = json.RawMessage("[]") - } - } else { - dataMap["sxbzxr"] = json.RawMessage("[]") - } - - // 处理xgbzxr数据(限高被执行人) - xgbzxrArray := dataResult.Get("xgbzxr").Array() - if len(xgbzxrArray) > 0 { - xgbzxrList := xgbzxrArray[0].Get("xgbzxr") - if xgbzxrList.Exists() && len(xgbzxrList.Array()) > 0 { - dataMap["xgbzxr"] = json.RawMessage(xgbzxrList.Raw) - } else { - dataMap["xgbzxr"] = json.RawMessage("[]") - } - } else { - dataMap["xgbzxr"] = json.RawMessage("[]") - } - - result, err := sonic.Marshal(dataMap) - if err != nil { - return nil, fmt.Errorf("序列化预处理数据失败: %v", err) - } - - return &APIInternalResult{ - Data: result, - }, nil } // 出境限制查询 diff --git a/pkg/lzkit/lzUtils/json.go b/pkg/lzkit/lzUtils/json.go index e44c371..8838c0c 100644 --- a/pkg/lzkit/lzUtils/json.go +++ b/pkg/lzkit/lzUtils/json.go @@ -1,6 +1,10 @@ package lzUtils -import "github.com/bytedance/sonic" +import ( + "encoding/json" + + "github.com/bytedance/sonic" +) func RecursiveParse(data interface{}) (interface{}, error) { switch v := data.(type) { @@ -33,3 +37,20 @@ func RecursiveParse(data interface{}) (interface{}, error) { return v, nil } } + +// ParseJsonResponse 直接解析JSON响应数据 +// jsonResp: JSON响应数据 +// Returns: 解析后的数据字节数组 +func ParseJsonResponse(jsonResp []byte) ([]byte, error) { + parseResult, err := RecursiveParse(string(jsonResp)) + if err != nil { + return nil, err + } + + resultResp, marshalErr := json.Marshal(parseResult) + if marshalErr != nil { + return nil, err + } + + return resultResp, nil +}