package services import ( "context" "encoding/json" "fmt" "tyapi-server/internal/application/api/commands" "tyapi-server/internal/domains/api/services/processors" "tyapi-server/internal/domains/api/services/processors/comb" "tyapi-server/internal/domains/api/services/processors/dwbg" "tyapi-server/internal/domains/api/services/processors/flxg" "tyapi-server/internal/domains/api/services/processors/ivyz" "tyapi-server/internal/domains/api/services/processors/jrzq" "tyapi-server/internal/domains/api/services/processors/qcxg" "tyapi-server/internal/domains/api/services/processors/qygl" "tyapi-server/internal/domains/api/services/processors/test" "tyapi-server/internal/domains/api/services/processors/yysy" "tyapi-server/internal/domains/product/services" "tyapi-server/internal/infrastructure/external/alicloud" "tyapi-server/internal/infrastructure/external/tianyancha" "tyapi-server/internal/infrastructure/external/westdex" "tyapi-server/internal/infrastructure/external/yushan" "tyapi-server/internal/infrastructure/external/zhicha" "tyapi-server/internal/shared/interfaces" ) var ( ErrDatasource = processors.ErrDatasource ErrSystem = processors.ErrSystem ErrInvalidParam = processors.ErrInvalidParam ErrNotFound = processors.ErrNotFound ) type ApiRequestService struct { // 可注入依赖,如第三方服务、模型等 westDexService *westdex.WestDexService yushanService *yushan.YushanService tianYanChaService *tianyancha.TianYanChaService alicloudService *alicloud.AlicloudService validator interfaces.RequestValidator processorDeps *processors.ProcessorDependencies combService *comb.CombService } func NewApiRequestService( westDexService *westdex.WestDexService, yushanService *yushan.YushanService, tianYanChaService *tianyancha.TianYanChaService, alicloudService *alicloud.AlicloudService, zhichaService *zhicha.ZhichaService, validator interfaces.RequestValidator, productManagementService *services.ProductManagementService, ) *ApiRequestService { // 创建组合包服务 combService := comb.NewCombService(productManagementService) // 创建处理器依赖容器 processorDeps := processors.NewProcessorDependencies(westDexService, yushanService, tianYanChaService, alicloudService, zhichaService, validator, combService) // 统一注册所有处理器 registerAllProcessors(combService) return &ApiRequestService{ westDexService: westDexService, yushanService: yushanService, tianYanChaService: tianYanChaService, alicloudService: alicloudService, validator: validator, processorDeps: processorDeps, combService: combService, } } // registerAllProcessors 统一注册所有处理器 func registerAllProcessors(combService *comb.CombService) { // 定义所有处理器映射 processorMap := map[string]processors.ProcessorFunc{ // FLXG系列处理器 "FLXG0V3B": flxg.ProcessFLXG0V3Bequest, "FLXG0V4B": flxg.ProcessFLXG0V4BRequest, "FLXG162A": flxg.ProcessFLXG162ARequest, "FLXG3D56": flxg.ProcessFLXG3D56Request, "FLXG54F5": flxg.ProcessFLXG54F5Request, "FLXG5876": flxg.ProcessFLXG5876Request, "FLXG75FE": flxg.ProcessFLXG75FERequest, "FLXG9687": flxg.ProcessFLXG9687Request, "FLXG970F": flxg.ProcessFLXG970FRequest, "FLXGC9D1": flxg.ProcessFLXGC9D1Request, "FLXGCA3D": flxg.ProcessFLXGCA3DRequest, "FLXGDEC7": flxg.ProcessFLXGDEC7Request, "FLXG8A3F": flxg.ProcessFLXG8A3FRequest, "FLXG5B2E": flxg.ProcessFLXG5B2ERequest, "FLXG0687": flxg.ProcessFLXG0687Request, "FLXGBC21": flxg.ProcessFLXGBC21Request, "FLXGDEA8": flxg.ProcessFLXGDEA8Request, "FLXGDEA9": flxg.ProcessFLXGDEA9Request, "FLXG5A3B": flxg.ProcessFLXG5A3BRequest, "FLXG9C1D": flxg.ProcessFLXG9C1DRequest, "FLXG2E8F": flxg.ProcessFLXG2E8FRequest, // JRZQ系列处理器 "JRZQ8203": jrzq.ProcessJRZQ8203Request, "JRZQ0A03": jrzq.ProcessJRZQ0A03Request, "JRZQ4AA8": jrzq.ProcessJRZQ4AA8Request, "JRZQDCBE": jrzq.ProcessJRZQDCBERequest, "JRZQ09J8": jrzq.ProcessJRZQ09J8Request, "JRZQ1D09": jrzq.ProcessJRZQ1D09Request, "JRZQ3C7B": jrzq.ProcessJRZQ3C7BRequest, "JRZQ8A2D": jrzq.ProcessJRZQ8A2DRequest, "JRZQ5E9F": jrzq.ProcessJRZQ5E9FRequest, "JRZQ4B6C": jrzq.ProcessJRZQ4B6CRequest, "JRZQ7F1A": jrzq.ProcessJRZQ7F1ARequest, // QYGL系列处理器 "QYGL8261": qygl.ProcessQYGL8261Request, "QYGL2ACD": qygl.ProcessQYGL2ACDRequest, "QYGL45BD": qygl.ProcessQYGL45BDRequest, "QYGL6F2D": qygl.ProcessQYGL6F2DRequest, "QYGL8271": qygl.ProcessQYGL8271Request, "QYGLB4C0": qygl.ProcessQYGLB4C0Request, "QYGL23T7": qygl.ProcessQYGL23T7Request, // 企业三要素验证 "QYGL5A3C": qygl.ProcessQYGL5A3CRequest, // 对外投资历史 "QYGL8B4D": qygl.ProcessQYGL8B4DRequest, // 融资历史 "QYGL9E2F": qygl.ProcessQYGL9E2FRequest, // 行政处罚 "QYGL7C1A": qygl.ProcessQYGL7C1ARequest, // 经营异常 "COMENT01": qygl.ProcessCOMENT01Request, // 企业风险报告 // YYSY系列处理器 "YYSYD50F": yysy.ProcessYYSYD50FRequest, "YYSY09CD": yysy.ProcessYYSY09CDRequest, "YYSY4B21": yysy.ProcessYYSY4B21Request, "YYSY4B37": yysy.ProcessYYSY4B37Request, "YYSY6F2E": yysy.ProcessYYSY6F2ERequest, "YYSYBE08": yysy.ProcessYYSYBE08Request, "YYSYF7DB": yysy.ProcessYYSYF7DBRequest, "YYSY4F2E": yysy.ProcessYYSY4F2ERequest, "YYSY8B1C": yysy.ProcessYYSY8B1CRequest, "YYSY6D9A": yysy.ProcessYYSY6D9ARequest, "YYSY3E7F": yysy.ProcessYYSY3E7FRequest, // IVYZ系列处理器 "IVYZ0B03": ivyz.ProcessIVYZ0B03Request, "IVYZ2125": ivyz.ProcessIVYZ2125Request, "IVYZ385E": ivyz.ProcessIVYZ385ERequest, "IVYZ5733": ivyz.ProcessIVYZ5733Request, "IVYZ9363": ivyz.ProcessIVYZ9363Request, "IVYZ9A2B": ivyz.ProcessIVYZ9A2BRequest, "IVYZADEE": ivyz.ProcessIVYZADEERequest, "IVYZ7F2A": ivyz.ProcessIVYZ7F2ARequest, "IVYZ4E8B": ivyz.ProcessIVYZ4E8BRequest, "IVYZ1C9D": ivyz.ProcessIVYZ1C9DRequest, "IVYZGZ08": ivyz.ProcessIVYZGZ08Request, "IVYZ2A8B": ivyz.ProcessIVYZ2A8BRequest, "IVYZ7C9D": ivyz.ProcessIVYZ7C9DRequest, "IVYZ5E3F": ivyz.ProcessIVYZ5E3FRequest, "IVYZ7F3A": ivyz.ProcessIVYZ7F3ARequest, // COMB系列处理器 - 只注册有自定义逻辑的组合包 "COMB86PM": comb.ProcessCOMB86PMRequest, // 有自定义逻辑:重命名ApiCode // QCXG系列处理器 "QCXG7A2B": qcxg.ProcessQCXG7A2BRequest, // DWBG系列处理器 - 多维报告 "DWBG6A2C": dwbg.ProcessDWBG6A2CRequest, "DWBG8B4D": dwbg.ProcessDWBG8B4DRequest, // FLXG系列处理器 - 风险管控 (包含原FXHY功能) "FLXG8B4D": flxg.ProcessFLXG8B4DRequest, // TEST系列处理器 - 测试用处理器 "TEST001": test.ProcessTestRequest, "TEST002": test.ProcessTestErrorRequest, "TEST003": test.ProcessTestTimeoutRequest, } // 批量注册到组合包服务 for apiCode, processor := range processorMap { combService.RegisterProcessor(apiCode, processor) } // 同时设置全局处理器映射 RequestProcessors = processorMap } // 注册API处理器 - 现在通过registerAllProcessors统一管理 var RequestProcessors map[string]processors.ProcessorFunc // PreprocessRequestApi 调用指定的请求处理函数 func (a *ApiRequestService) PreprocessRequestApi(ctx context.Context, apiCode string, params []byte, options *commands.ApiCallOptions, callContext *processors.CallContext) ([]byte, error) { // 设置Options和CallContext到依赖容器 deps := a.processorDeps.WithOptions(options).WithCallContext(callContext) // 1. 优先查找已注册的自定义处理器 if processor, exists := RequestProcessors[apiCode]; exists { return processor(ctx, params, deps) } // 2. 检查是否为组合包(COMB开头),使用通用组合包处理器 if len(apiCode) >= 4 && apiCode[:4] == "COMB" { return a.processGenericCombRequest(ctx, apiCode, params, deps) } return nil, fmt.Errorf("%s: 未找到处理器: %s", ErrSystem, apiCode) } // processGenericCombRequest 通用组合包处理器 func (a *ApiRequestService) processGenericCombRequest(ctx context.Context, apiCode string, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { // 调用组合包服务处理请求 // 这里不需要验证参数,因为组合包的参数验证由各个子处理器负责 combinedResult, err := deps.CombService.ProcessCombRequest(ctx, params, deps, apiCode) if err != nil { return nil, err } // 直接返回组合结果,无任何自定义处理 return json.Marshal(combinedResult) }