Pārlūkot izejas kodu

feat: E证通联调

lixuesong 3 gadi atpakaļ
vecāks
revīzija
4f07ca2e75

+ 5 - 4
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java

@@ -1453,9 +1453,10 @@ public class SysUserController {
 
 		if (CollUtil.isNotEmpty(deptIds)) {
 			// TODO
-//			Map<Integer, Map<String, Integer>> coll = sysDeptSubService.list(Wrappers.<SysDeptSub>lambdaQuery().in(SysDeptSub::getDeptId, deptIds))
-//					.stream()
-//					.collect(Collectors.groupingBy(SysDeptSub::getDeptId, Collectors.toMap(SysDeptSub::getSubjectType, SysDeptSub::getSubjectChannel)));
+			Map<Integer, Map<String, Integer>> coll = sysDeptSubService.list(Wrappers.<SysDeptSub>lambdaQuery().in(SysDeptSub::getDeptId, deptIds))
+					.stream()
+					.collect(Collectors.groupingBy(SysDeptSub::getDeptId,
+							Collectors.toMap(sysDeptSub -> sysDeptSub.getSubjectLocation().name(), SysDeptSub::getSubjectChannel)));
 
 			userVosPage.getRecords().forEach(item -> {
 				if ("0".equals(userDTO.getSubType())) {
@@ -1464,7 +1465,7 @@ public class SysUserController {
 					item.setRljCertStatus(null);
 				}
 
-//				item.setSubjectTypeAndChannel(coll.get(item.getDeptId()));
+				item.setSubjectTypeAndChannel(coll.get(item.getDeptId()));
 
 			});
 		}

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

@@ -16,6 +16,7 @@ import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.service.SysUserExtRecordService;
 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.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
@@ -32,6 +33,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -51,12 +53,12 @@ import java.util.stream.Collectors;
 @RequestMapping("/user-sign-cert")
 public class SysUserSignCertController {
 
-	private final SysUserExtRecordService sysUserExtRecordService;
-
 	private final SysUserSignCertService sysUserSignCertService;
 
 	private final SysUserService sysUserService;
 
+	private final SysUserSubService sysUserSubService;
+
 	private final RedisTemplate<String, Object> redisTemplate;
 
 	/**
@@ -97,10 +99,7 @@ public class SysUserSignCertController {
 		if (userSignCertDTO.getUserId() == null) {
 			return R.failed("userId不能为空");
 		}
-		if (CollUtil.isEmpty(userSignCertDTO.getGigTypeList())) {
-			return R.failed("认证渠道不能为空");
-		}
-		if (CollUtil.isEmpty(userSignCertDTO.getSubjectLocationList())) {
+		if (userSignCertDTO.getSubjectLocation() == null) {
 			return R.failed("税源地不能为空");
 		}
 		if (StrUtil.isBlank(userSignCertDTO.getBankPhone()) || !Validator.isMobile(userSignCertDTO.getBankPhone())) {
@@ -112,7 +111,9 @@ public class SysUserSignCertController {
 		if (StrUtil.isNotBlank(userSignCertDTO.getIdCardNumber()) && !Validator.isCitizenId(userSignCertDTO.getIdCardNumber())) {
 			return R.failed("身份证号不正确");
 		}
+
 		sysUserSignCertService.saveBaseInfo(userSignCertDTO);
+
 		return R.ok();
 	}
 
@@ -124,26 +125,12 @@ public class SysUserSignCertController {
 	 */
 	@SysLog("签约/增员")
 	@PostMapping("/sign")
-	public R<?> toSign(UserSignCertDTO userSignCertDTO) {
+	public R<?> toSign(@RequestBody UserSignCertDTO userSignCertDTO) {
 		return sysUserSignCertService.toSign(userSignCertDTO);
 	}
 
 	/**
-	 * 保存e证通认证结果
-	 *
-	 * @param userExtRecord
-	 * @return
-	 */
-	@PostMapping("/ext/record")
-	public R<?> saveUserExtRecord(@RequestBody SysUserExtRecord userExtRecord) {
-
-		sysUserExtRecordService.saveUserExtRecord(userExtRecord);
-
-		return R.ok();
-	}
-
-	/**
-	 * 签协议 TODO
+	 * 签协议
 	 *
 	 * @param userSignCertDTO
 	 * @return
@@ -154,17 +141,10 @@ public class SysUserSignCertController {
 		if (userSignCertDTO.getUserId() == null) {
 			return R.failed("userId不能为空");
 		}
-		if (CollUtil.isEmpty(userSignCertDTO.getGigTypeList())) {
-			return R.failed("认证渠道不能为空");
-		}
-		if (!userSignCertDTO.getGigTypeList().contains(GigTypeEnum.REN_LI_JIA) && StrUtil.isBlank(userSignCertDTO.getAgreementUrl())) {
-			// 除人力家外,其他都做校验
+		if (StrUtil.isBlank(userSignCertDTO.getAgreementUrl())) {
 			return R.failed("协议不能为空");
 		}
-		List<SysUserSub> userSubList = sysUserSignCertService.listUserSignCert(userSignCertDTO.getUserId(), userSignCertDTO.getGigTypeList());
-		if (CollUtil.isEmpty(userSubList)) {
-			return R.failed("数据异常");
-		}
+
 		sysUserSignCertService.signAgreement(userSignCertDTO);
 
 		return R.ok();
@@ -187,13 +167,7 @@ public class SysUserSignCertController {
 				userSignCertDTO.getCertVideo1Url(), userSignCertDTO.getCertVideo2Url())) {
 			return R.failed("身份证或视频信息不能为空");
 		}
-		if (CollUtil.isEmpty(userSignCertDTO.getGigTypeList())) {
-			return R.failed("认证渠道不能为空");
-		}
-		List<SysUserSub> userSubList = sysUserSignCertService.listUserSignCert(userSignCertDTO.getUserId(), userSignCertDTO.getGigTypeList());
-		if (CollUtil.isEmpty(userSubList)) {
-			return R.failed("数据异常");
-		}
+
 		sysUserSignCertService.personalIdentityVerification(userSignCertDTO);
 
 		return R.ok();
@@ -226,32 +200,34 @@ public class SysUserSignCertController {
 		if (userSignCertDTO.getUserId() == null) {
 			return R.failed("userId不能为空");
 		}
-		if (CollUtil.isEmpty(userSignCertDTO.getGigTypeList())) {
-			return R.failed("认证渠道不能为空");
+		if (userSignCertDTO.getSubjectLocation() == null) {
+			return R.failed("税源地不能为空");
 		}
-		List<SysUserSub> userSubList = sysUserSignCertService.listUserSignCert(userSignCertDTO.getUserId(), userSignCertDTO.getGigTypeList());
-		if (CollUtil.isEmpty(userSubList)) {
-			return R.failed("数据异常");
+
+		SysUser sysUser = sysUserService.getById(userSignCertDTO.getUserId());
+		if (sysUser == null) {
+			return R.failed("用户不存在");
 		}
-		for (SysUserSub userSub : userSubList) {
-			if (userSignCertDTO.getGigTypeList().contains(GigTypeEnum.REN_LI_JIA)) {
-				// 人力家不校验
-				continue;
-			}
+		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+				.eq(SysUserSub::getDeptId, sysUser.getDeptId())
+				.eq(SysUserSub::getUserId, sysUser.getUserId())
+				.eq(SysUserSub::getSubjectLocation, userSignCertDTO.getSubjectLocation()));
+		if (userSub == null) {
+			return R.failed("用户userSub不存在");
+		}
+		if (!userSignCertDTO.getSubjectLocation().equals(SubjectLocation.REN_LI_JIA)) {
 			if (StrUtil.isBlank(userSub.getAgreementUrl())) {
 				return R.failed("协议不能为空");
 			}
-			if (!StrUtil.isAllNotBlank(userSub.getIdCardBackUrl(), userSub.getIdCardFrontUrl(),
-					userSub.getCertVideo1Url(), userSub.getCertVideo2Url())) {
-				return R.failed("身份证或视频信息不能为空");
-			}
+//			if (!StrUtil.isAllNotBlank(userSub.getIdCardBackUrl(), userSub.getIdCardFrontUrl(),
+//					userSub.getCertVideo1Url(), userSub.getCertVideo2Url())) {
+//				return R.failed("身份证或视频信息不能为空");
+//			}
 		}
 
 		// 过滤出阿拉钉的渠道
 		Collection<SubjectLocation> oladingList =
-				CollUtil.intersection(userSignCertDTO.getSubjectLocationList(),
-						SubjectLocation.getByGigType(GigTypeEnum.OLADING).stream()
-								.collect(Collectors.toList()));
+				CollUtil.intersection(CollUtil.toList(userSignCertDTO.getSubjectLocation()), SubjectLocation.getByGigType(GigTypeEnum.OLADING));
 		if (!oladingList.isEmpty()) {
 			List<SubjectLocation> sortedList = oladingList.stream()
 					.sorted(Comparator.comparing(SubjectLocation::getSort))
@@ -284,9 +260,7 @@ public class SysUserSignCertController {
 		if (StrUtil.isBlank(userSignCertDTO.getBankCardNumber())) {
 			return R.failed("银行卡号不能为空");
 		}
-		sysUserSignCertService.bindCardVerification(userSignCertDTO);
-
-		return R.ok();
+		return sysUserSignCertService.bindCardVerification(userSignCertDTO);
 	}
 
 	/**
@@ -301,12 +275,7 @@ public class SysUserSignCertController {
 		if (userSignCertDTO.getUserId() == null) {
 			return R.failed("userId不能为空");
 		}
-		if (CollUtil.isEmpty(userSignCertDTO.getGigTypeList())) {
-			return R.failed("认证渠道不能为空");
-		}
-		sysUserSignCertService.bindCardConfirm(userSignCertDTO);
-
-		return R.ok();
+		return sysUserSignCertService.bindCardConfirm(userSignCertDTO);
 	}
 
 	/**

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

@@ -66,12 +66,13 @@ public class UserSignCertDTO implements Serializable {
 	/**
 	 * 零工认证渠道
 	 */
+	@Deprecated
 	private List<GigTypeEnum> gigTypeList;
 
 	/**
 	 * 税源地
 	 */
-	private List<SubjectLocation> subjectLocationList;
+	private SubjectLocation subjectLocation;
 
 	/**
 	 * 验证码

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

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

+ 4 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectLocation.java

@@ -24,7 +24,10 @@ public enum SubjectLocation {
 	// 钉零工通道
 	FEI_YI("FEI_YI", GigTypeEnum.OLADING, "海南飞亿", 3),
 	JIN_YUAN("JIN_YUAN", GigTypeEnum.OLADING, "金园数科", 4),
-	XIN_TAI_ZI("XIN_TAI_ZI", GigTypeEnum.OLADING, "河南薪泰梓", 5);
+	XIN_TAI_ZI("XIN_TAI_ZI", GigTypeEnum.OLADING, "河南薪泰梓", 5),
+
+	// 易联
+	YI_LIAN("YI_LIAN", GigTypeEnum.YEE, "易联数科", 6);
 
 	@EnumValue
 	private final String type;

+ 4 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/SysUserSignCertService.java

@@ -87,15 +87,17 @@ public interface SysUserSignCertService {
 	 * 税邦云发送绑卡验证码
 	 *
 	 * @param userSignCertDTO
+	 * @return
 	 */
-    void bindCardVerification(UserSignCertDTO userSignCertDTO);
+    R<?> bindCardVerification(UserSignCertDTO userSignCertDTO);
 
 	/**
 	 * 绑卡确认
 	 *
 	 * @param userSignCertDTO
+	 * @return
 	 */
-	void bindCardConfirm(UserSignCertDTO userSignCertDTO);
+	R<Object> bindCardConfirm(UserSignCertDTO userSignCertDTO);
 
 	/**
 	 * 签约/增员

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

@@ -102,6 +102,16 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 */
 	private static final String GIG_CERT_STATE = "/gig/v2/operation/cert/state";
 
+	/**
+	 * 签约接口url
+	 */
+	private static final String GIG_CERT_ACTION_SIGN_UP = "/gig/v2/operation/cert/action/sign-up";
+
+	/**
+	 * 税邦云绑卡url
+	 */
+	private static final String GIG_CERT_ACTION_BANK_CARD = "/gig/v2/operation/cert/action/bank-card";
+
 	/**
 	 * 查询用户签约认证信息
 	 *
@@ -220,52 +230,52 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 			sysUserService.updateById(updateUser);
 		}
 		// 更新用户签约认证主体信息
-		userSignCertDTO.getSubjectLocationList().forEach(subjectLocation -> {
-			// 税邦云单独设置渠道类型
-			GigChannelEnum gigChannel;
-			if (GigTypeEnum.TAX_HELPOR.equals(subjectLocation)) {
-				// 读取用户所认证的企业的结算渠道
-				SysDeptSub deptSub = sysDeptSubService.getOne(Wrappers.<SysDeptSub>lambdaQuery()
-						.eq(SysDeptSub::getDeptId, queryUser.getDeptId())
-						.eq(SysDeptSub::getSubjectType, subjectLocation.getGigType().getCode())
-						.eq(SysDeptSub::getSubjectLocation, subjectLocation)
-						.eq(SysDeptSub::getEnableFlag, SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode()));
-				if (deptSub != null) {
-					gigChannel = GigChannelEnum.resolve(Integer.parseInt(deptSub.getSubjectType()));
-				} else {
-					gigChannel = GigChannelEnum.DEFAULT;
-				}
+		// 税邦云单独设置渠道类型
+		SubjectLocation subjectLocation = userSignCertDTO.getSubjectLocation();
+		GigChannelEnum gigChannel;
+		if (GigTypeEnum.TAX_HELPOR.equals(subjectLocation.getGigType())) {
+			// 读取用户所认证的企业的结算渠道
+			SysDeptSub deptSub = sysDeptSubService.getOne(Wrappers.<SysDeptSub>lambdaQuery()
+					.eq(SysDeptSub::getDeptId, queryUser.getDeptId())
+					.eq(SysDeptSub::getSubjectType, subjectLocation.getGigType().getCode())
+					.eq(SysDeptSub::getSubjectLocation, subjectLocation)
+					.eq(SysDeptSub::getEnableFlag, SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode()));
+			if (deptSub != null) {
+				gigChannel = GigChannelEnum.resolve(Integer.parseInt(deptSub.getSubjectType()));
 			} else {
 				gigChannel = GigChannelEnum.DEFAULT;
 			}
-			SysUserSub queryUserSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
-					.eq(SysUserSub::getUserId, userSignCertDTO.getUserId())
-					.eq(SysUserSub::getDeptId, queryUser.getDeptId())
-					.eq(SysUserSub::getGigType, subjectLocation.getGigType())
-					.eq(SysUserSub::getSubjectLocation, subjectLocation));
-			if (queryUserSub != null) {
-				SysUserSub updateUserSub = new SysUserSub();
-				updateUserSub.setId(queryUserSub.getId());
-				updateUserSub.setCallbackStatus(GigCallBackStatus.NOT_SUBMIT);
-				updateUserSub.setGigChannel(gigChannel);
-				updateUserSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
-				updateUserSub.setUpdateTime(LocalDateTime.now());
-				updateUserSub.setUpdateUser(operateUserId);
-				sysUserSubService.updateById(updateUserSub);
-			} else {
-				SysUserSub userSub = new SysUserSub();
-				userSub.setUserId(userSignCertDTO.getUserId());
-				userSub.setDeptId(queryUser.getDeptId());
-				userSub.setGigType(subjectLocation.getGigType());
-				userSub.setGigChannel(gigChannel);
-				userSub.setCallbackStatus(GigCallBackStatus.NOT_SUBMIT);
-				userSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
-				userSub.setBankPhone(userSignCertDTO.getBankPhone());
-				userSub.setCreateUser(operateUserId);
-				userSub.setCreateTime(LocalDateTime.now());
-				sysUserSubService.save(userSub);
-			}
-		});
+		} else {
+			gigChannel = GigChannelEnum.DEFAULT;
+		}
+		SysUserSub queryUserSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+				.eq(SysUserSub::getUserId, userSignCertDTO.getUserId())
+				.eq(SysUserSub::getDeptId, queryUser.getDeptId())
+				.eq(SysUserSub::getGigType, subjectLocation.getGigType())
+				.eq(SysUserSub::getSubjectLocation, subjectLocation));
+		if (queryUserSub != null) {
+			SysUserSub updateUserSub = new SysUserSub();
+			updateUserSub.setId(queryUserSub.getId());
+			updateUserSub.setCallbackStatus(GigCallBackStatus.NOT_SUBMIT);
+			updateUserSub.setGigChannel(gigChannel);
+			updateUserSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+			updateUserSub.setUpdateTime(LocalDateTime.now());
+			updateUserSub.setUpdateUser(operateUserId);
+			sysUserSubService.updateById(updateUserSub);
+		} else {
+			SysUserSub userSub = new SysUserSub();
+			userSub.setUserId(userSignCertDTO.getUserId());
+			userSub.setDeptId(queryUser.getDeptId());
+			userSub.setGigType(subjectLocation.getGigType());
+			userSub.setGigChannel(gigChannel);
+			userSub.setSubjectLocation(userSignCertDTO.getSubjectLocation());
+			userSub.setCallbackStatus(GigCallBackStatus.NOT_SUBMIT);
+			userSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+			userSub.setBankPhone(userSignCertDTO.getBankPhone());
+			userSub.setCreateUser(operateUserId);
+			userSub.setCreateTime(LocalDateTime.now());
+			sysUserSubService.save(userSub);
+		}
 	}
 
 	/**
@@ -283,18 +293,83 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		if (sysUser == null) {
 			return R.failed("用户不存在");
 		}
-		// 查询认证数据
-		SysUserExtRecord userExtRecord = sysUserExtRecordService.getOne(Wrappers.<SysUserExtRecord>lambdaQuery()
-				.eq(SysUserExtRecord::getUserId, userId)
-				.eq(SysUserExtRecord::getDelFlag, DelEnum.NOT_DEL.val()));
-		if (userExtRecord == null) {
-			return R.failed("用户认证数据不存在");
-		}
 		// 查询dept
 		SysDept dept = sysDeptService.getById(sysUser.getDeptId());
-		// TODO
+		// 查询deptSub
+//		List<SysDeptSub> deptSubList = sysDeptSubService.list(Wrappers.<SysDeptSub>lambdaQuery()
+//				.eq(SysDeptSub::getDeptId, dept.getDeptId())
+//				.eq(SysDeptSub::getEnableFlag, SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode())
+//				.in(SysDeptSub::getSubjectLocation, userSignCertDTO.getSubjectLocationList()));
+//		if (CollUtil.isEmpty(deptSubList)) {
+//			return R.failed("用户所在企业税源地不存在");
+//		}
+		// 查询userSub
+		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+				.eq(SysUserSub::getDeptId, dept.getDeptId())
+				.eq(SysUserSub::getUserId, userId)
+				.eq(SysUserSub::getSubjectLocation, userSignCertDTO.getSubjectLocation()));
+		if (userSub == null) {
+			return R.failed("用户sub数据不存在");
+		}
+		// 判断是否已签约/增员
+		if (SubjectLocation.LUO_SHU_YUN.equals(userSub.getSubjectLocation())) {
+			if (userSub.getCertStatus() > TaxHelperCertStatus.UN_CERT.getCode()) {
+				return R.ok();
+			}
+		} else {
+			if (OladingCertStatus.SIGNED.getCode().equals(String.valueOf(userSub.getCertStatus()))
+					|| OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+				return R.ok();
+			}
+		}
 
-		return null;
+		// 发起签约/增员
+		Map<String, Object> params = new HashMap<>();
+		params.put("enterpriseCode", dept.getTaxCode());
+		params.put("subjectLocation", userSub.getSubjectLocation().name());
+		params.put("subjectChannel", userSub.getGigChannel().name());
+		params.put("realName", sysUser.getRealname());
+		params.put("phone", sysUser.getUsername());
+		params.put("bankPhone", userSub.getBankPhone());
+		params.put("bankCard", userSub.getBankCardNumber());
+		params.put("idCard", sysUser.getIdCardNumber());
+		params.put("endType", "CSO");
+		params.put("email", "service@yaoyi.net");
+		params.put("address", "北京市房山区");
+
+		String postResult = HttpUtil.post(upmsConfig.getGigServiceUrl() + GIG_CERT_ACTION_SIGN_UP, JSONUtil.toJsonStr(params));
+		log.info("签约/增员,req={}, resp={}", JSONUtil.toJsonStr(params), postResult);
+
+		String message = "增员/签约失败";
+		int certStatus = 0;
+		if (JSONUtil.isJsonObj(postResult)) {
+			JSONObject jsonResult = JSONUtil.parseObj(postResult);
+			if (jsonResult.getInt("code") == 0) {
+				JSONObject data = jsonResult.getJSONObject("data");
+				if (SubjectLocation.LUO_SHU_YUN.equals(userSignCertDTO.getSubjectLocation())) {
+					if ("2000".equals(data.getStr("code"))) {
+						certStatus = TaxHelperCertStatus.ADD_MEMBER.getCode();
+					}
+					message = data.getStr("message");
+				} else {
+					if ("0".equals(data.getStr("code"))) {
+						certStatus = Integer.parseInt(OladingCertStatus.SIGNED.getCode());
+					}
+					message = data.getStr("message");
+				}
+			}
+		}
+
+		// 修改userSub状态
+		SysUserSub updateUserSub = new SysUserSub();
+		updateUserSub.setId(userSub.getId());
+		updateUserSub.setCertStatus(certStatus);
+		updateUserSub.setCertRemark("签约/增员:" + message);
+		updateUserSub.setUpdateUser(SecurityUtils.getUser().getId());
+		updateUserSub.setUpdateTime(LocalDateTime.now());
+		sysUserSubService.updateById(updateUserSub);
+
+		return certStatus > 0 ? R.ok() : R.failed(message);
 	}
 
 	/**
@@ -381,7 +456,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		if (CollUtil.isNotEmpty(userSubList)) {
 			// 过滤出阿拉钉的渠道
 			Collection<SubjectLocation> oladingList =
-					CollUtil.intersection(userSignCertDTO.getSubjectLocationList(),
+					CollUtil.intersection(CollUtil.toList(userSignCertDTO.getSubjectLocation()),
 							SubjectLocation.getByGigType(GigTypeEnum.OLADING)).stream()
 							.sorted(Comparator.comparing(SubjectLocation::getSort))
 							.collect(Collectors.toList());
@@ -623,42 +698,74 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 * 税邦云发送绑卡验证码
 	 *
 	 * @param userSignCertDTO
+	 * @return
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void bindCardVerification(UserSignCertDTO userSignCertDTO) {
+	public R<?> bindCardVerification(UserSignCertDTO userSignCertDTO) {
+		// 查询user
+		SysUser sysUser = sysUserService.getById(userSignCertDTO.getUserId());
+		// 查询userSub
 		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
 				.eq(SysUserSub::getUserId, userSignCertDTO.getUserId())
-				.eq(SysUserSub::getGigType, GigTypeEnum.TAX_HELPOR));
+				.eq(SysUserSub::getDeptId, sysUser.getDeptId())
+				.eq(SysUserSub::getSubjectLocation, SubjectLocation.LUO_SHU_YUN));
 		if (userSub == null) {
-			throw new RuntimeException("数据异常");
+			return R.failed("用户sub数据不存在");
 		}
-		// 查询user
-		SysUser sysUser = sysUserService.getById(userSignCertDTO.getUserId());
+
 		// 查询dept
 		SysDept dept = sysDeptService.getById(sysUser.getDeptId());
-		// 基础信息
-		GigBaseInfoModel baseInfoModel = new GigBaseInfoModel();
-		baseInfoModel.setGigType(userSub.getGigType());
-		baseInfoModel.setGigChannel(userSub.getGigChannel());
-		baseInfoModel.setBankCardOpt("captcha");
-		baseInfoModel.setNotifyUrl(taxNotifyConfig.getNotifyUrl());
-		// 用户信息
-		GigUserInfoModel userInfoModel = new GigUserInfoModel();
-		userInfoModel.setName(sysUser.getRealname());
-		userInfoModel.setUsername(sysUser.getUsername());
-		userInfoModel.setEntCode(dept.getTaxCode());
-		userInfoModel.setIdCard(sysUser.getIdCardNumber());
-		userInfoModel.setBankPhone(userSignCertDTO.getBankPhone());
-		userInfoModel.setBankCard(userSignCertDTO.getBankCardNumber());
 
-		GigInfoModel infoModel = new GigInfoModel();
-		infoModel.setBaseInfo(baseInfoModel);
-		infoModel.setUserInfo(userInfoModel);
-		BaseMap gigInfo = new BaseMap();
-		gigInfo.put(userSub.getGigType().name(), infoModel);
-		// 发送mq
-		rabbitMqClient.sendMessage(MqConstants.DIRECT_MODE_GIG_BANK_CARD_QUEUE, JSONUtil.toJsonStr(gigInfo));
+		// 发送绑卡验证码
+		Map<String, Object> params = new HashMap<>();
+		params.put("enterpriseCode", dept.getTaxCode());
+		params.put("subjectLocation", userSub.getSubjectLocation().name());
+		params.put("realName", sysUser.getRealname());
+		params.put("bankCard", userSignCertDTO.getBankCardNumber());
+		params.put("idCard", sysUser.getIdCardNumber());
+		params.put("bankPhone", userSignCertDTO.getBankPhone());
+		params.put("endType", "CSO");
+		params.put("bankCardStep", "CAPTCHA");
+
+		String postResult = HttpUtil.post(upmsConfig.getGigServiceUrl() + GIG_CERT_ACTION_BANK_CARD, JSONUtil.toJsonStr(params));
+		log.info("税邦云发送绑卡验证码: req={}, resp={}", JSONUtil.toJsonStr(params), postResult);
+
+		if (JSONUtil.isJsonObj(postResult)) {
+			JSONObject jsonResult = JSONUtil.parseObj(postResult);
+			if (jsonResult.getInt("code") == 0) {
+				JSONObject data = jsonResult.getJSONObject("data");
+				if ("2000".equals(data.getStr("code"))) {
+					return R.ok();
+				}
+				return R.failed(data.getStr("message"));
+			}
+		}
+
+		return R.failed("发送绑卡验证码失败");
+
+//		// 基础信息
+//		GigBaseInfoModel baseInfoModel = new GigBaseInfoModel();
+//		baseInfoModel.setGigType(userSub.getGigType());
+//		baseInfoModel.setGigChannel(userSub.getGigChannel());
+//		baseInfoModel.setBankCardOpt("captcha");
+//		baseInfoModel.setNotifyUrl(taxNotifyConfig.getNotifyUrl());
+//		// 用户信息
+//		GigUserInfoModel userInfoModel = new GigUserInfoModel();
+//		userInfoModel.setName(sysUser.getRealname());
+//		userInfoModel.setUsername(sysUser.getUsername());
+//		userInfoModel.setEntCode(dept.getTaxCode());
+//		userInfoModel.setIdCard(sysUser.getIdCardNumber());
+//		userInfoModel.setBankPhone(userSignCertDTO.getBankPhone());
+//		userInfoModel.setBankCard(userSignCertDTO.getBankCardNumber());
+//
+//		GigInfoModel infoModel = new GigInfoModel();
+//		infoModel.setBaseInfo(baseInfoModel);
+//		infoModel.setUserInfo(userInfoModel);
+//		BaseMap gigInfo = new BaseMap();
+//		gigInfo.put(userSub.getGigType().name(), infoModel);
+//		// 发送mq
+//		rabbitMqClient.sendMessage(MqConstants.DIRECT_MODE_GIG_BANK_CARD_QUEUE, JSONUtil.toJsonStr(gigInfo));
 
 	}
 
@@ -666,55 +773,106 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 * 绑卡确认
 	 *
 	 * @param userSignCertDTO
+	 * @return
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void bindCardConfirm(UserSignCertDTO userSignCertDTO) {
-		List<SysUserSub> userSubList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
+	public R<Object> bindCardConfirm(UserSignCertDTO userSignCertDTO) {
+
+		// 查询user
+		SysUser sysUser = sysUserService.getById(userSignCertDTO.getUserId());
+		// 查询userSub
+		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
 				.eq(SysUserSub::getUserId, userSignCertDTO.getUserId())
-				.in(SysUserSub::getGigType, userSignCertDTO.getGigTypeList()));
-		if (CollUtil.isEmpty(userSubList)) {
-			throw new RuntimeException("数据异常");
+				.eq(SysUserSub::getDeptId, sysUser.getDeptId())
+				.eq(SysUserSub::getSubjectLocation, SubjectLocation.LUO_SHU_YUN));
+		if (userSub == null) {
+			return R.failed("用户sub数据不存在");
 		}
-		BaseMap gigInfo = new BaseMap();
-		userSubList.stream()
-				// 人力家暂过滤掉
-				.filter(sysUserSub -> !GigTypeEnum.REN_LI_JIA.equals(sysUserSub.getGigType()))
-				.forEach(userSub -> {
-					// 新银行卡号缓存到redis
-					String cacheKey = String.format("%s_%s_%s", CacheConstants.BIND_CARD_CONFIRM_NEW_BANK_CARD, userSub.getUserId(), userSub.getGigType().name());
-					redisTemplate.opsForValue().set(cacheKey, userSignCertDTO);
-
-					// 查询user
-					SysUser sysUser = sysUserService.getById(userSignCertDTO.getUserId());
-					// 查询dept
-					SysDept dept = sysDeptService.getById(sysUser.getDeptId());
-					// 封装请求数据
-					if (GigTypeEnum.TAX_HELPOR.equals(userSub.getGigType())) {
-						userSub.setBankPhone(userSignCertDTO.getBankPhone());
-						userSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
-						gigInfo.put(userSub.getGigType().name(),
-								this.buildTaxHelperBindCardConfirmModel(sysUser, userSub, dept.getTaxCode(), userSignCertDTO.getBankCardNumber(), userSignCertDTO.getVerifyCode()));
-					} else if (GigTypeEnum.YEE.equals(userSub.getGigType())) {
-						gigInfo.put(userSub.getGigType().name(),
-								this.buildYeeBindCardConfirmModel(sysUser, userSub, dept.getTaxCode(), userSignCertDTO.getBankCardNumber()));
-					} else if (GigTypeEnum.OLADING.equals(userSub.getGigType())) {
-						gigInfo.put(userSub.getGigType().name(),
-								this.buildOladingBindCardConfirmModel(sysUser, userSub, dept.getTaxCode(), userSignCertDTO.getBankCardNumber()));
-					}
-					// 更新为进行中状态
-					SysUserSub updateUserSub = new SysUserSub();
-					updateUserSub.setId(userSub.getId());
-					updateUserSub.setCallbackStatus(GigCallBackStatus.IN_PROGRESS);
-					updateUserSub.setUpdateTime(LocalDateTime.now());
-					updateUserSub.setUpdateUser(0);
-					sysUserSubService.updateById(updateUserSub);
-				});
-
-		if (CollUtil.isNotEmpty(gigInfo)) {
-			// 发送mq
-			rabbitMqClient.sendMessage(MqConstants.DIRECT_MODE_GIG_BANK_CARD_QUEUE, JSONUtil.toJsonStr(gigInfo));
+
+		// 查询dept
+		SysDept dept = sysDeptService.getById(sysUser.getDeptId());
+
+		// 税邦云中金绑卡操作
+		Map<String, Object> params = new HashMap<>();
+		params.put("enterpriseCode", dept.getTaxCode());
+		params.put("subjectLocation", userSub.getSubjectLocation().name());
+		params.put("realName", sysUser.getRealname());
+		params.put("bankCard", userSignCertDTO.getBankCardNumber());
+		params.put("idCard", sysUser.getIdCardNumber());
+		params.put("endType", "CSO");
+		params.put("bankCardStep", "BOUND");
+		params.put("captcha", userSignCertDTO.getVerifyCode());
+
+		String postResult = HttpUtil.post(upmsConfig.getGigServiceUrl() + GIG_CERT_ACTION_BANK_CARD, JSONUtil.toJsonStr(params));
+		log.info("税邦云中金绑卡操作: req={}, resp={}", JSONUtil.toJsonStr(params), postResult);
+
+		if (JSONUtil.isJsonObj(postResult)) {
+			JSONObject jsonResult = JSONUtil.parseObj(postResult);
+			if (jsonResult.getInt("code") == 0) {
+				JSONObject data = jsonResult.getJSONObject("data");
+				if ("2000".equals(data.getStr("code"))) {
+					// 保存手机号和银行卡号
+					SysUser updateUser = new SysUser();
+					updateUser.setUserId(sysUser.getUserId());
+					updateUser.setBankPhone(userSignCertDTO.getBankPhone());
+					updateUser.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+					updateUser.setUpdateTime(LocalDateTime.now());
+					sysUserService.updateById(updateUser);
+
+					return R.ok();
+				}
+				return R.failed(data.getStr("message"));
+			}
 		}
+
+		return R.failed("发送绑卡验证码失败");
+
+//		List<SysUserSub> userSubList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
+//				.eq(SysUserSub::getUserId, userSignCertDTO.getUserId())
+//				.in(SysUserSub::getGigType, userSignCertDTO.getGigTypeList()));
+//		if (CollUtil.isEmpty(userSubList)) {
+//			throw new RuntimeException("数据异常");
+//		}
+//		BaseMap gigInfo = new BaseMap();
+//		userSubList.stream()
+//				// 人力家暂过滤掉
+//				.filter(sysUserSub -> !GigTypeEnum.REN_LI_JIA.equals(sysUserSub.getGigType()))
+//				.forEach(userSub -> {
+//					// 新银行卡号缓存到redis
+//					String cacheKey = String.format("%s_%s_%s", CacheConstants.BIND_CARD_CONFIRM_NEW_BANK_CARD, userSub.getUserId(), userSub.getGigType().name());
+//					redisTemplate.opsForValue().set(cacheKey, userSignCertDTO);
+//
+//					// 查询user
+//					SysUser sysUser = sysUserService.getById(userSignCertDTO.getUserId());
+//					// 查询dept
+//					SysDept dept = sysDeptService.getById(sysUser.getDeptId());
+//					// 封装请求数据
+//					if (GigTypeEnum.TAX_HELPOR.equals(userSub.getGigType())) {
+//						userSub.setBankPhone(userSignCertDTO.getBankPhone());
+//						userSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+//						gigInfo.put(userSub.getGigType().name(),
+//								this.buildTaxHelperBindCardConfirmModel(sysUser, userSub, dept.getTaxCode(), userSignCertDTO.getBankCardNumber(), userSignCertDTO.getVerifyCode()));
+//					} else if (GigTypeEnum.YEE.equals(userSub.getGigType())) {
+//						gigInfo.put(userSub.getGigType().name(),
+//								this.buildYeeBindCardConfirmModel(sysUser, userSub, dept.getTaxCode(), userSignCertDTO.getBankCardNumber()));
+//					} else if (GigTypeEnum.OLADING.equals(userSub.getGigType())) {
+//						gigInfo.put(userSub.getGigType().name(),
+//								this.buildOladingBindCardConfirmModel(sysUser, userSub, dept.getTaxCode(), userSignCertDTO.getBankCardNumber()));
+//					}
+//					// 更新为进行中状态
+//					SysUserSub updateUserSub = new SysUserSub();
+//					updateUserSub.setId(userSub.getId());
+//					updateUserSub.setCallbackStatus(GigCallBackStatus.IN_PROGRESS);
+//					updateUserSub.setUpdateTime(LocalDateTime.now());
+//					updateUserSub.setUpdateUser(0);
+//					sysUserSubService.updateById(updateUserSub);
+//				});
+//
+//		if (CollUtil.isNotEmpty(gigInfo)) {
+//			// 发送mq
+//			rabbitMqClient.sendMessage(MqConstants.DIRECT_MODE_GIG_BANK_CARD_QUEUE, JSONUtil.toJsonStr(gigInfo));
+//		}
 	}
 
 	/**