Преглед изворни кода

Merge remote-tracking branch 'origin/temp-pre' into temp-pre

shc пре 3 година
родитељ
комит
0e1ce1c0a5

+ 2 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserSignCertController.java

@@ -63,7 +63,7 @@ public class SysUserSignCertController {
 		if (StrUtil.isBlank(userSignCertDTO.getBankPhone()) || !Validator.isMobile(userSignCertDTO.getBankPhone())) {
 			return R.failed("银行预留手机号不正确");
 		}
-		if (StrUtil.length(userSignCertDTO.getBankCardNumber()) < 16) {
+		if (StrUtil.length(userSignCertDTO.getBankCardNumber()) < 16 || StrUtil.length(userSignCertDTO.getBankCardNumber()) > 19) {
 			return R.failed("银行卡号不正确");
 		}
 		SysUser sysUser = new SysUser();
@@ -92,7 +92,7 @@ public class SysUserSignCertController {
 		if (StrUtil.isBlank(userSignCertDTO.getBankPhone()) || !Validator.isMobile(userSignCertDTO.getBankPhone())) {
 			return R.failed("银行预留手机号不正确");
 		}
-		if (StrUtil.length(userSignCertDTO.getBankCardNumber()) < 16) {
+		if (StrUtil.length(userSignCertDTO.getBankCardNumber()) < 16 || StrUtil.length(userSignCertDTO.getBankCardNumber()) > 19) {
 			return R.failed("银行卡号不正确");
 		}
 		if (StrUtil.isNotBlank(userSignCertDTO.getIdCardNumber()) && !Validator.isCitizenId(userSignCertDTO.getIdCardNumber())) {

+ 131 - 38
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java

@@ -19,10 +19,10 @@ import com.qunzhixinxi.hnqz.admin.enums.GigCallBackStatus;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.LockEnum;
 import com.qunzhixinxi.hnqz.admin.enums.OladingCertStatus;
-import com.qunzhixinxi.hnqz.admin.enums.YeeCertStatus;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserSubService;
+import com.qunzhixinxi.hnqz.admin.service.gig.SysUserSignCertService;
 import com.qunzhixinxi.hnqz.common.rabbitmq.annotation.RabbitMqComponent;
 import com.qunzhixinxi.hnqz.common.rabbitmq.core.BaseRabbiMqHandler;
 import com.qunzhixinxi.hnqz.common.rabbitmq.listenter.MqListener;
@@ -37,6 +37,8 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.messaging.handler.annotation.Header;
 
 import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -56,6 +58,8 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 
 	private final SysUserSubService sysUserSubService;
 
+	private final SysUserSignCertService sysUserSignCertService;
+
 	private final RedisTemplate redisTemplate;
 
 	/**
@@ -68,9 +72,9 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 	 */
 	private static final String YEE_SUCCESS_CODE = "200";
 
-	@RabbitHandler
-	public void onMessage(String jsonStr, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {
-		super.onMessageAck(jsonStr, deliveryTag, channel, (MqListener<String>) (String result, Channel channel1) -> {
+    @RabbitHandler
+    public void onMessage(String jsonStr, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {
+        super.onMessageAck(jsonStr, deliveryTag, channel, (MqListener<String>) (String result, Channel channel1) -> {
 
 			log.info("直接队列:接收用户签约认证的结果,手动ACK,接收消息TAG:{},消息内容:{}", deliveryTag, result);
 
@@ -101,14 +105,14 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 							.eq(SysUser::getUsername, username)
 							.eq(SysUser::getDelFlag, DelEnum.NOT_DEL.val())
 							.eq(SysUser::getLockFlag, LockEnum.UN_LOCK.val()));
-				if (user == null) {
-					log.error("用户不存在!");
-					return null;
-				}
-				// 根据不同渠道,更新对应的签约认证状态
-				subjectTypes.forEach((s, o) -> {
-					GigTypeEnum gigTypeEnum = Enum.valueOf(GigTypeEnum.class, s);
-					JSONObject subjectResult = (JSONObject) o;
+					if (user == null) {
+						log.error("用户不存在!");
+						return null;
+					}
+					// 根据不同渠道,更新对应的签约认证状态
+					subjectTypes.forEach((s, o) -> {
+						GigTypeEnum gigTypeEnum = Enum.valueOf(GigTypeEnum.class, s);
+						JSONObject subjectResult = (JSONObject) o;
 
 						switch (gigTypeEnum) {
 							case TAX_HELPOR:
@@ -124,10 +128,8 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 								this.oladingHandler(user, dept, subjectResult);
 								break;
 							case YEE:
-								yeeHandler(user, dept, subjectResult);
-								// 本次结果存入redis
-								redisTemplate.opsForValue().set(CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId(),
-										JSONUtil.toJsonStr(subjectTypes), 1, TimeUnit.MINUTES);
+//								yeeHandler(user, dept, subjectResult);
+								break;
 							default:
 						}
 					});
@@ -141,8 +143,8 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 			}
 
 			return resMap;
-		});
-	}
+        });
+    }
 
 	/**
 	 * 税邦云数据处理
@@ -207,35 +209,54 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 	 * @param subjectResult
 	 */
 	private void yeeHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
-		String code = subjectResult.getStr("code");
 		String certStatus = subjectResult.getStr("certStatus");
+		String uploadTaxPayerAgreementStatus = subjectResult.getStr("uploadTaxPayerAgreementStatus");
 		LocalDateTime now = LocalDateTime.now();
-		YeeCertStatus yeeCertStatus = Enum.valueOf(YeeCertStatus.class, certStatus);
 
+		// 查询当前认证状态
+		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+				.eq(SysUserSub::getDeptId, dept.getDeptId())
+				.eq(SysUserSub::getUserId, user.getUserId())
+				.eq(SysUserSub::getGigType, GigTypeEnum.YEE));
 		// 拼接更新条件
 		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.<SysUserSub>lambdaUpdate()
 				.eq(SysUserSub::getUserId, user.getUserId())
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
-				.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED)
+				.eq(SysUserSub::getGigType, GigTypeEnum.YEE)
 				.set(SysUserSub::getUpdateTime, now)
 				.set(SysUserSub::getUpdateUser, 0)
 				.set(SysUserSub::getCertRemark, JSONUtil.toJsonStr(subjectResult));
-		updateWrapper.eq(SysUserSub::getGigType, GigTypeEnum.YEE);
-		updateWrapper.set(SysUserSub::getCertStatus, yeeCertStatus.getCode());
-		if (YEE_SUCCESS_CODE.equals(code)) {
-			// 成功并且是换绑卡的情况,则更新银行卡号
-			String cacheKeyPrefix = String.format("%s_%s_%s", CacheConstants.BIND_CARD_CONFIRM_NEW_BANK_CARD,
-					user.getUserId(), GigTypeEnum.YEE.name());
-			UserSignCertDTO userSignCertDTO = (UserSignCertDTO) redisTemplate.opsForValue().get(cacheKeyPrefix);
-			if (userSignCertDTO != null) {
-				if (StrUtil.isNotBlank(userSignCertDTO.getBankCardNumber())) {
-					updateWrapper.set(SysUserSub::getBankCardNumber, userSignCertDTO.getBankCardNumber());
-				}
-				// redis删除银行卡号
-				redisTemplate.delete(cacheKeyPrefix);
+		// 如果是已签约并且当前不是已认证,则设置一下状态(处理阿拉丁没有回调的情况)
+		if (OladingCommonRequest.SignUpStatus.SIGN.name().equals(certStatus)
+				&& !OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+			// 如果是已上传协议成功,则设置为已认证,否则还是已签约
+			SysUser updateUser = new SysUser();
+			Map<String, String> subMap = new HashMap<>();
+			if (OladingCommonRequest.UploadTaxpayerAgreementStatus.SUCCESS.name().equals(uploadTaxPayerAgreementStatus)) {
+				updateWrapper.set(SysUserSub::getCertStatus, Integer.parseInt(OladingCertStatus.CERT.getCode()));
+				subMap.put("certStatus", OladingCertStatus.CERT.name());
+			} else {
+				updateWrapper.set(SysUserSub::getCertStatus, Integer.parseInt(OladingCertStatus.SIGNED.getCode()));
+				subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			}
+			updateWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
+			// 修改步进状态
+			updateUser.setUserId(user.getUserId());
+			updateUser.setUpdateTime(now);
+			sysUserService.updateById(updateUser);
+			// 结果放到redis
+			String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
+			Map<String, Object> result = MapUtil.newHashMap(1);
+			result.put("YEE", subMap);
+			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+		}
+		// 已认证,则设置回调状态
+		if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+			updateWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
 		}
+
 		sysUserSubService.update(updateWrapper);
+		// 如果是核身视频回调,则同步该账号的自由职家渠道认证状态 TODO
 	}
 
 	private void renlijiaHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
@@ -250,31 +271,100 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 	 * @param subjectResult
 	 */
 	private void oladingHandler(SysUser user, SysDept dept, JSONObject subjectResult) {
+
+		// 处理阿拉钉-海南飞亿
+		Map<String, String> o1Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.OLADING);
+
+		// 处理阿拉钉-金园数科
+		Map<String, String> o2Map = this.oladingChannelHandler(user, dept, subjectResult, GigTypeEnum.JIN_YUAN);
+
+		// 结果放到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();
+			// key已存在,则追加写入新的渠道的状态
+			String qResult = (String) redisTemplate.opsForValue().get(key);
+			if (JSONUtil.isJsonObj(qResult)) {
+				JSONObject qResultObj = JSONUtil.parseObj(qResult);
+				if (o1Map != null) {
+					qResultObj.set(GigTypeEnum.OLADING.name(), o1Map);
+				}
+				if (o2Map != null) {
+					qResultObj.set(GigTypeEnum.JIN_YUAN.name(), o2Map);
+				}
+				redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(qResultObj), 1, TimeUnit.MINUTES);
+			} else {
+				redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(resultMap), 1, TimeUnit.MINUTES);
+			}
+
+		}
+
+		// 处理同时发起时另一个渠道需要的补发情况 TODO
+		// 查询redis是否有同时发起的标记
+		String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + user.getUserId();
+		Object userId = redisTemplate.opsForValue().get(redisKey);
+		if (userId != null) {
+			// 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
+			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);
+		}
+	}
+
+	/**
+	 * 自由职家渠道的数据处理
+	 *
+	 * @param user
+	 * @param dept
+	 * @param subjectResult
+	 * @param gigType
+	 * @return
+	 */
+	private Map<String, String> oladingChannelHandler(SysUser user, SysDept dept, JSONObject subjectResult, GigTypeEnum gigType) {
 		String certStatus = subjectResult.getStr("certStatus");
+		String uploadTaxPayerAgreementStatus = subjectResult.getStr("uploadTaxPayerAgreementStatus");
 		LocalDateTime now = LocalDateTime.now();
+		Map<String, String> certStatusMap = new HashMap<>();
 
 		// 查询当前认证状态
 		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
 				.eq(SysUserSub::getUserId, user.getUserId())
 				.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.IN_PROGRESS)
