From f5b3eaca07056bbb10dc45abf78c323d90a2f62a Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Mon, 26 May 2025 19:05:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8F=AA=E7=94=A8idcard=20na?= =?UTF-8?q?me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/logic/query/queryservicelogic.go | 899 +----------------- app/user/cmd/api/internal/types/query.go | 14 - 2 files changed, 34 insertions(+), 879 deletions(-) diff --git a/app/user/cmd/api/internal/logic/query/queryservicelogic.go b/app/user/cmd/api/internal/logic/query/queryservicelogic.go index 057c763..53b9d2c 100644 --- a/app/user/cmd/api/internal/logic/query/queryservicelogic.go +++ b/app/user/cmd/api/internal/logic/query/queryservicelogic.go @@ -46,33 +46,13 @@ func (l *QueryServiceLogic) QueryService(req *types.QueryServiceReq) (resp *type } var productProcessors = map[string]func(*QueryServiceLogic, *types.QueryServiceReq) (*types.QueryServiceResp, error){ - "marriage": (*QueryServiceLogic).ProcessMarriageLogic, - "homeservice": (*QueryServiceLogic).ProcessHomeServiceLogic, - "riskassessment": (*QueryServiceLogic).ProcessRiskAssessmentLogic, - "companyinfo": (*QueryServiceLogic).ProcessCompanyInfoLogic, - "rentalinfo": (*QueryServiceLogic).ProcessRentalInfoLogic, - "preloanbackgroundcheck": (*QueryServiceLogic).ProcessPreLoanBackgroundCheckLogic, - "backgroundcheck": (*QueryServiceLogic).ProcessBackgroundCheckLogic, - "toc_Marriage": (*QueryServiceLogic).ProcessTocMarriageLogic, - "toc_PersonalBadRecord": (*QueryServiceLogic).ProcessTocPersonalBadRecordLogic, - "toc_ShareholderBusinessRelation": (*QueryServiceLogic).ProcessTocShareholderBusinessRelationLogic, - "toc_PersonalLawsuit": (*QueryServiceLogic).ProcessTocPersonalLawsuitLogic, - "toc_EnterpriseLawsuit": (*QueryServiceLogic).ProcessTocEnterpriseLawsuitLogic, - "toc_PhoneThreeElements": (*QueryServiceLogic).ProcessTocPhoneThreeElementsLogic, - "toc_PhoneTwoElements": (*QueryServiceLogic).ProcessTocPhoneTwoElementsLogic, - "toc_IDCardTwoElements": (*QueryServiceLogic).ProcessTocIDCardTwoElementsLogic, - "toc_NaturalLifeStatus": (*QueryServiceLogic).ProcessTocNaturalLifeStatusLogic, - "toc_PersonVehicleVerification": (*QueryServiceLogic).ProcessTocPersonVehicleVerificationLogic, - "toc_BankCardBlacklist": (*QueryServiceLogic).ProcessTocBankCardBlacklistLogic, - "toc_VehiclesUnderName": (*QueryServiceLogic).ProcessTocVehiclesUnderNameLogic, - "toc_DualMarriage": (*QueryServiceLogic).ProcessTocDualMarriageLogic, - "toc_PhoneNumberRisk": (*QueryServiceLogic).ProcessTocPhoneNumberRiskLogic, - "toc_NetworkDuration": (*QueryServiceLogic).ProcessTocNetworkDurationLogic, - "toc_PhoneSecondaryCard": (*QueryServiceLogic).ProcessTocPhoneSecondaryCardLogic, - "toc_BankCardFourElements": (*QueryServiceLogic).ProcessTocBankCardFourElementsLogic, - "toc_EnterpriseCase": (*QueryServiceLogic).ProcessTocEnterpriseCaseLogic, - "toc_PersonJudicialDishonest": (*QueryServiceLogic).ProcessTocPersonJudicialDishonestLogic, - "toc_PersonConsumptionRestriction": (*QueryServiceLogic).ProcessTocPersonConsumptionRestrictionLogic, + "marriage": (*QueryServiceLogic).ProcessMarriageLogic, + "homeservice": (*QueryServiceLogic).ProcessHomeServiceLogic, + "riskassessment": (*QueryServiceLogic).ProcessRiskAssessmentLogic, + "companyinfo": (*QueryServiceLogic).ProcessCompanyInfoLogic, + "rentalinfo": (*QueryServiceLogic).ProcessRentalInfoLogic, + "preloanbackgroundcheck": (*QueryServiceLogic).ProcessPreLoanBackgroundCheckLogic, + "backgroundcheck": (*QueryServiceLogic).ProcessBackgroundCheckLogic, } func (l *QueryServiceLogic) PreprocessLogic(req *types.QueryServiceReq, product string) (*types.QueryServiceResp, error) { @@ -99,14 +79,8 @@ func (l *QueryServiceLogic) ProcessMarriageLogic(req *types.QueryServiceReq) (*t return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) } - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) + // 校验二要素 + verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) if verifyErr != nil { return nil, verifyErr } @@ -115,7 +89,6 @@ func (l *QueryServiceLogic) ProcessMarriageLogic(req *types.QueryServiceReq) (*t params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, - "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -159,14 +132,8 @@ func (l *QueryServiceLogic) ProcessHomeServiceLogic(req *types.QueryServiceReq) return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) } - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) + // 校验二要素 + verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) if verifyErr != nil { return nil, verifyErr } @@ -175,7 +142,6 @@ func (l *QueryServiceLogic) ProcessHomeServiceLogic(req *types.QueryServiceReq) params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, - "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -220,14 +186,8 @@ func (l *QueryServiceLogic) ProcessRiskAssessmentLogic(req *types.QueryServiceRe return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) } - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) + // 校验二要素 + verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) if verifyErr != nil { return nil, verifyErr } @@ -236,7 +196,6 @@ func (l *QueryServiceLogic) ProcessRiskAssessmentLogic(req *types.QueryServiceRe params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, - "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -280,14 +239,8 @@ func (l *QueryServiceLogic) ProcessCompanyInfoLogic(req *types.QueryServiceReq) return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) } - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) + // 校验二要素 + verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) if verifyErr != nil { return nil, verifyErr } @@ -296,7 +249,6 @@ func (l *QueryServiceLogic) ProcessCompanyInfoLogic(req *types.QueryServiceReq) params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, - "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -341,14 +293,9 @@ func (l *QueryServiceLogic) ProcessRentalInfoLogic(req *types.QueryServiceReq) ( return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) } - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } + // 校验二要素 - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) + verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) if verifyErr != nil { return nil, verifyErr } @@ -357,7 +304,6 @@ func (l *QueryServiceLogic) ProcessRentalInfoLogic(req *types.QueryServiceReq) ( params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, - "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -402,14 +348,9 @@ func (l *QueryServiceLogic) ProcessPreLoanBackgroundCheckLogic(req *types.QueryS return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) } - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } + // 校验二要素 - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) + verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) if verifyErr != nil { return nil, verifyErr } @@ -418,7 +359,6 @@ func (l *QueryServiceLogic) ProcessPreLoanBackgroundCheckLogic(req *types.QueryS params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, - "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -462,14 +402,7 @@ func (l *QueryServiceLogic) ProcessBackgroundCheckLogic(req *types.QueryServiceR return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) } - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) + verifyErr := l.VerifyTwoElements(data.Name, data.IDCard) if verifyErr != nil { return nil, verifyErr } @@ -478,7 +411,6 @@ func (l *QueryServiceLogic) ProcessBackgroundCheckLogic(req *types.QueryServiceR params := map[string]interface{}{ "name": data.Name, "id_card": data.IDCard, - "mobile": data.Mobile, } userID, err := l.GetOrCreateUser() if err != nil { @@ -503,783 +435,6 @@ func (l *QueryServiceLogic) ProcessBackgroundCheckLogic(req *types.QueryServiceR RefreshAfter: now + l.svcCtx.Config.JwtAuth.RefreshAfter, }, nil } - -func (l *QueryServiceLogic) ProcessTocMarriageLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.MarriageReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) - if verifyErr != nil { - return nil, verifyErr - } - - // 缓存 - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - "mobile": data.Mobile, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_Marriage", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} -func (l *QueryServiceLogic) ProcessTocPersonalBadRecordLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.MarriageReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) - if verifyErr != nil { - return nil, verifyErr - } - - // 缓存 - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - "mobile": data.Mobile, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_PersonalBadRecord", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} -func (l *QueryServiceLogic) ProcessTocShareholderBusinessRelationLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.MarriageReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) - if verifyErr != nil { - return nil, verifyErr - } - - // 缓存 - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - "mobile": data.Mobile, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_ShareholderBusinessRelation", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} -func (l *QueryServiceLogic) ProcessTocPersonalLawsuitLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.MarriageReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 校验三要素 - verifyErr := l.Verify(data.Name, data.IDCard, data.Mobile) - if verifyErr != nil { - return nil, verifyErr - } - - // 缓存 - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - "mobile": data.Mobile, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_PersonalLawsuit", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} -func (l *QueryServiceLogic) ProcessTocEnterpriseLawsuitLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.EntLawsuitReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 缓存 - params := map[string]interface{}{ - "ent_name": data.EntName, - "ent_code": data.EntCode, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_EnterpriseLawsuit", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -func (l *QueryServiceLogic) ProcessTocPhoneThreeElementsLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后失败: %+v", DecryptDataErr) - } - - // 校验参数 - var data types.TocPhoneThreeElements - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - "mobile": data.Mobile, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_PhoneThreeElements", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} -func (l *QueryServiceLogic) ProcessTocPhoneTwoElementsLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, getUidErr - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocPhoneTwoElements - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "name": data.Name, - "mobile": data.Mobile, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_PhoneTwoElements", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// 身份二要素 -func (l *QueryServiceLogic) ProcessTocIDCardTwoElementsLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocIDCardTwoElements - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_IDCardTwoElements", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// 自然人生存 -func (l *QueryServiceLogic) ProcessTocNaturalLifeStatusLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocIDCardTwoElements - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_NaturalLifeStatus", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocVehiclesUnderNameLogic 名下车辆那个 -func (l *QueryServiceLogic) ProcessTocVehiclesUnderNameLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocIDCardTwoElements - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_VehiclesUnderName", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocPersonVehicleVerificationLogic 人车核验 -func (l *QueryServiceLogic) ProcessTocPersonVehicleVerificationLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocPersonVehicleVerification - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "name": data.Name, - "car_type": data.CarType, - "car_license": data.CarLicense, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_PersonVehicleVerification", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocBankCardBlacklistLogic 银行卡黑名单 -func (l *QueryServiceLogic) ProcessTocBankCardBlacklistLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocBankCardBlacklist - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - "mobile": data.Mobile, - "bank_card": data.BankCard, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_BankCardBlacklist", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocDualMarriageLogic 双人婚姻 -func (l *QueryServiceLogic) ProcessTocDualMarriageLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocDualMarriage - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "nameMan": data.NameMan, - "idCardMan": data.IDCardMan, - "nameWoman": data.NameWoman, - "idCardWoman": data.IDCardWoman, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_DualMarriage", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocPhoneNumberRiskLogic 手机号码风险 -func (l *QueryServiceLogic) ProcessTocPhoneNumberRiskLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocPhoneNumberRisk - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "mobile": data.Mobile, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_PhoneNumberRisk", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocNetworkDurationLogic 手机在网时长 -func (l *QueryServiceLogic) ProcessTocNetworkDurationLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocPhoneNumberRisk - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "mobile": data.Mobile, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_NetworkDuration", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocPhoneSecondaryCardLogic 手机二次卡 -func (l *QueryServiceLogic) ProcessTocPhoneSecondaryCardLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocPhoneSecondaryCard - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "mobile": data.Mobile, - "startDate": data.StartDate, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_PhoneSecondaryCard", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocBankCardFourElementsLogic 银行卡四要素 -func (l *QueryServiceLogic) ProcessTocBankCardFourElementsLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.TocBankCardBlacklist - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - "mobile": data.Mobile, - "bank_card": data.BankCard, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_BankCardFourElements", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -func (l *QueryServiceLogic) ProcessTocEnterpriseCaseLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.EntLawsuitReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 缓存 - params := map[string]interface{}{ - "ent_name": data.EntName, - "ent_code": data.EntCode, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_EnterpriseCase", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocPersonJudicialDishonestLogic 个人失信 -func (l *QueryServiceLogic) ProcessTocPersonJudicialDishonestLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.MarriageReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 缓存 - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_PersonJudicialDishonest", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} - -// ProcessTocPersonConsumptionRestrictionLogic 个人限高 -func (l *QueryServiceLogic) ProcessTocPersonConsumptionRestrictionLogic(req *types.QueryServiceReq) (*types.QueryServiceResp, error) { - userID, getUidErr := ctxdata.GetUidFromCtx(l.ctx) - if getUidErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 获取用户信息失败, %+v", getUidErr) - } - - // AES解密 - decryptData, DecryptDataErr := l.DecryptData(req.Data) - if DecryptDataErr != nil { - return nil, DecryptDataErr - } - - // 校验参数 - var data types.MarriageReq - if unmarshalErr := json.Unmarshal(decryptData, &data); unmarshalErr != nil { - return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询服务, 解密后的数据格式不正确: %+v", unmarshalErr) - } - - if validatorErr := validator.Validate(data); validatorErr != nil { - return nil, errors.Wrapf(xerr.NewErrCodeMsg(xerr.PARAM_VERIFICATION_ERROR, validatorErr.Error()), "查询服务, 参数不正确: %+v", validatorErr) - } - - // 校验验证码 - verifyCodeErr := l.VerifyCode(data.Mobile, data.Code) - if verifyCodeErr != nil { - return nil, verifyCodeErr - } - - // 缓存 - params := map[string]interface{}{ - "name": data.Name, - "id_card": data.IDCard, - } - cacheNo, cacheDataErr := l.CacheData(params, "toc_PersonConsumptionRestriction", userID) - if cacheDataErr != nil { - return nil, cacheDataErr - } - - return &types.QueryServiceResp{Id: cacheNo}, nil -} func (l *QueryServiceLogic) DecryptData(data string) ([]byte, error) { secretKey := l.svcCtx.Config.Encrypt.SecretKey key, decodeErr := hex.DecodeString(secretKey) @@ -1316,6 +471,20 @@ func (l *QueryServiceLogic) VerifyCode(mobile string, code string) error { } return nil } +func (l *QueryServiceLogic) VerifyTwoElements(Name string, IDCard string) error { + twoVerification := service.TwoFactorVerificationRequest{ + Name: Name, + IDCard: IDCard, + } + verification, err := l.svcCtx.VerificationService.TwoFactorVerificationWest(twoVerification) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "二要素验证失败: %v", err) + } + if !verification.Passed { + return errors.Wrapf(xerr.NewErrCodeMsg(xerr.SERVER_COMMON_ERROR, verification.Err.Error()), "二要素验证不通过: %v", err) + } + return nil +} // 二、三要素验证 func (l *QueryServiceLogic) Verify(Name string, IDCard string, Mobile string) error { diff --git a/app/user/cmd/api/internal/types/query.go b/app/user/cmd/api/internal/types/query.go index 5687f34..fbf9d3d 100644 --- a/app/user/cmd/api/internal/types/query.go +++ b/app/user/cmd/api/internal/types/query.go @@ -3,54 +3,40 @@ package types type MarriageReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` - Mobile string `json:"mobile" validate:"required,mobile"` - Code string `json:"code" validate:"required"` } type HomeServiceReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` - Mobile string `json:"mobile" validate:"required,mobile"` - Code string `json:"code" validate:"required"` } // RiskAssessment 查询请求结构 type RiskAssessmentReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` - Mobile string `json:"mobile" validate:"required,mobile"` - Code string `json:"code" validate:"required"` } // CompanyInfo 查询请求结构 type CompanyInfoReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` - Mobile string `json:"mobile" validate:"required,mobile"` - Code string `json:"code" validate:"required"` } // RentalInfo 查询请求结构 type RentalInfoReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` - Mobile string `json:"mobile" validate:"required,mobile"` - Code string `json:"code" validate:"required"` } // PreLoanBackgroundCheck 查询请求结构 type PreLoanBackgroundCheckReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` - Mobile string `json:"mobile" validate:"required,mobile"` - Code string `json:"code" validate:"required"` } // BackgroundCheck 查询请求结构 type BackgroundCheckReq struct { Name string `json:"name" validate:"required,name"` IDCard string `json:"id_card" validate:"required,idCard"` - Mobile string `json:"mobile" validate:"required,mobile"` - Code string `json:"code" validate:"required"` } type EntLawsuitReq struct { EntName string `json:"ent_name" validate:"required,name"`