新增阿里云对接方法

This commit is contained in:
zhangchenbiao
2023-06-16 11:18:38 +08:00
parent 39782aec34
commit 960fb0bb53
11 changed files with 286 additions and 5 deletions

View File

@@ -44,11 +44,10 @@ public enum ErrorCodeEnum {
USER_GROUP_NAME_EXIST(1021076, "用户分组名称已存在", null),
USER_GROUP_NOT_EXIST(1021077, "用户分组不存在", null),
GET_INFO_ERROR(1021078, "获取信息异常", null),
GET_PHONENUMBER_INFO_ERROR(1021079, "手机号归属地获取异常", null),
IDENTITY_CARD_PARSE_FAIL(1021080, "身份证解析失败", null),
PARAMS_REQUIRED(400002, "参数缺失!", null),
DATA_CONVERT_ERROR(400002, "日期转换异常!", null),
LINE_ID_IS_NOT_EXIST(500001, "线索ID不存在", null),

View File

@@ -0,0 +1,33 @@
package com.cool.store.dto.partner;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author zhangchenbiao
* @FileName: DescribePhoneNumberDTO
* @Description:手机号归属
* @date 2023-06-15 20:07
*/
@Data
public class DescribePhoneNumberDTO {
@ApiModelProperty("基础运营商")
public String basicCarrier;
@ApiModelProperty("实际运营商")
public String carrier;
@ApiModelProperty("是否携号转网")
public Boolean isNumberPortability;
@ApiModelProperty("号码归属号段")
public Long numberSegment;
@ApiModelProperty("号码归属城市")
public String city;
@ApiModelProperty("号码归属省份")
public String province;
}

View File

@@ -0,0 +1,41 @@
package com.cool.store.vo.cuser;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author zhangchenbiao
* @FileName: IdentityCardInfoVO
* @Description:
* @date 2023-06-16 10:18
*/
@Data
public class IdentityCardInfoVO {
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("地址")
private String liveAddress;
@ApiModelProperty("出生日期")
private String birthdate;
@ApiModelProperty("性别")
private String sex;
@ApiModelProperty("身份证号")
private String idCard;
@ApiModelProperty("民族")
private String nation;
public IdentityCardInfoVO(String username, String liveAddress, String birthdate, String sex, String idCard, String nation) {
this.username = username;
this.liveAddress = liveAddress;
this.birthdate = birthdate;
this.sex = sex;
this.idCard = idCard;
this.nation = nation;
}
}

View File

@@ -142,5 +142,17 @@
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.5.10" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:dytnsapi20200217:1.0.28" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:ocr20191230:1.0.26" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:openplatform20191219:5.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:oss-client:3.0.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-xml:0.1.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-rpc-util:0.1.2" level="project" />
<orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-rpc:0.1.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:oss-util:1.0.2" level="project" />
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-fileform:0.0.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:darabonba-array:0.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:darabonba-number:0.0.3" level="project" />
</component>
</module>

View File

@@ -63,6 +63,10 @@
<groupId>com.aliyun</groupId>
<artifactId>dytnsapi20200217</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ocr20191230</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,28 @@
package com.cool.store.service;
import com.cool.store.dto.partner.DescribePhoneNumberDTO;
import com.cool.store.vo.cuser.IdentityCardInfoVO;
/**
* @author zhangchenbiao
* @FileName: AliyunService
* @Description:阿里云相关服务
* @date 2023-06-15 20:04
*/
public interface AliyunService {
/**
* 获取手机号归属信息
* @param phoneNumber
* @return
*/
DescribePhoneNumberDTO getPhoneNumberAttribute(String phoneNumber);
/**
* 根据身份证正面获取信息
* @param faceImageUrl
* @return
*/
IdentityCardInfoVO getIdentityCardInfo(String faceImageUrl);
}

View File

@@ -0,0 +1,116 @@
package com.cool.store.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dytnsapi20200217.Client;
import com.aliyun.dytnsapi20200217.models.DescribePhoneNumberOperatorAttributeRequest;
import com.aliyun.dytnsapi20200217.models.DescribePhoneNumberOperatorAttributeResponse;
import com.aliyun.ocr20191230.models.RecognizeIdentityCardResponse;
import com.aliyun.ocr20191230.models.RecognizeIdentityCardResponseBody;
import com.aliyun.tea.TeaException;
import com.aliyun.tea.TeaModel;
import com.aliyun.teaopenapi.models.Config;
import com.cool.store.dto.partner.DescribePhoneNumberDTO;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.service.AliyunService;
import com.cool.store.vo.cuser.IdentityCardInfoVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Optional;
/**
* @author zhangchenbiao
* @FileName: AliyunServiceImpl
* @Description:
* @date 2023-06-15 20:04
*/
@Slf4j
@Service
public class AliyunServiceImpl implements AliyunService {
@Override
public DescribePhoneNumberDTO getPhoneNumberAttribute(String phoneNumber) {
try {
Config config = new Config();
//todo zcb ak sk替换
config.accessKeyId = "LTAI5t9RaXvABZbHvoXjDFJ1";
config.accessKeySecret = "zhOK7WWo3yGoUWkOMaatty19k25CMd";
Client client = new Client(config);
DescribePhoneNumberOperatorAttributeRequest request = new DescribePhoneNumberOperatorAttributeRequest();
request.authCode = "Y81FVZepk6";
request.inputNumber = phoneNumber;
request.mask = "NORMAL";
DescribePhoneNumberOperatorAttributeResponse response = client.describePhoneNumberOperatorAttribute(request);
String code = response.body.code;
if (!com.aliyun.teautil.Common.equalString(code, "OK")) {
log.error("错误信息:" , response.body.message + "");
throw new ServiceException(ErrorCodeEnum.GET_PHONENUMBER_INFO_ERROR);
}
return JSONObject.parseObject(JSONObject.toJSONString(response.body.data), DescribePhoneNumberDTO.class);
} catch (Exception e) {
log.error("获取手机号异常:", e);
throw new ServiceException(ErrorCodeEnum.GET_PHONENUMBER_INFO_ERROR);
}
}
@Override
public IdentityCardInfoVO getIdentityCardInfo(String faceImageUrl) {
//todo zcb ak sk替换
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setAccessKeyId("LTAI5t9RaXvABZbHvoXjDFJ1")
.setAccessKeySecret("zhOK7WWo3yGoUWkOMaatty19k25CMd");
// 访问的域名
config.endpoint = "ocr.cn-shanghai.aliyuncs.com";
try {
com.aliyun.ocr20191230.Client client = new com.aliyun.ocr20191230.Client(config);
URL url = new URL(faceImageUrl);
InputStream inputStream = url.openConnection().getInputStream();
com.aliyun.ocr20191230.models.RecognizeIdentityCardAdvanceRequest recognizeIdentityCardAdvanceRequest = new com.aliyun.ocr20191230.models.RecognizeIdentityCardAdvanceRequest()
.setImageURLObject(inputStream)
.setSide("face");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
RecognizeIdentityCardResponse idCardResponse = client.recognizeIdentityCardAdvance(recognizeIdentityCardAdvanceRequest, runtime);
log.info("身份证解析结果:{}", JSONObject.toJSONString(idCardResponse));
RecognizeIdentityCardResponseBody.RecognizeIdentityCardResponseBodyDataFrontResult frontResult = Optional.ofNullable(idCardResponse).map(o -> o.getBody()).map(o -> o.data).map(o -> o.frontResult).orElse(null);
String username = frontResult.name;
String liveAddress = frontResult.address;
String birthdate = frontResult.birthDate;
if(StringUtils.isNotBlank(birthdate)){
birthdate = convertDate(birthdate, "yyyyMMdd");
}
String sex = frontResult.gender;
String idCard = frontResult.IDNumber;
String nation = frontResult.nationality;
IdentityCardInfoVO result = new IdentityCardInfoVO(username, liveAddress, birthdate, sex, idCard, nation);
log.info("身份证解析:{}", JSONObject.toJSONString(result));
return result;
} catch (com.aliyun.tea.TeaException e) {
log.error("身份证解析报错TeaException{}", e);
} catch (MalformedURLException e) {
log.error("身份证解析报错MalformedURLException{}", e);
} catch (IOException e) {
log.error("身份证解析报错IOException{}", e);
} catch (Exception e) {
log.error("身份证解析报错Exception{}", e);
}
return null;
}
public static String convertDate(String date, String format) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
LocalDate localDate = LocalDate.parse(date, formatter);
return localDate.toString();
} catch (Exception e) {
throw new ServiceException(ErrorCodeEnum.DATA_CONVERT_ERROR);
}
}
}

