Parcourir la source

fix: 返回redis认证结果多条

lixuesong il y a 3 ans
Parent
commit
bebd421fdc

+ 29 - 16
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,33 +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();
-			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(resultMap), 1, TimeUnit.MINUTES);
+		if (userId != null && CollUtil.isNotEmpty(o2Map)) {
+			// 同时发起的情况,且是第二个的状态已返回,则返回两个渠道状态
+			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);
 
 		// 处理同时发起时另一个渠道需要的补发情况
-		// 查询redis是否有同时发起的标记
-		String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + user.getUserId();
-		Object userId = redisTemplate.opsForValue().get(redisKey);
-		String certStatus = subjectResult.getStr("certStatus");
-		if (userId != null && OladingCommonRequest.UploadTaxpayerAgreementStatus.SUCCESS.name().equals(certStatus)) {
+		Object userId2 = redisTemplate.opsForValue().get(redisKey);
+		if (userId2 != null && CollUtil.isNotEmpty(o1Map)) {
 			// 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
 			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);
 		}
 	}
 

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

@@ -12,6 +12,7 @@ import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.admin.entity.dto.UserSignCertDTO;
 import com.qunzhixinxi.hnqz.admin.enums.GigCallBackStatus;
+import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.OladingCertStatus;
 import com.qunzhixinxi.hnqz.admin.service.SysUserSubService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
@@ -383,6 +384,19 @@ 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.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)) {