瀏覽代碼

feat: 阿拉钉多渠道发起和回调修改

lixuesong 3 年之前
父節點
當前提交
968d606f74

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

@@ -2,6 +2,7 @@ package com.qunzhixinxi.hnqz.admin.service.gig.impl;
 
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -253,12 +254,15 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 		Map<String, String> subMap = new HashMap<>();
 		SysUserSub updateUserSub = new SysUserSub();
+		OladingCertStatus currentCertStatus;
 		if (OladingCommonRequest.SignUpStatus.SIGN.equals(signUpCertStatus)) {
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSub.setCertStatus(Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
+			currentCertStatus = OladingCertStatus.SIGNED;
 		} else {
 			subMap.put("certStatus", OladingCertStatus.UN_SIGNED.name());
 			updateUserSub.setCertStatus(Integer.valueOf(OladingCertStatus.UN_SIGNED.getCode()));
+			currentCertStatus = OladingCertStatus.UN_SIGNED;
 		}
 		updateUserSub.setId(userSub.getId());
 		updateUserSub.setUpdateTime(LocalDateTime.now());
@@ -274,10 +278,16 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 		// 结果放到redis
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-		Map<String, Object> result = MapUtil.newHashMap(2);
-		result.put(GigTypeEnum.OLADING.name(), new HashMap<>(subMap));
-		result.put(GigTypeEnum.JIN_YUAN.name(), new HashMap<>(subMap));
-		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		if (redisTemplate.hasKey(key)) {
+			String qResult = (String) redisTemplate.opsForValue().get(key);
+			JSONObject qResultObj = JSONUtil.parseObj(qResult);
+			qResultObj.append(userSub.getGigType().name(), currentCertStatus.name());
+			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(qResultObj), 1, TimeUnit.MINUTES);
+		} else {
+			Map<String, Object> result = MapUtil.newHashMap(2);
+			result.put(currentCertStatus.name(), new HashMap<>(subMap));
+			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		}
 
 		// 如果成功,则发送证照上传MQ
 		if (OladingCommonRequest.SignUpStatus.SIGN.equals(signUpCertStatus)) {
@@ -286,6 +296,21 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 			userSignCertDTO.setUserId(userSub.getUserId());
 			userSignCertDTO.setGigTypeList(Collections.singletonList(userSub.getGigType()));
 			sysUserSignCertService.batchChannelCert(userSignCertDTO);
+
+			// 查询是否存在另一渠道需要发起(海南飞亿、金园数科其中之一)
+			SysUserSub secUserSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSub.getUserId())
+					.eq(SysUserSub::getGigType, GigTypeEnum.OLADING)
+					.eq(SysUserSub::getCertStatus, Integer.parseInt(OladingCertStatus.SIGNING.getCode()))
+					.ne(SysUserSub::getId, userSub.getId()));
+			if (secUserSub != null) {
+				// 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
+				log.info("=============================补发阿拉钉另一渠道MQ1==================================");
+				UserSignCertDTO reCertDTO = new UserSignCertDTO();
+				reCertDTO.setUserId(secUserSub.getUserId());
+				reCertDTO.setGigTypeList(Collections.singletonList(secUserSub.getGigType()));
+				sysUserSignCertService.batchChannelCert(reCertDTO);
+			}
 		}
 	}
 
@@ -307,14 +332,17 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 		Map<String, String> subMap = new HashMap<>();
 		LambdaUpdateWrapper<SysUserSub> updateUserSubWrapper = Wrappers.lambdaUpdate();
+		OladingCertStatus currentCertStatus;
 		if (OladingCommonRequest.UploadIdCardImageStatus.IDENTIFY_SUCCESS.equals(uploadIdCertStatus)) {
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
+			currentCertStatus = OladingCertStatus.SIGNED;
 		} else {
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
 			updateUserSubWrapper.set(SysUserSub::getIdCardFrontUrl, null);
 			updateUserSubWrapper.set(SysUserSub::getIdCardBackUrl, null);
+			currentCertStatus = OladingCertStatus.SIGNED;
 		}
 		updateUserSubWrapper.eq(SysUserSub::getUserId, userSub.getUserId());
 		updateUserSubWrapper.eq(SysUserSub::getDeptId, userSub.getDeptId());
@@ -334,10 +362,16 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 		// 结果放到redis
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-		Map<String, Object> result = MapUtil.newHashMap(2);
-		result.put(GigTypeEnum.OLADING.name(), new HashMap<>(subMap));
-		result.put(GigTypeEnum.JIN_YUAN.name(), new HashMap<>(subMap));
-		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		if (redisTemplate.hasKey(key)) {
+			String qResult = (String) redisTemplate.opsForValue().get(key);
+			JSONObject qResultObj = JSONUtil.parseObj(qResult);
+			qResultObj.append(userSub.getGigType().name(), currentCertStatus.name());
+			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(qResultObj), 1, TimeUnit.MINUTES);
+		} else {
+			Map<String, Object> result = MapUtil.newHashMap(2);
+			result.put(currentCertStatus.name(), new HashMap<>(subMap));
+			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		}
 
 		// 如果成功,则发送协议上传MQ
 		if (OladingCommonRequest.UploadIdCardImageStatus.IDENTIFY_SUCCESS.equals(uploadIdCertStatus)) {
@@ -346,6 +380,21 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 			userSignCertDTO.setUserId(userSub.getUserId());
 			userSignCertDTO.setGigTypeList(Collections.singletonList(userSub.getGigType()));
 			sysUserSignCertService.batchChannelCert(userSignCertDTO);
+
+			// 查询是否存在另一渠道需要发起(海南飞亿、金园数科其中之一)
+			SysUserSub secUserSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSub.getUserId())
+					.eq(SysUserSub::getGigType, GigTypeEnum.OLADING)
+					.eq(SysUserSub::getCertStatus, Integer.parseInt(OladingCertStatus.SIGNING.getCode()))
+					.ne(SysUserSub::getId, userSub.getId()));
+			if (secUserSub != null) {
+				// 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
+				log.info("=============================补发阿拉钉另一渠道MQ2==================================");
+				UserSignCertDTO reCertDTO = new UserSignCertDTO();
+				reCertDTO.setUserId(secUserSub.getUserId());
+				reCertDTO.setGigTypeList(Collections.singletonList(secUserSub.getGigType()));
+				sysUserSignCertService.batchChannelCert(reCertDTO);
+			}
 		}
 	}
 
