diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index 4f2a101..c78fb2d 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -1145,3 +1145,27 @@ type JRZQ1P5GReq struct { MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` AuthAuthorizeFileCode string `json:"auth_authorize_file_code" validate:"required"` } + +type JRZQV87MReq struct { + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type JRZQV0MDReq struct { + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type JRZQVT43Req struct { + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type JRZQV3HMReq struct { + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} diff --git a/internal/domains/api/services/api_request_service.go b/internal/domains/api/services/api_request_service.go index e3617f7..91865e8 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -231,6 +231,10 @@ func registerAllProcessors(combService *comb.CombService) { "JRZQ1P5G": jrzq.ProcessJRZQ1P5GRequest, // 全国自然人借贷压力指数查询(2) "JRZQOCRE": jrzq.ProcessJRZQOCREERequest, // 银行卡OCR数卖 "JRZQOCRY": jrzq.ProcessJRZQOCRYERequest, // 银行卡OCR数据宝 + "JRZQV87M": jrzq.ProcessJRZQV87MRequest, // 金融黑名单V110_c10 + "JRZQV0MD": jrzq.ProcessJRZQV0MDRequest, // 行为黑名单 + "JRZQVT43": jrzq.ProcessJRZQVT43Request, // 投诉黑名单 + "JRZQV3HM": jrzq.ProcessJRZQV3HMRequest, // 债务逾期黑名单 // QYGL系列处理器 "QYGL8261": qygl.ProcessQYGL8261Request, diff --git a/internal/domains/api/services/form_config_service.go b/internal/domains/api/services/form_config_service.go index d98759c..8be95ae 100644 --- a/internal/domains/api/services/form_config_service.go +++ b/internal/domains/api/services/form_config_service.go @@ -289,6 +289,10 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string "QYGLDG77": &dto.QYGLDG77Req{}, //企业对公打款认证shumai "QCXGM4CL": &dto.QCXGM4CLReq{}, //名下车辆诺尔 "QYGLVR76": &dto.QYGLVR76Req{}, //名下企业诺尔 + "JRZQV87M": &dto.JRZQV87MReq{}, //金融黑名单V110_c10 + "JRZQV0MD": &dto.JRZQV0MDReq{}, //行为黑名单 + "JRZQVT43": &dto.JRZQVT43Req{}, //投诉黑名单 + "JRZQV3HM": &dto.JRZQV3HMReq{}, //债务逾期黑名单 } // 优先返回已配置的DTO diff --git a/internal/domains/api/services/processors/jrzq/jrzqv0md_processor.go b/internal/domains/api/services/processors/jrzq/jrzqv0md_processor.go new file mode 100644 index 0000000..1727c62 --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzqv0md_processor.go @@ -0,0 +1,50 @@ +package jrzq + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/nuoer" +) + +// ProcessJRZQV0MDRequest JRZQV0MDRequest API处理方法 -行为黑名单(行为黑名单) +func ProcessJRZQV0MDRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQV0MDReq + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, errors.Join(processors.ErrInvalidParam, err) + } + + body := map[string]string{ + "name": paramsDto.Name, + "idCard": paramsDto.IDCard, + "mobile": paramsDto.MobileNo, + } + + nuoerDoCheckAPIKey := "blackListV110" + ApiPath := "/v1/doCheck" + + resp, err := deps.NuoerService.CallAPI(ctx, nuoerDoCheckAPIKey, ApiPath, body) + if err != nil { + if errors.Is(err, nuoer.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, nuoer.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(resp.Data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/jrzq/jrzqv3hm_processor.go b/internal/domains/api/services/processors/jrzq/jrzqv3hm_processor.go new file mode 100644 index 0000000..74c4f4b --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzqv3hm_processor.go @@ -0,0 +1,49 @@ +package jrzq + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/nuoer" +) + +// ProcessJRZQV3HMRequest JRZQV3HM API处理方法 - 债务逾期黑名单V3_1(债务逾期黑名单) +func ProcessJRZQV3HMRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQV3HMReq + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, errors.Join(processors.ErrInvalidParam, err) + } + + body := map[string]string{ + "idCard": paramsDto.IDCard, + "mobile": paramsDto.MobileNo, + } + + nuoerDoCheckAPIKey := "blackListV121_3_1" + ApiPath := "/v1/doCheck" + + resp, err := deps.NuoerService.CallAPI(ctx, nuoerDoCheckAPIKey, ApiPath, body) + if err != nil { + if errors.Is(err, nuoer.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, nuoer.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(resp.Data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/jrzq/jrzqv87m_processor.go b/internal/domains/api/services/processors/jrzq/jrzqv87m_processor.go new file mode 100644 index 0000000..12522d7 --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzqv87m_processor.go @@ -0,0 +1,50 @@ +package jrzq + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/nuoer" +) + +// ProcessJRZQV87MRequest JRZQV87M API处理方法 - 黑名单V110_c10(金融黑名单) +func ProcessJRZQV87MRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQV87MReq + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, errors.Join(processors.ErrInvalidParam, err) + } + + body := map[string]string{ + "name": paramsDto.Name, + "idCard": paramsDto.IDCard, + "mobile": paramsDto.MobileNo, + } + + nuoerDoCheckAPIKey := "blackListV110_c10" + ApiPath := "/v1/doCheck" + + resp, err := deps.NuoerService.CallAPI(ctx, nuoerDoCheckAPIKey, ApiPath, body) + if err != nil { + if errors.Is(err, nuoer.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, nuoer.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(resp.Data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/jrzq/jrzqvt43_processor.go b/internal/domains/api/services/processors/jrzq/jrzqvt43_processor.go new file mode 100644 index 0000000..580a411 --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzqvt43_processor.go @@ -0,0 +1,48 @@ +package jrzq + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/nuoer" +) + +// ProcessJRZQVT43Request JRZQVT43 API处理方法 - 投诉风险筛查V709(投诉黑名单) +func ProcessJRZQVT43Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQVT43Req + if err := json.Unmarshal(params, ¶msDto); err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, errors.Join(processors.ErrInvalidParam, err) + } + + body := map[string]string{ + "mobile": paramsDto.MobileNo, + } + + nuoerDoCheckAPIKey := "mobileRiskV709" + ApiPath := "/v1/doCheck" + + resp, err := deps.NuoerService.CallAPI(ctx, nuoerDoCheckAPIKey, ApiPath, body) + if err != nil { + if errors.Is(err, nuoer.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } + if errors.Is(err, nuoer.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } + return nil, errors.Join(processors.ErrSystem, err) + } + + respBytes, err := json.Marshal(resp.Data) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +}