|
@@ -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);
|
|
|
}
|
|
|
}
|
|
|
|