Commit 19cc14a8 authored by tangtuo's avatar tangtuo

实名认证接口

parent c9e2d04c
package com.fzm.admin.controller; package com.fzm.admin.controller;
import com.fzm.common.annotation.Authentication; import com.fzm.common.annotation.Authentication;
import com.fzm.common.entity.AuthPerson;
import com.fzm.common.entity.vo.UserListVo; import com.fzm.common.entity.vo.UserListVo;
import com.fzm.common.entity.vo.UserStatisticVo; import com.fzm.common.entity.vo.UserStatisticVo;
import com.fzm.common.model.ResponseModel; import com.fzm.common.model.ResponseModel;
...@@ -10,10 +11,7 @@ import com.github.pagehelper.PageInfo; ...@@ -10,10 +11,7 @@ import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
...@@ -51,4 +49,13 @@ public class UserController { ...@@ -51,4 +49,13 @@ public class UserController {
List<UserListVo> list = userService.list(telephone, nickname, authType, start, end); List<UserListVo> list = userService.list(telephone, nickname, authType, start, end);
return ResponseModel.success(new PageInfo<>(list)); return ResponseModel.success(new PageInfo<>(list));
} }
@GetMapping("auth/detail")
@ApiOperation(value = "获取用户的实名信息")
public ResponseModel<AuthPerson> getAuthDetail(@RequestParam Integer userId) {
AuthPerson authPerson = userService.getAuthDetail(userId);
return ResponseModel.success(authPerson);
}
} }
...@@ -3,6 +3,7 @@ package com.fzm.common.entity; ...@@ -3,6 +3,7 @@ package com.fzm.common.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -10,6 +11,7 @@ import lombok.experimental.Accessors; ...@@ -10,6 +11,7 @@ import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import java.util.Date;
/** /**
* @author tangtuo * @author tangtuo
...@@ -19,28 +21,33 @@ import javax.validation.constraints.Pattern; ...@@ -19,28 +21,33 @@ import javax.validation.constraints.Pattern;
@Accessors(chain = true) @Accessors(chain = true)
@ApiModel("个人认证信息") @ApiModel("个人认证信息")
@TableName("tb_auth_person") @TableName("tb_auth_person")
public class AuthPerson extends BaseEntity { public class AuthPerson {
@TableId(type = IdType.AUTO)
private Integer id;
@ApiModelProperty("用户id") @ApiModelProperty("用户id")
private Integer userId; private Integer userId;
@ApiModelProperty("姓名") @ApiModelProperty("姓名")
@NotBlank(message = "姓名不能为空")
private String name; private String name;
@ApiModelProperty("身份证号码") @ApiModelProperty("身份证号码")
@NotBlank(message = "身份证号码不能为空")
@Pattern(regexp = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$",
message = "身份证号码格式有误")
private String idCard; private String idCard;
@ApiModelProperty("身份证正面照片(人脸面)") @ApiModelProperty("身份证正面照片(人脸面)")
@NotBlank(message = "身份证正面照片不能为空") @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String cardPictureFront; private String cardPictureFront;
@ApiModelProperty("身份证反面照片(国徽面)") @ApiModelProperty("身份证反面照片(国徽面)")
@NotBlank(message = "身份证反面照片不能为空") @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String cardPictureBack; private String cardPictureBack;
@ApiModelProperty("创建时间")
private Date createDate;
@ApiModelProperty("修改时间")
private Date updateDate;
} }
...@@ -26,6 +26,9 @@ public class UserListVo { ...@@ -26,6 +26,9 @@ public class UserListVo {
@ApiModelProperty("认证类型 0-个人认证 1-企业认证") @ApiModelProperty("认证类型 0-个人认证 1-企业认证")
private Integer authType; private Integer authType;
@ApiModelProperty("实名认证状态 0-未认证 1-认证成功 2-认证失败")
private Integer authStatus;
@ApiModelProperty("已发行nft数") @ApiModelProperty("已发行nft数")
private Integer publishCount; private Integer publishCount;
......
package com.fzm.common.service; package com.fzm.common.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.fzm.common.entity.AuthPerson;
import com.fzm.common.entity.User; import com.fzm.common.entity.User;
import com.fzm.common.entity.vo.UserListVo; import com.fzm.common.entity.vo.UserListVo;
import com.fzm.common.entity.vo.UserStatisticVo; import com.fzm.common.entity.vo.UserStatisticVo;
...@@ -74,4 +75,6 @@ public interface UserService extends IService<User> { ...@@ -74,4 +75,6 @@ public interface UserService extends IService<User> {
User getUserByWallet(String publishAddress); User getUserByWallet(String publishAddress);
IdCardOCRVerificationResponse personAuth(MultipartFile cardPictureFront, MultipartFile cardPictureBack) throws IOException; IdCardOCRVerificationResponse personAuth(MultipartFile cardPictureFront, MultipartFile cardPictureBack) throws IOException;
AuthPerson getAuthDetail(Integer userId);
} }
...@@ -215,11 +215,16 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -215,11 +215,16 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
@Override @Override
public IdCardOCRVerificationResponse personAuth(MultipartFile cardPictureFront, MultipartFile cardPictureBack) throws IOException { public IdCardOCRVerificationResponse personAuth(MultipartFile cardPictureFront, MultipartFile cardPictureBack) throws IOException {
String token = request.getHeader("Authorization"); User user = getUserByToken();
Integer userId = JwtUtil.getUserIdFromToken(token); if (AuthStatusEnum.SUCCESS.getStatus().equals(user.getAuthStatus())) {
throw GlobalException.newException(ResultCode.ID_CARD_VERIFICATION_ERROR, "您已认证成功,无法再次认证");
}
Integer userId = user.getId();
BASE64Encoder base64Encoder = new BASE64Encoder(); BASE64Encoder base64Encoder = new BASE64Encoder();
String encode = "data:image/jpg;base64," + base64Encoder.encode(cardPictureFront.getBytes()); String encode = "data:image/jpg;base64," + base64Encoder.encode(cardPictureFront.getBytes());
IdCardOCRVerificationResponse response = TencentApi.idCardOCRVerification(encode); IdCardOCRVerificationResponse response = TencentApi.idCardOCRVerification(encode);
Integer status;
if (IdCardVerificationResponse.SUCCESS.getCode().equals(response.getResult())) {
// 验证成功上传身份证证件 // 验证成功上传身份证证件
String frontUrl = ossUtil.putSimpleObject(cardPictureFront); String frontUrl = ossUtil.putSimpleObject(cardPictureFront);
String backUrl = ossUtil.putSimpleObject(cardPictureBack); String backUrl = ossUtil.putSimpleObject(cardPictureBack);
...@@ -230,13 +235,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -230,13 +235,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
.setCardPictureBack(backUrl) .setCardPictureBack(backUrl)
.setCardPictureFront(frontUrl); .setCardPictureFront(frontUrl);
authPersonService.save(authPerson); authPersonService.save(authPerson);
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
Integer status;
if (IdCardVerificationResponse.SUCCESS.getCode().equals(response.getResult())) {
status = AuthStatusEnum.SUCCESS.getStatus(); status = AuthStatusEnum.SUCCESS.getStatus();
} else { } else {
status = AuthStatusEnum.FAIL.getStatus(); status = AuthStatusEnum.FAIL.getStatus();
} }
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper.set("auth_type", AuthTypeEnum.PERSON.getType()) userUpdateWrapper.set("auth_type", AuthTypeEnum.PERSON.getType())
.set("auth_status", status) .set("auth_status", status)
.eq("id", userId); .eq("id", userId);
...@@ -245,6 +248,21 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -245,6 +248,21 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
} }
@Override @Override
public AuthPerson getAuthDetail(Integer userId) {
User user = getById(userId);
if (!AuthStatusEnum.SUCCESS.getStatus().equals(user.getAuthStatus())) {
throw GlobalException.newException(ResultCode.DATA_ERROR, "此用户实名认证未成功,无法查看其具体实名信息");
}
// 个人认证
if (AuthTypeEnum.PERSON.getType().equals(user.getAuthType())) {
QueryWrapper<AuthPerson> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", userId);
return authPersonService.getOne(queryWrapper);
}
return null;
}
@Override
public List<UserListVo> list(String telephone, String nickname, Integer authType, String start, String end) { public List<UserListVo> list(String telephone, String nickname, Integer authType, String start, String end) {
DateTime startDate = null; DateTime startDate = null;
DateTime endDate = null; DateTime endDate = null;
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
u.telephone, u.telephone,
u.nickname, u.nickname,
u.auth_type, u.auth_type,
u.auth_status,
u.create_date AS registerDate, u.create_date AS registerDate,
(select count(0) from tb_nft n where u.wallet = n.publish_address and n.nft_hash != '') as publishCount (select count(0) from tb_nft n where u.wallet = n.publish_address and n.nft_hash != '') as publishCount
FROM tb_user u FROM tb_user u
......
...@@ -129,7 +129,6 @@ public class UserController { ...@@ -129,7 +129,6 @@ public class UserController {
@ApiOperation(value = "个人认证") @ApiOperation(value = "个人认证")
public ResponseModel<IdCardOCRVerificationResponse> personAuth(@ApiParam("身份证正面照") @RequestParam MultipartFile front, public ResponseModel<IdCardOCRVerificationResponse> personAuth(@ApiParam("身份证正面照") @RequestParam MultipartFile front,
@ApiParam("身份证反面照") @RequestParam MultipartFile back) throws IOException { @ApiParam("身份证反面照") @RequestParam MultipartFile back) throws IOException {
return ResponseModel.success(userService.personAuth(front,back)); return ResponseModel.success(userService.personAuth(front,back));
} }
......
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