Pārlūkot izejas kodu

feat: 阿拉钉河南薪泰梓-认证调整

lixuesong 3 gadi atpakaļ
vecāks
revīzija
6b70b0c145

+ 2 - 2
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/CacheConstants.java

@@ -116,8 +116,8 @@ public interface CacheConstants {
 	String OLADING_NOTIFY_KEY = "OLADING:NOTIFY:KEY:";
 
 	/**
-	 * 发起认证渠道记录key
+	 * 发起阿拉丁认证渠道记录key
 	 */
-	String USER_SIGN_CERT_SEND_CHANNEL = "USER:SIGN:CERT:SEND:CHANNEL:";
+	String OLADING_CERT_SEND_CHANNEL = "OLADING:CERT:SEND:CHANNEL:";
 
 }

+ 32 - 25
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java

@@ -40,6 +40,7 @@ import org.springframework.messaging.handler.annotation.Header;
 import java.time.LocalDateTime;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -268,8 +269,8 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 	private void oladingHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
 
 		// 查询redis是否有同时发起的标记
-		String redisKey = CacheConstants.USER_SIGN_CERT_SEND_CHANNEL + user.getUserId();
-		String gigTypeJson = (String) redisTemplate.opsForValue().get(redisKey);
+		String oladingRedisKey = CacheConstants.OLADING_CERT_SEND_CHANNEL + user.getUserId();
+		String gigTypeJson = (String) redisTemplate.opsForValue().get(oladingRedisKey);
 		if (!JSONUtil.isJsonArray(gigTypeJson)) {
 			log.warn("redis没有查询到选择的渠道:{}", gigTypeJson);
 			return;
@@ -278,23 +279,12 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		JSONArray gigTypeArray = JSONUtil.parseArray(gigTypeJson);
 
 		// 根据选择的渠道,分别更新并查询认证状态
-		Map<String, Map<String, String>> certResultMap = new HashMap<>();
+		Map<String, Map<String, String>> certResultMap = new LinkedHashMap<>(3);
 		gigTypeArray.forEach(o -> certResultMap.put(String.valueOf(o),
 				this.oladingChannelHandler(user, dept, subjectResult, Enum.valueOf(GigTypeEnum.class, String.valueOf(o)))));
 
-
-//		// 处理阿拉钉-海南飞亿
-//		Map<String, String> o1Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.OLADING);
-//
-//		// 处理阿拉钉-金园数科
-//		Map<String, String> o2Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.JIN_YUAN);
-//
-//		// 处理阿拉钉-河南薪泰梓
-//		Map<String, String> o3Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.XIN_TAI_ZI);
-
-
 		// 结果放到redis
-		Map<String, Object> resultMap = new HashMap<>();
+		Map<String, Object> resultMap = new HashMap<>(3);
 		if (gigTypeArray.size() > 1) {
 			// 同时发起的情况,且是前一个渠道(按照redis存的渠道顺序发送)的状态已返回,则刷新状态到redis
 			List<SysUserSub> subList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
@@ -313,17 +303,34 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId();
 		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(resultMap), 1, TimeUnit.MINUTES);
 
-		// 处理同时发起时另一个渠道需要的补发情况
-//		Object userId2 = redisTemplate.opsForValue().get(redisKey);
-//		if (userId2 != null && CollUtil.isNotEmpty(o1Map) && OladingCertStatus.CERT.name().equals(o1Map.get("certStatus"))) {
-		// TODO
+		// 处理同时发起时阿拉丁多个渠道需要的情况(补发)
 		if (gigTypeArray.size() > 1) {
-			// 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
-			log.info("=============================补发阿拉钉另一渠道MQ4==================================");
-			UserSignCertDTO reCertDTO = new UserSignCertDTO();
-			reCertDTO.setUserId(user.getUserId());
-			reCertDTO.setGigTypeList(Collections.singletonList(GigTypeEnum.JIN_YUAN));
-			sysUserSignCertService.batchChannelCert(reCertDTO);
+			String firstChannel = String.valueOf(gigTypeArray.get(0));
+			// 查询阿拉丁第一个渠道的认证状态
+			Map<String, String> certStatusMap = certResultMap.get(firstChannel);
+			// 查询阿拉钉第一个未发起认证的渠道
+			String toSendChannel = "";
+			for (Map.Entry<String, Map<String, String>> entry : certResultMap.entrySet()) {
+				if (CollUtil.isEmpty(entry.getValue())) {
+					toSendChannel = entry.getKey();
+					break;
+				}
+			}
+			// 校验需要补发的渠道,是否为第一个
+			if (StrUtil.isNotBlank(toSendChannel) && !StrUtil.equals(firstChannel, toSendChannel)) {
+				// 如果阿拉丁第一个渠道是已认证的,则补发下一个阿拉丁的渠道(由于阿拉钉同一人不同渠道的回调只有一次,所以这里出现多个渠道需要依次补发)
+				if (CollUtil.isNotEmpty(certStatusMap) && OladingCertStatus.CERT.name().equals(certStatusMap.get("certStatus"))) {
+
+					log.info("=============================补发阿拉钉另一渠道MQ4==================================");
+					UserSignCertDTO reCertDTO = new UserSignCertDTO();
+					reCertDTO.setUserId(user.getUserId());
+					reCertDTO.setGigTypeList(Collections.singletonList(GigTypeEnum.JIN_YUAN));
+					sysUserSignCertService.batchChannelCert(reCertDTO);
+
+					// 刷新渠道到redis
+					redisTemplate.opsForValue().set(oladingRedisKey, JSONUtil.toJsonStr(gigTypeArray));
+				}
+			}
 		}
 	}
 

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

