ソースを参照

Merge remote-tracking branch 'origin/temp-pre' into temp-pre

shc 3 年 前
コミット
68c37c2edd

+ 31 - 30
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java

@@ -42,6 +42,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * 接收用户签约认证的结果对列监听器
@@ -278,46 +279,45 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		// 处理阿拉钉-金园数科
 		Map<String, String> o2Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.JIN_YUAN);
 
+		// 查询redis是否有同时发起的标记
+		String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + user.getUserId();
+		Object userId = redisTemplate.opsForValue().get(redisKey);
+
 		// 结果放到redis
 		Map<String, Object> resultMap = new HashMap<>();
-		if (o1Map != null) {
-			resultMap.put(GigTypeEnum.OLADING.name(), o1Map);
-		}
-		if (o2Map != null) {
-			resultMap.put(GigTypeEnum.JIN_YUAN.name(), o2Map);
-		}
-		if (CollUtil.isNotEmpty(resultMap)) {
-			String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId();
-			// key已存在,则追加写入新的渠道的状态
-			String qResult = (String) redisTemplate.opsForValue().get(key);
-			if (JSONUtil.isJsonObj(qResult)) {
-				JSONObject qResultObj = JSONUtil.parseObj(qResult);
-				if (o1Map != null) {
-					qResultObj.set(GigTypeEnum.OLADING.name(), o1Map);
-				}
-				if (o2Map != null) {
-					qResultObj.set(GigTypeEnum.JIN_YUAN.name(), o2Map);
-				}
-				redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(qResultObj), 1, TimeUnit.MINUTES);
-			} else {
-				redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(resultMap), 1, TimeUnit.MINUTES);
+		if (userId != null) {
+			// 同时发起的情况,且是金园数科的状态已返回,则返回两个渠道状态
+			List<SysUserSub> subList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, user.getUserId())
+					.eq(SysUserSub::getDeptId, dept.getDeptId())
+					.in(SysUserSub::getGigType, GigTypeEnum.OLADING, GigTypeEnum.JIN_YUAN));
+			Map<String, Map<String, String>> resultMap2 = subList.stream()
+					.collect(Collectors.toMap(sysUserSub -> sysUserSub.getGigType().name(),
+							sysUserSub -> MapUtil.builder("certStatus",
+									OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name()).build()));
+			resultMap.putAll(resultMap2);
+			// 删除同时发起的redis key
+//			redisTemplate.delete(redisKey);
+		} else {
+			if (CollUtil.isNotEmpty(o1Map)) {
+				resultMap.put(GigTypeEnum.OLADING.name(), o1Map);
+			}
+			if (CollUtil.isNotEmpty(o2Map)) {
+				resultMap.put(GigTypeEnum.JIN_YUAN.name(), o2Map);
 			}
-
 		}
+		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId();
+		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(resultMap), 1, TimeUnit.MINUTES);
 
-		// 处理同时发起时另一个渠道需要的补发情况 TODO
-		// 查询redis是否有同时发起的标记
-		String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + user.getUserId();
-		Object userId = redisTemplate.opsForValue().get(redisKey);
-		if (userId != null) {
+		// 处理同时发起时另一个渠道需要的补发情况
+		Object userId2 = redisTemplate.opsForValue().get(redisKey);
+		if (userId2 != null && CollUtil.isNotEmpty(o1Map) && OladingCertStatus.CERT.name().equals(o1Map.get("certStatus"))) {
 			// 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
 			log.info("=============================补发阿拉钉另一渠道MQ4==================================");
 			UserSignCertDTO reCertDTO = new UserSignCertDTO();
 			reCertDTO.setUserId(user.getUserId());
 			reCertDTO.setGigTypeList(Collections.singletonList(GigTypeEnum.JIN_YUAN));
 			sysUserSignCertService.batchChannelCert(reCertDTO);
-			// 删除redis key
-			redisTemplate.delete(redisKey);
 		}
 	}
 
@@ -376,12 +376,13 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 			}
 		}
 		// 已认证,则设置回调状态
