This commit is contained in:
Mrx
2026-01-31 11:32:53 +08:00
parent 6a1a59de8d
commit a6f858dbd3
7 changed files with 137 additions and 5 deletions

View File

@@ -123,6 +123,11 @@ type YYSYK9R4Req struct {
type QCXG9F5CReq struct { type QCXG9F5CReq struct {
PlateNo string `json:"plate_no" validate:"required"` PlateNo string `json:"plate_no" validate:"required"`
} }
type QCXG3M7ZReq struct {
PlateNo string `json:"plate_no" validate:"required"`
Name string `json:"name" validate:"required,min=1,validName"`
PlateColor string `json:"plate_color" validate:"omitempty"`
}
type QCXG3B8ZReq struct { type QCXG3B8ZReq struct {
PlateNo string `json:"plate_no" validate:"required"` PlateNo string `json:"plate_no" validate:"required"`
} }
@@ -135,8 +140,15 @@ type QCXGP1W3Req struct {
type QCXG5U0ZReq struct { type QCXG5U0ZReq struct {
VinCode string `json:"vin_code" validate:"required"` VinCode string `json:"vin_code" validate:"required"`
} }
type QCXGU2K4Req struct {
PlateNo string `json:"plate_no" validate:"required"`
}
type QCXGY7F2Req struct { type QCXGY7F2Req struct {
VinCode string `json:"vin_code" validate:"required"` VinCode string `json:"vin_code" validate:"required"`
VehicleName string `json:"vehicle_name" validate:"omitempty"`
VehicleLocation string `json:"vehicle_location" validate:"required"`
FirstRegistrationdate string `json:"first_registrationdate" validate:"required"`
Color string `json:"color" validate:"omitempty"`
} }
type QYGL6F2DReq struct { type QYGL6F2DReq struct {
IDCard string `json:"id_card" validate:"required,validIDCard"` IDCard string `json:"id_card" validate:"required,validIDCard"`

View File

@@ -205,6 +205,7 @@ func registerAllProcessors(combService *comb.CombService) {
"YYSYS9W1": yysy.ProcessYYSYS9W1Request, //手机携号转网查询 "YYSYS9W1": yysy.ProcessYYSYS9W1Request, //手机携号转网查询
"YYSYK8R3": yysy.ProcessYYSYK8R3Request, //手机空号检测查询 "YYSYK8R3": yysy.ProcessYYSYK8R3Request, //手机空号检测查询
"YYSYH6F3": yysy.ProcessYYSYH6F3Request, //运营商三要素即时版查询 "YYSYH6F3": yysy.ProcessYYSYH6F3Request, //运营商三要素即时版查询
"YYSYK9R4": yysy.ProcessYYSYK9R4Request, //全网手机三要素验证1979周更新版
// IVYZ系列处理器 // IVYZ系列处理器
"IVYZ0B03": ivyz.ProcessIVYZ0B03Request, "IVYZ0B03": ivyz.ProcessIVYZ0B03Request,
@@ -274,8 +275,10 @@ func registerAllProcessors(combService *comb.CombService) {
"QCXG3B8Z": qcxg.ProcessQCXG3B8ZRequest, //疑似运营车辆查询月度里程10268 "QCXG3B8Z": qcxg.ProcessQCXG3B8ZRequest, //疑似运营车辆查询月度里程10268
"QCXGP1W3": qcxg.ProcessQCXGP1W3Request, //疑似运营车辆查询季度里程10269 "QCXGP1W3": qcxg.ProcessQCXGP1W3Request, //疑似运营车辆查询季度里程10269
"QCXGM7R9": qcxg.ProcessQCXGM7R9Request, //疑似运营车辆查询半年度里程10270 "QCXGM7R9": qcxg.ProcessQCXGM7R9Request, //疑似运营车辆查询半年度里程10270
"QCXGU2K4": qcxg.ProcessQCXGU2K4Request, //疑似运营车辆查询年度里程10271
"QCXG5U0Z": qcxg.ProcessQCXG5U0ZRequest, // 车辆静态信息查询 10479 "QCXG5U0Z": qcxg.ProcessQCXG5U0ZRequest, // 车辆静态信息查询 10479
"QCXGY7F2": qcxg.ProcessQCXGY7F2Request, // 二手车VIN估值 10443 "QCXGY7F2": qcxg.ProcessQCXGY7F2Request, // 二手车VIN估值 10443
"QCXG3M7Z": qcxg.ProcessQCXG3M7ZRequest, //人车关系核验ETC10093 月更
// DWBG系列处理器 - 多维报告 // DWBG系列处理器 - 多维报告
"DWBG6A2C": dwbg.ProcessDWBG6A2CRequest, "DWBG6A2C": dwbg.ProcessDWBG6A2CRequest,

View File

@@ -249,9 +249,11 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string
"QCXG3B8Z": &dto.QCXG3B8ZReq{}, //疑似运营车辆查询月度里程10268 "QCXG3B8Z": &dto.QCXG3B8ZReq{}, //疑似运营车辆查询月度里程10268
"QCXGP1W3": &dto.QCXGP1W3Req{}, //疑似运营车辆查询季度里程10269 "QCXGP1W3": &dto.QCXGP1W3Req{}, //疑似运营车辆查询季度里程10269
"QCXGM7R9": &dto.QCXGM7R9Req{}, //疑似运营车辆查询半年度里程10270 "QCXGM7R9": &dto.QCXGM7R9Req{}, //疑似运营车辆查询半年度里程10270
"QCXGU2K4": &dto.QCXGU2K4Req{}, //疑似运营车辆查询年度里程10271
"QCXG5U0Z": &dto.QCXG5U0ZReq{}, //车辆静态信息查询 10479 "QCXG5U0Z": &dto.QCXG5U0ZReq{}, //车辆静态信息查询 10479
"QCXGY7F2": &dto.QCXGY7F2Req{}, //二手车VIN估值 10443 "QCXGY7F2": &dto.QCXGY7F2Req{}, //二手车VIN估值 10443
"YYSYK9R4": &dto.YYSYK9R4Req{}, //全网手机三要素验证1979周更新版
"QCXG3M7Z": &dto.QCXG3M7ZReq{}, //人车关系核验ETC10093 月更
} }
// 优先返回已配置的DTO // 优先返回已配置的DTO
@@ -467,6 +469,11 @@ func (s *FormConfigServiceImpl) generateFieldLabel(jsonTag string) string {
"image_url": "行驶证图片地址", "image_url": "行驶证图片地址",
"reg_url": "车辆登记证图片地址", "reg_url": "车辆登记证图片地址",
"token": "token采集及获取结果时所使用的凭证有效期2个小时在此时效内应用侧可以发起采集请求重复的采集所触发的结果会被忽略和结果查询", "token": "token采集及获取结果时所使用的凭证有效期2个小时在此时效内应用侧可以发起采集请求重复的采集所触发的结果会被忽略和结果查询",
"vehicle_name": "车型名称",
"vehicle_location": "车辆所在地",
"first_registrationdate": "首次登记日期",
"color": "颜色",
"plate_color": "车牌颜色",
} }
if label, exists := labelMap[jsonTag]; exists { if label, exists := labelMap[jsonTag]; exists {
@@ -524,6 +531,11 @@ func (s *FormConfigServiceImpl) generateExampleValue(fieldType reflect.Type, jso
"image_url": "https://example.com/images/driving_license.jpg", "image_url": "https://example.com/images/driving_license.jpg",
"reg_url": "https://example.com/images/vehicle_registration.jpg", "reg_url": "https://example.com/images/vehicle_registration.jpg",
"token": "0fc79b80371f45e2ac1c693ef9136b24", "token": "0fc79b80371f45e2ac1c693ef9136b24",
"vehicle_name": "车型名称,示例:凌派 2020款 锐·混动 1.5L 锐·舒适版",
"vehicle_location": "车辆所在地,示例:北京市",
"first_registrationdate": "首次登记日期示例2020-01-01",
"color": "颜色,示例:白色",
"plate_color": "车牌颜色,示例:蓝",
} }
if example, exists := exampleMap[jsonTag]; exists { if example, exists := exampleMap[jsonTag]; exists {
@@ -590,6 +602,11 @@ func (s *FormConfigServiceImpl) generatePlaceholder(jsonTag string, fieldType st
"image_url": "请输入行驶证图片地址", "image_url": "请输入行驶证图片地址",
"reg_url": "请输入车辆登记证图片地址", "reg_url": "请输入车辆登记证图片地址",
"token": "请输入token", "token": "请输入token",
"vehicle_name": "请输入车型名称",
"vehicle_location": "请输入车辆所在地",
"first_registrationdate": "请输入首次登记日期",
"color": "请输入颜色",
"plate_color": "请输入车牌颜色",
} }
if placeholder, exists := placeholderMap[jsonTag]; exists { if placeholder, exists := placeholderMap[jsonTag]; exists {
@@ -658,6 +675,11 @@ func (s *FormConfigServiceImpl) generateDescription(jsonTag string, validation s
"image_url": "行驶证图片地址必填请提供行驶证的图片URL地址", "image_url": "行驶证图片地址必填请提供行驶证的图片URL地址",
"reg_url": "车辆登记证图片地址非必填请提供车辆登记证的图片URL地址", "reg_url": "车辆登记证图片地址非必填请提供车辆登记证的图片URL地址",
"token": "token采集及获取结果时所使用的凭证有效期2个小时在此时效内应用侧可以发起采集请求重复的采集所触发的结果会被忽略和结果查询", "token": "token采集及获取结果时所使用的凭证有效期2个小时在此时效内应用侧可以发起采集请求重复的采集所触发的结果会被忽略和结果查询",
"vehicle_name": "车型名称",
"vehicle_location": "车辆所在地",
"first_registrationdate": "首次登记日期",
"color": "颜色",
"plate_color": "车牌颜色",
} }
if desc, exists := descMap[jsonTag]; exists { if desc, exists := descMap[jsonTag]; exists {

View File

@@ -58,6 +58,5 @@ func ProcessJRZQDCBERequest(ctx context.Context, params []byte, deps *processors
return nil, errors.Join(processors.ErrSystem, err) return nil, errors.Join(processors.ErrSystem, err)
} }
} }
return respBytes, nil return respBytes, nil
} }

View File

@@ -0,0 +1,47 @@
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/shujubao"
)
// ProcessQCXG3M7ZRequest QCXG3M7Z 人车关系核验ETC10093 月更 API 处理方法(使用数据宝服务示例)
func ProcessQCXG3M7ZRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) {
var paramsDto dto.QCXG3M7ZReq
if err := json.Unmarshal(params, &paramsDto); err != nil {
return nil, errors.Join(processors.ErrSystem, err)
}
if err := deps.Validator.ValidateStruct(paramsDto); err != nil {
return nil, errors.Join(processors.ErrInvalidParam, err)
}
// 构建数据宝入参姓名、身份证、手机号、银行卡号sign 外的业务参数可按需 AES 加密后作为 bodyData
reqParams := map[string]interface{}{
"key": "a2f32fc54b44ebc85b97a2aaff1734ec",
"carNo": paramsDto.PlateNo,
"name": paramsDto.Name,
"plateColor": paramsDto.PlateColor,
}
// 最终请求 URL = https://api.chinadatapay.com/communication + 拼接接口地址值,如 personal/197
apiPath := "/communication/personal/10093"
data, err := deps.ShujubaoService.CallAPI(ctx, apiPath, reqParams)
if err != nil {
if errors.Is(err, shujubao.ErrDatasource) {
return nil, errors.Join(processors.ErrDatasource, err)
}
return nil, errors.Join(processors.ErrSystem, err)
}
respBytes, err := json.Marshal(data)
if err != nil {
return nil, errors.Join(processors.ErrSystem, err)
}
return respBytes, nil
}

View File

@@ -0,0 +1,45 @@
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/shujubao"
)
// ProcessQCXGU2K4Request QCXGU2K4 疑似运营车辆查询年度里程10271 API 处理方法(使用数据宝服务示例)
func ProcessQCXGU2K4Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) {
var paramsDto dto.QCXGU2K4Req
if err := json.Unmarshal(params, &paramsDto); err != nil {
return nil, errors.Join(processors.ErrSystem, err)
}
if err := deps.Validator.ValidateStruct(paramsDto); err != nil {
return nil, errors.Join(processors.ErrInvalidParam, err)
}
// 构建数据宝入参姓名、身份证、手机号、银行卡号sign 外的业务参数可按需 AES 加密后作为 bodyData
reqParams := map[string]interface{}{
"key": "8c02f9c755b37b5a1bd39fc6ac9569d6",
"carNo": paramsDto.PlateNo,
}
// 最终请求 URL = https://api.chinadatapay.com/communication + 拼接接口地址值,如 personal/197
apiPath := "/communication/personal/10271"
data, err := deps.ShujubaoService.CallAPI(ctx, apiPath, reqParams)
if err != nil {
if errors.Is(err, shujubao.ErrDatasource) {
return nil, errors.Join(processors.ErrDatasource, err)
}
return nil, errors.Join(processors.ErrSystem, err)
}
respBytes, err := json.Marshal(data)
if err != nil {
return nil, errors.Join(processors.ErrSystem, err)
}
return respBytes, nil
}

View File

@@ -24,6 +24,10 @@ func ProcessQCXGY7F2Request(ctx context.Context, params []byte, deps *processors
reqParams := map[string]interface{}{ reqParams := map[string]interface{}{
"key": "463cea654a0a99d5d04c62f98ac882c0", "key": "463cea654a0a99d5d04c62f98ac882c0",
"vin": paramsDto.VinCode, "vin": paramsDto.VinCode,
"model_name": paramsDto.VehicleName,
"Vehicle_location": paramsDto.VehicleLocation,
"firstRegistrationDate": paramsDto.FirstRegistrationdate,
"color": paramsDto.Color,
} }
apiPath := "/government/traffic/10443" apiPath := "/government/traffic/10443"