From 1cfd4bf0d093b390524d592b05eb70928a0c514a Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Sat, 24 Jan 2026 12:28:49 +0800 Subject: [PATCH] f --- .../processors/yysy/yysy09cd_processor.go | 160 ++++++++---------- .../processors/yysy/yysy9a1b_processor.go | 12 -- 2 files changed, 73 insertions(+), 99 deletions(-) diff --git a/internal/domains/api/services/processors/yysy/yysy09cd_processor.go b/internal/domains/api/services/processors/yysy/yysy09cd_processor.go index c4b9793..40f8922 100644 --- a/internal/domains/api/services/processors/yysy/yysy09cd_processor.go +++ b/internal/domains/api/services/processors/yysy/yysy09cd_processor.go @@ -8,35 +8,36 @@ import ( "tyapi-server/internal/domains/api/dto" "tyapi-server/internal/domains/api/services/processors" - "tyapi-server/internal/infrastructure/external/xingwei" + "tyapi-server/internal/infrastructure/external/shumai" ) -// XingweiResponseData 星维数据源返回的数据结构 -type XingweiResponseData struct { - OrderNo string `json:"orderNo"` - HandleTime string `json:"handleTime"` - Type string `json:"type"` - Result string `json:"result"` - Gender string `json:"gender"` - Age string `json:"age"` - Remark string `json:"remark"` +// shumaiMobileThreeResp 数脉 /v4/mobile_three/check 返回的 data 结构 +// result: 0-一致 1-不一致 2-无记录;channel: cmcc/cucc/ctcc/gdcc +type shumaiMobileThreeResp struct { + OrderNo string `json:"order_no"` + Result string `json:"result"` + Desc string `json:"desc"` + Channel string `json:"channel"` + Sex string `json:"sex"` + Birthday string `json:"birthday"` + Address string `json:"address"` } -// YYSY09CDResponse 原来的返回结构 +// YYSY09CDResponse 最终返回结构 +// code: 1000一致 1001不一致 1002查无 type YYSY09CDResponse struct { - Code string `json:"code"` - Data YYSY09CDResponseData `json:"data"` + Code string `json:"code"` + Data YYSY09CDResponseData `json:"data"` } -// YYSY09CDResponseData 原来的返回数据结构 type YYSY09CDResponseData struct { - Msg string `json:"msg"` - PhoneType string `json:"phoneType"` - Code int `json:"code"` - EncryptType string `json:"encryptType"` + Msg string `json:"msg"` // 一致/不一致/查无 + PhoneType string `json:"phoneType"` // CMCC/CUCC/CTCC/CBN + Code int `json:"code"` // 1000/1001/1002 + EncryptType string `json:"encryptType"` // MD5 } -// ProcessYYSY09CDRequest YYSY09CD API处理方法 +// ProcessYYSY09CDRequest YYSY09CD API处理方法 - 运营商三要素查询 func ProcessYYSY09CDRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) { var paramsDto dto.YYSY09CDReq if err := json.Unmarshal(params, ¶msDto); err != nil { @@ -46,99 +47,84 @@ func ProcessYYSY09CDRequest(ctx context.Context, params []byte, deps *processors 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, + reqFormData := map[string]interface{}{ + "idcard": paramsDto.IDCard, + "name": paramsDto.Name, + "mobile": paramsDto.MobileNo, } - // 调用行为数据API,使用指定的project_id - projectID := "CDJ-1100244697766359040" - respBytes, err := deps.XingweiService.CallAPI(ctx, projectID, reqData) + deps.ShumaiService.UseGovernment() + apiPath := "/v4/mobile_three/check" + respBytes, err := deps.ShumaiService.CallAPIForm(ctx, apiPath, reqFormData) if err != nil { - if errors.Is(err, xingwei.ErrNotFound) { - return nil, errors.Join(processors.ErrNotFound, err) - } else if errors.Is(err, xingwei.ErrDatasource) { + if errors.Is(err, shumai.ErrDatasource) { return nil, errors.Join(processors.ErrDatasource, err) - } else if errors.Is(err, xingwei.ErrSystem) { + } else if errors.Is(err, shumai.ErrSystem) { return nil, errors.Join(processors.ErrSystem, err) } else { return nil, errors.Join(processors.ErrSystem, err) } } - // 解析星维返回的数据 - var xingweiData XingweiResponseData - if err := json.Unmarshal(respBytes, &xingweiData); err != nil { - return nil, errors.Join(processors.ErrSystem, err) - } - - // 转换为原来的格式 - response := convertToOriginalFormat(xingweiData, paramsDto.MobileType) - - // 序列化为JSON - resultBytes, err := json.Marshal(response) + out, err := mapShumaiMobileThreeToYYSY09CD(respBytes) if err != nil { return nil, errors.Join(processors.ErrSystem, err) } - - return resultBytes, nil + return json.Marshal(out) } -// convertToOriginalFormat 将星维数据源返回的数据转换为原来的格式 -func convertToOriginalFormat(xingweiData XingweiResponseData, mobileType string) YYSY09CDResponse { - // 转换 result 到 code - var code string +// mapShumaiMobileThreeToYYSY09CD 数脉 mobile_three/check 的 data -> 最终格式 +// result: 0->1000一致 1->1001不一致 2->1002查无 其它->1002查无;channel: cmcc->CMCC cucc->CUCC ctcc->CTCC gdcc->CBN +func mapShumaiMobileThreeToYYSY09CD(dataBytes []byte) (*YYSY09CDResponse, error) { + var r shumaiMobileThreeResp + if err := json.Unmarshal(dataBytes, &r); err != nil { + return nil, err + } + + // code/msg: 1000一致 1001不一致 1002查无 + var codeStr string var codeInt int - switch xingweiData.Result { - case "01": // 一致 - code = "1000" + var msg string + switch strings.TrimSpace(r.Result) { + case "0": + codeStr = "1000" codeInt = 1000 - case "02": // 不一致 - code = "1001" + msg = "一致" + case "1": + codeStr = "1001" codeInt = 1001 - case "03", "04": // 不确定或失败/虚拟号 -> 查无 - code = "1002" + msg = "不一致" + case "2": + codeStr = "1002" codeInt = 1002 + msg = "查无" default: - // 默认查无 - code = "1002" + codeStr = "1002" codeInt = 1002 + msg = "查无" } - // 从 remark 提取 msg,去掉"认证"前缀 - msg := xingweiData.Remark - if strings.HasPrefix(msg, "认证") { - msg = strings.TrimPrefix(msg, "认证") + // phoneType: cmcc->CMCC cucc->CUCC ctcc->CTCC gdcc->CBN(广电) + ch := strings.ToLower(strings.TrimSpace(r.Channel)) + var phoneType string + switch ch { + case "cmcc": + phoneType = "CMCC" + case "cucc": + phoneType = "CUCC" + case "ctcc": + phoneType = "CTCC" + case "gdcc": + phoneType = "CBN" } - // 转换 type 到 phoneType - // 如果请求参数中有 mobileType,优先使用;否则从返回的 type 转换 - phoneType := mobileType - if phoneType == "" { - switch xingweiData.Type { - case "1": // 移动 - phoneType = "CMCC" - case "2": // 联通 - phoneType = "CUCC" - case "3": // 电信 - phoneType = "CTCC" - case "4": // 广电 - phoneType = "CBN" - default: - phoneType = "" - } - } - - return YYSY09CDResponse{ - Code: code, + return &YYSY09CDResponse{ + Code: codeStr, Data: YYSY09CDResponseData{ - Msg: msg, - PhoneType: phoneType, - Code: codeInt, + Msg: msg, + PhoneType: phoneType, + Code: codeInt, EncryptType: "MD5", }, - } -} \ No newline at end of file + }, nil +} diff --git a/internal/domains/api/services/processors/yysy/yysy9a1b_processor.go b/internal/domains/api/services/processors/yysy/yysy9a1b_processor.go index 30dd0ee..4a0ba91 100644 --- a/internal/domains/api/services/processors/yysy/yysy9a1b_processor.go +++ b/internal/domains/api/services/processors/yysy/yysy9a1b_processor.go @@ -13,18 +13,6 @@ import ( "tyapi-server/internal/infrastructure/external/shumai" ) -// shumaiMobileThreeResp 数脉 /v4/mobile_three/check 返回的 data 结构 -// result: 0-一致收费 1-不一致收费 2-无记录不收费 -type shumaiMobileThreeResp struct { - OrderNo string `json:"order_no"` - Result string `json:"result"` - Desc string `json:"desc"` - Channel string `json:"channel"` - Sex string `json:"sex"` - Birthday string `json:"birthday"` - Address string `json:"address"` -} - // yysy9a1bOut 最终返回格式 // result: 01一致 02不一致 03不确定 04失败/虚拟号;type: 1移动 2联通 3电信 4广电 type yysy9a1bOut struct {