diff --git a/internal/domains/api/services/api_request_service.go b/internal/domains/api/services/api_request_service.go index 22351e0..311ad6f 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -196,6 +196,7 @@ func registerAllProcessors(combService *comb.CombService) { // COMB系列处理器 - 只注册有自定义逻辑的组合包 "COMB86PM": comb.ProcessCOMB86PMRequest, // 有自定义逻辑:重命名ApiCode "COMBHZY2": comb.ProcessCOMBHZY2Request, // 自定义处理:生成合规报告 + "COMBWD01": comb.ProcessCOMBWD01Request, // 自定义处理:将返回结构从数组改为对象 // QCXG系列处理器 "QCXG7A2B": qcxg.ProcessQCXG7A2BRequest, diff --git a/internal/domains/api/services/processors/comb/combwd01_processor.go b/internal/domains/api/services/processors/comb/combwd01_processor.go new file mode 100644 index 0000000..1264568 --- /dev/null +++ b/internal/domains/api/services/processors/comb/combwd01_processor.go @@ -0,0 +1,92 @@ +package comb + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/shared/logger" + + "go.uber.org/zap" +) + +// ProcessCOMBWD01Request 处理 COMBWD01 组合包请求 +// 将返回结构从数组改为以 api_code 为 key 的对象结构 +func ProcessCOMBWD01Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + log := logger.GetGlobalLogger() + + // 调用组合包服务处理请求 + combinedResult, err := deps.CombService.ProcessCombRequest(ctx, params, deps, "COMBWD01") + if err != nil { + log.Error("COMBWD01组合包服务调用失败", + zap.Error(err), + zap.String("api_code", "COMBWD01"), + ) + return nil, err + } + + if combinedResult == nil { + log.Error("COMBWD01组合包响应为空", + zap.String("api_code", "COMBWD01"), + ) + return nil, errors.New("组合包响应为空") + } + + log.Info("COMBWD01组合包服务调用成功", + zap.Int("子产品数量", len(combinedResult.Responses)), + zap.String("api_code", "COMBWD01"), + ) + + // 将数组结构转换为对象结构 + responsesMap := make(map[string]*ResponseItem) + for _, resp := range combinedResult.Responses { + item := &ResponseItem{ + ApiCode: resp.ApiCode, + Success: resp.Success, + } + + // 根据成功/失败状态设置 data 和 error 字段 + if resp.Success { + // 成功时:data 有值(可能为 nil),error 为 null + item.Data = resp.Data + item.Error = nil + } else { + // 失败时:data 为 null,error 有值 + item.Data = nil + if resp.Error != "" { + item.Error = resp.Error + } else { + item.Error = "未知错误" + } + } + + responsesMap[resp.ApiCode] = item + } + + // 构建新的响应结构 + result := map[string]interface{}{ + "responses": responsesMap, + } + + // 序列化并返回 + resultBytes, err := json.Marshal(result) + if err != nil { + log.Error("COMBWD01响应序列化失败", + zap.Error(err), + zap.String("api_code", "COMBWD01"), + ) + return nil, errors.Join(processors.ErrSystem, err) + } + + return resultBytes, nil +} + +// ResponseItem 响应项结构 +type ResponseItem struct { + ApiCode string `json:"api_code"` + Success bool `json:"success"` + Data interface{} `json:"data"` + Error interface{} `json:"error"` +} +