diff --git a/apps/api/internal/common/logic.go b/apps/api/internal/common/logic.go index 437fd68..36d81c2 100644 --- a/apps/api/internal/common/logic.go +++ b/apps/api/internal/common/logic.go @@ -1,5 +1,24 @@ package common +import ( + "encoding/json" +) + +// StructToMap 将结构体转换为 map[string]interface{} +func StructToMap(data interface{}) (map[string]interface{}, error) { + jsonData, err := json.Marshal(data) + if err != nil { + return nil, err + } + + var result map[string]interface{} + if err := json.Unmarshal(jsonData, &result); err != nil { + return nil, err + } + + return result, nil +} + func MapStructToAPIRequest(encryptedFields map[string]interface{}, fieldMapping map[string]string, wrapField string) map[string]interface{} { apiRequest := make(map[string]interface{}) diff --git a/apps/api/internal/logic/COMB/comb298ylogic.go b/apps/api/internal/logic/COMB/comb298ylogic.go index 74bf304..e82f8b7 100644 --- a/apps/api/internal/logic/COMB/comb298ylogic.go +++ b/apps/api/internal/logic/COMB/comb298ylogic.go @@ -107,13 +107,6 @@ func (l *COMB298YLogic) COMB298Y(req *types.Request) (resp string, err *errs.App return "", errs.ErrParamValidation } - var encryptedFields map[string]interface{} - unmarshalErr := json.Unmarshal(decryptData, &encryptedFields) - if unmarshalErr != nil { - logx.Errorf("解密数据转换为map失败:%v", err) - return "", errs.ErrSystem - } - // 准备并发请求 apiRequests := []APIRequest{ {SourceId: "G16BJ02", ServiceId: "YYSY09CD", Mapping: westmodel.YYSY09CDFieldMapping, Wrap: "data", Service: "west"}, @@ -133,18 +126,33 @@ func (l *COMB298YLogic) COMB298Y(req *types.Request) (resp string, err *errs.App // 为每个请求构建对应的请求参数 for i := range apiRequests { - request := encryptedFields if apiRequests[i].Service == "west" { - // 3、西部加密 + // 西部服务:先加密后mapping westConfig := l.svcCtx.Config.WestConfig - encryptedRequest, encryptStructFieldsErr := common.EncryptStructFields(request, westConfig.Key) - if encryptStructFieldsErr != nil { - logx.Errorf("西部加密错误:%v", encryptStructFieldsErr) + // 将结构体转换为map + dataMap, err := common.StructToMap(data) + if err != nil { + logx.Errorf("结构体转map失败:%v", err) + return "", errs.ErrSystem } - request = encryptedRequest + // 加密 + encryptedRequest, encryptErr := common.EncryptStructFields(dataMap, westConfig.Key) + if encryptErr != nil { + logx.Errorf("西部加密错误:%v", encryptErr) + return "", errs.ErrSystem + } + // mapping + apiRequests[i].Request = common.MapStructToAPIRequest(encryptedRequest, apiRequests[i].Mapping, apiRequests[i].Wrap) + } else { + // 羽山服务:直接mapping + dataMap, err := common.StructToMap(data) + if err != nil { + logx.Errorf("结构体转map失败:%v", err) + return "", errs.ErrSystem + } + apiRequests[i].Request = common.MapStructToAPIRequest(dataMap, apiRequests[i].Mapping, apiRequests[i].Wrap) } - logx.Infof("sourceId:%s,请求参数:%v", apiRequests[i].SourceId, request) - apiRequests[i].Request = common.MapStructToAPIRequest(request, apiRequests[i].Mapping, apiRequests[i].Wrap) + logx.Infof("sourceId:%s,请求参数:%v", apiRequests[i].SourceId, apiRequests[i].Request) } // 创建响应通道