|
@@ -3,6 +3,7 @@ package com.qunzhixinxi.hnqz.admin.mq;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.json.JSONArray;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
@@ -92,8 +93,6 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
|
resMap.put("res", JSONUtil.toJsonStr(subjectTypes));
|
|
|
return resMap;
|
|
|
}
|
|
|
- // 加redis锁 TODO
|
|
|
-// redisTemplate.opsForValue().setIfAbsent()
|
|
|
|
|
|
List<SysDept> deptList = sysDeptService.list(Wrappers.<SysDept>lambdaQuery()
|
|
|
.eq(SysDept::getTaxCode, entpriseCode)
|
|
@@ -129,7 +128,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
|
this.oladingHandler(user, dept, subjectResult);
|
|
|
break;
|
|
|
case YEE:
|
|
|
-// yeeHandler(user, dept, subjectResult);
|
|
|
+ this.yeeHandler(user, dept, subjectResult);
|
|
|
break;
|
|
|
default:
|
|
|
}
|
|
@@ -257,11 +256,6 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
|
}
|
|
|
|
|
|
sysUserSubService.update(updateWrapper);
|
|
|
- // 如果是核身视频回调,则同步该账号的自由职家渠道认证状态 TODO
|
|
|
- }
|
|
|
-
|
|
|
- private void renlijiaHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
|
|
|
- // TODO
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -273,45 +267,57 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
|
|
|
*/
|
|
|
private void oladingHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
|
|
|
|
|
|
- // 处理阿拉钉-海南飞亿
|
|
|
- Map<String, String> o1Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.OLADING);
|
|
|
+ // 查询redis是否有同时发起的标记
|
|
|
+ String redisKey = CacheConstants.USER_SIGN_CERT_SEND_CHANNEL + user.getUserId();
|
|
|
+ String gigTypeJson = (String) redisTemplate.opsForValue().get(redisKey);
|
|
|
+ if (!JSONUtil.isJsonArray(gigTypeJson)) {
|
|
|
+ log.warn("redis没有查询到选择的渠道:{}", gigTypeJson);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- // 处理阿拉钉-金园数科
|
|
|
- Map<String, String> o2Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.JIN_YUAN);
|
|
|
+ JSONArray gigTypeArray = JSONUtil.parseArray(gigTypeJson);
|
|
|
+
|
|
|
+ // 根据选择的渠道,分别更新并查询认证状态
|
|
|
+ Map<String, Map<String, String>> certResultMap = new HashMap<>();
|
|
|
+ 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是否有同时发起的标记
|
|
|
- String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + user.getUserId();
|
|
|
- Object userId = redisTemplate.opsForValue().get(redisKey);
|
|
|
|
|
|
// 结果放到redis
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
- if (userId != null) {
|
|
|
- // 同时发起的情况,且是金园数科的状态已返回,则返回两个渠道状态
|
|
|
+ if (gigTypeArray.size() > 1) {
|
|
|
+ // 同时发起的情况,且是前一个渠道(按照redis存的渠道顺序发送)的状态已返回,则刷新状态到redis
|
|
|
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()
|
|
|
+ .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()));
|
|
|
- resultMap.putAll(resultMap2);
|
|
|
- // 删除同时发起的redis key
|
|
|
-// redisTemplate.delete(redisKey);
|
|
|
+ resultMap.putAll(dbResultMap);
|
|
|
} 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();
|
|
|
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"))) {
|
|
|
+// 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();
|