+		// 此处实际是处理核身视频的回调
 		if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
 			updateWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
+			certStatusMap.put("certStatus", OladingCertStatus.CERT.name());
 		}
 
 		sysUserSubService.update(updateWrapper);
-		// 如果是核身视频回调,则同步该账号的易联-金园数科渠道认证状态 TODO
 
 		return certStatusMap;
 	}

+ 45 - 52
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/GigThirdApiServiceImpl.java

@@ -2,7 +2,6 @@ package com.qunzhixinxi.hnqz.admin.service.gig.impl;
 
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -254,15 +253,12 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 		Map<String, String> subMap = new HashMap<>();
 		SysUserSub updateUserSub = new SysUserSub();
-		OladingCertStatus currentCertStatus;
 		if (OladingCommonRequest.SignUpStatus.SIGN.equals(signUpCertStatus)) {
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSub.setCertStatus(Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
-			currentCertStatus = OladingCertStatus.SIGNED;
 		} else {
 			subMap.put("certStatus", OladingCertStatus.UN_SIGNED.name());
 			updateUserSub.setCertStatus(Integer.valueOf(OladingCertStatus.UN_SIGNED.getCode()));
-			currentCertStatus = OladingCertStatus.UN_SIGNED;
 		}
 		updateUserSub.setId(userSub.getId());
 		updateUserSub.setUpdateTime(LocalDateTime.now());
@@ -278,17 +274,23 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 		// 结果放到redis
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-		String qResult = (String) redisTemplate.opsForValue().get(key);
-		if (JSONUtil.isJsonObj(qResult)) {
-			JSONObject qResultObj = JSONUtil.parseObj(qResult);
-			qResultObj.set(userSub.getGigType().name(), MapUtil.builder("certStatus", currentCertStatus.name()).build());
-			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(qResultObj), 1, TimeUnit.MINUTES);
-		} else {
-			Map<String, Object> result = MapUtil.newHashMap(2);
-			result.put(userSub.getGigType().name(), new HashMap<>(subMap));
-			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		Map<String, Object> result = MapUtil.newHashMap(2);
+		result.put(userSub.getGigType().name(), new HashMap<>(subMap));
+		// 查询redis是否有同时发起的标记
+		String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + userSub.getUserId();
+		Object userId = redisTemplate.opsForValue().get(redisKey);
+		if (userId != null && GigTypeEnum.OLADING.equals(userSub.getGigType())) {
+			// 将金园数科的状态,补充进来
+			SysUserSub feiyiSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSub.getUserId())
+					.eq(SysUserSub::getDeptId, userSub.getDeptId())
+					.eq(SysUserSub::getGigType, GigTypeEnum.JIN_YUAN));
+			result.put(GigTypeEnum.JIN_YUAN.name(),
+					MapUtil.builder("certStatus", OladingCertStatus.resolve(String.valueOf(feiyiSub.getCertStatus())).name()).build());
 		}
 
+		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+
 		// 如果成功,则发送证照上传MQ
 		if (OladingCommonRequest.SignUpStatus.SIGN.equals(signUpCertStatus)) {
 			log.info("=============================发送证照上传MQ==================================");
@@ -296,21 +298,6 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 			userSignCertDTO.setUserId(userSub.getUserId());
 			userSignCertDTO.setGigTypeList(Collections.singletonList(userSub.getGigType()));
 			sysUserSignCertService.batchChannelCert(userSignCertDTO);
-
-//			// 查询是否存在另一渠道需要发起(海南飞亿、金园数科其中之一)
-//			SysUserSub secUserSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
-//					.eq(SysUserSub::getUserId, userSub.getUserId())
-//					.in(SysUserSub::getGigType, GigTypeEnum.OLADING, GigTypeEnum.JIN_YUAN)
-//					.eq(SysUserSub::getCertStatus, Integer.parseInt(OladingCertStatus.SIGNING.getCode()))
-//					.ne(SysUserSub::getId, userSub.getId()));
-//			if (secUserSub != null) {
-//				// 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
-//				log.info("=============================补发阿拉钉另一渠道MQ1==================================");
-//				UserSignCertDTO reCertDTO = new UserSignCertDTO();
-//				reCertDTO.setUserId(secUserSub.getUserId());
-//				reCertDTO.setGigTypeList(Collections.singletonList(secUserSub.getGigType()));
-//				sysUserSignCertService.batchChannelCert(reCertDTO);
-//			}
 		}
 	}
 