@@ -2,6 +2,7 @@ package com.qunzhixinxi.hnqz.admin.service.gig.impl;
 
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -276,17 +277,21 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
 		Map<String, Object> result = MapUtil.newHashMap(2);
 		result.put(userSub.getGigType().name(), new HashMap<>(subMap));
-		// 查询redis是否有同时发起的标记
-		String redisKey = CacheConstants.USER_SIGN_CERT_SEND_CHANNEL + userSub.getUserId();
-		Object userId = redisTemplate.opsForValue().get(redisKey);
-		if (userId != null && GigTypeEnum.OLADING.equals(userSub.getGigType())) {
-			// 将金园数科的状态,补充进来
-			SysUserSub feiyiSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+
+		// 查询redis是否有同时发起的标记,查询出对应的状态放到redis
+		String oladingRedisKey = CacheConstants.OLADING_CERT_SEND_CHANNEL + userSub.getUserId();
+		String gigTypeJson = (String) redisTemplate.opsForValue().get(oladingRedisKey);
+		if (JSONUtil.isJsonArray(gigTypeJson)) {
+			JSONArray gigTypeArray = JSONUtil.parseArray(gigTypeJson);
+			List<SysUserSub> subList = sysUserSubService.list(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());
+					.in(SysUserSub::getGigType, gigTypeArray));
+			Map<String, Map<String, String>> dbResultMap = subList.stream()
+					.collect(Collectors.toMap(sysUserSub -> sysUserSub.getGigType().name(),
+							sysUserSub -> MapUtil.builder("certStatus",
+									OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name()).build()));
+			result.putAll(dbResultMap);
 		}
 
 		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
@@ -344,21 +349,26 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
 		Map<String, Object> result = MapUtil.newHashMap(2);
 		result.put(userSub.getGigType().name(), new HashMap<>(subMap));
-		// 查询redis是否有同时发起的标记
-		String redisKey = CacheConstants.USER_SIGN_CERT_SEND_CHANNEL + userSub.getUserId();
-		Object userId = redisTemplate.opsForValue().get(redisKey);
-		if (userId != null && GigTypeEnum.OLADING.equals(userSub.getGigType())) {
-			// 将金园数科的状态,补充进来
-			SysUserSub feiyiSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+
+		// 查询redis是否有同时发起的标记,查询出对应的状态放到redis
+		String oladingRedisKey = CacheConstants.OLADING_CERT_SEND_CHANNEL + userSub.getUserId();
+		String gigTypeJson = (String) redisTemplate.opsForValue().get(oladingRedisKey);
+		if (JSONUtil.isJsonArray(gigTypeJson)) {
+			JSONArray gigTypeArray = JSONUtil.parseArray(gigTypeJson);
+			List<SysUserSub> subList = sysUserSubService.list(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());
+					.in(SysUserSub::getGigType, gigTypeArray));
+			Map<String, Map<String, String>> dbResultMap = subList.stream()
+					.collect(Collectors.toMap(sysUserSub -> sysUserSub.getGigType().name(),
+							sysUserSub -> MapUtil.builder("certStatus",
+									OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name()).build()));
+			result.putAll(dbResultMap);
 		}
 
 		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
 
+
 		// 如果成功,则发送协议上传MQ
 		if (OladingCommonRequest.UploadIdCardImageStatus.IDENTIFY_SUCCESS.equals(uploadIdCertStatus)) {
 			log.info("=============================发送协议上传MQ==================================");
@@ -410,17 +420,21 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
 		Map<String, Object> result = MapUtil.newHashMap(2);
 		result.put(userSub.getGigType().name(), new HashMap<>(subMap));
-		// 查询redis是否有同时发起的标记
-		String redisKey = CacheConstants.USER_SIGN_CERT_SEND_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()
+
+		// 查询redis是否有同时发起的标记,查询出对应的状态放到redis
+		String oladingRedisKey = CacheConstants.OLADING_CERT_SEND_CHANNEL + userSub.getUserId();
+		String gigTypeJson = (String) redisTemplate.opsForValue().get(oladingRedisKey);
+		if (JSONUtil.isJsonArray(gigTypeJson)) {
+			JSONArray gigTypeArray = JSONUtil.parseArray(gigTypeJson);
+			List<SysUserSub> subList = sysUserSubService.list(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());
+					.in(SysUserSub::getGigType, gigTypeArray));
+			Map<String, Map<String, String>> dbResultMap = subList.stream()
+					.collect(Collectors.toMap(sysUserSub -> sysUserSub.getGigType().name(),
+							sysUserSub -> MapUtil.builder("certStatus",
+									OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name()).build()));
+			result.putAll(dbResultMap);
 		}
 
 		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);

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

@@ -369,7 +369,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				CollUtil.intersection(userSignCertDTO.getGigTypeList(),
 						CollUtil.toList(GigTypeEnum.OLADING, GigTypeEnum.JIN_YUAN, GigTypeEnum.XIN_TAI_ZI));
 		// 选择的渠道记录到redis
-		String redisKey = CacheConstants.USER_SIGN_CERT_SEND_CHANNEL + sysUser.getUserId();
+		String redisKey = CacheConstants.OLADING_CERT_SEND_CHANNEL + sysUser.getUserId();
 		redisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(oladingTypeList));
 
 		switch (userSub.getGigType()) {