فهرست منبع

Merge branch 'feat-20220615-yeejinyuan'

# Conflicts:
#	hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java
lixuesong 3 سال پیش
والد
کامیت
0ec543a630
15فایلهای تغییر یافته به همراه435 افزوده شده و 151 حذف شده
  1. 3 0
      db/v2.0/220617.sql
  2. 5 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/CacheConstants.java
  3. 1 1
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/OladingCommonRequest.java
  4. 1 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/GigThirdApiController.java
  5. 10 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java
  6. 2 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserSignCertController.java
  7. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysUserSub.java
  8. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/UserSignCertDTO.java
  9. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigUserInfoModel.java
  10. 2 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigChannelEnum.java
  11. 7 5
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigTypeEnum.java
  12. 132 38
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java
  13. 8 10
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/GigThirdApiService.java
  14. 117 45
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/GigThirdApiServiceImpl.java
  15. 132 48
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/SysUserSignCertServiceImpl.java

+ 3 - 0
db/v2.0/220617.sql

@@ -0,0 +1,3 @@
+-- 记录阿拉丁认证失败原因
+alter table sys_user_sub
+    add fail_reason varchar(255) null comment '认证失败原因' after cert_remark;

+ 5 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/CacheConstants.java

@@ -115,4 +115,9 @@ public interface CacheConstants {
 	 */
 	String OLADING_NOTIFY_KEY = "OLADING:NOTIFY:KEY:";
 
+	/**
+	 * 自由职家同时发起两个渠道记录key
+	 */
+	String OLADING_SEND_BOTH_CHANNEL = "OLADING:SEND:BOTH:CHANNEL:";
+
 }

+ 1 - 1
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/OladingCommonRequest.java

@@ -81,7 +81,7 @@ public class OladingCommonRequest implements Serializable {
 	}
 
 	/**
-	 * 签约状态;包括已签约、未签约
+	 * 签约状态;包括已签约、未签约、签约中
 	 */
 	@Getter
 	@AllArgsConstructor

+ 1 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/GigThirdApiController.java

@@ -107,7 +107,7 @@ public class GigThirdApiController {
 			// 3.实际操作
 
 			if (StrUtil.isNotBlank(requestId)) {
-				gigThirdApiService.oladingNotify(interfaceName, requestId, data);
+				gigThirdApiService.oladingNotify(requestId, req);
 			}
 		} catch (Exception e) {
 			log.error("自由职家统一请求异常", e);

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java

@@ -1489,6 +1489,9 @@ public class SysUserController {
 							case OLADING:
 								userSubVO.setCertStatus(OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name());
 								break;
+							case JIN_YUAN:
+								userSubVO.setCertStatus(OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name());
+								break;
 							default:
 						}
 						certList.add(userSubVO);
@@ -1513,6 +1516,9 @@ public class SysUserController {
 											case OLADING:
 												certStatuName = OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).getMessage();
 												break;
+											case JIN_YUAN:
+												certStatuName = OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).getMessage();
+												break;
 											default:
 												certStatuName = "";
 										}
@@ -1536,6 +1542,10 @@ public class SysUserController {
 						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(GigTypeEnum.OLADING)) ?
 								OladingCertStatus.UN_SIGNED.getMessage() : certStatusMap.get(GigTypeEnum.OLADING));
 					}
+					if (subTypeList.contains(String.valueOf(GigTypeEnum.JIN_YUAN.getCode()))) {
+						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(GigTypeEnum.JIN_YUAN)) ?
+								OladingCertStatus.UN_SIGNED.getMessage() : certStatusMap.get(GigTypeEnum.JIN_YUAN));
+					}
 					userVO.setCertStatusArr(certStatusNameList.toArray(new String[0]));
 				}
 			}

