Commit 40b95c9f authored by zhengjian's avatar zhengjian

你我贷

parent 3ec4b7ee
...@@ -11,19 +11,24 @@ import org.apache.http.conn.ConnectionKeepAliveStrategy; ...@@ -11,19 +11,24 @@ import org.apache.http.conn.ConnectionKeepAliveStrategy;
import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy; import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.HttpContext;
import org.apache.http.ssl.SSLContexts;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import javax.net.ssl.*; import javax.net.ssl.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.security.KeyManagementException; import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.security.cert.CertificateException; import java.security.cert.CertificateException;
...@@ -100,5 +105,66 @@ public class HttpClientConfig { ...@@ -100,5 +105,66 @@ public class HttpClientConfig {
.build(); .build();
} }
@Bean("niwodaiHttpsClient")
public CloseableHttpClient niwodaiHttpsClient() throws Exception{
/**
* 创建TrustManager
*/
X509TrustManager xtm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream(new File("F:\\9_QFNEW\\data-export-platform\\src\\main\\resources\\niwodai\\qg-keystore.jks")), "password".toCharArray());
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial(new File("F:\\9_QFNEW\\data-export-platform\\src\\main\\resources\\niwodai\\qg-truststore.jks"), "password".toCharArray(), new TrustSelfSignedStrategy())
.loadKeyMaterial(keyStore, "password".toCharArray())
.build();
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
sslcontext,
new String[]{"TLSv1.2"},
null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", sslConnectionSocketFactory)
.build();
// connection manager
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
connectionManager.setMaxTotal(10000);
connectionManager.setDefaultMaxPerRoute(1000);
HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {
@Override
public boolean retryRequest(IOException arg0, int retryTimes, HttpContext arg2) {
if (retryTimes >= 2)
return false;
if (arg0 instanceof UnknownHostException || arg0 instanceof ConnectTimeoutException
|| !(arg0 instanceof SSLException) || arg0 instanceof SocketTimeoutException)
return true;
HttpClientContext clientContext = HttpClientContext.adapt(arg2);
HttpRequest request = clientContext.getRequest();
if (!(request instanceof HttpEntityEnclosingRequest)) // 如果请求被认为是幂等的,那么就重试。即重复执行不影响程序其他效果的
return true;
return false;
}
};
// keep alive strategy
ConnectionKeepAliveStrategy keepAliveStrategy = new DefaultConnectionKeepAliveStrategy();
return HttpClients.custom()
.setConnectionManager(connectionManager)
.setRetryHandler(retryHandler)
.setKeepAliveStrategy(keepAliveStrategy)
.build();
}
} }
...@@ -26,4 +26,8 @@ public class RedisKeyConstants { ...@@ -26,4 +26,8 @@ public class RedisKeyConstants {
* 分发失败节点记录 * 分发失败节点记录
*/ */
public final static String DISTRIBUTE_FAIL_TYPE_RECORD = "ASSET.DISTRIBUTE.DISTRIBUTE.FAIL.TYPE.KEY.8SAWNB_"; public final static String DISTRIBUTE_FAIL_TYPE_RECORD = "ASSET.DISTRIBUTE.DISTRIBUTE.FAIL.TYPE.KEY.8SAWNB_";
/**
* 你我贷token
*/
public static final String NI_WO_DAI_TOKEN_KEY = "DATA_EXPORT_PLATFORM:NIWODAI:TOKEN:YHALEA";
} }
...@@ -78,4 +78,8 @@ public interface IHttpService { ...@@ -78,4 +78,8 @@ public interface IHttpService {
public Map<String,String> postHasResponse(String url, Map<String, String> parameters); public Map<String,String> postHasResponse(String url, Map<String, String> parameters);
public String post(String uri, Map<String, String> headers,Map<String, String> parameters,boolean isLog,int timeOut); public String post(String uri, Map<String, String> headers,Map<String, String> parameters,boolean isLog,int timeOut);
String postNiwodai(String uri, Map<String, String> headers, Map<String, String> parameters, boolean isLog);
String postNiwodaiJson(String uri, Map<String, String> headers, String jsonParams, boolean isLog);
} }
...@@ -47,6 +47,9 @@ public class HttpServiceImpl implements IHttpService { ...@@ -47,6 +47,9 @@ public class HttpServiceImpl implements IHttpService {
@Autowired @Autowired
@Qualifier("httpClient") @Qualifier("httpClient")
private CloseableHttpClient httpClient; private CloseableHttpClient httpClient;
@Autowired
@Qualifier("niwodaiHttpsClient")
private CloseableHttpClient niwodaiHttpsClient;
@Override @Override
public String get(String uri) { public String get(String uri) {
...@@ -275,6 +278,73 @@ public class HttpServiceImpl implements IHttpService { ...@@ -275,6 +278,73 @@ public class HttpServiceImpl implements IHttpService {
IOUtils.closeQuietly(httpResponse); IOUtils.closeQuietly(httpResponse);
} }
} }
@Override
public String postNiwodai(String uri, Map<String, String> headers, Map<String, String> parameters, boolean isLog) {
return doniwodaiHttps(RequestBuilder.post(),uri,headers,parameters,isLog,TIME_OUT_60);
}
@Override
public String postNiwodaiJson(String uri,Map<String, String> headers, String jsonParams,boolean isLog) {
return doniwodaiObjectHttps(RequestBuilder.post(),uri,headers,jsonParams,isLog,TIME_OUT_60);
}
public String doniwodaiObjectHttps(RequestBuilder requestBuilder, String uri, Map<String, String> headers, String jsonParams, boolean isLog, int timeOut){
String method = requestBuilder.getMethod();
HttpEntity httpEntity = null;
CloseableHttpResponse httpResponse = null;
try {
requestBuilder.setUri(uri);
this.setConfig(requestBuilder,timeOut);
this.setHeader(requestBuilder, headers);
this.setParameter(requestBuilder, jsonParams);
httpResponse = niwodaiHttpsClient.execute(requestBuilder.build());
int statusCode = httpResponse.getStatusLine().getStatusCode();
String response = null;
if(statusCode==200){
httpEntity = httpResponse.getEntity();
response = EntityUtils.toString(httpEntity, "UTF-8");
}
if(isLog) {
LOGGER.info("{}, uri:{},parameters:{},response:{},statusCode:{}", method, uri, jsonParams,response,statusCode);
}
return response;
} catch (Exception e) {
LOGGER.error("{}, uri:{}, parameters:{}", method, uri, jsonParams, e);
return null;
} finally {
EntityUtils.consumeQuietly(httpEntity);
IOUtils.closeQuietly(httpResponse);
}
}
public String doniwodaiHttps(RequestBuilder requestBuilder, String uri, Map<String, String> headers, Map<String, String> parameters, boolean isLog, int timeOut){
String method = requestBuilder.getMethod();
HttpEntity httpEntity = null;
CloseableHttpResponse httpResponse = null;
try {
requestBuilder.setUri(uri);
this.setConfig(requestBuilder,timeOut);
this.setHeader(requestBuilder, headers);
this.setParameter(requestBuilder, parameters);
httpResponse = niwodaiHttpsClient.execute(requestBuilder.build());
int statusCode = httpResponse.getStatusLine().getStatusCode();
String response = null;
if(statusCode==200){
httpEntity = httpResponse.getEntity();
response = EntityUtils.toString(httpEntity, "UTF-8");
}
if(isLog)
LOGGER.info("{}, uri:{},parameters:{},response:{},statusCode:{}", method, uri, parameters,response,statusCode);
return response;
} catch (Exception e) {
LOGGER.error("{}, uri:{}, parameters:{}", method, uri, parameters, e);
return null;
} finally {
EntityUtils.consumeQuietly(httpEntity);
IOUtils.closeQuietly(httpResponse);
}
}
/** /**
* Set Parameter * Set Parameter
* *
......
package com.quantgroup.asset.distribution.service.niwodai;
import com.quantgroup.asset.distribution.service.niwodai.vo.NiwodaiDataImportCheckRequestVO;
import com.quantgroup.asset.distribution.service.niwodai.vo.NiwodaiDataImportCheckResponseVO;
import com.quantgroup.asset.distribution.service.niwodai.vo.NiwodaiIncomingRequestVO;
import com.quantgroup.asset.distribution.service.niwodai.vo.NiwodaiIncomingResponseVO;
public interface INiwodaiService {
NiwodaiDataImportCheckResponseVO dataImportCheck(NiwodaiDataImportCheckRequestVO requestVO);
NiwodaiIncomingResponseVO incoming(NiwodaiIncomingRequestVO niwodaiIncomingRequestVO);
}
package com.quantgroup.asset.distribution.service.niwodai.impl;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Maps;
import com.quantgroup.asset.distribution.constant.RedisKeyConstants;
import com.quantgroup.asset.distribution.exception.QGException;
import com.quantgroup.asset.distribution.service.httpclient.IHttpService;
import com.quantgroup.asset.distribution.service.niwodai.INiwodaiService;
import com.quantgroup.asset.distribution.service.niwodai.vo.*;
import com.quantgroup.asset.distribution.service.redis.IRedisService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Base64;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import static com.quantgroup.asset.distribution.exception.QGExceptionType.COMMON_THIRD_PARTY_TIMEOUT;
@Slf4j
@Service
public class NiwodaiServiceImpl implements INiwodaiService {
final static String domain = "https://api.preprod.geerong.com:8443/test";
final static String domain2 = "https://api.preprod.geerong.com:8443/al/test/asset";
final static String dataImportCheckUrl = domain2 + "/std/v1/entry";
final static String authUrl = domain + "/oauth/token";
final static String incomingUrl = domain2 + "/std/v1/apply";
final static String clientId = "36c36b1e-5e60-4ef9-811c-6714fbf88d90";
final static String clientSecret = "3W8uCiQk7aM1Vxwgaltt2A0tDqN8YYoKnz62pj8rKxw0usZYN6fQRL8wB7Eq3XKy";
@Autowired
IRedisService<String> iRedisService;
@Autowired
IHttpService iHttpService;
@Override
public NiwodaiDataImportCheckResponseVO dataImportCheck(NiwodaiDataImportCheckRequestVO requestVO) {
String token = getToken();
if (StringUtils.isEmpty(token)) {
log.error("你我贷准入检查时获取token失败,requestVO : {}", JSON.toJSONString(requestVO));
throw new QGException("你我贷准入检查时获取token失败", COMMON_THIRD_PARTY_TIMEOUT);
}
String result = iHttpService.postNiwodaiJson(dataImportCheckUrl, commonHeader(token), JSON.toJSONString(requestVO), true);
if (StringUtils.isNotEmpty(result)) {
return JSON.parseObject(result, NiwodaiDataImportCheckResponseVO.class);
}
return null;
}
@Override
public NiwodaiIncomingResponseVO incoming(NiwodaiIncomingRequestVO requestVO) {
String token = getToken();
if (StringUtils.isEmpty(token)) {
log.error("你我贷进件时获取token失败,requestVO : {}", JSON.toJSONString(requestVO));
throw new QGException("你我贷进件时获取token失败", COMMON_THIRD_PARTY_TIMEOUT);
}
String result = iHttpService.postNiwodaiJson(incomingUrl, commonHeader(token), JSON.toJSONString(requestVO),true);
if (StringUtils.isNotEmpty(result)) {
return JSON.parseObject(result, NiwodaiIncomingResponseVO.class);
}
return null;
}
public String getToken() {
String token = iRedisService.getString(RedisKeyConstants.NI_WO_DAI_TOKEN_KEY);
if (StringUtils.isBlank(token)) {
NiwodaiAccessTokenResponseVO vo = acquireAccessToken();
if (vo != null){
token = vo.getAccessToken();
iRedisService.setStringEx(RedisKeyConstants.NI_WO_DAI_TOKEN_KEY,token,10, TimeUnit.MINUTES);
}else {
return null;
}
}
return token;
}
public NiwodaiAccessTokenResponseVO acquireAccessToken() {
Map<String, String> header = Maps.newHashMap();
header.put("Content-Type", "application/x-www-form-urlencoded");
header.put("Authorization", "Basic " + Base64.getEncoder().encodeToString((clientId + ":" + clientSecret).getBytes()));
Map<String, String> parameters = Maps.newHashMap();
parameters.put("grant_type", "client_credentials");
String result = null;
try {
result = iHttpService.postNiwodai(authUrl, header, parameters, true);
} catch (Exception e) {
e.printStackTrace();
}
if (StringUtils.isNotEmpty(result)) {
return JSON.parseObject(result, NiwodaiAccessTokenResponseVO.class);
}
return null;
}
private static Map<String, String> commonHeader(String token) {
Map<String, String> header = Maps.newHashMap();
header.put("Authorization", " bearer " + token);
header.put("Content-Type", "application/json");
return header;
}
}
package com.quantgroup.asset.distribution.service.niwodai.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@Data
public class NiwodaiAccessTokenResponseVO {
@JsonProperty("access_token")
private String accessToken;
@JsonProperty("token_type")
private String tokenType;
@JsonProperty("expire_in")
private Long expireIn;
@JsonProperty("scope")
private String scope;
}
package com.quantgroup.asset.distribution.service.niwodai.vo;
import lombok.Data;
import java.math.BigDecimal;
public class NiwodaiCostant {
@Data
public static class UserInfo {
/**
* 姓名 必填
*/
private String realName;
/**
* 用户ID 非必填
*/
private String externalUserId;
/**
* 身份证号(遇到x统一转化为大写) 必填
*/
private String idcardNumber;
/**
* 手机号 必填
*/
private String phone;
/**
* 婚姻状况,参见附录 必填
*/
private String maritalStatus;
/**
* 子女数量,参见附录 非必填
*/
private Integer childrenNum;
/**
* 性别,参见附录 必填
*/
private String gender;
/**
* 学历,参见附录 必填
*/
private String education;
/**
* 常用邮箱 非必填
*/
private String email;
/**
* 职业,参见附录 必填
*/
private String occupation;
/**
* 身份证户籍地址 非必填
*/
private String idcardAddress;
/**
* 发证机关 非必填
*/
private String idcardAuthority;
/**
* 证件有效期(yyyyMMdd-yyyyMMdd) 必填
*/
private String idcardValidity;
/**
* 民族(如:汉) 非必填
*/
private String nation;
/**
* 身份证正面图片 必填
*/
private String idcardFront;
/**
* 身份证反面图片 必填
*/
private String idcardBack;
/**
* 活体照片 必填
*/
private String bioPhoto;
/**
* 手持身份证照片 非必填
*/
private String handIdPhoto;
/**
* 照片类型:URL, BASE64 必填
*/
private String imageType;
/**
* 所在省份 必填
*/
private String province;
/**
* 所在城市 必填
*/
private String city;
/**
* 所在区县 非必填
*/
private String district;
/**
* 详细居住地址 必填
*/
private String address;
/**
* 所属行业,参见附录 必填
*/
private String industry;
/**
* 月收入,参见附录 必填
*/
private String income;
/**
* 收入来源,参见附录 非必填
*/
private String incomeType;
/**
* 负债情况,参见附录 必填
*/
private String debt;
/**
* 借记卡卡号 非必填
*/
private String debitCardNumber;
/**
* 信用卡卡号 非必填
*/
private String creditCardNumber;
}
@Data
public static class LoanInfo{
/**
* 贷款金额(如:5000.00) 必填
*/
private BigDecimal amount;
/**
* 贷款期数 必填
*/
private Integer term;
/**
* 贷款用途 必填
*/
private String purpose;
}
@Data
public static class CompnayInfo{
/**
* 工作单位全称 必填
*/
private String name;
/**
* 公司所在省份 必填
*/
private String province;
/**
* 公司所在城市 必填
*/
private String city;
/**
* 公司所在区县 非必填
*/
private String district;
/**
* 公司电话 非必填
*/
private String phone;
/**
* 公司详细地址 必填
*/
private String address;
/**
* 当前公司入职日期,格式:2017-07-01 非必填
*/
private String hireDate;
/**
* 公司类型,参见附录 非必填
*/
private String type;
/**
* 职级,参见附录 非必填
*/
private String rank;
}
@Data
public static class Contacts{
/**
* 第一联系人姓名 必填
*/
private String nameA;
/**
* 第一联系人电话 必填
*/
private String phoneA;
/**
* 第一联系人关系 必填
*/
private String relationshipA;
/**
* 第二联系人姓名 必填
*/
private String nameB;
/**
* 第二联系人电话 必填
*/
private String phoneB;
/**
* 第二联系人关系 必填
*/
private String relationshipB;
}
@Data
public static class MnoData{
/**
* 运营商分析报告,JSON序列化后的字符串(需要GZIP压缩)
*/
private String report;
/**
* 运营商详单,JSON序列化后的字符串(需要GZIP压缩)
*/
private String details;
}
@Data
public static class CreditRefData{
/**
* 客户授权人行征信查询时间,精确到秒 非必填
*/
private String authTime;
}
public enum Gender{
/**
* 男
*/
MALE,
/**
* 女
*/
FEMALE;
}
public enum MaritalStatus{
/**
* 未婚
*/
UNMARRIED,
/**
* 已婚
*/
MARRIED,
/**
* 离异
*/
DIVORCE,
/**
* 丧偶
*/
WIDOWEDSPOUSE;
}
public enum ChildrenNum{
/**
* 无子女
*/
NONE,
/**
* 一个子女
*/
ONE,
/**
* 两个子女
*/
TWO,
/**
* 三个以上
*/
ABOVE_THREE;
}
public enum EducationalBackground{
/**
* 初中及以下
*/
JUNIOR_SCHOOL_AND_BELOW,
/**
* 高中或中专
*/
HIGH_SCHOOL,
/**
* 大学专科
*/
ACADEMY,
/**
* 大学本科
*/
UNIVERSITY,
/**
* 研究生或以上
*/
POSTGRADUATE_AND_ABOVE;
}
public enum Occupation{
/**
* 私营业主
*/
PRIVATE_OWNERS,
/**
* 上班族
*/
WORKER,
/**
* 个体工商户
*/
BUSINESSMEN,
/**
* 自由职业者
*/
PROFESSIONAL,
/**
* 退休/待业/无业
*/
BE_UNEMPLOYED,
/**
* 在校学生
*/
STUDENT,
/**
* 农民
*/
FARMER;
}
/**
* 所属行业
*/
public enum Industry{
/**
*农业/林业/畜牧业/渔业
**/
AGRICULTURE,
/**
*采矿业
**/
MINING_INDUSTRY,
/**
*制造业
**/
MANUFACTURING_INDUSTRY,
/**
*电力/热力/燃气/水生产/供应业
**/
SUPPLY_INDUSTRY,
/**
*建筑业
**/
CONSTRUCTION_BUSINESS,
/**
*批发/零售业
**/
RETAIL,
/**
*交通运输/仓储业/邮政业
**/
TRANSPORTATION,
/**
*住宿/餐饮业
**/
RESTAURANT,
/**
*信息传输/软件/信息技术服务业
**/
INFORMATION_TECHNOLOGY_SERVICES,
/**
*金融业
**/
FINANCE,
/**
*房地产业
**/
ESTATE,
/**
*租赁/商务服务业
**/
BUSINESS_SERVICES,
/**
*科学研究/技术服务业
**/
TECHNOLOGICAL_SERVICES,
/**
*水利/环境/公共设施管理业
**/
PUBLIC_FACILITY_MANAGEMENT,
/**
*居民服务/修理/其他服务业
**/
RESIDENT_SERVICE,
/**
*教育
**/
EDUCATION,
/**
*卫生/社会工作
**/
SOCIAL_WORK,
/**
*文化/体育/娱乐业
**/
ENTERTAINMENT,
/**
*公共管理/社会保障/社会组织/国际组织
**/
PUBLIC_ADMINISTRATION,
/**
*未知
**/
UNKNOWN;
}
/**
* 月收入
*/
public enum Income{
/**
* 无固定收入
*/
ZERO,
/**
* 0-3000元
*/
ONE,
/**
* 3000-6000元
*/
TWO,
/**
* 6000-10000元
*/
THREE,
/**
* 10000-15000元
*/
FOUR,
/**
* 15000-20000元
*/
FIVE,
/**
* 20000元及以上
*/
SIX;
}
/**
* 收入来源
*/
public enum IncomeType{
/**
* 工资奖金
*/
SALARY,
/**
* 经营收入
*/
OPERATING_INCOME,
/**
* 投资理财
*/
INVESTMENT,
/**
* 房租收入
*/
HOUSE_RENT,
/**
* 其他
*/
OTHER;
}
/**
* 负债情况
*/
public enum Debt{
/**
* 无负债
*/
ZERO,
/**
* 0-3000元
*/
ONE,
/**
* 3000-6000元
*/
TWO,
/**
* 6000-10000元
*/
THREE,
/**
* 10000-15000元
*/
FOUR,
/**
* 15000-20000元
*/
FIVE,
/**
* 20000元及以上
*/
SIX;
}
/**
* 贷款用途
*/
public enum Purpose{
/**
* 个人日常消费
*/
CONSUMPTION,
/**
* 房屋装修
*/
RENOVATION,
/**
* 电子数码
*/
ELECTRONIC_PRODUCT,
/**
* 旅游
*/
TOURISM;
}
/**
* 联系人关系
*/
public enum Relationship{
/**
* 父亲
*/
FATHER,
/**
* 母亲
*/
MOTHER,
/**
* 儿子
*/
SON,
/**
* 女儿
*/
DAUGHTER,
/**
* 哥哥
*/
BROTHER,
/**
* 弟弟
*/
YOUNGER_BROTHER,
/**
* 姐姐
*/
SISTER,
/**
* 妹妹
*/
YOUNGER_SISTER,
/**
* 配偶
*/
SPOUSE,
/**
* 同事
*/
COLLEAGUE,
/**
* 朋友
*/
FRIEND,
/**
* 同学
*/
CLASSMATE,
/**
* 其他
*/
OTHER;
}
/**
* 公司类型
*/
public enum Type{
/**
* 政府或企事业单位
*/
GOVERNMENT_OR_INSTITUTION,
/**
* 国企央企
*/
SOE,
/**
* 外资企业
*/
FOREIGN_ENTERPRISE,
/**
* 上市公司
*/
LISTED_COMPANY,
/**
* 普通民营企业
*/
PRIVATE_ENTERPRISE,
/**
* 个体工商户
*/
INDIVIDUAL_BUSINESS,
/**
* 其他
*/
OTHER;
}
/**
* 职级
*/
public enum Rank{
/**
* 高级领导
*/
DIRECTOR,
/**
* 中级领导
*/
MANAGER,
/**
* 一般员工
*/
EMPLOYEES,
/**
* 其他
*/
OTHER,
/**
* 未知
*/
UNKNOWN;
}
}
package com.quantgroup.asset.distribution.service.niwodai.vo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class NiwodaiDataImportCheckRequestVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 真实姓名 必填
*/
private String realName;
/**
*身份证号 必填
*/
private String idcardNumber;
/**
* 电话号码 必填
*/
private String phone;
/**
* 期望借款金额 非必填
*/
private BigDecimal amount;
/**
* 用户ID 非必填
*/
private String externalUserId;
}
package com.quantgroup.asset.distribution.service.niwodai.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class NiwodaiDataImportCheckResponseVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 是否通过,是:true,否:false 必须
*/
private Boolean pass;
/**
* 准入未通过原因 非必须
*/
private String reason;
}
package com.quantgroup.asset.distribution.service.niwodai.vo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
@Data
public class NiwodaiIncomingRequestVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 资产渠道唯一标识当前申请信息的流水号 必填
*/
private String orderId;
/**
* 借款人基本信息 必填
*/
private NiwodaiCostant.UserInfo userInfo;
/**
* 借款申请信息 必填
*/
private NiwodaiCostant.LoanInfo loanInfo;
/**
* 公司信息 必填
*/
private NiwodaiCostant.CompnayInfo companyInfo;
/**
* 联系人信息 必填
*/
private NiwodaiCostant.Contacts contacts;
/**
* 运营商数据 必填
*/
private NiwodaiCostant.MnoData mnoData;
/**
* 手机安装App信息,JSON序列化后的字符串(需要GZIP压缩) 非必填
*/
private String appListData;
/**
* 设备信息,JSON序列化后的字符串(需要GZIP压缩) 非必填
*/
private String deviceInfo;
/**
* 人行征信授权信息 非必填
*/
private NiwodaiCostant.CreditRefData creditRefData;
public Map<String,Object> toMap(){
return JSONObject.parseObject(JSON.toJSONString(this));
}
}
package com.quantgroup.asset.distribution.service.niwodai.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class NiwodaiIncomingResponseVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 300004:进件处理中; 300005:进件拒绝 必填
*/
private Integer code;
/**
* 描述信息 非必填
*/
private String message;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment