|
@@ -3,6 +3,7 @@ package com.qunzhixinxi.hnqz.admin.mq;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.map.MapUtil;
|
|
import cn.hutool.core.map.MapUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
+import cn.hutool.json.JSONArray;
|
|
import cn.hutool.json.JSONObject;
|
|
import cn.hutool.json.JSONObject;
|
|
import cn.hutool.json.JSONUtil;
|
|
import cn.hutool.json.JSONUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
@@ -39,6 +40,7 @@ import org.springframework.messaging.handler.annotation.Header;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
|
+import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -92,8 +94,6 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
resMap.put("res", JSONUtil.toJsonStr(subjectTypes));
|
|
resMap.put("res", JSONUtil.toJsonStr(subjectTypes));
|
|
return resMap;
|
|
return resMap;
|
|
}
|
|
}
|
|
- // 加redis锁 TODO
|
|
|
|
-// redisTemplate.opsForValue().setIfAbsent()
|
|
|
|
|
|
|
|
List<SysDept> deptList = sysDeptService.list(Wrappers.<SysDept>lambdaQuery()
|
|
List<SysDept> deptList = sysDeptService.list(Wrappers.<SysDept>lambdaQuery()
|
|
.eq(SysDept::getTaxCode, entpriseCode)
|
|
.eq(SysDept::getTaxCode, entpriseCode)
|
|
@@ -119,6 +119,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
case TAX_HELPOR:
|
|
case TAX_HELPOR:
|
|
this.taxHelperHandler(user, dept, subjectResult);
|
|
this.taxHelperHandler(user, dept, subjectResult);
|
|
// 本次结果存入redis
|
|
// 本次结果存入redis
|
|
|
|
+ log.info("缓存认证结果到redis:{}", JSONUtil.toJsonStr(subjectTypes));
|
|
redisTemplate.opsForValue().set(CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId(),
|
|
redisTemplate.opsForValue().set(CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId(),
|
|
JSONUtil.toJsonStr(subjectTypes), 1, TimeUnit.MINUTES);
|
|
JSONUtil.toJsonStr(subjectTypes), 1, TimeUnit.MINUTES);
|
|
break;
|
|
break;
|
|
@@ -129,7 +130,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
this.oladingHandler(user, dept, subjectResult);
|
|
this.oladingHandler(user, dept, subjectResult);
|
|
break;
|
|
break;
|
|
case YEE:
|
|
case YEE:
|
|
-// yeeHandler(user, dept, subjectResult);
|
|
|
|
|
|
+ this.yeeHandler(user, dept, subjectResult);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
}
|
|
}
|
|
@@ -257,11 +258,6 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
}
|
|
}
|
|
|
|
|
|
sysUserSubService.update(updateWrapper);
|
|
sysUserSubService.update(updateWrapper);
|
|
- // 如果是核身视频回调,则同步该账号的自由职家渠道认证状态 TODO
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void renlijiaHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
|
|
|
|
- // TODO
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -273,51 +269,68 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
*/
|
|
*/
|
|
private void oladingHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
|
|
private void oladingHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
|
|
|
|
|
|
- // 处理阿拉钉-海南飞亿
|
|
|
|
- Map<String, String> o1Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.OLADING);
|
|
|
|
|
|
+ // 查询redis是否有同时发起的标记
|
|
|
|
+ String oladingRedisKey = CacheConstants.OLADING_CERT_SEND_CHANNEL + user.getUserId();
|
|
|
|
+ String gigTypeJson = (String) redisTemplate.opsForValue().get(oladingRedisKey);
|
|
|
|
+ if (JSONUtil.isJsonArray(gigTypeJson)) {
|
|
|
|
+ log.info("redis同时发起的标记:key={}, value={}", oladingRedisKey, gigTypeJson);
|
|
|
|
+ }
|
|
|
|
|
|
- // 处理阿拉钉-金园数科
|
|
|
|
- Map<String, String> o2Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.JIN_YUAN);
|
|
|
|
|
|
+ JSONArray gigTypeArray = JSONUtil.parseArray(gigTypeJson);
|
|
|
|
|
|
- // 查询redis是否有同时发起的标记
|
|
|
|
- String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + user.getUserId();
|
|
|
|
- Object userId = redisTemplate.opsForValue().get(redisKey);
|
|
|
|
|
|
+ // 根据选择的渠道,分别更新并查询认证状态
|
|
|
|
+ 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)))));
|
|
|
|
|
|
// 结果放到redis
|
|
// 结果放到redis
|
|
- Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
- if (userId != null) {
|
|
|
|
- // 同时发起的情况,且是金园数科的状态已返回,则返回两个渠道状态
|
|
|
|
|
|
+ Map<String, Map<String, String>> resultMap = new HashMap<>(3);
|
|
|
|
+ if (gigTypeArray.size() > 1) {
|
|
|
|
+ // 同时发起的情况,且是前一个渠道(按照redis存的渠道顺序发送)的状态已返回,则刷新状态到redis
|
|
|
|
+ List<GigTypeEnum> gigTypeEnumList = gigTypeArray.stream()
|
|
|
|
+ .map(o -> Enum.valueOf(GigTypeEnum.class, String.valueOf(o)))
|
|
|
|
+ .collect(Collectors.toList());
|
|
List<SysUserSub> subList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
|
|
List<SysUserSub> subList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
|
|
.eq(SysUserSub::getUserId, user.getUserId())
|
|
.eq(SysUserSub::getUserId, user.getUserId())
|
|
.eq(SysUserSub::getDeptId, dept.getDeptId())
|
|
.eq(SysUserSub::getDeptId, dept.getDeptId())
|
|
- .in(SysUserSub::getGigType, GigTypeEnum.OLADING, GigTypeEnum.JIN_YUAN));
|
|
|
|
- Map<String, Map<String, String>> resultMap2 = subList.stream()
|
|
|
|
|
|
+ .in(SysUserSub::getGigType, gigTypeEnumList));
|
|
|
|
+ Map<String, Map<String, String>> dbResultMap = subList.stream()
|
|
.collect(Collectors.toMap(sysUserSub -> sysUserSub.getGigType().name(),
|
|
.collect(Collectors.toMap(sysUserSub -> sysUserSub.getGigType().name(),
|
|
sysUserSub -> MapUtil.builder("certStatus",
|
|
sysUserSub -> MapUtil.builder("certStatus",
|
|
OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name()).build()));
|
|
OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name()).build()));
|
|
- resultMap.putAll(resultMap2);
|
|
|
|
- // 删除同时发起的redis key
|
|
|
|
-// redisTemplate.delete(redisKey);
|
|
|
|
|
|
+ resultMap.putAll(dbResultMap);
|
|
} else {
|
|
} else {
|
|
- if (CollUtil.isNotEmpty(o1Map)) {
|
|
|
|
- resultMap.put(GigTypeEnum.OLADING.name(), o1Map);
|
|
|
|
- }
|
|
|
|
- if (CollUtil.isNotEmpty(o2Map)) {
|
|
|
|
- resultMap.put(GigTypeEnum.JIN_YUAN.name(), o2Map);
|
|
|
|
- }
|
|
|
|
|
|
+ // 只有一个渠道的情况
|
|
|
|
+ resultMap.putAll(certResultMap);
|
|
}
|
|
}
|
|
String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId();
|
|
String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId();
|
|
|
|
+ log.info("缓存认证结果到redis:{}", JSONUtil.toJsonStr(resultMap));
|
|
redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(resultMap), 1, TimeUnit.MINUTES);
|
|
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"))) {
|
|
|
|
- // 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
|
|
|
|
- log.info("=============================补发阿拉钉另一渠道MQ4==================================");
|
|
|
|
- UserSignCertDTO reCertDTO = new UserSignCertDTO();
|
|
|
|
- reCertDTO.setUserId(user.getUserId());
|
|
|
|
- reCertDTO.setGigTypeList(Collections.singletonList(GigTypeEnum.JIN_YUAN));
|
|
|
|
- sysUserSignCertService.batchChannelCert(reCertDTO);
|
|
|
|
|
|
+ // 处理同时发起时阿拉丁多个渠道的情况(补发)
|
|
|
|
+ if (gigTypeArray.size() > 1) {
|
|
|
|
+ String firstChannel = String.valueOf(gigTypeArray.get(0));
|
|
|
|
+ // 查询阿拉丁第一个渠道的认证状态
|
|
|
|
+ Map<String, String> certStatusMap = resultMap.get(firstChannel);
|
|
|
|
+ // 查询阿拉钉第一个未签约的渠道
|
|
|
|
+ String toSendChannel = "";
|
|
|
|
+ for (Map.Entry<String, Map<String, String>> entry : resultMap.entrySet()) {
|
|
|
|
+ if (OladingCertStatus.UN_SIGNED.name().equals(entry.getValue().get("certStatus"))) {
|
|
|
|
+ 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("=============================补发阿拉钉另一渠道MQ:{}==================================", toSendChannel);
|
|
|
|
+ UserSignCertDTO reCertDTO = new UserSignCertDTO();
|
|
|
|
+ reCertDTO.setUserId(user.getUserId());
|
|
|
|
+ reCertDTO.setGigTypeList(Collections.singletonList(Enum.valueOf(GigTypeEnum.class, toSendChannel)));
|
|
|
|
+ sysUserSignCertService.batchChannelCert(reCertDTO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -335,6 +348,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
String uploadTaxPayerAgreementStatus = subjectResult.getStr("uploadTaxPayerAgreementStatus");
|
|
String uploadTaxPayerAgreementStatus = subjectResult.getStr("uploadTaxPayerAgreementStatus");
|
|
LocalDateTime now = LocalDateTime.now();
|
|
LocalDateTime now = LocalDateTime.now();
|
|
Map<String, String> certStatusMap = new HashMap<>();
|
|
Map<String, String> certStatusMap = new HashMap<>();
|
|
|
|
+ certStatusMap.put("certStatus", OladingCertStatus.UN_SIGNED.name());
|
|
|
|
|
|
// 查询当前认证状态
|
|
// 查询当前认证状态
|
|
SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
|
|
SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
|
|
@@ -343,7 +357,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.IN_PROGRESS)
|
|
.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.IN_PROGRESS)
|
|
.eq(SysUserSub::getGigType, gigType));
|
|
.eq(SysUserSub::getGigType, gigType));
|
|
if (userSub == null) {
|
|
if (userSub == null) {
|
|
- return null;
|
|
|
|
|
|
+ return certStatusMap;
|
|
}
|
|
}
|
|
|
|
|
|
// 拼接更新条件
|
|
// 拼接更新条件
|