+ 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())) {

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysUserSub.java

@@ -63,6 +63,11 @@ public class SysUserSub extends Model<SysUserSub> {
 	 */
 	private String certRemark;
 
+	/**
+	 * 认证失败原因
+	 */
+	private String failReason;
+
 	/**
 	 * 人员类型
 	 */

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/UserSignCertDTO.java

@@ -76,4 +76,9 @@ public class UserSignCertDTO implements Serializable {
 	 * 令牌
 	 */
 	private String token;
+
+	/**
+	 * 是否上传核身视频
+	 */
+	private Boolean uploadFaceID;
 }

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigUserInfoModel.java

@@ -112,4 +112,9 @@ public class GigUserInfoModel implements Serializable {
 	 * 地址
 	 */
 	private String address;
+
+	/**
+	 * 是否上传核身视频
+	 */
+	private Boolean uploadFaceID;
 }

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

@@ -17,7 +17,8 @@ public enum GigChannelEnum {
 	// 渠道
 	DEFAULT(0, "默认渠道"),
 	CICC(1, "中金"),
-	PINGAN(2, "平安银行");
+	PINGAN(2, "平安银行"),
+	JIN_YUAN(31, "金园数科");
 
 	@EnumValue
 	private int code;

+ 7 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigTypeEnum.java

@@ -1,7 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.fasterxml.jackson.annotation.JsonValue;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -16,16 +15,19 @@ import lombok.Getter;
 public enum GigTypeEnum {
 
 	// 零工平台类型
-	REN_LI_JIA(0, "人力家"),
-	TAX_HELPOR(1, "税邦云"),
-	OLADING(2, "自由职家"),
-	YEE(3, "易联数科");
+	REN_LI_JIA(0, "人力家", "人力家"),
+	TAX_HELPOR(1, "税邦云", "税邦云"),
+	OLADING(2, "钉灵工", "钉灵工-海南飞亿"),
+	YEE(3, "易联数科", "易联数科"),
+	JIN_YUAN(4, "钉灵工", "金园数科");
 
 	@EnumValue
 	private int code;
 
 	private String desc;
 
+	private String desc2;
+
 	public static GigTypeEnum resolve(int code) {
 		for (GigTypeEnum gigTypeEnum : GigTypeEnum.values()) {
 			if (code == gigTypeEnum.getCode()) {

+ 132 - 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,9 +37,12 @@ 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;
+import java.util.stream.Collectors;
 
 /**
  * 接收用户签约认证的结果对列监听器
@@ -56,6 +59,8 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 
 	private final SysUserSubService sysUserSubService;
 
+	private final SysUserSignCertService sysUserSignCertService;
+
 	private final RedisTemplate redisTemplate;
 
 	/**
@@ -68,9 +73,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 +106,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 +129,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 +144,8 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 			}
 
 			return resMap;
-		});
-	}
+        });
+    }
 
 	/**
 	 * 税邦云数据处理
@@ -207,35 +210,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 +272,99 @@ 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是否有同时发起的标记
+		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) {
+			// 同时发起的情况,且是金园数科的状态已返回,则返回两个渠道状态
+			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()
+					.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);
+		} else {
+			if (CollUtil.isNotEmpty(o1Map)) {
+				resultMap.put(GigTypeEnum.OLADING.name(), o1Map);
+			}
+			if (CollUtil.isNotEmpty(o2Map)) {
+				resultMap.put(GigTypeEnum.JIN_YUAN.name(), o2Map);
+			}
+		}
+		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"))) {
+			// 如果同一人同时存在海南飞亿、金园数科的渠道,则补发一次(由于阿拉钉同一人不同渠道的回调只有一次,所以这里需要补发)
+			log.info("=============================补发阿拉钉另一渠道MQ4==================================");
+			UserSignCertDTO reCertDTO = new UserSignCertDTO();
+			reCertDTO.setUserId(user.getUserId());
+			reCertDTO.setGigTypeList(Collections.singletonList(GigTypeEnum.JIN_YUAN));
+			sysUserSignCertService.batchChannelCert(reCertDTO);
+		}
+	}
+
+	/**
+	 * 自由职家渠道的数据处理
+	 *
+	 * @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);
 		}
 		// 如果是签约中,则判断'阿拉丁签约方法'状态
@@ -286,11 +376,15 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 			}
 		}
 		// 已认证,则设置回调状态
+		// 此处实际是处理核身视频的回调
 		if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
 			updateWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
+			certStatusMap.put("certStatus", OladingCertStatus.CERT.name());
 		}
 
 		sysUserSubService.update(updateWrapper);
+
+		return certStatusMap;
 	}
 
 }

+ 8 - 10
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/GigThirdApiService.java

@@ -2,8 +2,6 @@ package com.qunzhixinxi.hnqz.admin.service.gig;
 
 import com.qunzhixinxi.hnqz.admin.api.dto.OladingCommonRequest;
 
-import java.util.Map;
-
 /**
  * 第三方零工接口处理
  *
@@ -14,19 +12,19 @@ public interface GigThirdApiService {
 
 	/**
 	 * 自由职家回调业务处理
-	 *  @param interfaceName
+	 *
 	 * @param requestId
-	 * @param data
+	 * @param req
 	 */
-	void oladingNotify(String interfaceName, String requestId, Map<String, Object> data);
+	void oladingNotify(String requestId, OladingCommonRequest.Req req);
 
 	/**
 	 * 自由职家签约结果回调
-	 *
-	 * @param requestId
+	 *  @param requestId
 	 * @param signUpCertStatus
+	 * @param req
 	 */
-	void oladingSignUp(String requestId, OladingCommonRequest.SignUpStatus signUpCertStatus);
+	void oladingSignUp(String requestId, OladingCommonRequest.SignUpStatus signUpCertStatus, OladingCommonRequest.Req req);
 
 	/**
 	 * 自由职家证照上传结果回调
@@ -34,7 +32,7 @@ public interface GigThirdApiService {
 	 * @param requestId
 	 * @param uploadIdCertStatus
 	 */
-	void oladingUploadIdCardImage(String requestId, OladingCommonRequest.UploadIdCardImageStatus uploadIdCertStatus);
+	void oladingUploadIdCardImage(String requestId, OladingCommonRequest.UploadIdCardImageStatus uploadIdCertStatus, OladingCommonRequest.Req req);
 
 	/**
 	 * 自由职家上传企业纳税人协议回调
@@ -42,6 +40,6 @@ public interface GigThirdApiService {
 	 * @param requestId
 	 * @param agreementStatus
 	 */
-	void oladingUploadTaxpayerAgreement(String requestId, OladingCommonRequest.UploadTaxpayerAgreementStatus agreementStatus);
+	void oladingUploadTaxpayerAgreement(String requestId, OladingCommonRequest.UploadTaxpayerAgreementStatus agreementStatus, OladingCommonRequest.Req req);
 
 }

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

@@ -53,13 +53,16 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 	/**
 	 * 自由职家回调业务处理
 	 *
-	 * @param interfaceName
 	 * @param requestId
-	 * @param data
+	 * @param req
 	 */
 	@Override
-	public void oladingNotify(String interfaceName, String requestId, Map<String, Object> data) {
-		// 接口名称
+	public void oladingNotify(String requestId, OladingCommonRequest.Req req) {
+		// 请求接口名称
+		String interfaceName = req.getName();
+		// 请求data
+		Map<String, Object> data = req.getData();
+		// 接口名称enum
 		OladingCommonRequest.InterfaceName interfaceNameEnum = Enum.valueOf(OladingCommonRequest.InterfaceName.class, interfaceName);
 		// 状态
 		String status = "CREATE_ORDER_DETAIL".equals(interfaceName) ? (String) data.get("remit_status")  : (String) data.get("status");
@@ -74,21 +77,19 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 			case SIGN_UP:
 				// 签约
 				OladingCommonRequest.SignUpStatus signUpCertStatus = Enum.valueOf(OladingCommonRequest.SignUpStatus.class, status);
-				if (OladingCommonRequest.SignUpStatus.SIGN.equals(signUpCertStatus)) {
-					this.oladingSignUp(requestIdPrefix, signUpCertStatus);
-				}
+				this.oladingSignUp(requestIdPrefix, signUpCertStatus, req);
 				break;
 			case UPLOAD_ID_CARD_IMAGE:
 				// 证照上传
 				OladingCommonRequest.UploadIdCardImageStatus uploadIdCertStatus =
 						Enum.valueOf(OladingCommonRequest.UploadIdCardImageStatus.class, status);
-				this.oladingUploadIdCardImage(requestIdPrefix, uploadIdCertStatus);
+				this.oladingUploadIdCardImage(requestIdPrefix, uploadIdCertStatus, req);
 				break;
 			case UPLOAD_TAXPAYER_AGREEMENT:
 				// 上传企业纳税人协议
 				OladingCommonRequest.UploadTaxpayerAgreementStatus agreementStatus =
 						Enum.valueOf(OladingCommonRequest.UploadTaxpayerAgreementStatus.class, status);
-				this.oladingUploadTaxpayerAgreement(requestIdPrefix, agreementStatus);
+				this.oladingUploadTaxpayerAgreement(requestIdPrefix, agreementStatus, req);
 				break;
 			case CREATE_ORDER_V2:
 				// 创建代付订单结果
@@ -237,45 +238,67 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 	 *
 	 * @param requestId
 	 * @param signUpCertStatus
+	 * @param req
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void oladingSignUp(String requestId, OladingCommonRequest.SignUpStatus signUpCertStatus) {
+	public void oladingSignUp(String requestId, OladingCommonRequest.SignUpStatus signUpCertStatus, OladingCommonRequest.Req req) {
 		// 先查询requestId是否存在
 		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
-				.eq(SysUserSub::getGigType, GigTypeEnum.OLADING)
 				.eq(SysUserSub::getRequestId, requestId));
 		if (userSub == null) {
+			log.error("{} requestId不存在", requestId);
 			throw new ValidateCodeException("requestId不存在");
 		}
 
 		Map<String, String> subMap = new HashMap<>();
 		SysUserSub updateUserSub = new SysUserSub();
 		if (OladingCommonRequest.SignUpStatus.SIGN.equals(signUpCertStatus)) {
-			// 如果成功,则发送证照上传MQ
-			log.info("=============================发送证照上传MQ==================================");
-			UserSignCertDTO userSignCertDTO = new UserSignCertDTO();
-			userSignCertDTO.setUserId(userSub.getUserId());
-			userSignCertDTO.setGigTypeList(Collections.singletonList(GigTypeEnum.OLADING));
-			sysUserSignCertService.batchChannelCert(userSignCertDTO);
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSub.setCertStatus(Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
 		} else {
 			subMap.put("certStatus", OladingCertStatus.UN_SIGNED.name());
 			updateUserSub.setCertStatus(Integer.valueOf(OladingCertStatus.UN_SIGNED.getCode()));
-			updateUserSub.setCallbackStatus(GigCallBackStatus.RETURNED);
 		}
 		updateUserSub.setId(userSub.getId());
 		updateUserSub.setUpdateTime(LocalDateTime.now());
 		updateUserSub.setUpdateUser(0);
+		updateUserSub.setCallbackStatus(GigCallBackStatus.RETURNED);
+		if ("0".equals(req.getCode())) {
+			updateUserSub.setFailReason(String.valueOf(req.getData().get("failReason")));
+		} else {
+			updateUserSub.setFailReason(req.getMessage());
+		}
 		// 更新状态
 		sysUserSubService.updateById(updateUserSub);
 
 		// 结果放到redis
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-		Map<String, Object> result = MapUtil.newHashMap(1);
-		result.put("OLADING", subMap);
+		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();
+		Object userId = redisTemplate.opsForValue().get(redisKey);
+		if (userId != null && GigTypeEnum.OLADING.equals(userSub.getGigType())) {
+			// 将金园数科的状态,补充进来
+			SysUserSub feiyiSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSub.getUserId())
+					.eq(SysUserSub::getDeptId, userSub.getDeptId())
+					.eq(SysUserSub::getGigType, GigTypeEnum.JIN_YUAN));
+			result.put(GigTypeEnum.JIN_YUAN.name(),
+					MapUtil.builder("certStatus", OladingCertStatus.resolve(String.valueOf(feiyiSub.getCertStatus())).name()).build());
+		}
+
 		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+
+		// 如果成功,则发送证照上传MQ
+		if (OladingCommonRequest.SignUpStatus.SIGN.equals(signUpCertStatus)) {
+			log.info("=============================发送证照上传MQ==================================");
+			UserSignCertDTO userSignCertDTO = new UserSignCertDTO();
+			userSignCertDTO.setUserId(userSub.getUserId());
+			userSignCertDTO.setGigTypeList(Collections.singletonList(userSub.getGigType()));
+			sysUserSignCertService.batchChannelCert(userSignCertDTO);
+		}
 	}
 
 	/**
@@ -285,44 +308,65 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 	 * @param uploadIdCertStatus
 	 */
 	@Override
-	public void oladingUploadIdCardImage(String requestId, OladingCommonRequest.UploadIdCardImageStatus uploadIdCertStatus) {
+	public void oladingUploadIdCardImage(String requestId, OladingCommonRequest.UploadIdCardImageStatus uploadIdCertStatus, OladingCommonRequest.Req req) {
 		// 先查询requestId是否存在
 		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
-				.eq(SysUserSub::getGigType, GigTypeEnum.OLADING)
 				.eq(SysUserSub::getRequestId, requestId));
 		if (userSub == null) {
+			log.error("{} requestId不存在", requestId);
 			throw new ValidateCodeException("requestId不存在");
 		}
 
 		Map<String, String> subMap = new HashMap<>();
 		LambdaUpdateWrapper<SysUserSub> updateUserSubWrapper = Wrappers.lambdaUpdate();
+		updateUserSubWrapper.eq(SysUserSub::getId, userSub.getId());
 		if (OladingCommonRequest.UploadIdCardImageStatus.IDENTIFY_SUCCESS.equals(uploadIdCertStatus)) {
-			// 如果成功,则发送协议上传MQ
-			log.info("=============================发送协议上传MQ==================================");
-			UserSignCertDTO userSignCertDTO = new UserSignCertDTO();
-			userSignCertDTO.setUserId(userSub.getUserId());
-			userSignCertDTO.setGigTypeList(Collections.singletonList(GigTypeEnum.OLADING));
-			sysUserSignCertService.batchChannelCert(userSignCertDTO);
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
 		} else {
 			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
 			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
-			updateUserSubWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
 			updateUserSubWrapper.set(SysUserSub::getIdCardFrontUrl, null);
 			updateUserSubWrapper.set(SysUserSub::getIdCardBackUrl, null);
 		}
-		updateUserSubWrapper.eq(SysUserSub::getId, userSub.getId());
 		updateUserSubWrapper.set(SysUserSub::getUpdateTime, LocalDateTime.now());
 		updateUserSubWrapper.set(SysUserSub::getUpdateUser, 0);
+		updateUserSubWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
+		if ("0".equals(req.getCode())) {
+			updateUserSubWrapper.set(SysUserSub::getFailReason, String.valueOf(req.getData().get("failReason")));
+		} else {
+			updateUserSubWrapper.set(SysUserSub::getFailReason, req.getMessage());
+		}
 		// 更新状态
 		sysUserSubService.update(updateUserSubWrapper);
 
 		// 结果放到redis
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-		Map<String, Object> result = MapUtil.newHashMap(1);
-		result.put("OLADING", subMap);
+		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();
+		Object userId = redisTemplate.opsForValue().get(redisKey);
+		if (userId != null && GigTypeEnum.OLADING.equals(userSub.getGigType())) {
+			// 将金园数科的状态,补充进来
+			SysUserSub feiyiSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSub.getUserId())
+					.eq(SysUserSub::getDeptId, userSub.getDeptId())
+					.eq(SysUserSub::getGigType, GigTypeEnum.JIN_YUAN));
+			result.put(GigTypeEnum.JIN_YUAN.name(),
+					MapUtil.builder("certStatus", OladingCertStatus.resolve(String.valueOf(feiyiSub.getCertStatus())).name()).build());
+		}
+
 		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+
+		// 如果成功,则发送协议上传MQ
+		if (OladingCommonRequest.UploadIdCardImageStatus.IDENTIFY_SUCCESS.equals(uploadIdCertStatus)) {
+			log.info("=============================发送协议上传MQ==================================");
+			UserSignCertDTO userSignCertDTO = new UserSignCertDTO();
+			userSignCertDTO.setUserId(userSub.getUserId());
+			userSignCertDTO.setGigTypeList(Collections.singletonList(userSub.getGigType()));
+			sysUserSignCertService.batchChannelCert(userSignCertDTO);
+		}
 	}
 
 	/**
@@ -332,35 +376,63 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 	 * @param agreementStatus
 	 */
 	@Override
-	public void oladingUploadTaxpayerAgreement(String requestId, OladingCommonRequest.UploadTaxpayerAgreementStatus agreementStatus) {
+	public void oladingUploadTaxpayerAgreement(String requestId, OladingCommonRequest.UploadTaxpayerAgreementStatus agreementStatus, OladingCommonRequest.Req req) {
 		// 先查询requestId是否存在
 		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
-				.eq(SysUserSub::getGigType, GigTypeEnum.OLADING)
 				.eq(SysUserSub::getRequestId, requestId));
 		if (userSub == null) {
+			log.error("{} requestId不存在", requestId);
 			throw new ValidateCodeException("requestId不存在");
 		}
 
 		Map<String, String> subMap = new HashMap<>();
-		SysUserSub updateUserSub = new SysUserSub();
+		LambdaUpdateWrapper<SysUserSub> updateUserSubWrapper = Wrappers.lambdaUpdate();
+		updateUserSubWrapper.eq(SysUserSub::getId, userSub.getId());
 		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()));
 		} else {
-			subMap.put("certStatus", OladingCertStatus.SIGNED.name()); // TODO 更新状态
-			updateUserSub.setCertStatus(Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
+			subMap.put("certStatus", OladingCertStatus.SIGNED.name());
+			updateUserSubWrapper.set(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.SIGNED.getCode()));
+		}
+		updateUserSubWrapper.set(SysUserSub::getUpdateTime, LocalDateTime.now());
+		updateUserSubWrapper.set(SysUserSub::getUpdateUser, 0);
+		updateUserSubWrapper.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED);
+		if ("0".equals(req.getCode())) {
+			updateUserSubWrapper.set(SysUserSub::getFailReason, String.valueOf(req.getData().get("failReason")));
+		} else {
+			updateUserSubWrapper.set(SysUserSub::getFailReason, req.getMessage());
 		}
-		updateUserSub.setId(userSub.getId());
-		updateUserSub.setCallbackStatus(GigCallBackStatus.RETURNED);
-		updateUserSub.setUpdateTime(LocalDateTime.now());
-		updateUserSub.setUpdateUser(0);
 		// 更新状态
-		sysUserSubService.updateById(updateUserSub);
+		sysUserSubService.update(updateUserSubWrapper);
 
 		// 结果放到redis
 		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-		Map<String, Object> result = MapUtil.newHashMap(1);
-		result.put("OLADING", subMap);
+		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();
+		Object userId = redisTemplate.opsForValue().get(redisKey);
+		if (userId != null && GigTypeEnum.JIN_YUAN.equals(userSub.getGigType())) {
+			// 将海南飞亿的状态,补充进来
+			SysUserSub feiyiSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSub.getUserId())
+					.eq(SysUserSub::getDeptId, userSub.getDeptId())
+					.eq(SysUserSub::getGigType, GigTypeEnum.OLADING));
+			result.put(GigTypeEnum.OLADING.name(),
+					MapUtil.builder("certStatus", OladingCertStatus.resolve(String.valueOf(feiyiSub.getCertStatus())).name()).build());
+		}
+
 		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+
