diff --git a/go.mod b/go.mod index c30bf6b..df81c1a 100644 --- a/go.mod +++ b/go.mod @@ -97,7 +97,6 @@ require ( github.com/spf13/afero v1.12.0 // indirect github.com/spf13/cast v1.7.1 // indirect github.com/spf13/pflag v1.0.6 // indirect - github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect diff --git a/go.sum b/go.sum index 5daf6b0..0ef7dc3 100644 --- a/go.sum +++ b/go.sum @@ -227,8 +227,6 @@ github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqj github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index 021b66a..a65ff9f 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -115,7 +115,7 @@ type QYGL45BDReq struct { IDCard string `json:"id_card" validate:"required,validIDCard"` } type QYGL8261Req struct { - EntName string `json:"ent_name" validate:"required,min=1,validEnterpriseName"` + EntName string `json:"ent_name" validate:"required,min=1,validEnterpriseName"` } type QYGL8271Req struct { EntName string `json:"ent_name" validate:"required,min=1,validName"` @@ -225,7 +225,7 @@ type QCXG7A2BReq struct { } type COMENT01Req struct { - EntName string `json:"ent_name" validate:"required,min=1,validEnterpriseName"` + EntName string `json:"ent_name" validate:"required,min=1,validEnterpriseName"` EntCode string `json:"ent_code" validate:"required,validUSCI"` } @@ -257,8 +257,8 @@ type JRZQ1D09Req struct { // 新增的处理器DTO type IVYZ2A8BReq struct { - IDCard string `json:"id_card" validate:"required,validIDCard"` - Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } @@ -270,14 +270,14 @@ type IVYZ7C9DReq struct { } type IVYZ5E3FReq struct { - IDCard string `json:"id_card" validate:"required,validIDCard"` - Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } type IVYZ7F3AReq struct { - IDCard string `json:"id_card" validate:"required,validIDCard"` - Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } @@ -329,9 +329,9 @@ type QYGL3F8EReq struct { } type YYSY4F2EReq struct { - MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` - 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"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } @@ -340,10 +340,11 @@ type YYSY8B1CReq struct { } type YYSY6D9AReq struct { - MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` - IDCard string `json:"id_card" validate:"required,validIDCard"` - Name string `json:"name" validate:"required,min=1,validName"` - Authorized string `json:"authorized" validate:"required,oneof=0 1"`} + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` + Authorized string `json:"authorized" validate:"required,oneof=0 1"` +} type YYSY3E7FReq struct { MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` @@ -369,9 +370,9 @@ type FLXG2E8FReq struct { } type JRZQ3C7BReq struct { - MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` - 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"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } @@ -387,23 +388,23 @@ type YYSY8F3AReq struct { } type JRZQ5E9FReq struct { - MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` - 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"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } type JRZQ4B6CReq struct { - MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` - 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"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } type JRZQ7F1AReq struct { - MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` - 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"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } @@ -427,3 +428,75 @@ type FLXG8B4DReq struct { BankCard string `json:"bank_card" validate:"omitempty,validBankCard"` Authorized string `json:"authorized" validate:"required,oneof=0 1"` } + +type QCXG9P1CReq struct { + VehicleType string `json:"vehicle_type" validate:"omitempty,oneof=0 1 2"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"omitempty,min=1,validName"` + UserType string `json:"user_type" validate:"omitempty,oneof=1 2 3"` + Authorized string `json:"authorized" validate:"required,oneof=0 1"` +} + +type JRZQ9E2AReq struct { + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` + AuthAuthorizeFileCode string `json:"auth_authorize_file_code" validate:"required"` +} + +type YYSY9A1BReq struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type YYSY8C2DReq struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type YYSY7D3EReq struct { + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type JRZQ6F2AReq struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type JRZQ8B3CReq struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type JRZQ9D4EReq struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type FLXG7E8FReq struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"` +} + +type QYGL5F6AReq struct { + MobileNo string `json:"mobile_no" validate:"omitempty,min=11,max=11,validMobileNo"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + EntCode string `json:"ent_code" validate:"omitempty,validUSCI"` +} + +type IVYZ6G7HReq struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` +} + +type IVYZ8I9JReq struct { + Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + 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 9a56d25..aeac680 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -100,6 +100,7 @@ func registerAllProcessors(combService *comb.CombService) { "FLXG5A3B": flxg.ProcessFLXG5A3BRequest, "FLXG9C1D": flxg.ProcessFLXG9C1DRequest, "FLXG2E8F": flxg.ProcessFLXG2E8FRequest, + "FLXG7E8F": flxg.ProcessFLXG7E8FRequest, // JRZQ系列处理器 "JRZQ8203": jrzq.ProcessJRZQ8203Request, @@ -113,6 +114,10 @@ func registerAllProcessors(combService *comb.CombService) { "JRZQ5E9F": jrzq.ProcessJRZQ5E9FRequest, "JRZQ4B6C": jrzq.ProcessJRZQ4B6CRequest, "JRZQ7F1A": jrzq.ProcessJRZQ7F1ARequest, + "JRZQ9E2A": jrzq.ProcessJRZQ9E2ARequest, + "JRZQ6F2A": jrzq.ProcessJRZQ6F2ARequest, + "JRZQ8B3C": jrzq.ProcessJRZQ8B3CRequest, + "JRZQ9D4E": jrzq.ProcessJRZQ9D4ERequest, // QYGL系列处理器 "QYGL8261": qygl.ProcessQYGL8261Request, @@ -130,6 +135,7 @@ func registerAllProcessors(combService *comb.CombService) { "QYGL7D9A": qygl.ProcessQYGL7D9ARequest, // 欠税公告 "QYGL4B2E": qygl.ProcessQYGL4B2ERequest, // 税收违法 "COMENT01": qygl.ProcessCOMENT01Request, // 企业风险报告 + "QYGL5F6A": qygl.ProcessQYGL5F6ARequest, // 企业相关查询 // YYSY系列处理器 "YYSYD50F": yysy.ProcessYYSYD50FRequest, @@ -144,6 +150,9 @@ func registerAllProcessors(combService *comb.CombService) { "YYSY6D9A": yysy.ProcessYYSY6D9ARequest, "YYSY3E7F": yysy.ProcessYYSY3E7FRequest, "YYSY8F3A": yysy.ProcessYYSY8F3ARequest, + "YYSY9A1B": yysy.ProcessYYSY9A1BRequest, + "YYSY8C2D": yysy.ProcessYYSY8C2DRequest, + "YYSY7D3E": yysy.ProcessYYSY7D3ERequest, // IVYZ系列处理器 "IVYZ0B03": ivyz.ProcessIVYZ0B03Request, @@ -164,12 +173,15 @@ func registerAllProcessors(combService *comb.CombService) { "IVYZ3A7F": ivyz.ProcessIVYZ3A7FRequest, "IVYZ9D2E": ivyz.ProcessIVYZ9D2ERequest, "IVYZ81NC": ivyz.ProcessIVYZ81NCRequest, + "IVYZ6G7H": ivyz.ProcessIVYZ6G7HRequest, + "IVYZ8I9J": ivyz.ProcessIVYZ8I9JRequest, // COMB系列处理器 - 只注册有自定义逻辑的组合包 "COMB86PM": comb.ProcessCOMB86PMRequest, // 有自定义逻辑:重命名ApiCode // QCXG系列处理器 "QCXG7A2B": qcxg.ProcessQCXG7A2BRequest, + "QCXG9P1C": qcxg.ProcessQCXG9P1CRequest, // DWBG系列处理器 - 多维报告 "DWBG6A2C": dwbg.ProcessDWBG6A2CRequest, diff --git a/internal/domains/api/services/form_config_service.go b/internal/domains/api/services/form_config_service.go index 4319edb..197bd01 100644 --- a/internal/domains/api/services/form_config_service.go +++ b/internal/domains/api/services/form_config_service.go @@ -140,6 +140,18 @@ func (s *FormConfigServiceImpl) getDTOStruct(apiCode string) interface{} { "IVYZ9D2E": &dto.IVYZ9D2EReq{}, "DWBG7F3A": &dto.DWBG7F3AReq{}, "YYSY8F3A": &dto.YYSY8F3AReq{}, + "QCXG9P1C": &dto.QCXG9P1CReq{}, + "JRZQ9E2A": &dto.JRZQ9E2AReq{}, + "YYSY9A1B": &dto.YYSY9A1BReq{}, + "YYSY8C2D": &dto.YYSY8C2DReq{}, + "YYSY7D3E": &dto.YYSY7D3EReq{}, + "JRZQ6F2A": &dto.JRZQ6F2AReq{}, + "JRZQ8B3C": &dto.JRZQ8B3CReq{}, + "JRZQ9D4E": &dto.JRZQ9D4EReq{}, + "FLXG7E8F": &dto.FLXG7E8FReq{}, + "QYGL5F6A": &dto.QYGL5F6AReq{}, + "IVYZ6G7H": &dto.IVYZ6G7HReq{}, + "IVYZ8I9J": &dto.IVYZ8I9JReq{}, } // 优先返回已配置的DTO diff --git a/internal/domains/api/services/processors/flxg/flxg7e8f_processor.go b/internal/domains/api/services/processors/flxg/flxg7e8f_processor.go new file mode 100644 index 0000000..fe32460 --- /dev/null +++ b/internal/domains/api/services/processors/flxg/flxg7e8f_processor.go @@ -0,0 +1,47 @@ +package flxg + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessFLXG7E8FRequest FLXG7E8F API处理方法 - 个人司法数据查询 +func ProcessFLXG7E8FRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.FLXG7E8FReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "phoneNumber": paramsDto.MobileNo, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1101695378264092672" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/ivyz/ivyz6g7h_processor.go b/internal/domains/api/services/processors/ivyz/ivyz6g7h_processor.go new file mode 100644 index 0000000..c6591d6 --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyz6g7h_processor.go @@ -0,0 +1,46 @@ +package ivyz + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessIVYZ6G7HRequest IVYZ6G7H API处理方法 - 个人婚姻状况查询v2 +func ProcessIVYZ6G7HRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZ6G7HReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1104646268587536384" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/ivyz/ivyz8i9j_processor.go b/internal/domains/api/services/processors/ivyz/ivyz8i9j_processor.go new file mode 100644 index 0000000..e67a504 --- /dev/null +++ b/internal/domains/api/services/processors/ivyz/ivyz8i9j_processor.go @@ -0,0 +1,47 @@ +package ivyz + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessIVYZ8I9JRequest IVYZ8I9J API处理方法 - 互联网行为推测 +func ProcessIVYZ8I9JRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.IVYZ8I9JReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "phoneNumber": paramsDto.MobileNo, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1074522823015198720" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/jrzq/jrzq6f2a_processor.go b/internal/domains/api/services/processors/jrzq/jrzq6f2a_processor.go new file mode 100644 index 0000000..d85a385 --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzq6f2a_processor.go @@ -0,0 +1,47 @@ +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/xingwei" +) + +// ProcessJRZQ6F2ARequest JRZQ6F2A API处理方法 - 借贷申请记录 +func ProcessJRZQ6F2ARequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQ6F2AReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "phoneNumber": paramsDto.MobileNo, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1101695369065984000" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/jrzq/jrzq8b3c_processor.go b/internal/domains/api/services/processors/jrzq/jrzq8b3c_processor.go new file mode 100644 index 0000000..20b758b --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzq8b3c_processor.go @@ -0,0 +1,47 @@ +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/xingwei" +) + +// ProcessJRZQ8B3CRequest JRZQ8B3C API处理方法 - 个人消费能力等级 +func ProcessJRZQ8B3CRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQ8B3CReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "phoneNumber": paramsDto.MobileNo, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1101695392528920576" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/jrzq/jrzq9d4e_processor.go b/internal/domains/api/services/processors/jrzq/jrzq9d4e_processor.go new file mode 100644 index 0000000..4166ec5 --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzq9d4e_processor.go @@ -0,0 +1,47 @@ +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/xingwei" +) + +// ProcessJRZQ9D4ERequest JRZQ9D4E API处理方法 - 多头借贷小时级 +func ProcessJRZQ9D4ERequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQ9D4EReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "phoneNumber": paramsDto.MobileNo, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1118085532960616448" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/jrzq/jrzq9e2a_processor.go b/internal/domains/api/services/processors/jrzq/jrzq9e2a_processor.go new file mode 100644 index 0000000..0b1fa28 --- /dev/null +++ b/internal/domains/api/services/processors/jrzq/jrzq9e2a_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/xingwei" +) + +// ProcessJRZQ9E2ARequest JRZQ9E2A API处理方法 +func ProcessJRZQ9E2ARequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.JRZQ9E2AReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "phoneNumber": paramsDto.MobileNo, + "idCardNum": paramsDto.IDCard, + "name": paramsDto.Name, + "authAuthorizeFileCode": paramsDto.AuthAuthorizeFileCode, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1068350101688086528" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/qcxg/qcxg9p1c_processor.go b/internal/domains/api/services/processors/qcxg/qcxg9p1c_processor.go new file mode 100644 index 0000000..fc96405 --- /dev/null +++ b/internal/domains/api/services/processors/qcxg/qcxg9p1c_processor.go @@ -0,0 +1,66 @@ +package qcxg + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/zhicha" +) + +// ProcessQCXG9P1CRequest QCXG9P1C API处理方法 +func ProcessQCXG9P1CRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.QCXG9P1CReq + 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) + } + + encryptedIDCard, err := deps.ZhichaService.Encrypt(paramsDto.IDCard) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + reqData := map[string]interface{}{ + "data": map[string]interface{}{ + "idCardNum": encryptedIDCard, + "authorized": paramsDto.Authorized, + }, + } + if paramsDto.Name != "" { + encryptedName, err := deps.ZhichaService.Encrypt(paramsDto.Name) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + reqData["data"].(map[string]interface{})["name"] = encryptedName + } + // 如果传了 vehicleType,则添加到请求数据中 + if paramsDto.VehicleType != "" { + reqData["data"].(map[string]interface{})["vehicleType"] = paramsDto.VehicleType + } + if paramsDto.UserType != "" { + reqData["data"].(map[string]interface{})["userType"] = paramsDto.UserType + } + + respData, err := deps.ZhichaService.CallAPI(ctx, "ZCI051", reqData) + if err != nil { + if errors.Is(err, zhicha.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + // 将响应数据转换为 JSON 字节 + respBytes, err := json.Marshal(respData) + if err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/qygl/qygl5f6a_processor.go b/internal/domains/api/services/processors/qygl/qygl5f6a_processor.go new file mode 100644 index 0000000..d7cc1dc --- /dev/null +++ b/internal/domains/api/services/processors/qygl/qygl5f6a_processor.go @@ -0,0 +1,55 @@ +package qygl + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessQYGL5F6ARequest QYGL5F6A API处理方法 - 企业相关查询 +func ProcessQYGL5F6ARequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.QYGL5F6AReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "idCardNum": paramsDto.IDCard, + } + + // 如果传了身份证,则添加到请求数据中 + if paramsDto.MobileNo != "" { + reqData["phoneNumber"] = paramsDto.MobileNo + } + + // 如果传了企业统一信用代码,则添加到请求数据中 + if paramsDto.EntCode != "" { + reqData["ucc"] = paramsDto.EntCode + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1101695397213958144" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/yysy/yysy7d3e_processor.go b/internal/domains/api/services/processors/yysy/yysy7d3e_processor.go new file mode 100644 index 0000000..215f33c --- /dev/null +++ b/internal/domains/api/services/processors/yysy/yysy7d3e_processor.go @@ -0,0 +1,45 @@ +package yysy + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessYYSY7D3ERequest YYSY7D3E API处理方法 - 携号转网查询 +func ProcessYYSY7D3ERequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.YYSY7D3EReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "phoneNumber": paramsDto.MobileNo, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1100244706893164544" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/yysy/yysy8c2d_processor.go b/internal/domains/api/services/processors/yysy/yysy8c2d_processor.go new file mode 100644 index 0000000..1b828a4 --- /dev/null +++ b/internal/domains/api/services/processors/yysy/yysy8c2d_processor.go @@ -0,0 +1,47 @@ +package yysy + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessYYSY8C2DRequest YYSY8C2D API处理方法 - 运营商三要素查询 +func ProcessYYSY8C2DRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.YYSY8C2DReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "phoneNumber": paramsDto.MobileNo, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1100244702166183936" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +} diff --git a/internal/domains/api/services/processors/yysy/yysy9a1b_processor.go b/internal/domains/api/services/processors/yysy/yysy9a1b_processor.go new file mode 100644 index 0000000..664a18e --- /dev/null +++ b/internal/domains/api/services/processors/yysy/yysy9a1b_processor.go @@ -0,0 +1,47 @@ +package yysy + +import ( + "context" + "encoding/json" + "errors" + + "tyapi-server/internal/domains/api/dto" + "tyapi-server/internal/domains/api/services/processors" + "tyapi-server/internal/infrastructure/external/xingwei" +) + +// ProcessYYSY9A1BRequest YYSY9A1B API处理方法 - 运营商三要素查询 +func ProcessYYSY9A1BRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { + var paramsDto dto.YYSY9A1BReq + 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) + } + + // 构建请求数据,将项目规范的字段名转换为 XingweiService 需要的字段名 + reqData := map[string]interface{}{ + "name": paramsDto.Name, + "idCardNum": paramsDto.IDCard, + "phoneNumber": paramsDto.MobileNo, + } + + // 调用行为数据API,使用指定的project_id + projectID := "CDJ-1100244697766359040" + respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + if err != nil { + if errors.Is(err, xingwei.ErrNotFound) { + return nil, errors.Join(processors.ErrNotFound, err) + } else if errors.Is(err, xingwei.ErrDatasource) { + return nil, errors.Join(processors.ErrDatasource, err) + } else if errors.Is(err, xingwei.ErrSystem) { + return nil, errors.Join(processors.ErrSystem, err) + } else { + return nil, errors.Join(processors.ErrSystem, err) + } + } + + return respBytes, nil +}