Commit 3dd40094 authored by gaoyingwei's avatar gaoyingwei

修改 实名认证

parent f43f81fc
...@@ -243,4 +243,35 @@ public class AppMemInfoController extends CyPaginationController<MemInfo> { ...@@ -243,4 +243,35 @@ public class AppMemInfoController extends CyPaginationController<MemInfo> {
return image; // 无需旋转 return image; // 无需旋转
} }
} }
@CyOpeLogAnno(title = "system-会员表管理-校验实名认证信息", businessType = CyLogTypeEnum.UPDATE)
@Operation(summary="校验实名认证信息", description="校验实名认证信息")
@Parameters({@Parameter(name = "businessId", description = "businessId", required = false, schema = @Schema(type = "string"))})
@PutMapping("/checkIdCard/{userId:\\w+}")
@CyEncryptSm4Anno
public CyResult checkIdCard(@PathVariable int userId, @RequestBody MemInfo memInfo, BindingResult bindingResult) {
memInfo.setUserId(userId);
CyPersistModel data = memInfoServiceImpl.checkIdCard(memInfo);
return CyResultGenUtil.builder(data,
CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR,
memInfo);
}
@CyOpeLogAnno(title = "system-会员表管理-修改会员表", businessType = CyLogTypeEnum.UPDATE)
@Operation(summary="修改会员表", description="修改会员表")
@Parameters({@Parameter(name = "businessId", description = "businessId", required = false, schema = @Schema(type = "string"))})
@PutMapping("/updateIdCard/{userId:\\w+}")
@CyEncryptSm4Anno
public CyResult updateIdCard(@PathVariable int userId, @RequestBody MemInfo memInfo, BindingResult bindingResult) {
memInfo.setUserId(userId);
CyPersistModel data = memInfoServiceImpl.updateIdCard(memInfo);
return CyResultGenUtil.builder(data,
CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR,
memInfo);
}
} }
...@@ -7,26 +7,39 @@ import org.springframework.stereotype.Component; ...@@ -7,26 +7,39 @@ import org.springframework.stereotype.Component;
@Data @Data
@Component @Component
@ConfigurationProperties(prefix = "faceverfiy.ali") @ConfigurationProperties(prefix = "faceverfiy")
public class FaceVerifyAliComp { public class FaceVerifyAliComp {
/** /**
* 场景id * 场景id
*/ */
public Long sceneId; private Long sceneId;
//访问密钥 ID //访问密钥 ID
public String accessKeyId; private String accessKeyId;
//访问密钥 //访问密钥
public String accessKeySecret; private String accessKeySecret;
//区域 //区域
public String[] endpoints; private String[] endpoints;
//后端回调地址 //后端回调地址
public String callbackUrl; private String callbackUrl;
//认证结束后回跳页面的链接地址 //认证结束后回跳页面的链接地址
public String returnUrl; private String returnUrl;
// 1. 同一个身份证 每天允许失败的次数
private int idCardDayCount;
// 2. 同一个身份证 每分钟允许失败的次数
private int idCardMinCount;
// 3. 同一ip 每天允许失败的次数
private int ipDayCount;
// 4. 同一ip 每分钟允许失败的次数
private int ipMinCount;
} }
package org.rcisoft.business.faceVerify.bean;
/**
* Created with family.
* author: cy
* Date: 2024/5/25
* Time: 8:43 AM
* description:
*/
public class FaceVerifyRedisBean {
public static final String FACEVERIFY_USER = "faceVerify:user:";
/**
* @desc 身份证号每分钟 / 每天 失败次数
*
* @sample faceVerify:idCard:min:{idCard}
* @sample faceVerify:idCard:day:{idCard}
*/
public static final String FACEVERIFY_IDCARD_MINUTES = "faceVerify:idCard:min:";
public static final String FACEVERIFY_IDCARD_DAY= "faceVerify:idCard:day:";
/**
* @desc 同一ip 每分钟 / 每天 失败次数
*
* @sample faceVerify:ip:min:{ip}
* @sample faceVerify:ip:day:{ip}
* **/
public static final String FACEVERIFY_IP_MINUTES = "faceVerify:ip:min:";
public static final String FACEVERIFY_IP_DAY = "faceVerify:ip:day:";
}
...@@ -35,8 +35,8 @@ public class FaceVerifyController extends CyPaginationController<MemInfo> { ...@@ -35,8 +35,8 @@ public class FaceVerifyController extends CyPaginationController<MemInfo> {
@CyOpeLogAnno(title = "system-发起认证请求", businessType = CyLogTypeEnum.OTHER) @CyOpeLogAnno(title = "system-发起认证请求", businessType = CyLogTypeEnum.OTHER)
@Operation(summary="发起认证请求", description="发起认证请求") @Operation(summary="发起认证请求", description="发起认证请求")
@PostMapping(value = "/initFaceVerify") @PostMapping(value = "/initFaceVerify")
public CyResult initFaceVerify(@RequestBody InitFaceVerifyRequest dto, HttpServletRequest request) { public CyResult initFaceVerify(@RequestBody MemInfo info, HttpServletRequest request) {
Map<String,String> data = faceVerifyService.initFaceVerify(request,dto); Map<String,String> data = faceVerifyService.initFaceVerify(request,info);
return CyResultGenUtil.builder(new CyPersistModel(1), return CyResultGenUtil.builder(new CyPersistModel(1),
CyMessCons.MESSAGE_ALERT_SUCCESS, CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR, CyMessCons.MESSAGE_ALERT_ERROR,
......
...@@ -13,7 +13,7 @@ public interface FaceVerifyService { ...@@ -13,7 +13,7 @@ public interface FaceVerifyService {
* @param memInfo * @param memInfo
* @return * @return
*/ */
Map<String,String> initFaceVerify(HttpServletRequest request,InitFaceVerifyRequest dto); Map<String,String> initFaceVerify(HttpServletRequest request,MemInfo memInfo);
/** /**
* 获取认证详细数据 * 获取认证详细数据
......
...@@ -194,20 +194,6 @@ public class MemInfoController extends CyPaginationController<MemInfo> { ...@@ -194,20 +194,6 @@ public class MemInfoController extends CyPaginationController<MemInfo> {
return CyResultGenUtil.genSuccessResult(memInfoServiceImpl.getArticle(articleExamStatus)); return CyResultGenUtil.genSuccessResult(memInfoServiceImpl.getArticle(articleExamStatus));
} }
@PreAuthorize("@cyPerm.hasPerm('mem:info:update')")
@CyOpeLogAnno(title = "system-会员表管理-修改会员表", businessType = CyLogTypeEnum.UPDATE)
@Operation(summary="修改会员表", description="修改会员表")
@Parameters({@Parameter(name = "businessId", description = "businessId", required = false, schema = @Schema(type = "string"))})
@PutMapping("/updateIdCard/{userId:\\w+}")
// @CyEncryptSm4Anno
public CyResult updateIdCard(@PathVariable int userId, @RequestBody MemInfo memInfo, BindingResult bindingResult) {
memInfo.setUserId(userId);
CyPersistModel data = memInfoServiceImpl.updateIdCard(memInfo);
return CyResultGenUtil.builder(data,
CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR,
memInfo);
}
} }
...@@ -482,5 +482,13 @@ public class MemInfo extends CyIdIncreEntity<MemInfo> { ...@@ -482,5 +482,13 @@ public class MemInfo extends CyIdIncreEntity<MemInfo> {
*/ */
@TableField(exist = false) @TableField(exist = false)
private String memWxCodeStr; private String memWxCodeStr;
/**
* @desc 实名认证前端获取信息
* @column metaInfo
* @default
*/
@TableField(exist = false)
private String metaInfo;
} }
...@@ -92,5 +92,7 @@ public interface MemInfoService { ...@@ -92,5 +92,7 @@ public interface MemInfoService {
ArticleExamStatus getArticle(ArticleExamStatus articleExamStatus ); ArticleExamStatus getArticle(ArticleExamStatus articleExamStatus );
CyPersistModel checkIdCard(MemInfo memInfo);
CyPersistModel updateIdCard(MemInfo memInfo); CyPersistModel updateIdCard(MemInfo memInfo);
} }
...@@ -5,21 +5,24 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -5,21 +5,24 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.rcisoft.business.cmsActivity.entity.CmsActivity; import org.rcisoft.business.cmsActivity.entity.CmsActivity;
import org.rcisoft.business.faceVerify.bean.FaceVerifyAliComp;
import org.rcisoft.business.faceVerify.bean.FaceVerifyRedisBean;
import org.rcisoft.business.memInfo.bean.MemberGenerateBean; import org.rcisoft.business.memInfo.bean.MemberGenerateBean;
import org.rcisoft.business.memInfo.entity.ArticleExamStatus; import org.rcisoft.business.memInfo.entity.ArticleExamStatus;
import org.rcisoft.business.memInfo.entity.opmArticleDTO; import org.rcisoft.business.memInfo.entity.opmArticleDTO;
import org.rcisoft.business.memInfo.entity.peopleNumberDTO; import org.rcisoft.business.memInfo.entity.peopleNumberDTO;
import org.rcisoft.core.constant.CyDelStaCons; import org.rcisoft.core.constant.CyDelStaCons;
import org.rcisoft.core.constant.CyFlagStaCons; import org.rcisoft.core.constant.CyFlagStaCons;
import org.rcisoft.core.constant.CySmsLoginCons;
import org.rcisoft.core.exception.CyServiceException; import org.rcisoft.core.exception.CyServiceException;
import org.rcisoft.core.util.CyAESUtils; import org.rcisoft.core.result.enums.CyResSysExcEnum;
import org.rcisoft.core.util.CyIdGenUtil; import org.rcisoft.core.service.CyRedisService;
import org.rcisoft.core.util.CyUserUtil; import org.rcisoft.core.util.*;
import org.rcisoft.core.aop.CyPageUtilAsp; import org.rcisoft.core.aop.CyPageUtilAsp;
import org.rcisoft.core.model.CyPersistModel; import org.rcisoft.core.model.CyPersistModel;
import org.rcisoft.core.util.CyEpExcelUtil;
import org.rcisoft.business.memInfo.dao.MemInfoRepository; import org.rcisoft.business.memInfo.dao.MemInfoRepository;
import org.rcisoft.business.memInfo.entity.MemInfo; import org.rcisoft.business.memInfo.entity.MemInfo;
import org.rcisoft.business.memInfo.service.MemInfoService; import org.rcisoft.business.memInfo.service.MemInfoService;
...@@ -45,6 +48,8 @@ import java.util.*; ...@@ -45,6 +48,8 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/** /**
* Created by cy on 2024年12月20日 下午3:35:34. * Created by cy on 2024年12月20日 下午3:35:34.
...@@ -67,7 +72,10 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo> ...@@ -67,7 +72,10 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
CyIdGenUtil cyIdGenUtil; CyIdGenUtil cyIdGenUtil;
@Autowired @Autowired
MemberGenerateBean memberGenerateBean; MemberGenerateBean memberGenerateBean;
@Autowired
private FaceVerifyAliComp faceVerifyAliComp;
@Autowired
private CyRedisService cyRedisServiceImpl;
@Value("${cy.init.password}") @Value("${cy.init.password}")
private String password; private String password;
...@@ -420,23 +428,82 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo> ...@@ -420,23 +428,82 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
*/ */
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT) @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT)
@Override @Override
public CyPersistModel updateIdCard(MemInfo memInfo){ public CyPersistModel checkIdCard(MemInfo memInfo){
MemInfo info = baseMapper.getInfoByUserId(String.valueOf(memInfo.getUserId())); MemInfo info = baseMapper.getInfoByUserId(String.valueOf(memInfo.getUserId()));
if ("1".equals(info.getMemRealAuthen()))
throw new CyServiceException("用户已实名,无需再次实名认证");
//手机号、身份证存储加密 //手机号、身份证存储加密
if (StringUtils.isNotBlank(memInfo.getMemIdcard())) // if (StringUtils.isNotBlank(memInfo.getMemIdcard()))
info.setMemIdcard(CyAESUtils.encrypt(memInfo.getMemIdcard())); // info.setMemIdcard(CyAESUtils.encrypt(memInfo.getMemIdcard()));
if (StringUtils.isNotBlank(memInfo.getMemRealName())) // if (StringUtils.isNotBlank(memInfo.getMemRealName()))
info.setMemRealName(CyAESUtils.encrypt(memInfo.getMemRealName())); // info.setMemRealName(CyAESUtils.encrypt(memInfo.getMemRealName()));
//身份证、手机号验重 //身份证、手机号验重
SysUserRbacDTO sysUserRbacDTO = baseMapper.checkIdcardRepeat(memInfo.getUserId(),memInfo.getMemIdcard()); SysUserRbacDTO sysUserRbacDTO = baseMapper.checkIdcardRepeat(memInfo.getUserId(),memInfo.getMemIdcard());
if (sysUserRbacDTO != null) { if (sysUserRbacDTO != null) {
throw new CyServiceException(UserInfoExceptionEnums.ID_NUMBER_EXISTS); throw new CyServiceException(UserInfoExceptionEnums.ID_NUMBER_EXISTS);
} }
//验证失败次数
//获取ip
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String ip = CyAddressUtils.IpUtils.getIpAddr(request);
//1. 同一IP,每分钟失败次数
Object captcha = cyRedisServiceImpl.get(FaceVerifyRedisBean.FACEVERIFY_IP_MINUTES + ip);
if (captcha != null) {
int count = (int)captcha;
if (count >= faceVerifyAliComp.getIpMinCount())
throw new CyServiceException("实名认证发起频繁,请稍后重试");
}
//2. 同一IP,每天失败次数
captcha = cyRedisServiceImpl.get(FaceVerifyRedisBean.FACEVERIFY_IP_DAY + ip);
if (captcha != null) {
int count = (int)captcha;
if (count >= faceVerifyAliComp.getIpDayCount())
throw new CyServiceException("实名认证发起频繁,请稍后重试");
}
//3. 同一身份证,每分钟失败次数
captcha = cyRedisServiceImpl.get(FaceVerifyRedisBean.FACEVERIFY_IDCARD_MINUTES + memInfo.getMemIdcard());
if (captcha != null) {
int count = (int)captcha;
if (count >= faceVerifyAliComp.getIdCardMinCount())
throw new CyServiceException("实名认证发起频繁,请稍后重试");
}
//4. 同一身份证,每天失败次数
captcha = cyRedisServiceImpl.get(FaceVerifyRedisBean.FACEVERIFY_IDCARD_DAY + memInfo.getMemIdcard());
if (captcha != null) {
int count = (int)captcha;
if (count >= faceVerifyAliComp.getIdCardDayCount())
throw new CyServiceException("实名认证发起频繁,请稍后重试");
}
cyRedisServiceImpl.set(FaceVerifyRedisBean.FACEVERIFY_USER+memInfo.getUserId(),memInfo,3600L);
return new CyPersistModel(1);
}
/**
* 修改 会员表
* @param memInfo
* @return
*/
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT)
@Override
public CyPersistModel updateIdCard(MemInfo memInfo){
//手机号、身份证存储加密
if (StringUtils.isNotBlank(memInfo.getMemPhone()))
memInfo.setMemPhone(CyAESUtils.encrypt(memInfo.getMemPhone()));
memInfo.setMemIdcard(null);
memInfo.setMemRealName(null);
//身份证、手机号验重
SysUserRbacDTO sysUserRbacDTO = baseMapper.checkPhoneRepeat(memInfo.getUserId(),memInfo.getMemPhone());
if (sysUserRbacDTO != null) {
throw new CyServiceException(UserInfoExceptionEnums.PHONE_EXISTS);
}
//修改sys_user //修改sys_user
SysUserRbac userRbac = sysUserRbacRepository.selectById(memInfo.getUserId()); SysUserRbac userRbac = new SysUserRbac();
userRbac.setIdNumber(memInfo.getMemIdcard()); userRbac.setBusinessId(memInfo.getUserId());
userRbac.setPhone(memInfo.getMemPhone());
userRbac.setSex(memInfo.getMemSex());
userRbac.setNickName(memInfo.getMemNickName());
sysUserRbacRepository.updateById(userRbac); sysUserRbacRepository.updateById(userRbac);
int line = baseMapper.updateById(info); int line = baseMapper.updateById(memInfo);
log.debug(CyUserUtil.getAuthenUsername()+"修改了ID为"+ memInfo.getBusinessId()+"的会员表信息"); log.debug(CyUserUtil.getAuthenUsername()+"修改了ID为"+ memInfo.getBusinessId()+"的会员表信息");
return new CyPersistModel(line); return new CyPersistModel(line);
} }
......
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