浏览代码

feat: 阿拉丁签约认证-校验同一身份证+姓名不进行重复发起

lixuesong 3 年之前
父节点
当前提交
d1e59421b9

+ 65 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/SysUserSignCertServiceImpl.java

@@ -2,6 +2,7 @@ package com.qunzhixinxi.hnqz.admin.service.gig.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -23,6 +24,7 @@ import com.qunzhixinxi.hnqz.admin.entity.vo.SysUserSubVO;
 import com.qunzhixinxi.hnqz.admin.enums.GigCallBackStatus;
 import com.qunzhixinxi.hnqz.admin.enums.GigChannelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.LockEnum;
 import com.qunzhixinxi.hnqz.admin.enums.MemberIDCardType;
 import com.qunzhixinxi.hnqz.admin.enums.MemberType;
 import com.qunzhixinxi.hnqz.admin.enums.OladingCertStatus;
@@ -49,7 +51,10 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -320,6 +325,9 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		if (CollUtil.isNotEmpty(userSubList)) {
 			// 封装请求数据
 			userSubList.stream().filter(sysUserSub -> {
+				if (GigCallBackStatus.IN_PROGRESS.equals(sysUserSub.getCallbackStatus())) {
+					return false;
+				}
 				// 过滤掉认证成功的数据
 				if (GigTypeEnum.TAX_HELPOR.equals(sysUserSub.getGigType())
 						&& TaxHelperCertStatus.CHECKED_UNBIND.getCode() != sysUserSub.getCertStatus()
@@ -329,7 +337,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 						&& !YeeCertStatus.SIGNED.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
 					return true;
 				} else if (GigTypeEnum.OLADING.equals(sysUserSub.getGigType())
-						/*&& !YeeCertStatus.SIGNED.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))*/) {
+						&& !OladingCertStatus.CERT.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
 					return true;
 				} else if (GigTypeEnum.REN_LI_JIA.equals(sysUserSub.getGigType())
 						&& RenlijiaCertStatus.CER_STATUS_1.getCode() != sysUserSub.getCertStatus()) {
@@ -337,6 +345,11 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				}
 				return false;
 			}).forEach(userSub -> {
+				// 发起前置判断
+				boolean preSignCert = preSignCert(sysUser, userSub);
+				if (!preSignCert) {
+					return;
+				}
 				// 请求流水号
 				String requestId = RandomStringUtils.randomAlphabetic(16);
 				// 封装请求参数
@@ -358,6 +371,57 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		return false;
 	}
 
+	/**
+	 * 签约认证前的前置判断
+	 *
+	 * @param sysUser
+	 * @param userSub
+	 */
+	private boolean preSignCert(SysUser sysUser, SysUserSub userSub) {
+		boolean flag = true;
+		switch (userSub.getGigType()) {
+			case OLADING:
+				// 如果存在相同身份证信息的用户,并且是签约或认证过,则不发起,直接返回签约认证状态
+				List<SysUser> existUserList = sysUserService.list(Wrappers.<SysUser>lambdaQuery()
+						.eq(SysUser::getRealname, sysUser.getRealname())
+						.eq(SysUser::getIdCardNumber, sysUser.getIdCardNumber())
+						.eq(SysUser::getLockFlag, LockEnum.UN_LOCK.val())
+						.ne(SysUser::getUserId, sysUser.getUserId()));
+				if (CollUtil.isNotEmpty(existUserList)) {
+					List<Integer> existUserIdList = existUserList.stream()
+							.map(SysUser::getUserId)
+							.collect(Collectors.toList());
+					List<SysUserSub> existUserSubList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
+							.in(SysUserSub::getUserId, existUserIdList)
+							.in(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.CERT.getCode()),
+									Integer.valueOf(OladingCertStatus.SIGNED.getCode()))
+							.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED)
+							.eq(SysUserSub::getGigType, GigTypeEnum.OLADING));
+					if (CollUtil.isNotEmpty(existUserSubList)) {
+						flag = false;
+						SysUserSub existUserSub = existUserSubList.get(0);
+						// 更新状态
+						SysUserSub updateUserSub = new SysUserSub();
+						updateUserSub.setId(userSub.getId());
+						updateUserSub.setCertStatus(existUserSub.getCertStatus());
+						updateUserSub.setCallbackStatus(GigCallBackStatus.RETURNED);
+						sysUserSubService.updateById(updateUserSub);
+						// 结果放到redis
+						String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
+						Map<String, String> subMap = new HashMap<>();
+						subMap.put("certStatus", OladingCertStatus.resolve(String.valueOf(existUserSub.getCertStatus())).name());
+						Map<String, Object> result = MapUtil.newHashMap(1);
+						result.put("OLADING", subMap);
+						redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+					}
+				}
+				break;
+			default:
+		}
+
+		return flag;
+	}
+
 	/**
 	 * 封装签约认证的请求参数
 	 *