Merge remote-tracking branch 'origin/cc_20230520_partner' into cc_20230520_partner
This commit is contained in:
@@ -4,6 +4,7 @@ package com.cool.store.handler;
|
||||
import com.cool.store.exception.ApiException;
|
||||
import com.cool.store.exception.ServiceException;
|
||||
import com.cool.store.response.error.ErrorResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
@@ -15,23 +16,27 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
* @Description: 自定义异常处理
|
||||
* @date 2023-06-13 19:42
|
||||
*/
|
||||
@Slf4j
|
||||
@RestControllerAdvice
|
||||
public class CustomExceptionHandler {
|
||||
|
||||
@ExceptionHandler(value = ServiceException.class)
|
||||
public ResponseEntity<ErrorResponse> handleCustomException(ServiceException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
ErrorResponse errorResponse = new ErrorResponse(e.getErrorCode(), e.getMessage());
|
||||
return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = ApiException.class)
|
||||
public ResponseEntity<ErrorResponse> handleCustomException(ApiException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
ErrorResponse errorResponse = new ErrorResponse(e.getErrorCode(), e.getMessage());
|
||||
return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = Exception.class)
|
||||
public ResponseEntity<ErrorResponse> handleException(Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
ErrorResponse errorResponse = new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
|
||||
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user