Selaa lähdekoodia

feat: 阿拉丁-河南

lixuesong 3 vuotta sitten
vanhempi
commit
fa139e7794

+ 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 OLADING_SEND_BOTH_CHANNEL = "OLADING:SEND:BOTH:CHANNEL:";
+	String USER_SIGN_CERT_SEND_CHANNEL = "USER:SIGN:CERT:SEND:CHANNEL:";
 
 }

+ 2 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigChannelEnum.java

@@ -18,7 +18,8 @@ public enum GigChannelEnum {
 	DEFAULT(0, "默认渠道"),
 	CICC(1, "中金"),
 	PINGAN(2, "平安银行"),
-	JIN_YUAN(31, "金园数科");
+	JIN_YUAN(31, "金园数科"),
+	XIN_TAI_ZI(32, "河南薪泰梓");
 
 	@EnumValue
 	private int code;

+ 2 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigTypeEnum.java

@@ -19,7 +19,8 @@ public enum GigTypeEnum {
 	TAX_HELPOR(1, "税邦云", "税邦云"),
 	OLADING(2, "钉灵工", "钉灵工-海南飞亿"),
 	YEE(3, "易联数科", "易联数科"),
-	JIN_YUAN(4, "钉灵工", "金园数科");
+	JIN_YUAN(4, "钉灵工", "金园数科"),
+	XIN_TAI_ZI(5, "钉灵工", "钉灵工-河南薪泰梓");
 
 	@EnumValue
 	private int code;

+ 36 - 30
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java

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

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

@@ -277,7 +277,7 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 		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();
+		String redisKey = CacheConstants.USER_SIGN_CERT_SEND_CHANNEL + userSub.getUserId();
 		Object userId = redisTemplate.opsForValue().get(redisKey);
 		if (userId != null && GigTypeEnum.OLADING.equals(userSub.getGigType())) {
 			// 将金园数科的状态,补充进来
@@ -345,7 +345,7 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 		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();
+		String redisKey = CacheConstants.USER_SIGN_CERT_SEND_CHANNEL + userSub.getUserId();
 		Object userId = redisTemplate.opsForValue().get(redisKey);
 		if (userId != null && GigTypeEnum.OLADING.equals(userSub.getGigType())) {
 			// 将金园数科的状态,补充进来
@@ -411,7 +411,7 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 		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();
+		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())) {
 			// 将海南飞亿的状态,补充进来

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

@@ -51,7 +51,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -308,12 +308,12 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 					return true;
 				} else if (GigTypeEnum.YEE.equals(sysUserSub.getGigType())
 						&& !YeeCertStatus.SIGNED.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
-					// 易联并且渠道是默认
 					return true;
 				} else if (GigTypeEnum.OLADING.equals(sysUserSub.getGigType())) {
 					return true;
 				} else if (GigTypeEnum.JIN_YUAN.equals(sysUserSub.getGigType())) {
-					// 易联并且渠道是金园数科(自由职家)
+					return true;
+				} else if (GigTypeEnum.XIN_TAI_ZI.equals(sysUserSub.getGigType())) {
 					return true;
 				} else if (GigTypeEnum.REN_LI_JIA.equals(sysUserSub.getGigType())
 						&& RenlijiaCertStatus.CER_STATUS_1.getCode() != sysUserSub.getCertStatus()) {
@@ -325,7 +325,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				String requestId = RandomStringUtils.randomAlphabetic(16);
 
 				// 发起前置判断
-				if (!this.preSignCert(sysUser, userSub, userSignCertDTO, requestId)) {
+				if (!this.preSignCert(sysUser, userSub, userSignCertDTO)) {
 					// false直接返回,不发送mq
 					return;
 				}
@@ -357,17 +357,47 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 * @param sysUser
 	 * @param userSub
 	 * @param userSignCertDTO
-	 * @param requestId
 	 */
-	private boolean preSignCert(SysUser sysUser, SysUserSub userSub, UserSignCertDTO userSignCertDTO, String requestId) {
+	private boolean preSignCert(SysUser sysUser, SysUserSub userSub, UserSignCertDTO userSignCertDTO) {
 		// 校验是否有进行中的
 		if (GigCallBackStatus.IN_PROGRESS.equals(userSub.getCallbackStatus())) {
 			return false;
 		}
 
+		// 过滤出阿拉钉的渠道
+		Collection<GigTypeEnum> oladingTypeList =
+				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();
+		redisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(oladingTypeList));
+
 		switch (userSub.getGigType()) {
+			case XIN_TAI_ZI:
+				// 钉灵工-河南薪泰梓
+				// 发起认证前,金园数科,转换对应关系为 阿拉钉-金园数科
+				userSub.setGigType(GigTypeEnum.OLADING);
+				userSub.setGigChannel(GigChannelEnum.XIN_TAI_ZI);
+
+				// 如果需要传核身视频,则返回true
+				if (userSignCertDTO.getUploadFaceID() != null && userSignCertDTO.getUploadFaceID()) {
+					return true;
+				}
+
+				// 已认证不发起
+				if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+					return false;
+				}
+
+				// 如果同时包含阿拉钉多个渠道,则只选第一个发起
+				if (oladingTypeList.size() > 1 && !oladingTypeList.stream().findFirst().get().equals(GigTypeEnum.XIN_TAI_ZI)) {
+					// 同时选择了阿拉钉金园数科、海南飞亿、河南薪泰梓渠道的两个及以上,则先发起第一个,完成之后再依次发起其他的
+					return false;
+				}
+
+				return true;
 			case JIN_YUAN:
-				// 阿拉钉-金园数科
+				// 钉灵工-金园数科
 				// 发起认证前,金园数科,转换对应关系为 阿拉钉-金园数科
 				userSub.setGigType(GigTypeEnum.OLADING);
 				userSub.setGigChannel(GigChannelEnum.JIN_YUAN);
@@ -382,18 +412,9 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 					return false;
 				}
 
-				// 如果存在相同手机号、身份证、姓名信息的用户,并且是认证过,则不发起,直接返回签约认证状态
-//				if (this.checkExistCerted(sysUser, userSub)) {
-//					// 直接返回,不发起
-//					return false;
-//				}
-
-				// 如果同时包含阿拉钉金园数科、海南飞亿,则只选海南飞亿发起
-				if (userSignCertDTO.getGigTypeList().containsAll(CollUtil.toList(GigTypeEnum.OLADING, GigTypeEnum.JIN_YUAN))) {
-					// 记录同时选择了阿拉钉金园数科、海南飞亿渠道,用来标记其在海南飞亿认证完后需要被发起
-					// 即,同时选择了阿拉钉金园数科、海南飞亿渠道,则先发起海南飞亿认证,完成之后再发起金园数科认证
-					String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + sysUser.getUserId();
-					redisTemplate.opsForValue().set(redisKey, sysUser.getUserId());
+				// 如果同时包含阿拉钉多个渠道,则只选第一个发起
+				if (oladingTypeList.size() > 1 && !oladingTypeList.stream().findFirst().get().equals(GigTypeEnum.JIN_YUAN)) {
+					// 同时选择了阿拉钉金园数科、海南飞亿、河南薪泰梓渠道的两个及以上,则先发起第一个,完成之后再依次发起其他的
 					return false;
 				}
 
@@ -410,11 +431,12 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 					return false;
 				}
 
-				// 如果存在相同手机号、身份证、姓名信息的用户,并且是认证过,则不发起,直接返回签约认证状态
-//				if (this.checkExistCerted(sysUser, userSub)) {
-//					// 直接返回,不发起
-//					return false;
-//				}
+				// 如果同时包含阿拉钉多个渠道,则只选第一个发起
+				if (oladingTypeList.size() > 1 && !oladingTypeList.stream().findFirst().get().equals(GigTypeEnum.XIN_TAI_ZI)) {
+					// 同时选择了阿拉钉金园数科、海南飞亿、河南薪泰梓渠道的两个及以上,则先发起第一个,完成之后再依次发起其他的
+					return false;
+				}
+
 				return true;
 			case REN_LI_JIA:
 				// 人力家直接调用原有发短信接口