View File

@@ -107,6 +107,18 @@
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.5.10" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:dytnsapi20200217:1.0.28" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:ocr20191230:1.0.26" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:openplatform20191219:5.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:oss-client:3.0.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-xml:0.1.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-rpc-util:0.1.2" level="project" />
<orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-rpc:0.1.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:oss-util:1.0.2" level="project" />
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-fileform:0.0.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:darabonba-array:0.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:darabonba-number:0.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.6.RELEASE" level="project" />

View File

@@ -105,6 +105,18 @@
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.5.10" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:dytnsapi20200217:1.0.28" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:ocr20191230:1.0.26" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:openplatform20191219:5.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:oss-client:3.0.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-xml:0.1.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-rpc-util:0.1.2" level="project" />
<orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-rpc:0.1.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:oss-util:1.0.2" level="project" />
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-fileform:0.0.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:darabonba-array:0.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:darabonba-number:0.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.3" level="project" />

View File

@@ -1,13 +1,17 @@
package com.cool.store.controller;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.request.BaseUserInfoRequest;
import com.cool.store.request.PartnerBaseInfoRequest;
import com.cool.store.request.PartnerClerkInfoRequest;
import com.cool.store.request.PartnerIntentInfoRequest;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.AliyunService;
import com.cool.store.service.HyPartnerIntentInfoService;
import com.cool.store.service.PartnerUserInfoService;
import com.cool.store.vo.*;
import com.cool.store.vo.cuser.IdentityCardInfoVO;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -34,7 +38,10 @@ public class PartnerController {
private PartnerUserInfoService partnerUserInfoService;
@Resource
HyPartnerIntentInfoService hyPartnerIntentInfoService;
private HyPartnerIntentInfoService hyPartnerIntentInfoService;
@Resource
private AliyunService aliyunService;
@PostMapping(path = "/applyBaseInfo")
@ApiOperation("提交基本信息")
@@ -195,4 +202,16 @@ public class PartnerController {
return ResponseResult.success();
}
@GetMapping(path = "/getIdentityCardInfo")
@ApiOperation("根据身份证正面解析获取数据")
public ResponseResult<IdentityCardInfoVO> getIdentityCardInfo(@RequestParam(value = "faceImageUrl")String faceImageUrl){
try {
IdentityCardInfoVO identityCardInfo = aliyunService.getIdentityCardInfo(faceImageUrl);
return ResponseResult.success(identityCardInfo);
} catch (Exception e) {
throw new ServiceException(ErrorCodeEnum.IDENTITY_CARD_PARSE_FAIL);
}
}
}

View File

@@ -181,6 +181,11 @@
<artifactId>dytnsapi20200217</artifactId>
<version>1.0.28</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ocr20191230</artifactId>
<version>1.0.26</version>
</dependency>
</dependencies>
</dependencyManagement>