+		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);
+		}
 	}
 }

+ 132 - 48
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;
@@ -140,6 +141,10 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 					case OLADING:
 						userSubVO.setCertStatus(OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name());
 						break;
+					case JIN_YUAN:
+						// 渠道是金园,则展示阿拉钉的状态
+						userSubVO.setCertStatus(OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name());
+						break;
 					default:
 				}
 
@@ -227,6 +232,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void signAgreement(UserSignCertDTO userSignCertDTO) {
+
 		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.lambdaUpdate();
 		updateWrapper.eq(SysUserSub::getUserId, userSignCertDTO.getUserId());
 		if (CollUtil.isNotEmpty(userSignCertDTO.getGigTypeList())) {
@@ -247,6 +253,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void personalIdentityVerification(UserSignCertDTO userSignCertDTO) {
+
 		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.lambdaUpdate();
 		updateWrapper.eq(SysUserSub::getUserId, userSignCertDTO.getUserId());
 		if (CollUtil.isNotEmpty(userSignCertDTO.getGigTypeList())) {
@@ -285,6 +292,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		// 查询当前用户关联的userSub
 		LambdaQueryWrapper<SysUserSub> userSubWrapper = Wrappers.lambdaQuery();
 		userSubWrapper.eq(SysUserSub::getUserId, userId);
+		userSubWrapper.eq(SysUserSub::getDeptId, dept.getDeptId());
 		if (CollUtil.isNotEmpty(userSignCertDTO.getGigTypeList())) {
 			userSubWrapper.in(SysUserSub::getGigType, userSignCertDTO.getGigTypeList());
 		}
@@ -300,9 +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())
-						&& !OladingCertStatus.CERT.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
+				} else if (GigTypeEnum.OLADING.equals(sysUserSub.getGigType())) {
+					return true;
+				} else if (GigTypeEnum.JIN_YUAN.equals(sysUserSub.getGigType())) {
+					// 易联并且渠道是金园数科(自由职家)
 					return true;
 				} else if (GigTypeEnum.REN_LI_JIA.equals(sysUserSub.getGigType())
 						&& RenlijiaCertStatus.CER_STATUS_1.getCode() != sysUserSub.getCertStatus()) {
@@ -310,15 +321,19 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				}
 				return false;
 			}).forEach(userSub -> {
+				// 请求流水号
+				String requestId = RandomStringUtils.randomAlphabetic(16);
+
 				// 发起前置判断
-				boolean preSignCert = preSignCert(sysUser, userSub);
-				if (!preSignCert) {
+				if (!this.preSignCert(sysUser, userSub, userSignCertDTO, requestId)) {
+					// false直接返回,不发送mq
 					return;
 				}
-				// 请求流水号
-				String requestId = RandomStringUtils.randomAlphabetic(16);
+
+				// 是否需要传核身视频,阿拉丁、易联默认都要传
+				boolean uploadFaceID = userSignCertDTO.getUploadFaceID() != null && userSignCertDTO.getUploadFaceID();
 				// 封装请求参数
-				GigInfoModel infoModel = buildChannelCertModel(sysUser, userSub, dept.getTaxCode(), requestId);
+				GigInfoModel infoModel = this.buildChannelCertModel(sysUser, userSub, dept.getTaxCode(), requestId, uploadFaceID);
 				// 更新为进行中状态
 				SysUserSub updateUserSub = new SysUserSub();
 				updateUserSub.setId(userSub.getId());
@@ -341,47 +356,66 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 *
 	 * @param sysUser
 	 * @param userSub
+	 * @param userSignCertDTO
+	 * @param requestId
 	 */
-	private boolean preSignCert(SysUser sysUser, SysUserSub userSub) {
-		boolean flag = true;
+	private boolean preSignCert(SysUser sysUser, SysUserSub userSub, UserSignCertDTO userSignCertDTO, String requestId) {
+		// 校验是否有进行中的
+		if (GigCallBackStatus.IN_PROGRESS.equals(userSub.getCallbackStatus())) {
+			return false;
+		}
+
 		switch (userSub.getGigType()) {
+			case JIN_YUAN:
+				// 阿拉钉-金园数科
+				// 发起认证前,金园数科,转换对应关系为 阿拉钉-金园数科
+				userSub.setGigType(GigTypeEnum.OLADING);
+				userSub.setGigChannel(GigChannelEnum.JIN_YUAN);
+
+				// 如果需要传核身视频,则返回true
+				if (userSignCertDTO.getUploadFaceID() != null && userSignCertDTO.getUploadFaceID()) {
+					return true;
+				}
+
+				// 已认证不发起
+				if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+					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());
+					return false;
+				}
+
+				return true;
 			case OLADING:
-				// 如果存在相同身份证信息的用户,并且是签约或认证过,则不发起,直接返回签约认证状态
-				List<SysUser> existUserList = sysUserService.list(Wrappers.<SysUser>lambdaQuery()
-						.eq(SysUser::getRealname, sysUser.getRealname())
-						.eq(SysUser::getIdCardNumber, sysUser.getIdCardNumber())
-						.eq(SysUser::getLockFlag, LockEnum.UN_LOCK.val())
-						.ne(SysUser::getUserId, sysUser.getUserId()));
-				if (CollUtil.isNotEmpty(existUserList)) {
-					List<Integer> existUserIdList = existUserList.stream()
-							.map(SysUser::getUserId)
-							.collect(Collectors.toList());
-					List<SysUserSub> existUserSubList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
-							.in(SysUserSub::getUserId, existUserIdList)
-							.in(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.CERT.getCode()))
-							.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED)
-							.eq(SysUserSub::getGigType, GigTypeEnum.OLADING));
-					if (CollUtil.isNotEmpty(existUserSubList)) {
-						flag = false;
-						SysUserSub existUserSub = existUserSubList.get(0);
-						// 更新状态
-						SysUserSub updateUserSub = new SysUserSub();
-						updateUserSub.setId(userSub.getId());
-						updateUserSub.setCertStatus(existUserSub.getCertStatus());
-						updateUserSub.setCallbackStatus(GigCallBackStatus.RETURNED);
-						updateUserSub.setUpdateTime(LocalDateTime.now());
-						updateUserSub.setUpdateUser(0);
-						sysUserSubService.updateById(updateUserSub);
-						// 结果放到redis
-						String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
-						Map<String, String> subMap = new HashMap<>();
-						subMap.put("certStatus", OladingCertStatus.resolve(String.valueOf(existUserSub.getCertStatus())).name());
-						Map<String, Object> result = MapUtil.newHashMap(1);
-						result.put("OLADING", subMap);
-						redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
-					}
+				// 阿拉钉-海南飞亿
+				// 如果需要传核身视频,则返回true
+				if (userSignCertDTO.getUploadFaceID() != null && userSignCertDTO.getUploadFaceID()) {
+					return true;
+				}
+
+				// 已认证不发起
+				if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+					return false;
 				}
-				break;
+
+				// 如果存在相同手机号、身份证、姓名信息的用户,并且是认证过,则不发起,直接返回签约认证状态
+//				if (this.checkExistCerted(sysUser, userSub)) {
+//					// 直接返回,不发起
+//					return false;
+//				}
+				return true;
 			case REN_LI_JIA:
 				// 人力家直接调用原有发短信接口
 				SysDept dept = new SysDept();
@@ -413,11 +447,59 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				result.put("REN_LI_JIA", subMap);
 				redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
 				// 默认返回false,不触发发送mq
-				flag = false;
+				return false;
 			default:
 		}
 