-				.eq(SysUserSub::getGigType, GigTypeEnum.OLADING));
+				.eq(SysUserSub::getGigType, gigType));
 		if (userSub == null) {
-			return;
+			return null;
 		}
 
 		// 拼接更新条件
 		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.<SysUserSub>lambdaUpdate()
 				.eq(SysUserSub::getUserId, user.getUserId())
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
-				.eq(SysUserSub::getGigType, GigTypeEnum.OLADING)
+				.eq(SysUserSub::getGigType, gigType)
 				.set(SysUserSub::getUpdateTime, now)
 				.set(SysUserSub::getUpdateUser, 0)
 				.set(SysUserSub::getCertRemark, JSONUtil.toJsonStr(subjectResult));
-
 		// 如果是已签约并且当前不是已认证,则设置一下状态(处理阿拉丁没有回调的情况)
 		if (OladingCommonRequest.SignUpStatus.SIGN.name().equals(certStatus)
 				&& !OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+			// 如果是已上传协议成功,则设置为已认证,否则还是已签约
+			if (OladingCommonRequest.UploadTaxpayerAgreementStatus.SUCCESS.name().equals(uploadTaxPayerAgreementStatus)) {
+				updateWrapper.set(SysUserSub::getCertStatus, Integer.parseInt(OladingCertStatus.CERT.getCode()));
+				certStatusMap.put("certStatus", OladingCertStatus.CERT.name());
+			} else {
+				updateWrapper.set(SysUserSub::getCertStatus, Integer.parseInt(OladingCertStatus.SIGNED.getCode()));
+				certStatusMap.put("certStatus", OladingCertStatus.SIGNED.name());
+			}
 			updateWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
 		}
 		// 如果是签约中,则判断'阿拉丁签约方法'状态
@@ -291,6 +381,9 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		}
 
 		sysUserSubService.update(updateWrapper);
+		// 如果是核身视频回调,则同步该账号的易联-金园数科渠道认证状态 TODO
+
+		return certStatusMap;
 	}
 
 }

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

@@ -387,7 +387,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				if (userSignCertDTO.getGigTypeList().containsAll(CollUtil.toList(GigTypeEnum.OLADING, GigTypeEnum.JIN_YUAN))) {
 					// 记录同时选择了阿拉钉金园数科、海南飞亿渠道,用来标记其在海南飞亿认证完后需要被发起
 					// 即,同时选择了阿拉钉金园数科、海南飞亿渠道,则先发起海南飞亿认证,完成之后再发起金园数科认证
-					String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + requestId;
+					String redisKey = CacheConstants.OLADING_SEND_BOTH_CHANNEL + sysUser.getUserId();
 					redisTemplate.opsForValue().set(redisKey, sysUser.getUserId());
 					return false;
 				}