记得上下班打卡 | git大法好,push需谨慎

Commit fc323e8b authored by wangyifan's avatar wangyifan

草莓护照-用户端 二要素认证

parent 7f8a9858
package com.liquidnet.service.adam.dto.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("二要素认证参数")
public class AdamIdentityParam {
@ApiModelProperty(value = "姓名(手动填写时传)")
private String name;
@ApiModelProperty(value = "证件号(手动填写时传)")
private String idCard;
@ApiModelProperty(value = "入场人ID(选择观演人时传)")
private String entersId;
}
......@@ -72,4 +72,13 @@ public interface IAdamUserService {
AdamRealInfoVo identityForUpsert(String uid, String name, String idCard, String mobile, boolean updateFlg);
AdamRealInfoVo identityForUpdate(String uid, String mobile, int idType, int node, String idCard, String idName);
/**
* 二要素认证
* @param uid
* @param name
* @param idCard
* @return
*/
AdamRealInfoVo verifyTwoElements(String uid, String name, String idCard);
}
......@@ -12,6 +12,7 @@ import com.liquidnet.commons.lang.util.SensitizeUtil;
import com.liquidnet.service.adam.constant.AdamConst;
import com.liquidnet.service.adam.dto.AdamThirdPartParam;
import com.liquidnet.service.adam.dto.AdamUserInfoParam;
import com.liquidnet.service.adam.dto.param.AdamIdentityParam;
import com.liquidnet.service.adam.dto.vo.*;
import com.liquidnet.service.adam.service.AdamRdmService;
import com.liquidnet.service.adam.service.IAdamUserInfoService;
......@@ -535,6 +536,71 @@ public class AdamUserController {
return ResponseDto.success(adamRdmService.getUserInfoVoByUid(uid));
}
@ApiOperationSupport(order = 15)
@ApiOperation(value = "实名认证V2(二要素)", notes = "支持手动填写(name+idCard) 或 选择观演人(entersId)")
@PostMapping(value = {"identity/v2"})
public ResponseDto<AdamRealInfoVo> identityV2(@RequestBody AdamIdentityParam param) {
String currentUid = CurrentUtil.getCurrentUid();
// 1. 检查当前登录用户是否已实名
AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUidPlain(currentUid);
if (realInfoVo != null && realInfoVo.getState() != null && realInfoVo.getState() == 1) {
// 已实名,直接返回
realInfoVo.setName(SensitizeUtil.chineseName(realInfoVo.getName()));
realInfoVo.setIdCard(SensitizeUtil.custom(realInfoVo.getIdCard(), 3, 2));
return ResponseDto.success(realInfoVo);
}
String name = param.getName();
String idCard = param.getIdCard();
// 2. 如果传了 entersId,则根据 entersId 获取观演人的姓名和身份证号
if (StringUtils.isNotBlank(param.getEntersId())) {
List<AdamEntersVo> entersList = adamRdmService.getEntersVoByUid(currentUid);
if (!CollectionUtils.isEmpty(entersList)) {
AdamEntersVo entersVo = entersList.stream()
.filter(e -> param.getEntersId().equals(e.getEntersId()))
.findFirst()
.orElse(null);
if (entersVo == null) {
return ResponseDto.failure(ErrorMapping.get("10105")); // 观演人不存在
}
// 只同步身份证类型的观演人信息 (type=1 大陆身份证)
if (entersVo.getType() == null || entersVo.getType() != 1) {
return ResponseDto.failure("10101", "仅支持大陆身份证类型的观演人进行实名认证");
}
name = entersVo.getName();
idCard = entersVo.getIdCard();
} else {
return ResponseDto.failure(ErrorMapping.get("10105")); // 观演人不存在
}
}
// 3. 校验姓名和身份证号不能为空
if (StringUtils.isBlank(name) || StringUtils.isBlank(idCard)) {
return ResponseDto.failure(ErrorMapping.get("10101")); // 姓名或身份证件号无效
}
// 4. 格式校验
if (!java.util.regex.Pattern.matches(LnsRegex.Valid.CN_HANZI, name)) {
return ResponseDto.failure(ErrorMapping.get("10103"));
}
if (!java.util.regex.Pattern.matches(LnsRegex.Valid.CN_ID_CARD_REF, idCard)) {
return ResponseDto.failure(ErrorMapping.get("10104"));
}
AdamRealInfoVo vo = adamUserService.verifyTwoElements(currentUid, name, idCard);
if (null == vo) {
log.error("[identityV2] 二要素认证失败, param: {}", JsonUtils.toJson(param));
return ResponseDto.failure(ErrorMapping.get("10101"));
}
vo.setName(SensitizeUtil.chineseName(vo.getName()));
vo.setIdCard(SensitizeUtil.custom(vo.getIdCard(), 3, 2));
return ResponseDto.success(vo);
}
/* ---------------------------- Internal Method ---------------------------- */
private static final String PHP_API_SMS_CODE_VALID = "/smsValidation";
......
......@@ -509,4 +509,32 @@ public class AdamUserServiceImpl implements IAdamUserService {
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
return vo;
}
@Override
public AdamRealInfoVo verifyTwoElements(String uid, String name, String idCard) {
try {
adamRdmService.identityHandler1(uid, name, idCard);
AdamRealName realName = new AdamRealName();
realName.setRealNameId(IDGenerator.nextSnowId() + "");
realName.setUid(uid);
realName.setType(1);
realName.setNode(2);
realName.setName(name);
realName.setIdCard(idCard);
realName.setState(1);
realName.setCreatedAt(LocalDateTime.now());
adamRealNameService.add(realName);
AdamRealInfoVo vo = AdamRealInfoVo.getNew().copy(realName);
long s = System.currentTimeMillis();
adamRdmService.setRealInfoVoByUid(uid, vo);
log.debug("#RDS耗时:{}ms", System.currentTimeMillis() - s);
return vo;
}catch (Exception e) {
log.error("error", e);
return null;
}
}
}
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