@@ -366,28 +415,17 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 		}
 
 		Map<String, String> subMap = new HashMap<>();
-//		SysUserSub updateUserSub = new SysUserSub();
+		OladingCertStatus currentCertStatus;
 		LambdaUpdateWrapper<SysUserSub> updateUserSubWrapper = Wrappers.lambdaUpdate();
 		if (OladingCommonRequest.UploadTaxpayerAgreementStatus.SUCCESS.equals(agreementStatus)) {
 			subMap.put("certStatus", OladingCertStatus.CERT.name());
-//			updateUserSub.setCertStatus(Integer.valueOf(OladingCertStatus.CERT.getCode()));
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.CERT.getCode()));
+			currentCertStatus = OladingCertStatus.CERT;
 		} else {
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
-//			updateUserSub.setCertStatus(Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
+			currentCertStatus = OladingCertStatus.SIGNED;
 		}
-//		updateUserSub.setId(userSub.getId());
-//		updateUserSub.setCallbackStatus(GigCallBackStatus.RETURNED);
-//		updateUserSub.setUpdateTime(LocalDateTime.now());
-//		updateUserSub.setUpdateUser(0);
-//		if ("0".equals(req.getCode())) {
-//			updateUserSub.setFailReason(String.valueOf(req.getData().get("failReason")));
-//		} else {
-//			updateUserSub.setFailReason(req.getMessage());
-//		}
-		// 更新状态
-//		sysUserSubService.updateById(updateUserSub);
 		updateUserSubWrapper.eq(SysUserSub::getUserId, userSub.getUserId());
 		updateUserSubWrapper.eq(SysUserSub::getDeptId, userSub.getDeptId());
 		// 同时修改自由职家、金园数科的状态和数据
@@ -406,19 +444,40 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 		// 结果放到redis
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-		Map<String, Object> result = MapUtil.newHashMap(2);
-		result.put(GigTypeEnum.OLADING.name(), new HashMap<>(subMap));
-		result.put(GigTypeEnum.JIN_YUAN.name(), new HashMap<>(subMap));
-		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		if (redisTemplate.hasKey(key)) {
+			String qResult = (String) redisTemplate.opsForValue().get(key);
+			JSONObject qResultObj = JSONUtil.parseObj(qResult);
+			qResultObj.append(userSub.getGigType().name(), currentCertStatus.name());
+			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(qResultObj), 1, TimeUnit.MINUTES);
+		} else {
+			Map<String, Object> result = MapUtil.newHashMap(2);
+			result.put(currentCertStatus.name(), new HashMap<>(subMap));
+			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		}
 
-		// 如果成功,则发送核身视频上传MQ
 		if (OladingCommonRequest.UploadTaxpayerAgreementStatus.SUCCESS.equals(agreementStatus)) {
+			// 如果成功,则发送核身视频上传MQ
 			log.info("=============================发送核身视频上传MQ==================================");
 			UserSignCertDTO userSignCertDTO = new UserSignCertDTO();
 			userSignCertDTO.setUserId(userSub.getUserId());
 			userSignCertDTO.setGigTypeList(Collections.singletonList(userSub.getGigType()));
 			userSignCertDTO.setUploadFaceID(true);
 			sysUserSignCertService.batchChannelCert(userSignCertDTO);
+
+			// 查询是否存在另一渠道需要发起(海南飞亿、金园数科其中之一)
+			SysUserSub secUserSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSub.getUserId())
+					.eq(SysUserSub::getGigType, GigTypeEnum.OLADING)
+					.eq(SysUserSub::getCertStatus, Integer.parseInt(OladingCertStatus.SIGNING.getCode()))
+					.ne(SysUserSub::getId, userSub.getId()));
+			if (secUserSub != null) {
+				// 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
+				log.info("=============================补发阿拉钉另一渠道MQ3==================================");
+				UserSignCertDTO reCertDTO = new UserSignCertDTO();
+				reCertDTO.setUserId(secUserSub.getUserId());
+				reCertDTO.setGigTypeList(Collections.singletonList(secUserSub.getGigType()));
+				sysUserSignCertService.batchChannelCert(reCertDTO);
+			}
 		}
 	}
 }

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

@@ -51,6 +51,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -361,6 +362,11 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 			return false;
 		}
 
+		// 如果同时包含阿拉钉金园数科、海南飞亿,则只选一个发起
+		if (userSignCertDTO.getGigTypeList().containsAll(CollUtil.toList(GigTypeEnum.OLADING, GigTypeEnum.JIN_YUAN))) {
+			userSignCertDTO.setGigTypeList(Collections.singletonList(GigTypeEnum.OLADING));
+		}
+
 		switch (userSub.getGigType()) {
 			case JIN_YUAN:
 				// 阿拉钉-金园数科