-		return flag;
+		// 默认发起认证
+		return true;
+	}
+
+	/**
+	 * 是否存在已认证的,存在则同步更新状态
+	 *
+	 * @param sysUser
+	 * @param userSub
+	 * @return
+	 */
+	private boolean checkExistCerted(SysUser sysUser, SysUserSub userSub) {
+		List<SysUser> existUserList = sysUserService.list(Wrappers.<SysUser>lambdaQuery()
+				.eq(SysUser::getUsername, sysUser.getUsername())
+				.eq(SysUser::getRealname, sysUser.getRealname())
+				.eq(SysUser::getIdCardNumber, sysUser.getIdCardNumber())
+				.eq(SysUser::getLockFlag, LockEnum.UN_LOCK.val())
+				.ne(SysUser::getUserId, sysUser.getUserId()));
+		if (CollUtil.isNotEmpty(existUserList)) {
+			List<Integer> existUserIdList = existUserList.stream()
+					.map(SysUser::getUserId)
+					.collect(Collectors.toList());
+			List<SysUserSub> existUserSubList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
+					.in(SysUserSub::getUserId, existUserIdList)
+					.eq(SysUserSub::getCertStatus, Integer.valueOf(OladingCertStatus.CERT.getCode()))
+					.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED)
+					.eq(SysUserSub::getGigType, userSub.getGigType()));
+			if (CollUtil.isNotEmpty(existUserSubList)) {
+				SysUserSub existUserSub = existUserSubList.get(0);
+				// 更新状态
+				SysUserSub updateUserSub = new SysUserSub();
+				updateUserSub.setId(userSub.getId());
+				updateUserSub.setCertStatus(existUserSub.getCertStatus());
+				updateUserSub.setCallbackStatus(GigCallBackStatus.RETURNED);
+				updateUserSub.setUpdateTime(LocalDateTime.now());
+				updateUserSub.setUpdateUser(0);
+				sysUserSubService.updateById(updateUserSub);
+				// 结果放到redis
+				String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
+				Map<String, String> subMap = new HashMap<>();
+				subMap.put("certStatus", OladingCertStatus.resolve(String.valueOf(existUserSub.getCertStatus())).name());
+				Map<String, Object> result = MapUtil.newHashMap(1);
+				result.put(userSub.getGigType().name(), subMap);
+				redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
+
+				return true;
+			}
+		}
+		return false;
 	}
 
 	/**
@@ -427,9 +509,10 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 * @param userSub
 	 * @param entCode
 	 * @param requestId
+	 * @param uploadFaceID
 	 * @return
 	 */
