297 lines
12 KiB
Go
297 lines
12 KiB
Go
package services
|
||
|
||
import (
|
||
"context"
|
||
"encoding/json"
|
||
"fmt"
|
||
|
||
"hyapi-server/internal/application/api/commands"
|
||
appconfig "hyapi-server/internal/config"
|
||
api_repositories "hyapi-server/internal/domains/api/repositories"
|
||
"hyapi-server/internal/domains/api/services/processors"
|
||
"hyapi-server/internal/domains/api/services/processors/comb"
|
||
"hyapi-server/internal/domains/api/services/processors/flxg"
|
||
"hyapi-server/internal/domains/api/services/processors/ivyz"
|
||
"hyapi-server/internal/domains/api/services/processors/jrzq"
|
||
"hyapi-server/internal/domains/api/services/processors/qcxg"
|
||
"hyapi-server/internal/domains/api/services/processors/qygl"
|
||
"hyapi-server/internal/domains/api/services/processors/yysy"
|
||
"hyapi-server/internal/domains/product/services"
|
||
"hyapi-server/internal/infrastructure/external/alicloud"
|
||
"hyapi-server/internal/infrastructure/external/huibo"
|
||
"hyapi-server/internal/infrastructure/external/jiguang"
|
||
"hyapi-server/internal/infrastructure/external/muzi"
|
||
nuoerext "hyapi-server/internal/infrastructure/external/nuoer"
|
||
"hyapi-server/internal/infrastructure/external/shujubao"
|
||
"hyapi-server/internal/infrastructure/external/tianyuanapi"
|
||
"hyapi-server/internal/infrastructure/external/tianyancha"
|
||
"hyapi-server/internal/infrastructure/external/westdex"
|
||
"hyapi-server/internal/infrastructure/external/xingwei"
|
||
"hyapi-server/internal/infrastructure/external/yushan"
|
||
"hyapi-server/internal/infrastructure/external/zhicha"
|
||
"hyapi-server/internal/shared/interfaces"
|
||
)
|
||
|
||
var (
|
||
ErrDatasource = processors.ErrDatasource
|
||
ErrSystem = processors.ErrSystem
|
||
ErrInvalidParam = processors.ErrInvalidParam
|
||
ErrNotFound = processors.ErrNotFound
|
||
)
|
||
|
||
type ApiRequestService struct {
|
||
// 可注入依赖,如第三方服务、模型等
|
||
westDexService *westdex.WestDexService
|
||
muziService *muzi.MuziService
|
||
yushanService *yushan.YushanService
|
||
tianYanChaService *tianyancha.TianYanChaService
|
||
alicloudService *alicloud.AlicloudService
|
||
validator interfaces.RequestValidator
|
||
processorDeps *processors.ProcessorDependencies
|
||
combService *comb.CombService
|
||
config *appconfig.Config
|
||
|
||
reportRepo api_repositories.ReportRepository
|
||
}
|
||
|
||
func NewApiRequestService(
|
||
westDexService *westdex.WestDexService,
|
||
shujubaoService *shujubao.ShujubaoService,
|
||
muziService *muzi.MuziService,
|
||
yushanService *yushan.YushanService,
|
||
tianYanChaService *tianyancha.TianYanChaService,
|
||
alicloudService *alicloud.AlicloudService,
|
||
zhichaService *zhicha.ZhichaService,
|
||
xingweiService *xingwei.XingweiService,
|
||
jiguangService *jiguang.JiguangService,
|
||
tianyuanapiService *tianyuanapi.TianyuanapiService,
|
||
nuoerService *nuoerext.NuoerService,
|
||
huiboService *huibo.HuiboService,
|
||
validator interfaces.RequestValidator,
|
||
productManagementService *services.ProductManagementService,
|
||
cfg *appconfig.Config,
|
||
) *ApiRequestService {
|
||
return NewApiRequestServiceWithRepos(
|
||
westDexService,
|
||
shujubaoService,
|
||
muziService,
|
||
yushanService,
|
||
tianYanChaService,
|
||
alicloudService,
|
||
zhichaService,
|
||
xingweiService,
|
||
jiguangService,
|
||
tianyuanapiService,
|
||
nuoerService,
|
||
huiboService,
|
||
validator,
|
||
productManagementService,
|
||
cfg,
|
||
nil,
|
||
nil,
|
||
)
|
||
}
|
||
|
||
// NewApiRequestServiceWithRepos 带自定义仓储的构造函数,便于扩展(例如企业报告记录)
|
||
func NewApiRequestServiceWithRepos(
|
||
westDexService *westdex.WestDexService,
|
||
shujubaoService *shujubao.ShujubaoService,
|
||
muziService *muzi.MuziService,
|
||
yushanService *yushan.YushanService,
|
||
tianYanChaService *tianyancha.TianYanChaService,
|
||
alicloudService *alicloud.AlicloudService,
|
||
zhichaService *zhicha.ZhichaService,
|
||
xingweiService *xingwei.XingweiService,
|
||
jiguangService *jiguang.JiguangService,
|
||
tianyuanapiService *tianyuanapi.TianyuanapiService,
|
||
nuoerService *nuoerext.NuoerService,
|
||
huiboService *huibo.HuiboService,
|
||
validator interfaces.RequestValidator,
|
||
productManagementService *services.ProductManagementService,
|
||
cfg *appconfig.Config,
|
||
reportRepo api_repositories.ReportRepository,
|
||
qyglReportPDFScheduler processors.QYGLReportPDFScheduler,
|
||
) *ApiRequestService {
|
||
// 创建组合包服务
|
||
combService := comb.NewCombService(productManagementService)
|
||
|
||
apiPublicBase := ""
|
||
if cfg != nil {
|
||
apiPublicBase = appconfig.ResolveAPIPublicBaseURL(&cfg.API)
|
||
}
|
||
|
||
// 创建处理器依赖容器
|
||
processorDeps := processors.NewProcessorDependencies(
|
||
westDexService,
|
||
shujubaoService,
|
||
muziService,
|
||
yushanService,
|
||
tianYanChaService,
|
||
alicloudService,
|
||
zhichaService,
|
||
xingweiService,
|
||
jiguangService,
|
||
tianyuanapiService,
|
||
nuoerService,
|
||
huiboService,
|
||
validator,
|
||
combService,
|
||
reportRepo,
|
||
qyglReportPDFScheduler,
|
||
apiPublicBase,
|
||
)
|
||
|
||
// 统一注册所有处理器
|
||
registerAllProcessors(combService)
|
||
|
||
return &ApiRequestService{
|
||
westDexService: westDexService,
|
||
muziService: muziService,
|
||
yushanService: yushanService,
|
||
tianYanChaService: tianYanChaService,
|
||
alicloudService: alicloudService,
|
||
validator: validator,
|
||
processorDeps: processorDeps,
|
||
combService: combService,
|
||
config: cfg,
|
||
reportRepo: reportRepo,
|
||
}
|
||
}
|
||
|
||
// registerAllProcessors 统一注册所有处理器
|
||
func registerAllProcessors(combService *comb.CombService) {
|
||
// 定义所有处理器映射
|
||
processorMap := map[string]processors.ProcessorFunc{
|
||
// FLXG系列处理器
|
||
"FLXGJI17": flxg.ProcessFLXGJI17Request, //董监高司法综合信息核验
|
||
"FLXGMMG7": flxg.ProcessFLXGMMG7Request, //个人诉讼定制版
|
||
"FLXGC4CT": flxg.ProcessFLXGC4CTRequest, //个人涉诉案件查询汇博
|
||
// JRZQ系列处理器
|
||
"JRZQOICN": jrzq.ProcessJRZQOICNRequest, // 银行卡四要素
|
||
"JRZQMDQ1": jrzq.ProcessJRZQMDQ1Request, // 银行卡OCR数卖
|
||
"JRZQDMLO": jrzq.ProcessJRZQDMLORequest, // 银行卡OCR数据宝
|
||
"JRZQ65ZO": jrzq.ProcessJRZQ65ZORequest, // 支付行为指数诺尔
|
||
"JRZQNKEI": jrzq.ProcessJRZQNKEIRequest, //风险量级V8
|
||
"JRZQQKEC": jrzq.ProcessJRZQQKECRequest, //风险量级V9
|
||
"JRZQI079": jrzq.ProcessJRZQI079Request, //风险量级V10
|
||
"JRZQV7YZ": jrzq.ProcessJRZQV7YZRequest, //信用全景V21
|
||
"JRZQX5DM": jrzq.ProcessJRZQX5DMRequest, //借贷意向验证
|
||
"JRZQ1AIJ": jrzq.ProcessJRZQ1AIJRequest, //洞侦多头履约行为
|
||
"JRZQZ05I": jrzq.ProcessJRZQZ05IRequest, //租赁申请意向
|
||
"JRZQNK43": jrzq.ProcessJRZQNK43Request, //租赁申请意向V22
|
||
"JRZQNVM8": jrzq.ProcessJRZQNVM8Request, //风险变量V5F4
|
||
"JRZQMLZX": jrzq.ProcessJRZQMLZXRequest, //特殊名单
|
||
"JRZQQD4F": jrzq.ProcessJRZQQD4FRequest, //债务逾期黑名单V3_1
|
||
"JRZQVBHJ": jrzq.ProcessJRZQVBHJRequest, //投诉风险筛查V709
|
||
"JRZQBQIR": jrzq.ProcessJRZQBQIRRequest, //黑名单V110_c10
|
||
"JRZQTM1V": jrzq.ProcessJRZQTM1VRequest, //特殊名单1010
|
||
"JRZQNEP0": jrzq.ProcessJRZQNEP0Request, //智享分
|
||
"JRZQLY6D": jrzq.ProcessJRZQLY6DRequest, //智瞳-通用版
|
||
"JRZQAH34": jrzq.ProcessJRZQAH34Request, //智瞳分尊享版
|
||
"JRZQML9G": jrzq.ProcessJRZQML9GRequest, //坤羽模型V3-标签版
|
||
// QYGL系列处理器
|
||
"QYGL7HBN": qygl.ProcessQYGL7HBNRequest, //企业全景报告(聚合 QYGLUY3S/QYGLJ0Q1/QYGL5S1I)
|
||
"QYGL9MYB": qygl.ProcessQYGL9MYBRequest, //企业股权结构全景查询
|
||
"QYGLALPK": qygl.ProcessQYGLALPKRequest, //企业经营状态全景查询
|
||
"QYGLUDJG": qygl.ProcessQYGLUDJGRequest, //企业年报信息核验
|
||
"QYGLWYEK": qygl.ProcessQYGLWYEKRequest, //企业税收违法核查
|
||
"QYGLWV7U": qygl.ProcessQYGLWV7URequest, //人企关联
|
||
"QYGL7Z0O": qygl.ProcessQYGL7Z0ORequest, //企业诉讼定制版
|
||
"QYGLLUCM": qygl.ProcessQYGLLUCMRequest, //企业案件查询汇博
|
||
|
||
// YYSY系列处理器
|
||
"YYSY0YYV": yysy.ProcessYYSY0YYVRequest, //运营商二要素查询
|
||
"YYSYS66T": yysy.ProcessYYSYS66TRequest, //运营商三要素详版查询
|
||
"YYSYN8DI": yysy.ProcessYYSYN8DIRequest, //运营商三要素简版查询
|
||
"YYSYUO7E": yysy.ProcessYYSYUO7ERequest, //在网时长查询
|
||
"YYSYKTQO": yysy.ProcessYYSYKTQORequest, //手机在网状态查询
|
||
"YYSYXAES": yysy.ProcessYYSYXAESRequest, //手机携号转网查询
|
||
"YYSYJXZF": yysy.ProcessYYSYJXZFRequest, //手机空号检测查询
|
||
"YYSYXHHO": yysy.ProcessYYSYXHHORequest, //运营商三要素即时版查询
|
||
"YYSYGLSF": yysy.ProcessYYSYGLSFRequest, //全网手机三要素验证1979周更新版
|
||
"YYSYP7PL": yysy.ProcessYYSYP7PLRequest, //手机二次放号检测查询
|
||
|
||
// IVYZ系列处理器
|
||
"IVYZSQ0E": ivyz.ProcessIVYZSQ0ERequest, //身份证实名认证即时版
|
||
"IVYZE42I": ivyz.ProcessIVYZE42IRequest, //公安三要素人脸识别
|
||
"IVYZDXMD": ivyz.ProcessIVYZDXMDRequest, //人脸身份证比对(数脉)
|
||
"IVYZFO5K": ivyz.ProcessIVYZFO5KRequest, //身份证实名认证政务版
|
||
"IVYZWVYA": ivyz.ProcessIVYZWVYARequest, //活体检测
|
||
"IVYZKJ31": ivyz.ProcessIVYZKJ31Request, //活体识别步骤二
|
||
"IVYZ9OHN": ivyz.ProcessIVYZ9OHNRequest, //身份证OCR
|
||
"IVYZZSCG": ivyz.ProcessIVYZZSCGRequest, //身份证OCR2数卖
|
||
"IVYZYQKX": ivyz.ProcessIVYZYQKXRequest, //婚姻状况核验V2(单人)
|
||
"IVYZO4RX": ivyz.ProcessIVYZO4RXRequest, //婚姻状况核验(单人)
|
||
"IVYZRHT5": ivyz.ProcessIVYZRHT5Request, //婚姻状态核验(双人)
|
||
"IVYZYDQM": ivyz.ProcessIVYZYDQMRequest, //婚姻状态核验V2(双人)
|
||
"IVYZPYSO": ivyz.ProcessIVYZPYSORequest, //双人婚姻评估查询zhicha版本
|
||
"IVYZOQFB": ivyz.ProcessIVYZOQFBRequest, //身份风险V106
|
||
"IVYZBI6F": ivyz.ProcessIVYZBI6FRequest, //消费能力
|
||
"IVYZ6W0U": ivyz.ProcessIVYZ6W0URequest, //收入等级
|
||
|
||
// COMB系列处理器 - 只注册有自定义逻辑的组合包
|
||
|
||
// QCXG系列处理器
|
||
"QCXGFV9W": qcxg.ProcessQCXGFV9WRequest, //疑似营运车辆注册平台数 10386
|
||
"QCXG76VA": qcxg.ProcessQCXG76VARequest, //疑似运营车辆查询(月度里程)10268
|
||
"QCXGYQDC": qcxg.ProcessQCXGYQDCRequest, //疑似运营车辆查询(季度里程)10269
|
||
"QCXGGFWW": qcxg.ProcessQCXGGFWWRequest, //疑似运营车辆查询(半年度里程)10270
|
||
"QCXGYWSV": qcxg.ProcessQCXGYWSVRequest, //疑似运营车辆查询(年度里程)10271
|
||
"QCXG521L": qcxg.ProcessQCXG521LRequest, // 车辆静态信息查询 10479
|
||
"QCXGIJY3": qcxg.ProcessQCXGIJY3Request, // 名下车辆诺尔
|
||
|
||
// DWBG系列处理器 - 多维报告
|
||
|
||
// FLXG系列处理器 - 风险管控 (包含原FXHY功能)
|
||
|
||
// PDFG系列处理器 - PDF生成
|
||
}
|
||
|
||
// 批量注册到组合包服务
|
||
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)
|
||
|
||
// 将apiCode放入context,供外部服务使用
|
||
ctx = context.WithValue(ctx, "api_code", apiCode)
|
||
// 将config放入context,供处理器使用
|
||
ctx = context.WithValue(ctx, "config", a.config)
|
||
|
||
// 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)
|
||
}
|