@@ -333,17 +320,14 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 		Map<String, String> subMap = new HashMap<>();
 		LambdaUpdateWrapper<SysUserSub> updateUserSubWrapper = Wrappers.lambdaUpdate();
 		updateUserSubWrapper.eq(SysUserSub::getId, userSub.getId());
-		OladingCertStatus currentCertStatus;
 		if (OladingCommonRequest.UploadIdCardImageStatus.IDENTIFY_SUCCESS.equals(uploadIdCertStatus)) {
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
-			currentCertStatus = OladingCertStatus.SIGNED;
 		} else {
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
 			updateUserSubWrapper.set(SysUserSub::getIdCardFrontUrl, null);
 			updateUserSubWrapper.set(SysUserSub::getIdCardBackUrl, null);
-			currentCertStatus = OladingCertStatus.SIGNED;
 		}
 		updateUserSubWrapper.set(SysUserSub::getUpdateTime, LocalDateTime.now());
 		updateUserSubWrapper.set(SysUserSub::getUpdateUser, 0);
@@ -358,17 +342,23 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 		// 结果放到redis
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-		String qResult = (String) redisTemplate.opsForValue().get(key);
-		if (JSONUtil.isJsonObj(qResult)) {
-			JSONObject qResultObj = JSONUtil.parseObj(qResult);
-			qResultObj.set(userSub.getGigType().name(), MapUtil.builder("certStatus", currentCertStatus.name()).build());
-			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(qResultObj), 1, TimeUnit.MINUTES);
-		} else {
-			Map<String, Object> result = MapUtil.newHashMap(2);
-			result.put(userSub.getGigType().name(), new HashMap<>(subMap));
-			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		Map<String, Object> result = MapUtil.newHashMap(2);
+		result.put(userSub.getGigType().name(), new HashMap<>(subMap));
+		// 查询redis是否有同时发起的标记
+		String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + userSub.getUserId();
+		Object userId = redisTemplate.opsForValue().get(redisKey);
+		if (userId != null && GigTypeEnum.OLADING.equals(userSub.getGigType())) {
+			// 将金园数科的状态,补充进来
+			SysUserSub feiyiSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSub.getUserId())
+					.eq(SysUserSub::getDeptId, userSub.getDeptId())
+					.eq(SysUserSub::getGigType, GigTypeEnum.JIN_YUAN));
+			result.put(GigTypeEnum.JIN_YUAN.name(),
+					MapUtil.builder("certStatus", OladingCertStatus.resolve(String.valueOf(feiyiSub.getCertStatus())).name()).build());
 		}
 
+		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+
 		// 如果成功,则发送协议上传MQ
 		if (OladingCommonRequest.UploadIdCardImageStatus.IDENTIFY_SUCCESS.equals(uploadIdCertStatus)) {
 			log.info("=============================发送协议上传MQ==================================");
@@ -396,17 +386,14 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 		}
 
 		Map<String, String> subMap = new HashMap<>();
-		OladingCertStatus currentCertStatus;
 		LambdaUpdateWrapper<SysUserSub> updateUserSubWrapper = Wrappers.lambdaUpdate();
 		updateUserSubWrapper.eq(SysUserSub::getId, userSub.getId());
 		if (OladingCommonRequest.UploadTaxpayerAgreementStatus.SUCCESS.equals(agreementStatus)) {
 			subMap.put("certStatus", OladingCertStatus.CERT.name());
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.CERT.getCode()));
-			currentCertStatus = OladingCertStatus.CERT;
 		} else {
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
-			currentCertStatus = OladingCertStatus.SIGNED;
 		}
 		updateUserSubWrapper.set(SysUserSub::getUpdateTime, LocalDateTime.now());
 		updateUserSubWrapper.set(SysUserSub::getUpdateUser, 0);