-	private GigInfoModel buildChannelCertModel(SysUser sysUser, SysUserSub userSub, String entCode, String requestId) {
+	private GigInfoModel buildChannelCertModel(SysUser sysUser, SysUserSub userSub, String entCode, String requestId, boolean uploadFaceID) {
 		// 基础信息
 		GigBaseInfoModel baseInfoModel = new GigBaseInfoModel();
 		baseInfoModel.setRequestId(requestId);
@@ -445,11 +528,12 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		userInfoModel.setIdCard(sysUser.getIdCardNumber());
 		userInfoModel.setIdCardType(MemberIDCardType.ID_CARD);
 		userInfoModel.setMemberType(MemberType.YAOYI_EXCLUSIVE_PERSONNEL);
-		userInfoModel.setEmail("gig_service@yaoyi.net"); // TODO
+		userInfoModel.setEmail("gig_service@yaoyi.net");
 		userInfoModel.setAddress("北京市-房山区-长阳镇");
 		userInfoModel.setPayChannel(PayChannel.BANK_CARD);
 		userInfoModel.setBankPhone(userSub.getBankPhone());
 		userInfoModel.setBankCard(userSub.getBankCardNumber());
+		userInfoModel.setUploadFaceID(uploadFaceID);
 		userInfoModel.setIdCardFront(StrUtil.isBlank(userSub.getIdCardFrontUrl())
 				? null : userSub.getIdCardFrontUrl().startsWith("https")
 				? userSub.getIdCardFrontUrl() : upmsConfig.getClientUrl() + userSub.getIdCardFrontUrl());