Files
tyapi-server/internal/domains/api/services/api_request_service.go
2025-10-16 18:35:18 +08:00

230 lines
8.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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/xingwei"
"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,
xingweiService *xingwei.XingweiService,
validator interfaces.RequestValidator,
productManagementService *services.ProductManagementService,
) *ApiRequestService {
// 创建组合包服务
combService := comb.NewCombService(productManagementService)
// 创建处理器依赖容器
processorDeps := processors.NewProcessorDependencies(westDexService, yushanService, tianYanChaService, alicloudService, zhichaService, xingweiService, 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, // 经营异常
"QYGL3F8E": qygl.ProcessQYGL3F8ERequest, // 人企关系加强版
"QYGL7D9A": qygl.ProcessQYGL7D9ARequest, // 欠税公告
"QYGL4B2E": qygl.ProcessQYGL4B2ERequest, // 税收违法
"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,
"YYSY8F3A": yysy.ProcessYYSY8F3ARequest,
// 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,
"IVYZ3A7F": ivyz.ProcessIVYZ3A7FRequest,
"IVYZ9D2E": ivyz.ProcessIVYZ9D2ERequest,
"IVYZ81NC": ivyz.ProcessIVYZ81NCRequest,
// COMB系列处理器 - 只注册有自定义逻辑的组合包
"COMB86PM": comb.ProcessCOMB86PMRequest, // 有自定义逻辑重命名ApiCode
// QCXG系列处理器
"QCXG7A2B": qcxg.ProcessQCXG7A2BRequest,
// DWBG系列处理器 - 多维报告
"DWBG6A2C": dwbg.ProcessDWBG6A2CRequest,
"DWBG8B4D": dwbg.ProcessDWBG8B4DRequest,
"DWBG7F3A": dwbg.ProcessDWBG7F3ARequest,
// 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)
}