@@ -421,17 +408,23 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 		// 结果放到redis
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-		String qResult = (String) redisTemplate.opsForValue().get(key);
-		if (JSONUtil.isJsonObj(qResult)) {
-			JSONObject qResultObj = JSONUtil.parseObj(qResult);
-			qResultObj.set(userSub.getGigType().name(), MapUtil.builder("certStatus", currentCertStatus.name()).build());
-			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(qResultObj), 1, TimeUnit.MINUTES);
-		} else {
-			Map<String, Object> result = MapUtil.newHashMap(2);
-			result.put(userSub.getGigType().name(), new HashMap<>(subMap));
-			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		Map<String, Object> result = MapUtil.newHashMap(2);
+		result.put(userSub.getGigType().name(), new HashMap<>(subMap));
+		// 查询redis是否有同时发起的标记
+		String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + userSub.getUserId();
+		Object userId = redisTemplate.opsForValue().get(redisKey);
+		if (userId != null && GigTypeEnum.JIN_YUAN.equals(userSub.getGigType())) {
+			// 将海南飞亿的状态,补充进来
+			SysUserSub feiyiSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSub.getUserId())
+					.eq(SysUserSub::getDeptId, userSub.getDeptId())
+					.eq(SysUserSub::getGigType, GigTypeEnum.OLADING));
+			result.put(GigTypeEnum.OLADING.name(),
+					MapUtil.builder("certStatus", OladingCertStatus.resolve(String.valueOf(feiyiSub.getCertStatus())).name()).build());
 		}
 
+		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+
 		if (OladingCommonRequest.UploadTaxpayerAgreementStatus.SUCCESS.equals(agreementStatus)) {
 			// 如果成功,则发送核身视频上传MQ
 			log.info("=============================发送核身视频上传MQ==================================");

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

@@ -292,6 +292,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		// 查询当前用户关联的userSub
 		LambdaQueryWrapper<SysUserSub> userSubWrapper = Wrappers.lambdaQuery();
 		userSubWrapper.eq(SysUserSub::getUserId, userId);
+		userSubWrapper.eq(SysUserSub::getDeptId, dept.getDeptId());
 		if (CollUtil.isNotEmpty(userSignCertDTO.getGigTypeList())) {
 			userSubWrapper.in(SysUserSub::getGigType, userSignCertDTO.getGigTypeList());
 		}
@@ -309,8 +310,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 						&& !YeeCertStatus.SIGNED.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
 					// 易联并且渠道是默认
 					return true;
-				} else if (GigTypeEnum.OLADING.equals(sysUserSub.getGigType())
-						&& !OladingCertStatus.CERT.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
+				} else if (GigTypeEnum.OLADING.equals(sysUserSub.getGigType())) {
 					return true;
 				} else if (GigTypeEnum.JIN_YUAN.equals(sysUserSub.getGigType())) {
 					// 易联并且渠道是金园数科(自由职家)
@@ -377,6 +377,11 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 					return true;
 				}
 
+				// 已认证不发起
+				if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+					return false;
+				}
+
 				// 如果存在相同手机号、身份证、姓名信息的用户,并且是认证过,则不发起,直接返回签约认证状态
 //				if (this.checkExistCerted(sysUser, userSub)) {
 //					// 直接返回,不发起
@@ -399,6 +404,12 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				if (userSignCertDTO.getUploadFaceID() != null && userSignCertDTO.getUploadFaceID()) {
 					return true;
 				}
+
+				// 已认证不发起
+				if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+					return false;
+				}
+
 				// 如果存在相同手机号、身份证、姓名信息的用户,并且是认证过,则不发起,直接返回签约认证状态
 //				if (this.checkExistCerted(sysUser, userSub)) {
 //					// 直接返回,不发起