浏览代码

Merge branch 'feat-20220721-eidcert' into temp-pre

lixuesong 3 年之前
父节点
当前提交
4fc6d0b7ec
共有 29 个文件被更改,包括 1028 次插入363 次删除
  1. 40 0
      db/v2.0/220720.sql
  2. 38 3
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
  3. 24 35
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java
  4. 57 47
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserSignCertController.java
  5. 7 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysDeptSub.java
  6. 130 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysUserExtRecord.java
  7. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysUserSub.java
  8. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackageSettleNote.java
  9. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/SettleConfigDTO.java
  10. 7 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/UserSignCertDTO.java
  11. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleInput.java
  12. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigBaseInfoModel.java
  13. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigUserInfoModel.java
  14. 6 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/vo/SysUserSubVO.java
  15. 1 3
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigChannelEnum.java
  16. 1 3
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigTypeEnum.java
  17. 25 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/MemberCertState.java
  18. 56 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectLocation.java
  19. 12 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysUserExtRecordMapper.java
  20. 76 61
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java
  21. 28 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysUserExtRecordService.java
  22. 25 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/SysUserSignCertService.java
  23. 380 185
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/SysUserSignCertServiceImpl.java
  24. 1 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/PartyAServiceImpl.java
  25. 2 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysDeptSubServiceImpl.java
  26. 64 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserExtRecordServiceImpl.java
  27. 3 8
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java
  28. 5 12
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageSettleNoteServiceImpl.java
  29. 4 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmSettlementServiceImpl.java

+ 40 - 0
db/v2.0/220720.sql

@@ -0,0 +1,40 @@
+create table sys_user_ext_record
+(
+    id                   int auto_increment comment '主键id'
+        primary key,
+    user_id              int              not null comment '用户id',
+    dept_id              int              not null comment '部门id',
+    real_name            varchar(30)      null comment '用户姓名',
+    phone                varchar(20)      null comment '手机号',
+    id_card_number       varchar(32)      null comment '身份证号',
+    bank_card_number     varchar(19)      null comment '银行卡号',
+    bank_phone           varchar(11)      null comment '银行预留手机号',
+    id_card_front_url    varchar(255)     null comment '身份证照片-正面',
+    id_card_back_url     varchar(255)     null comment '身份证照片-反面',
+    id_card_front_base64 longtext         null comment '身份证照片-正面base64',
+    id_card_back_base64  longtext         null comment '身份证照片-反面base64',
+    best_frame_url       varchar(255)     null comment '最佳帧照片url',
+    best_frame_base64    longtext         null comment '最佳帧照片base64',
+    etoken               varchar(40)      null comment 'etoken',
+    remark               varchar(255)     null comment '备注',
+    del_flag             char default '0' null comment '删除标记',
+    create_time          datetime         null comment '创建时间',
+    create_user          int              null comment '创建人',
+    update_time          datetime         null comment '更新时间',
+    update_user          int              null comment '更新人'
+)
+    comment '用户认证相关的扩展信息';
+
+
+-- 新增字段
+alter table sys_dept_sub
+    add subject_location varchar(20) null comment '税源地' after subject_channel;
+
+-- 新增字段
+alter table sys_user_sub
+    add subject_location varchar(20) null comment '税源地' after gig_channel;
+
+-- 新增字段
+alter table wm_score_package_settle_note
+    add subject_location varchar(20) null comment '税源地';
+

+ 38 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -31,6 +31,7 @@ import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
 import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
 import com.qunzhixinxi.hnqz.admin.entity.SysCertResultRecord;
 import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
+import com.qunzhixinxi.hnqz.admin.entity.SysUserExtRecord;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaAgent;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaDistribution;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
@@ -58,6 +59,7 @@ import com.qunzhixinxi.hnqz.admin.entity.input.WmWkAlbumApiInput;
 import com.qunzhixinxi.hnqz.admin.entity.vo.SysUserSubVO;
 import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.UserSignResultEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysCertResultRecordMapper;
@@ -66,6 +68,7 @@ import com.qunzhixinxi.hnqz.admin.service.SysDeptSubService;
 import com.qunzhixinxi.hnqz.admin.service.SysDictItemService;
 import com.qunzhixinxi.hnqz.admin.service.SysFileService;
 import com.qunzhixinxi.hnqz.admin.service.SysPublicParamService;
+import com.qunzhixinxi.hnqz.admin.service.SysUserExtRecordService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.WmAdRecordService;
 import com.qunzhixinxi.hnqz.admin.service.WmDaAgentService;
@@ -209,6 +212,7 @@ public class ApiController {
 	private final WmUserSignDetailService wmUserSignDetailService;
 	private final WmAdRecordService adRecordService;
 	private final SysUserSignCertService sysUserSignCertService;
+	private final SysUserExtRecordService sysUserExtRecordService;
 
 	@SysLog("通过任务类型获取表单配置")
 	@ApiOperation(value = "任务类型表单配置-通过任务类型获取表单配置", notes = "根据任务类型获取表单配置")
@@ -743,23 +747,34 @@ public class ApiController {
 //				}
 				List<String> subTypeList = subList.stream()
 						.map(SysDeptSub::getSubjectType)
+						.distinct()
 						.collect(Collectors.toList());
 				mapOne.put("subList", subTypeList);
 
+				// 税源地
+				List<SubjectLocation> subjectLocationList = subList.stream()
+						.map(SysDeptSub::getSubjectLocation)
+						.sorted(Comparator.comparing(SubjectLocation::getSort))
+						.collect(Collectors.toList());
+				mapOne.put("subjectLocationList", subjectLocationList);
+
 				// 查询配置了任务类型模板的任务类型
 				mapOne.put("hasTaskTypeTemplate", wmDeptTaskTypeTemplateService.listTaskTypeByDeptId(sysU.getDeptId()));
 
-				// 结算通道
-
+				// 税源地和channel对应关系
 				Map<String, Integer> collect = sysDeptSubService.list(Wrappers.<SysDeptSub>lambdaQuery().eq(SysDeptSub::getDeptId, sysU.getDeptId()))
 						.stream()
-						.collect(Collectors.toMap(SysDeptSub::getSubjectType, SysDeptSub::getSubjectChannel));
+						.collect(Collectors.toMap(sysDeptSub -> sysDeptSub.getSubjectLocation().name(), SysDeptSub::getSubjectChannel));
 				mapOne.put("subjectTypeAndChannel", collect);
 
+
 				// 认证服务信息回显
 				List<SysUserSubVO> userSignCertList = sysUserSignCertService.listUserSignCertForApi(sysU.getUserId());
 				mapOne.put("certList", userSignCertList);
 
+				// 查询是否已认证过E证通
+				mapOne.put("existEidResult", sysUserExtRecordService.existUserExtRecord());
+
 				// 获取发起认证的令牌
 				String randomStr;
 
@@ -4002,6 +4017,26 @@ public class ApiController {
 
 		cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(tokenResult.getBody());
 
+		if (CommonConstants.SUCCESS.equals(jsonObject.getInt("code"))) {
+			cn.hutool.json.JSONObject data = jsonObject.getJSONObject("data");
+			if (data != null) {
+				if (CommonConstants.SUCCESS.equals(data.getInt("compareCode"))) {
+					// 认证成功,则保存
+					SysUserExtRecord userExtRecord = new SysUserExtRecord();
+					userExtRecord.setRealName(data.getStr("realName"));
+					userExtRecord.setIdCardNumber(data.getStr("idCard"));
+					userExtRecord.setBestFrameBase64(data.getStr("bestFrameBase64"));
+					userExtRecord.setBestFrameUrl(data.getStr("bestFrameUrl"));
+					userExtRecord.setIdCardFrontBase64(data.getStr("idCardFrontBase64"));
+					userExtRecord.setIdCardBackBase64(data.getStr("idCardBackBase64"));
+					userExtRecord.setIdCardFrontUrl(data.getStr("idCardFrontUrl"));
+					userExtRecord.setIdCardBackUrl(data.getStr("idCardBackUrl"));
+					userExtRecord.setEtoken(data.getStr("etoken"));
+					sysUserExtRecordService.saveUserExtRecord(userExtRecord);
+				}
+			}
+		}
+
 		return R.builder().code(jsonObject.getInt("code")).msg(jsonObject.getStr("msg")).data(jsonObject.getObj("data")).build();
 
 

+ 24 - 35
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java

@@ -49,6 +49,7 @@ import com.qunzhixinxi.hnqz.admin.entity.vo.SysUserSubVO;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.OladingCertStatus;
 import com.qunzhixinxi.hnqz.admin.enums.RenlijiaCertStatus;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.YeeCertStatus;
 import com.qunzhixinxi.hnqz.admin.mapper.*;
@@ -1456,9 +1457,11 @@ public class SysUserController {
 		Set<Integer> deptIds = userVosPage.getRecords().stream().map(UserVO::getDeptId).collect(Collectors.toSet());
 
 		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)));
+					.collect(Collectors.groupingBy(SysDeptSub::getDeptId,
+							Collectors.toMap(sysDeptSub -> sysDeptSub.getSubjectLocation().name(), SysDeptSub::getSubjectChannel)));
 
 			userVosPage.getRecords().forEach(item -> {
 				if ("0".equals(userDTO.getSubType())) {
@@ -1502,12 +1505,6 @@ 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;
-							case XIN_TAI_ZI:
-								userSubVO.setCertStatus(OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name());
-								break;
 							default:
 						}
 						certList.add(userSubVO);
@@ -1515,8 +1512,8 @@ public class SysUserController {
 					userVO.setCertList(certList);
 
 					// 不同渠道认证名称,封装成中文名称数组格式
-					Map<GigTypeEnum, String> certStatusMap = userSubList.stream()
-							.collect(Collectors.toMap(SysUserSub::getGigType,
+					Map<SubjectLocation, String> certStatusMap = userSubList.stream()
+							.collect(Collectors.toMap(SysUserSub::getSubjectLocation,
 									sysUserSub -> {
 										String certStatuName = "";
 										switch (sysUserSub.getGigType()) {
@@ -1532,42 +1529,34 @@ 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;
-											case XIN_TAI_ZI:
-												certStatuName = OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).getMessage();
-												break;
 											default:
 												certStatuName = "";
 										}
 										return certStatuName;
 									}));
-					List<String> subTypeList = subList.stream().map(SysDeptSub::getSubjectType).collect(Collectors.toList());
+					// 该企业配置的所有税源地
+					List<SubjectLocation> subjectLocationList = subList.stream().map(SysDeptSub::getSubjectLocation).collect(Collectors.toList());
+
 					List<String> certStatusNameList = new ArrayList<>();
-					if (subTypeList.contains(String.valueOf(GigTypeEnum.REN_LI_JIA.getCode()))) {
-						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(GigTypeEnum.REN_LI_JIA)) ?
-								RenlijiaCertStatus.CER_STATUS_4.getMessage() : certStatusMap.get(GigTypeEnum.REN_LI_JIA));
-					}
-					if (subTypeList.contains(String.valueOf(GigTypeEnum.TAX_HELPOR.getCode()))) {
-						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(GigTypeEnum.TAX_HELPOR)) ?
-								TaxHelperCertStatus.UN_CERT.getDesc() : certStatusMap.get(GigTypeEnum.TAX_HELPOR));
+					if (subjectLocationList.contains(SubjectLocation.REN_LI_JIA)) {
+						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(SubjectLocation.REN_LI_JIA)) ?
+								RenlijiaCertStatus.CER_STATUS_4.getMessage() : certStatusMap.get(SubjectLocation.REN_LI_JIA));
 					}
-					if (subTypeList.contains(String.valueOf(GigTypeEnum.YEE.getCode()))) {
-						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(GigTypeEnum.YEE)) ?
-								YeeCertStatus.UN_SIGNED.getMessage() : certStatusMap.get(GigTypeEnum.YEE));
+					if (subjectLocationList.contains(SubjectLocation.LUO_SHU_YUN)) {
+						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(SubjectLocation.LUO_SHU_YUN)) ?
+								TaxHelperCertStatus.UN_CERT.getDesc() : certStatusMap.get(SubjectLocation.LUO_SHU_YUN));
 					}
-					if (subTypeList.contains(String.valueOf(GigTypeEnum.OLADING.getCode()))) {
-						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(GigTypeEnum.OLADING)) ?
-								OladingCertStatus.UN_SIGNED.getMessage() : certStatusMap.get(GigTypeEnum.OLADING));
+					if (subjectLocationList.contains(SubjectLocation.FEI_YI)) {
+						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(SubjectLocation.FEI_YI)) ?
+								OladingCertStatus.UN_SIGNED.getMessage() : certStatusMap.get(SubjectLocation.FEI_YI));
 					}
-					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));
+					if (subjectLocationList.contains(SubjectLocation.JIN_YUAN)) {
+						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(SubjectLocation.JIN_YUAN)) ?
+								OladingCertStatus.UN_SIGNED.getMessage() : certStatusMap.get(SubjectLocation.JIN_YUAN));
 					}
-					if (subTypeList.contains(String.valueOf(GigTypeEnum.XIN_TAI_ZI.getCode()))) {
-						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(GigTypeEnum.XIN_TAI_ZI)) ?
-								OladingCertStatus.UN_SIGNED.getMessage() : certStatusMap.get(GigTypeEnum.XIN_TAI_ZI));
+					if (subjectLocationList.contains(SubjectLocation.XIN_TAI_ZI)) {
+						certStatusNameList.add(StrUtil.isBlank(certStatusMap.get(SubjectLocation.XIN_TAI_ZI)) ?
+								OladingCertStatus.UN_SIGNED.getMessage() : certStatusMap.get(SubjectLocation.XIN_TAI_ZI));
 					}
 					userVO.setCertStatusArr(certStatusNameList.toArray(new String[0]));
 				}

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

@@ -5,12 +5,18 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
+import com.qunzhixinxi.hnqz.admin.entity.SysUserExtRecord;
 import com.qunzhixinxi.hnqz.admin.entity.SysUserSub;
 import com.qunzhixinxi.hnqz.admin.entity.dto.UserSignCertDTO;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 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;
@@ -27,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;
@@ -50,6 +57,8 @@ public class SysUserSignCertController {
 
 	private final SysUserService sysUserService;
 
+	private final SysUserSubService sysUserSubService;
+
 	private final RedisTemplate<String, Object> redisTemplate;
 
 	/**
@@ -90,8 +99,8 @@ 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("税源地不能为空");
 		}
 		if (StrUtil.isBlank(userSignCertDTO.getBankPhone()) || !Validator.isMobile(userSignCertDTO.getBankPhone())) {
 			return R.failed("银行预留手机号不正确");
@@ -102,10 +111,27 @@ public class SysUserSignCertController {
 		if (StrUtil.isNotBlank(userSignCertDTO.getIdCardNumber()) && !Validator.isCitizenId(userSignCertDTO.getIdCardNumber())) {
 			return R.failed("身份证号不正确");
 		}
+
 		sysUserSignCertService.saveBaseInfo(userSignCertDTO);
+
 		return R.ok();
 	}
 
+	/**
+	 * 签约/增员
+	 *
+	 * @param userSignCertDTO
+	 * @return
+	 */
+	@SysLog("签约/增员")
+	@PostMapping("/sign")
+	public R<?> toSign(@RequestBody UserSignCertDTO userSignCertDTO) {
+		if (userSignCertDTO.getUserId() == null) {
+			return R.failed("userId不能为空");
+		}
+		return sysUserSignCertService.toSign(userSignCertDTO);
+	}
+
 	/**
 	 * 签协议
 	 *
@@ -118,17 +144,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();
@@ -140,6 +159,7 @@ public class SysUserSignCertController {
 	 * @param userSignCertDTO
 	 * @return
 	 */
+	@Deprecated
 	@SysLog("人身验证")
 	@PostMapping("/personal-identity-verification")
 	public R<?> personalIdentityVerification(@RequestBody UserSignCertDTO userSignCertDTO) {
@@ -150,13 +170,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();
@@ -189,34 +203,37 @@ 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<GigTypeEnum> oladingTypeList =
-				CollUtil.intersection(userSignCertDTO.getGigTypeList(),
-						CollUtil.toList(GigTypeEnum.OLADING, GigTypeEnum.JIN_YUAN, GigTypeEnum.XIN_TAI_ZI));
-		if (!oladingTypeList.isEmpty()) {
-			List<GigTypeEnum> sortedList = oladingTypeList.stream()
-					.sorted(Comparator.comparing(GigTypeEnum::getCode))
+		Collection<SubjectLocation> oladingList =
+				CollUtil.intersection(CollUtil.toList(userSignCertDTO.getSubjectLocation()), SubjectLocation.getByGigType(GigTypeEnum.OLADING));
+		if (!oladingList.isEmpty()) {
+			List<SubjectLocation> sortedList = oladingList.stream()
+					.sorted(Comparator.comparing(SubjectLocation::getSort))
 					.collect(Collectors.toList());
 			// 选择的渠道的阿拉钉的部分记录到redis
 			String redisKey = CacheConstants.OLADING_CERT_SEND_CHANNEL + userSignCertDTO.getUserId();
@@ -246,9 +263,7 @@ public class SysUserSignCertController {
 		if (StrUtil.isBlank(userSignCertDTO.getBankCardNumber())) {
 			return R.failed("银行卡号不能为空");
 		}
-		sysUserSignCertService.bindCardVerification(userSignCertDTO);
-
-		return R.ok();
+		return sysUserSignCertService.bindCardVerification(userSignCertDTO);
 	}
 
 	/**
@@ -263,12 +278,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);
 	}
 
 	/**

+ 7 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysDeptSub.java

@@ -3,14 +3,13 @@ package com.qunzhixinxi.hnqz.admin.entity;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.math.BigDecimal;
-import java.io.Serializable;
 import java.time.LocalDateTime;
 
 /**
@@ -55,6 +54,12 @@ public class SysDeptSub extends Model<SysDeptSub> {
 	@ApiModelProperty(value = "结算通道")
 	private Integer subjectChannel;
 
+	/**
+	 * 税源地
+	 */
+	@ApiModelProperty(value = "税源地")
+	private SubjectLocation subjectLocation;
+
 	@ApiModelProperty(value = "限额")
 	private BigDecimal limitAmount;
 

+ 130 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysUserExtRecord.java

@@ -0,0 +1,130 @@
+package com.qunzhixinxi.hnqz.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDateTime;
+
+/**
+ * 用户认证相关的扩展信息实体
+ *
+ * @author lixuesong
+ * @date 2022年07月20日 18:36
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_user_ext_record")
+public class SysUserExtRecord extends Model<SysUserExtRecord> {
+
+    /**
+     * 主键id
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    private Integer userId;
+
+    /**
+     * 部门id
+     */
+    private Integer deptId;
+
+    /**
+     * 用户姓名
+     */
+    private String realName;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+
+    /**
+     * 身份证号
+     */
+    private String idCardNumber;
+
+    /**
+     * 银行卡号
+     */
+    private String bankCardNumber;
+
+    /**
+     * 银行预留手机号
+     */
+    private String bankPhone;
+
+    /**
+     * 身份证照片-正面
+     */
+    private String idCardFrontUrl;
+
+    /**
+     * 身份证照片-反面
+     */
+    private String idCardBackUrl;
+
+    /**
+     * 身份证照片-正面base64
+     */
+    private String idCardFrontBase64;
+
+    /**
+     * 身份证照片-反面base64
+     */
+    private String idCardBackBase64;
+
+    /**
+     * 最佳帧照片url
+     */
+    private String bestFrameUrl;
+
+    /**
+     * 最佳帧照片base64
+     */
+    private String bestFrameBase64;
+
+	/**
+	 * etoken
+	 */
+	private String etoken;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 删除标记
+     */
+    private String delFlag;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 创建人
+     */
+    private Integer createUser;
+
+    /**
+     * 更新时间
+
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 更新人
+     */
+    private Integer updateUser;
+
+}

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.qunzhixinxi.hnqz.admin.enums.GigCallBackStatus;
 import com.qunzhixinxi.hnqz.admin.enums.GigChannelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
@@ -50,6 +51,11 @@ public class SysUserSub extends Model<SysUserSub> {
 	 */
 	private GigChannelEnum gigChannel;
 
+	/**
+	 * 税源地
+	 */
+	private SubjectLocation subjectLocation;
+
 	/**
 	 * 回调状态
 	 */

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/WmScorePackageSettleNote.java

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.qunzhixinxi.hnqz.admin.enums.CategoryEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -165,6 +166,11 @@ public class WmScorePackageSettleNote extends Model<WmScorePackageSettleNote> {
 	 */
 	private String subType;
 
+	/**
+	 * 税源地
+	 */
+	private SubjectLocation subjectLocation;
+
 	/**
 	 * 真实名称
 	 */

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

@@ -1,5 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.entity.dto;
 
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
@@ -46,6 +47,11 @@ public class SettleConfigDTO implements Serializable {
 		 */
 		private Integer subjectChannel;
 
+		/**
+		 * 税源地
+		 */
+		private SubjectLocation subjectLocation;
+
 		/**
 		 * 限额
 		 */

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

@@ -1,6 +1,7 @@
 package com.qunzhixinxi.hnqz.admin.entity.dto;
 
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -65,8 +66,14 @@ public class UserSignCertDTO implements Serializable {
 	/**
 	 * 零工认证渠道
 	 */
+	@Deprecated
 	private List<GigTypeEnum> gigTypeList;
 
+	/**
+	 * 税源地
+	 */
+	private SubjectLocation subjectLocation;
+
 	/**
 	 * 验证码
 	 */

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleInput.java

@@ -2,6 +2,7 @@ package com.qunzhixinxi.hnqz.admin.entity.input;
 
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.admin.enums.CategoryEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.common.ding.enums.DingEnum;
 import lombok.Data;
 
@@ -80,6 +81,11 @@ public class WmScorePackageSettleInput {
 
 	private String subType;
 
+	/**
+	 * 税源地
+	 */
+	private SubjectLocation subjectLocation;
+
 	/**
 	 * @Modify: start
 	 * @Version: 2021.4.16

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

@@ -2,6 +2,7 @@ package com.qunzhixinxi.hnqz.admin.entity.model;
 
 import com.qunzhixinxi.hnqz.admin.enums.GigChannelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -27,6 +28,11 @@ public class GigBaseInfoModel implements Serializable {
 	 */
 	private GigChannelEnum gigChannel;
 
+	/**
+	 * 税源地
+	 */
+	private SubjectLocation gigLocation;
+
 	/**
 	 * 绑卡操作类型(captcha-获取验证码)
 	 */

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

@@ -98,6 +98,12 @@ public class GigUserInfoModel implements Serializable {
 	 */
 	private String certVideo2;
 
+	private String idCardFrontBase64;
+
+	private String idCardBackBase64;
+
+	private String bestFrameBase64;
+
 	/**
 	 * 协议签名
 	 */

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/vo/SysUserSubVO.java

@@ -3,6 +3,7 @@ package com.qunzhixinxi.hnqz.admin.entity.vo;
 import com.qunzhixinxi.hnqz.admin.enums.GigCallBackStatus;
 import com.qunzhixinxi.hnqz.admin.enums.GigChannelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -41,6 +42,11 @@ public class SysUserSubVO {
 	 */
 	private GigChannelEnum gigChannel;
 
+	/**
+	 * 税源地
+	 */
+	private SubjectLocation subjectLocation;
+
 	/**
 	 * 回调状态
 	 */

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

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

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

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

+ 25 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/MemberCertState.java

@@ -0,0 +1,25 @@
+package com.qunzhixinxi.hnqz.admin.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+// 会员认证信息
+@Getter
+@AllArgsConstructor
+public enum MemberCertState {
+
+
+	UN_CERT("UN_CERT", "未认证"),
+	SIGNED("SIGNED", "已签约"),
+	BOUND("BOUND", "已绑卡"),
+	AGREEMENT("AGREEMENT", "已签协议"),
+	CHECKED("CHECKED", "已合身"),
+	CERT("CERT", "已认证");
+
+	@EnumValue
+	private final String state;
+
+	private final String message;
+
+}

+ 56 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectLocation.java

@@ -0,0 +1,56 @@
+package com.qunzhixinxi.hnqz.admin.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 税源地
+ */
+@Getter
+@AllArgsConstructor
+public enum SubjectLocation {
+
+	// 仁励家通道
+	REN_LI_JIA("REN_LI_JIA", GigTypeEnum.REN_LI_JIA, "仁励家", 0),
+
+	// 税邦云通道
+	ZHONG_YING("ZHONG_YING", GigTypeEnum.TAX_HELPOR, "湖南众盈", 1),
+	LUO_SHU_YUN("LUO_SHU_YUN", GigTypeEnum.TAX_HELPOR, "永州罗数云", 2),
+
+	// 钉零工通道
+	FEI_YI("FEI_YI", GigTypeEnum.OLADING, "海南飞亿", 3),
+	JIN_YUAN("JIN_YUAN", GigTypeEnum.OLADING, "金园数科", 4),
+	XIN_TAI_ZI("XIN_TAI_ZI", GigTypeEnum.OLADING, "河南薪泰梓", 5),
+
+	// 易联
+	YI_LIAN("YI_LIAN", GigTypeEnum.YEE, "易联数科", 6);
+
+	@EnumValue
+	private final String type;
+
+	private final GigTypeEnum gigType;
+
+	private final String description;
+
+	private final Integer sort;
+
+	/**
+	 * 根据gigType获取枚举
+	 *
+	 * @param gigType
+	 * @return
+	 */
+	public static List<SubjectLocation> getByGigType(GigTypeEnum gigType) {
+		List<SubjectLocation> list = new ArrayList<>();
+		for (SubjectLocation subjectLocation : SubjectLocation.values()) {
+			if (subjectLocation.gigType.equals(gigType)) {
+				list.add(subjectLocation);
+			}
+		}
+		return list;
+	}
+}

+ 12 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysUserExtRecordMapper.java

@@ -0,0 +1,12 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.entity.SysUserExtRecord;
+
+/**
+* 用户认证相关的扩展信息Mapper
+*/
+public interface SysUserExtRecordMapper extends BaseMapper<SysUserExtRecord> {
+
+
+}

+ 76 - 61
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java

@@ -20,6 +20,7 @@ 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.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserSubService;
@@ -118,10 +119,10 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 						switch (gigTypeEnum) {
 							case TAX_HELPOR:
 								this.taxHelperHandler(user, dept, subjectResult);
-								// 本次结果存入redis
-								log.info("缓存认证结果到redis:{}", JSONUtil.toJsonStr(subjectTypes));
-								redisTemplate.opsForValue().set(CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId(),
-										JSONUtil.toJsonStr(subjectTypes), 1, TimeUnit.MINUTES);
+//								// 本次结果存入redis
+//								log.info("缓存认证结果到redis:{}", JSONUtil.toJsonStr(subjectTypes));
+//								redisTemplate.opsForValue().set(CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId(),
+//										JSONUtil.toJsonStr(subjectTypes), 1, TimeUnit.MINUTES);
 								break;
 							case REN_LI_JIA:
 								// TODO
@@ -164,12 +165,13 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.<SysUserSub>lambdaUpdate()
 				.eq(SysUserSub::getUserId, user.getUserId())
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
+				.eq(SysUserSub::getSubjectLocation, SubjectLocation.LUO_SHU_YUN)
+				.eq(SysUserSub::getGigType, GigTypeEnum.TAX_HELPOR)
 				.set(SysUserSub::getCallbackStatus, GigCallBackStatus.RETURNED)
 				.set(SysUserSub::getUpdateTime, now)
 				.set(SysUserSub::getUpdateUser, 0)
-				.set(SysUserSub::getCertRemark, JSONUtil.toJsonStr(subjectResult));
-		updateWrapper.eq(SysUserSub::getGigType, GigTypeEnum.TAX_HELPOR);
-		updateWrapper.set(SysUserSub::getCertStatus, taxHelperCertStatus.getCode());
+				.set(SysUserSub::getCertRemark, JSONUtil.toJsonStr(subjectResult))
+				.set(SysUserSub::getCertStatus, taxHelperCertStatus.getCode());
 
 		// 如果认证失败了, 置空身份证和合身视频
 		if (TaxHelperCertStatus.UNCHECKED_BIND.equals(taxHelperCertStatus)){
@@ -180,27 +182,36 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		}
 
 
-		if (TAXHELPER_SUCCESS_CODE.equals(code)) {
-			// 成功并且是换绑卡的情况,则更新银行卡号
-			String cacheKeyPrefix = String.format("%s_%s_%s", CacheConstants.BIND_CARD_CONFIRM_NEW_BANK_CARD,
-					user.getUserId(), GigTypeEnum.TAX_HELPOR.name());
-			UserSignCertDTO userSignCertDTO = (UserSignCertDTO) redisTemplate.opsForValue().get(cacheKeyPrefix);
-			if (userSignCertDTO != null) {
-				if (StrUtil.isNotBlank(userSignCertDTO.getBankCardNumber())) {
-					updateWrapper.set(SysUserSub::getBankCardNumber, userSignCertDTO.getBankCardNumber());
-					updateWrapper.set(SysUserSub::getBankPhone, userSignCertDTO.getBankPhone());
-					// 更新user表银行卡
-					SysUser sysUser = new SysUser();
-					sysUser.setUserId(user.getUserId());
-					sysUser.setBankCardNumber(userSignCertDTO.getBankCardNumber());
-					sysUser.setBankPhone(userSignCertDTO.getBankPhone());
-					sysUserService.updateById(sysUser);
-				}
-				// redis删除银行卡号
-				redisTemplate.delete(cacheKeyPrefix);
-			}
-		}
+//		if (TAXHELPER_SUCCESS_CODE.equals(code)) {
+//			// 成功并且是换绑卡的情况,则更新银行卡号
+//			String cacheKeyPrefix = String.format("%s_%s_%s", CacheConstants.BIND_CARD_CONFIRM_NEW_BANK_CARD,
+//					user.getUserId(), GigTypeEnum.TAX_HELPOR.name());
+//			UserSignCertDTO userSignCertDTO = (UserSignCertDTO) redisTemplate.opsForValue().get(cacheKeyPrefix);
+//			if (userSignCertDTO != null) {
+//				if (StrUtil.isNotBlank(userSignCertDTO.getBankCardNumber())) {
+//					updateWrapper.set(SysUserSub::getBankCardNumber, userSignCertDTO.getBankCardNumber());
+//					updateWrapper.set(SysUserSub::getBankPhone, userSignCertDTO.getBankPhone());
+//					// 更新user表银行卡
+//					SysUser sysUser = new SysUser();
+//					sysUser.setUserId(user.getUserId());
+//					sysUser.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+//					sysUser.setBankPhone(userSignCertDTO.getBankPhone());
+//					sysUserService.updateById(sysUser);
+//				}
+//				// redis删除银行卡号
+//				redisTemplate.delete(cacheKeyPrefix);
+//			}
+//		}
 		sysUserSubService.update(updateWrapper);
+
+		// 结果放到redis
+		Map<String, Map<String, String>> resultMap = new HashMap<>(1);
+		Map<String, String> subMap = new HashMap<>(1);
+		subMap.put("certStatus", certStatus);
+		resultMap.put("LUO_SHU_YUN", subMap);
+		String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + user.getUserId();
+		log.info("缓存认证结果到redis:{}", JSONUtil.toJsonStr(resultMap));
+		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(resultMap), 1, TimeUnit.MINUTES);
 	}
 
 	/**
@@ -219,12 +230,14 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
 				.eq(SysUserSub::getUserId, user.getUserId())
+				.eq(SysUserSub::getSubjectLocation, SubjectLocation.YI_LIAN)
 				.eq(SysUserSub::getGigType, GigTypeEnum.YEE));
 		// 拼接更新条件
 		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.<SysUserSub>lambdaUpdate()
 				.eq(SysUserSub::getUserId, user.getUserId())
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
 				.eq(SysUserSub::getGigType, GigTypeEnum.YEE)
+				.eq(SysUserSub::getSubjectLocation, SubjectLocation.YI_LIAN)
 				.set(SysUserSub::getUpdateTime, now)
 				.set(SysUserSub::getUpdateUser, 0)
 				.set(SysUserSub::getCertRemark, JSONUtil.toJsonStr(subjectResult));
@@ -249,7 +262,7 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 			// 结果放到redis
 			String key = CacheConstants.USER_SIGN_CERT_RESPONSE_KEY + userSub.getUserId();
 			Map<String, Object> result = MapUtil.newHashMap(1);
-			result.put("YEE", subMap);
+			result.put("YI_LIAN", subMap);
 			redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(result), 1, TimeUnit.MINUTES);
 		}
 		// 已认证,则设置回调状态
@@ -281,21 +294,21 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		// 根据选择的渠道,分别更新并查询认证状态
 		Map<String, Map<String, String>> certResultMap = new LinkedHashMap<>(3);
 		gigTypeArray.forEach(o -> certResultMap.put(String.valueOf(o),
-				this.oladingChannelHandler(user, dept, subjectResult, Enum.valueOf(GigTypeEnum.class, String.valueOf(o)))));
+				this.oladingChannelHandler(user, dept, subjectResult, Enum.valueOf(SubjectLocation.class, String.valueOf(o)))));
 
 		// 结果放到redis
 		Map<String, Map<String, String>> resultMap = new HashMap<>(3);
 		if (gigTypeArray.size() > 1) {
 			// 同时发起的情况,且是前一个渠道(按照redis存的渠道顺序发送)的状态已返回,则刷新状态到redis
-			List<GigTypeEnum> gigTypeEnumList = gigTypeArray.stream()
-					.map(o -> Enum.valueOf(GigTypeEnum.class, String.valueOf(o)))
+			List<SubjectLocation> subjectLocationList = gigTypeArray.stream()
+					.map(o -> Enum.valueOf(SubjectLocation.class, String.valueOf(o)))
 					.collect(Collectors.toList());
 			List<SysUserSub> subList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
 					.eq(SysUserSub::getUserId, user.getUserId())
 					.eq(SysUserSub::getDeptId, dept.getDeptId())
-					.in(SysUserSub::getGigType, gigTypeEnumList));
+					.in(SysUserSub::getSubjectLocation, subjectLocationList));
 			Map<String, Map<String, String>> dbResultMap = subList.stream()
-					.collect(Collectors.toMap(sysUserSub -> sysUserSub.getGigType().name(),
+					.collect(Collectors.toMap(sysUserSub -> sysUserSub.getSubjectLocation().name(),
 							sysUserSub -> MapUtil.builder("certStatus",
 									OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name()).build()));
 			resultMap.putAll(dbResultMap);
@@ -308,30 +321,30 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		redisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(resultMap), 1, TimeUnit.MINUTES);
 
 		// 处理同时发起时阿拉丁多个渠道的情况(补发)
-		if (gigTypeArray.size() > 1) {
-			String firstChannel = String.valueOf(gigTypeArray.get(0));
-			// 查询阿拉丁第一个渠道的认证状态
-			Map<String, String> certStatusMap = resultMap.get(firstChannel);
-			// 查询阿拉钉第一个未签约的渠道
-			String toSendChannel = "";
-			for (Map.Entry<String, Map<String, String>> entry : resultMap.entrySet()) {
-				if (OladingCertStatus.UN_SIGNED.name().equals(entry.getValue().get("certStatus"))) {
-					toSendChannel = entry.getKey();
-					break;
-				}
-			}
-			// 校验需要补发的渠道,是否为第一个
-			if (StrUtil.isNotBlank(toSendChannel) && !StrUtil.equals(firstChannel, toSendChannel)) {
-				// 如果阿拉丁第一个渠道是已认证的,则补发下一个阿拉丁的渠道(由于阿拉钉同一人不同渠道的回调只有一次,所以这里出现多个渠道需要依次补发)
-				if (CollUtil.isNotEmpty(certStatusMap) && OladingCertStatus.CERT.name().equals(certStatusMap.get("certStatus"))) {
-					log.info("=============================补发阿拉钉另一渠道MQ:{}==================================", toSendChannel);
-					UserSignCertDTO reCertDTO = new UserSignCertDTO();
-					reCertDTO.setUserId(user.getUserId());
-					reCertDTO.setGigTypeList(Collections.singletonList(Enum.valueOf(GigTypeEnum.class, toSendChannel)));
-					sysUserSignCertService.batchChannelCert(reCertDTO);
-				}
-			}
-		}
+//		if (gigTypeArray.size() > 1) {
+//			String firstChannel = String.valueOf(gigTypeArray.get(0));
+//			// 查询阿拉丁第一个渠道的认证状态
+//			Map<String, String> certStatusMap = resultMap.get(firstChannel);
+//			// 查询阿拉钉第一个未签约的渠道
+//			String toSendChannel = "";
+//			for (Map.Entry<String, Map<String, String>> entry : resultMap.entrySet()) {
+//				if (OladingCertStatus.UN_SIGNED.name().equals(entry.getValue().get("certStatus"))) {
+//					toSendChannel = entry.getKey();
+//					break;
+//				}
+//			}
+//			// 校验需要补发的渠道,是否为第一个
+//			if (StrUtil.isNotBlank(toSendChannel) && !StrUtil.equals(firstChannel, toSendChannel)) {
+//				// 如果阿拉丁第一个渠道是已认证的,则补发下一个阿拉丁的渠道(由于阿拉钉同一人不同渠道的回调只有一次,所以这里出现多个渠道需要依次补发)
+//				if (CollUtil.isNotEmpty(certStatusMap) && OladingCertStatus.CERT.name().equals(certStatusMap.get("certStatus"))) {
+//					log.info("=============================补发阿拉钉另一渠道MQ:{}==================================", toSendChannel);
+//					UserSignCertDTO reCertDTO = new UserSignCertDTO();
+//					reCertDTO.setUserId(user.getUserId());
+//					reCertDTO.setGigTypeList(Collections.singletonList(Enum.valueOf(GigTypeEnum.class, toSendChannel)));
+//					sysUserSignCertService.batchChannelCert(reCertDTO);
+//				}
+//			}
+//		}
 	}
 
 	/**
@@ -340,10 +353,10 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 	 * @param user
 	 * @param dept
 	 * @param subjectResult
-	 * @param gigType
+	 * @param subjectLocation
 	 * @return
 	 */
-	private Map<String, String> oladingChannelHandler(SysUser user, SysDept dept, JSONObject subjectResult, GigTypeEnum gigType) {
+	private Map<String, String> oladingChannelHandler(SysUser user, SysDept dept, JSONObject subjectResult, SubjectLocation subjectLocation) {
 		String certStatus = subjectResult.getStr("certStatus");
 		String uploadTaxPayerAgreementStatus = subjectResult.getStr("uploadTaxPayerAgreementStatus");
 		LocalDateTime now = LocalDateTime.now();
@@ -355,7 +368,8 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
 				.eq(SysUserSub::getUserId, user.getUserId())
 				.eq(SysUserSub::getCallbackStatus, GigCallBackStatus.IN_PROGRESS)
-				.eq(SysUserSub::getGigType, gigType));
+				.eq(SysUserSub::getGigType, subjectLocation.getGigType())
+				.eq(SysUserSub::getSubjectLocation, subjectLocation));
 		if (userSub == null) {
 			return certStatusMap;
 		}
@@ -364,7 +378,8 @@ public class GigSignCertReceiver extends BaseRabbiMqHandler<String> {
 		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.<SysUserSub>lambdaUpdate()
 				.eq(SysUserSub::getUserId, user.getUserId())
 				.eq(SysUserSub::getDeptId, dept.getDeptId())
-				.eq(SysUserSub::getGigType, gigType)
+				.eq(SysUserSub::getGigType, subjectLocation.getGigType())
+				.eq(SysUserSub::getSubjectLocation, subjectLocation)
 				.set(SysUserSub::getUpdateTime, now)
 				.set(SysUserSub::getUpdateUser, 0)
 				.set(SysUserSub::getCertRemark, JSONUtil.toJsonStr(subjectResult));

+ 28 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysUserExtRecordService.java

@@ -0,0 +1,28 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.entity.SysUserExtRecord;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+
+/**
+* 用户认证相关的扩展信息服务
+*/
+public interface SysUserExtRecordService extends IService<SysUserExtRecord> {
+
+	/**
+	 * 保存E证通认证结果
+	 *
+	 * @param userExtRecord
+	 */
+	void saveUserExtRecord(SysUserExtRecord userExtRecord);
+
+	/**
+	 * 查询E证通是否认证过
+	 *
+	 * @return
+	 */
+	boolean existUserExtRecord();
+}

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

@@ -4,8 +4,11 @@ import com.qunzhixinxi.hnqz.admin.entity.SysUserSub;
 import com.qunzhixinxi.hnqz.admin.entity.dto.UserSignCertDTO;
 import com.qunzhixinxi.hnqz.admin.entity.vo.SysUserSubVO;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
+import com.qunzhixinxi.hnqz.common.core.util.R;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 用户签约认证服务
@@ -40,6 +43,16 @@ public interface SysUserSignCertService {
 	 */
 	List<SysUserSubVO> listUserSignCertForApi(Integer userId);
 
+	/**
+	 * 查询用户认证状态
+	 *
+	 * @param idCard
+	 * @param enterprisCode
+	 * @param subjectChannel
+	 * @return
+	 */
+	Map<String, Object> listCertInfo(String idCard, String enterprisCode, List<SubjectLocation> subjectChannel);
+
 	/**
 	 * 保存用户基础信息
 	 *
@@ -74,13 +87,23 @@ public interface SysUserSignCertService {
 	 * 税邦云发送绑卡验证码
 	 *
 	 * @param userSignCertDTO
+	 * @return
 	 */
-    void bindCardVerification(UserSignCertDTO userSignCertDTO);
+    R<?> bindCardVerification(UserSignCertDTO userSignCertDTO);
 
 	/**
 	 * 绑卡确认
 	 *
 	 * @param userSignCertDTO
+	 * @return
+	 */
+	R<Object> bindCardConfirm(UserSignCertDTO userSignCertDTO);
+
+	/**
+	 * 签约/增员
+	 *
+	 * @param userSignCertDTO
+	 * @return
 	 */
-	void bindCardConfirm(UserSignCertDTO userSignCertDTO);
+	R<?> toSign(UserSignCertDTO userSignCertDTO);
 }

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

@@ -4,6 +4,8 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -15,12 +17,14 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.config.TaxNotifyConfig;
 import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
 import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
+import com.qunzhixinxi.hnqz.admin.entity.SysUserExtRecord;
 import com.qunzhixinxi.hnqz.admin.entity.SysUserSub;
 import com.qunzhixinxi.hnqz.admin.entity.dto.UserSignCertDTO;
 import com.qunzhixinxi.hnqz.admin.entity.model.GigBaseInfoModel;
 import com.qunzhixinxi.hnqz.admin.entity.model.GigInfoModel;
 import com.qunzhixinxi.hnqz.admin.entity.model.GigUserInfoModel;
 import com.qunzhixinxi.hnqz.admin.entity.vo.SysUserSubVO;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.GigCallBackStatus;
 import com.qunzhixinxi.hnqz.admin.enums.GigChannelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
@@ -30,14 +34,18 @@ import com.qunzhixinxi.hnqz.admin.enums.MemberType;
 import com.qunzhixinxi.hnqz.admin.enums.OladingCertStatus;
 import com.qunzhixinxi.hnqz.admin.enums.PayChannel;
 import com.qunzhixinxi.hnqz.admin.enums.RenlijiaCertStatus;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.YeeCertStatus;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptSubService;
+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.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.core.entity.BaseMap;
+import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.rabbitmq.client.RabbitMqClient;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
@@ -79,6 +87,8 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 
 	private final SysDeptService sysDeptService;
 
+	private final SysUserExtRecordService sysUserExtRecordService;
+
 	private final RabbitMqClient rabbitMqClient;
 
 	private final UpmsConfig upmsConfig;
@@ -87,6 +97,21 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 
 	private final RedisTemplate redisTemplate;
 
+	/**
+	 * 查询会员认证结果接口url
+	 */
+	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";
+
 	/**
 	 * 查询用户签约认证信息
 	 *
@@ -107,6 +132,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 * @param gigTypeList
 	 * @return
 	 */
+	@Deprecated
 	@Override
 	public List<SysUserSub> listUserSignCert(Integer userId, List<GigTypeEnum> gigTypeList) {
 		List<SysUserSub> userSubList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
@@ -121,6 +147,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 * @param userId
 	 * @return
 	 */
+	@Deprecated
 	@Override
 	public List<SysUserSubVO> listUserSignCertForApi(Integer userId) {
 		List<SysUserSub> userSubList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
@@ -142,14 +169,6 @@ 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;
-					case XIN_TAI_ZI:
-						// 渠道是河南薪泰梓,则展示阿拉钉的状态
-						userSubVO.setCertStatus(OladingCertStatus.resolve(String.valueOf(sysUserSub.getCertStatus())).name());
-						break;
 					default:
 				}
 
@@ -160,6 +179,32 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		return new ArrayList<>();
 	}
 
+	/**
+	 * 查询用户认证状态
+	 *
+	 * @param idCard 身份证号
+	 * @param enterprisCode 税号
+	 * @param subjectChannel 渠道类型
+	 * @return
+	 */
+	@Override
+	public Map<String, Object> listCertInfo(String idCard, String enterprisCode, List<SubjectLocation> subjectChannel) {
+		Map<String, Object> params = new HashMap<>(3);
+		params.put("idCard", idCard);
+		params.put("enterprisCode", enterprisCode);
+		params.put("subjectChannel", subjectChannel);
+		String postResult = HttpUtil.post(upmsConfig.getGigServiceUrl() + GIG_CERT_STATE, JSONUtil.toJsonStr(params));
+		log.info("查询用户认证状态返回:{}", postResult);
+		if (JSONUtil.isJsonObj(postResult)) {
+			JSONObject jsonResult = JSONUtil.parseObj(postResult);
+			if (CommonConstants.SUCCESS.equals(jsonResult.getInt("code"))) {
+				return jsonResult.getJSONObject("data");
+			}
+		}
+
+		return null;
+	}
+
 	/**
 	 * 保存用户基础信息
 	 *
@@ -181,52 +226,154 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 			updateUser.setIdCardNumber(userSignCertDTO.getIdCardNumber());
 			updateUser.setBankPhone(userSignCertDTO.getBankPhone());
 			updateUser.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+			updateUser.setUpdateTime(LocalDateTime.now());
 			sysUserService.updateById(updateUser);
 		}
 		// 更新用户签约认证主体信息
-		userSignCertDTO.getGigTypeList().forEach(gigType -> {
-			// 税邦云单独设置渠道类型
-			GigChannelEnum gigChannel;
-			if (GigTypeEnum.TAX_HELPOR.equals(gigType)) {
-				// 读取用户所认证的企业的结算渠道
-				SysDeptSub deptSub = sysDeptSubService.getOne(Wrappers.<SysDeptSub>lambdaQuery()
-						.eq(SysDeptSub::getDeptId, queryUser.getDeptId())
-						.eq(SysDeptSub::getSubjectType, GigTypeEnum.TAX_HELPOR.getCode())
-						.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::getGigType, gigType));
-			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(gigType);
-				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);
+		}
+	}
+
+	/**
+	 * 签约/增员
+	 *
+	 * @param userSignCertDTO
+	 * @return
+	 */
+	@Override
+	public R<?> toSign(UserSignCertDTO userSignCertDTO) {
+		Integer userId = userSignCertDTO.getUserId();
+
+		// 根据用户id查询用户信息
+		SysUser sysUser = sysUserService.getById(userId);
+		if (sysUser == null) {
+			return R.failed("用户不存在");
+		}
+		// 查询dept
+		SysDept dept = sysDeptService.getById(sysUser.getDeptId());
+		// 查询userSub
+		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+				.eq(SysUserSub::getDeptId, sysUser.getDeptId())
+				.eq(SysUserSub::getUserId, userId)
+				.eq(SysUserSub::getSubjectLocation, userSignCertDTO.getSubjectLocation()));
+		if (userSub == null) {
+			return R.failed("用户sub数据不存在");
+		}
+		// 判断是否已签约/增员
+		if (userSignCertDTO.getSubjectLocation().getGigType().equals(GigTypeEnum.TAX_HELPOR)) {
+			if (userSub.getCertStatus() > TaxHelperCertStatus.UN_CERT.getCode()) {
+				return R.ok();
 			}
-		});
+		} else if (userSignCertDTO.getSubjectLocation().getGigType().equals(GigTypeEnum.OLADING)) {
+			if (OladingCertStatus.SIGNED.getCode().equals(String.valueOf(userSub.getCertStatus()))
+					|| OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
+				return R.ok(MapUtil.builder("certStatus", OladingCertStatus.resolve(String.valueOf(userSub.getCertStatus()))).build());
+			}
+		}
+
+		// 发起签约/增员
+		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;
+		boolean successFlag = false;
+		String requestId = null;
+		if (JSONUtil.isJsonObj(postResult)) {
+			JSONObject jsonResult = JSONUtil.parseObj(postResult);
+			if (jsonResult.getInt("code") == 0) {
+				JSONObject data = jsonResult.getJSONObject("data");
+				if (userSignCertDTO.getSubjectLocation().getGigType().equals(GigTypeEnum.TAX_HELPOR)) {
+					if ("2000".equals(data.getStr("code"))) {
+						successFlag = true;
+						certStatus = TaxHelperCertStatus.ADD_MEMBER.getCode();
+					}
+					message = data.getStr("message");
+				} else if (userSignCertDTO.getSubjectLocation().getGigType().equals(GigTypeEnum.OLADING)) {
+					if ("0".equals(data.getStr("code"))) {
+						successFlag = true;
+						certStatus = Integer.parseInt(OladingCertStatus.SIGNING.getCode());
+						requestId = data.getStr("requestId");
+					}
+					message = data.getStr("message");
+				}
+			}
+		}
+
+		// 修改userSub状态
+		SysUserSub updateUserSub = new SysUserSub();
+		updateUserSub.setId(userSub.getId());
+		updateUserSub.setCertStatus(certStatus);
+		updateUserSub.setCertRemark("签约/增员:" + message);
+		updateUserSub.setRequestId(requestId);
+		updateUserSub.setUpdateUser(SecurityUtils.getUser().getId());
+		updateUserSub.setUpdateTime(LocalDateTime.now());
+		sysUserSubService.updateById(updateUserSub);
+
+		if (successFlag) {
+			if (userSignCertDTO.getSubjectLocation().getGigType().equals(GigTypeEnum.OLADING)) {
+				return R.ok(MapUtil.builder("certStatus", OladingCertStatus.resolve(String.valueOf(certStatus))).build());
+			}
+			return R.ok();
+		}
+		return R.failed(message);
 	}
 
 	/**
@@ -237,11 +384,13 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void signAgreement(UserSignCertDTO userSignCertDTO) {
+		SysUser sysUser = sysUserService.getById(userSignCertDTO.getUserId());
 
 		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.lambdaUpdate();
 		updateWrapper.eq(SysUserSub::getUserId, userSignCertDTO.getUserId());
-		if (CollUtil.isNotEmpty(userSignCertDTO.getGigTypeList())) {
-			updateWrapper.in(SysUserSub::getGigType, userSignCertDTO.getGigTypeList());
+		updateWrapper.eq(SysUserSub::getDeptId, sysUser.getDeptId());
+		if (userSignCertDTO.getSubjectLocation() != null) {
+			updateWrapper.in(SysUserSub::getSubjectLocation, userSignCertDTO.getSubjectLocation());
 		}
 		updateWrapper.set(SysUserSub::getAgreementUrl, userSignCertDTO.getAgreementUrl());
 		updateWrapper.set(SysUserSub::getUpdateUser, SecurityUtils.getUser().getId());
@@ -261,8 +410,8 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 
 		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.lambdaUpdate();
 		updateWrapper.eq(SysUserSub::getUserId, userSignCertDTO.getUserId());
-		if (CollUtil.isNotEmpty(userSignCertDTO.getGigTypeList())) {
-			updateWrapper.in(SysUserSub::getGigType, userSignCertDTO.getGigTypeList());
+		if (userSignCertDTO.getSubjectLocation() != null) {
+			updateWrapper.in(SysUserSub::getSubjectLocation, userSignCertDTO.getSubjectLocation());
 		}
 		if (StrUtil.isNotBlank(userSignCertDTO.getAgreementUrl())) {
 			updateWrapper.set(SysUserSub::getAgreementUrl, userSignCertDTO.getAgreementUrl());
@@ -292,28 +441,33 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		if (sysUser == null) {
 			return false;
 		}
+		// 查询认证数据
+		SysUserExtRecord userExtRecord = sysUserExtRecordService.getOne(Wrappers.<SysUserExtRecord>lambdaQuery()
+				.eq(SysUserExtRecord::getUserId, userId)
+				.eq(SysUserExtRecord::getDelFlag, DelEnum.NOT_DEL.val()));
+		if (userExtRecord == null) {
+			return false;
+		}
 		// 查询dept
 		SysDept dept = sysDeptService.getById(sysUser.getDeptId());
 		// 查询当前用户关联的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());
-		}
+		userSubWrapper.eq(SysUserSub::getSubjectLocation, userSignCertDTO.getSubjectLocation());
 		List<SysUserSub> userSubList = sysUserSubService.list(userSubWrapper);
 
 		if (CollUtil.isNotEmpty(userSubList)) {
 			// 过滤出阿拉钉的渠道
-			Collection<GigTypeEnum> oladingTypeList =
-					CollUtil.intersection(userSignCertDTO.getGigTypeList(),
-							CollUtil.toList(GigTypeEnum.OLADING, GigTypeEnum.JIN_YUAN, GigTypeEnum.XIN_TAI_ZI)).stream()
-							.sorted(Comparator.comparing(GigTypeEnum::getCode))
+			Collection<SubjectLocation> oladingList =
+					CollUtil.intersection(CollUtil.toList(userSignCertDTO.getSubjectLocation()),
+							SubjectLocation.getByGigType(GigTypeEnum.OLADING)).stream()
+							.sorted(Comparator.comparing(SubjectLocation::getSort))
 							.collect(Collectors.toList());
 
 			// 封装请求数据
 			userSubList.stream()
-					.sorted(Comparator.comparing(sysUserSub -> sysUserSub.getGigType().getCode()))
+					.sorted(Comparator.comparing(sysUserSub -> sysUserSub.getSubjectLocation().getSort()))
 					.filter(sysUserSub -> {
 				// 过滤掉认证成功的数据
 				if (GigTypeEnum.TAX_HELPOR.equals(sysUserSub.getGigType())
@@ -325,10 +479,6 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 					return true;
 				} else if (GigTypeEnum.OLADING.equals(sysUserSub.getGigType())) {
 					return true;
-				} else if (GigTypeEnum.JIN_YUAN.equals(sysUserSub.getGigType())) {
-					return true;
-				} else if (GigTypeEnum.XIN_TAI_ZI.equals(sysUserSub.getGigType())) {
-					return true;
 				} else if (GigTypeEnum.REN_LI_JIA.equals(sysUserSub.getGigType())
 						&& RenlijiaCertStatus.CER_STATUS_1.getCode() != sysUserSub.getCertStatus()) {
 					return true;
@@ -337,7 +487,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 			}).forEach(userSub -> {
 
 				// 发起前置判断
-				if (!this.preSignCert(sysUser, userSub, userSignCertDTO, oladingTypeList)) {
+				if (!this.preSignCert(sysUser, userSub, userSignCertDTO, oladingList)) {
 					// false直接返回,不发送mq
 					log.info("本次不发起认证,userSubId={}", userSub.getId());
 					return;
@@ -349,12 +499,14 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				// 是否需要传核身视频,阿拉丁、易联默认都要传
 				boolean uploadFaceID = userSignCertDTO.getUploadFaceID() != null && userSignCertDTO.getUploadFaceID();
 				// 封装请求参数
-				GigInfoModel infoModel = this.buildChannelCertModel(sysUser, userSub, dept.getTaxCode(), requestId, uploadFaceID);
+				GigInfoModel infoModel = this.buildChannelCertModel(sysUser, userSub, userExtRecord, dept.getTaxCode(), requestId, uploadFaceID);
 				// 更新为进行中状态
 				SysUserSub updateUserSub = new SysUserSub();
 				updateUserSub.setId(userSub.getId());
 				updateUserSub.setRequestId(requestId);
 				updateUserSub.setCallbackStatus(GigCallBackStatus.IN_PROGRESS);
+				updateUserSub.setUpdateTime(LocalDateTime.now());
+				updateUserSub.setUpdateUser(SecurityUtils.getUser().getId());
 				sysUserSubService.updateById(updateUserSub);
 				// 发送mq
 				BaseMap gigInfo = new BaseMap();
@@ -373,61 +525,15 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 * @param sysUser 用户信息
 	 * @param userSub userSub信息
 	 * @param userSignCertDTO 发起参数
-	 * @param oladingTypeList 阿拉钉渠道类型list
+	 * @param locationList 阿拉钉税源地list
 	 */
-	private boolean preSignCert(SysUser sysUser, SysUserSub userSub, UserSignCertDTO userSignCertDTO, Collection<GigTypeEnum> oladingTypeList) {
+	private boolean preSignCert(SysUser sysUser, SysUserSub userSub, UserSignCertDTO userSignCertDTO, Collection<SubjectLocation> locationList) {
 		// 校验是否有进行中的
 		if (GigCallBackStatus.IN_PROGRESS.equals(userSub.getCallbackStatus())) {
 			return false;
 		}
 
 		switch (userSub.getGigType()) {
-			case XIN_TAI_ZI:
-				// 钉灵工-河南薪泰梓
-				// 发起认证前,金园数科,转换对应关系为 阿拉钉-金园数科
-				userSub.setGigType(GigTypeEnum.OLADING);
-				userSub.setGigChannel(GigChannelEnum.XIN_TAI_ZI);
-
-				// 如果需要传核身视频,则返回true
-				if (userSignCertDTO.getUploadFaceID() != null && userSignCertDTO.getUploadFaceID()) {
-					return true;
-				}
-
-				// 已认证不发起
-				if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
-					return false;
-				}
-
-				// 如果同时包含阿拉钉多个渠道,则只选第一个发起
-				if (oladingTypeList.size() > 1 && !oladingTypeList.stream().findFirst().get().equals(GigTypeEnum.XIN_TAI_ZI)) {
-					// 同时选择了阿拉钉金园数科、海南飞亿、河南薪泰梓渠道的两个及以上,则先发起第一个,完成之后再依次发起其他的
-					return false;
-				}
-
-				return true;
-			case JIN_YUAN:
-				// 钉灵工-金园数科
-				// 发起认证前,金园数科,转换对应关系为 阿拉钉-金园数科
-				userSub.setGigType(GigTypeEnum.OLADING);
-				userSub.setGigChannel(GigChannelEnum.JIN_YUAN);
-
-				// 如果需要传核身视频,则返回true
-				if (userSignCertDTO.getUploadFaceID() != null && userSignCertDTO.getUploadFaceID()) {
-					return true;
-				}
-
-				// 已认证不发起
-				if (OladingCertStatus.CERT.getCode().equals(String.valueOf(userSub.getCertStatus()))) {
-					return false;
-				}
-
-				// 如果同时包含阿拉钉多个渠道,则只选第一个发起
-				if (oladingTypeList.size() > 1 && !oladingTypeList.stream().findFirst().get().equals(GigTypeEnum.JIN_YUAN)) {
-					// 同时选择了阿拉钉金园数科、海南飞亿、河南薪泰梓渠道的两个及以上,则先发起第一个,完成之后再依次发起其他的
-					return false;
-				}
-
-				return true;
 			case OLADING:
 				// 阿拉钉-海南飞亿
 				// 如果需要传核身视频,则返回true
@@ -440,8 +546,8 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 					return false;
 				}
 
-				// 如果同时包含阿拉钉多个渠道,则只选第一个发起
-				if (oladingTypeList.size() > 1 && !oladingTypeList.stream().findFirst().get().equals(GigTypeEnum.OLADING)) {
+				// 如果同时包含阿拉钉多个渠道,则只选第一个发起,其余不发起
+				if (locationList.size() > 1 && !locationList.stream().findFirst().get().equals(userSub.getSubjectLocation())) {
 					// 同时选择了阿拉钉金园数科、海南飞亿、河南薪泰梓渠道的两个及以上,则先发起第一个,完成之后再依次发起其他的
 					return false;
 				}
@@ -538,17 +644,20 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 *
 	 * @param sysUser
 	 * @param userSub
+	 * @param userExtRecord
 	 * @param entCode
 	 * @param requestId
 	 * @param uploadFaceID
 	 * @return
 	 */
-	private GigInfoModel buildChannelCertModel(SysUser sysUser, SysUserSub userSub, String entCode, String requestId, boolean uploadFaceID) {
+	private GigInfoModel buildChannelCertModel(SysUser sysUser, SysUserSub userSub, SysUserExtRecord userExtRecord,
+											   String entCode, String requestId, boolean uploadFaceID) {
 		// 基础信息
 		GigBaseInfoModel baseInfoModel = new GigBaseInfoModel();
 		baseInfoModel.setRequestId(requestId);
 		baseInfoModel.setGigType(userSub.getGigType());
 		baseInfoModel.setGigChannel(userSub.getGigChannel());
+		baseInfoModel.setGigLocation(userSub.getSubjectLocation());
 		// 用户信息
 		GigUserInfoModel userInfoModel = new GigUserInfoModel();
 		userInfoModel.setUserId(sysUser.getUserId());
@@ -580,6 +689,9 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		userInfoModel.setSignImageUrl(StrUtil.isBlank(userSub.getAgreementUrl())
 				? null : userSub.getAgreementUrl().startsWith("https")
 				? userSub.getAgreementUrl() : upmsConfig.getClientUrl() + userSub.getAgreementUrl());
+		userInfoModel.setIdCardBackBase64(userExtRecord.getIdCardBackBase64());
+		userInfoModel.setIdCardFrontBase64(userExtRecord.getIdCardFrontBase64());
+		userInfoModel.setBestFrameBase64(userExtRecord.getBestFrameBase64());
 
 		GigInfoModel infoModel = new GigInfoModel();
 		infoModel.setBaseInfo(baseInfoModel);
@@ -592,42 +704,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));
 
 	}
 
@@ -635,55 +779,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));
+//		}
 	}
 
 	/**

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

@@ -1594,7 +1594,7 @@ public class PartyAServiceImpl implements PartyAService {
 			SysUserSub saveUserSub = new SysUserSub();
 			saveUserSub.setDeptId(updateUser.getDeptId());
 			saveUserSub.setUserId(updateUser.getUserId());
-			saveUserSub.setGigType(GigTypeEnum.REN_LI_JIA);
+			saveUserSub.setGigType(GigTypeEnum.TAX_HELPOR);
 			saveUserSub.setGigChannel(GigChannelEnum.DEFAULT);
 			saveUserSub.setCertRemark(response.getMessage());
 			saveUserSub.setCertStatus(certStatus);

+ 2 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysDeptSubServiceImpl.java

@@ -136,6 +136,7 @@ public class SysDeptSubServiceImpl extends ServiceImpl<SysDeptSubMapper, SysDept
 				SysDeptSub updateDeptSub = new SysDeptSub();
 				updateDeptSub.setSubId(queryDeptSub.getSubId());
 				updateDeptSub.setSubjectChannel(sysDeptSub.getSubjectChannel() == null ? 0 : sysDeptSub.getSubjectChannel());
+				updateDeptSub.setSubjectLocation(sysDeptSub.getSubjectLocation());
 				updateDeptSub.setSubjectInvoiceCategory(sysDeptSub.getSubjectInvoiceCategory());
 				updateDeptSub.setLimitAmount(sysDeptSub.getLimitAmount());
 				updateDeptSub.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
@@ -147,6 +148,7 @@ public class SysDeptSubServiceImpl extends ServiceImpl<SysDeptSubMapper, SysDept
 				insertDeptSub.setDeptId(input.getDeptId());
 				insertDeptSub.setSubjectType(sysDeptSub.getSubjectType());
 				insertDeptSub.setSubjectChannel(sysDeptSub.getSubjectChannel() == null ? 0 : sysDeptSub.getSubjectChannel());
+				insertDeptSub.setSubjectLocation(sysDeptSub.getSubjectLocation());
 				insertDeptSub.setSubjectInvoiceCategory(sysDeptSub.getSubjectInvoiceCategory());
 				insertDeptSub.setLimitAmount(sysDeptSub.getLimitAmount());
 				insertDeptSub.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());

+ 64 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserExtRecordServiceImpl.java

@@ -0,0 +1,64 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.entity.SysUserExtRecord;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.SysUserExtRecordMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysUserExtRecordService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+
+/**
+ * 用户认证相关的扩展信息服务
+ */
+@Service
+public class SysUserExtRecordServiceImpl extends ServiceImpl<SysUserExtRecordMapper, SysUserExtRecord>
+		implements SysUserExtRecordService {
+
+	/**
+	 * 保存E证通认证结果
+	 *
+	 * @param userExtRecord
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void saveUserExtRecord(SysUserExtRecord userExtRecord) {
+		HnqzUser hnqzUser = SecurityUtils.getUser();
+
+		// 作废已有数据
+		this.update(Wrappers.<SysUserExtRecord>lambdaUpdate()
+				.eq(SysUserExtRecord::getUserId, hnqzUser.getId())
+				.eq(SysUserExtRecord::getDelFlag, DelEnum.NOT_DEL.val())
+				.set(SysUserExtRecord::getDelFlag, DelEnum.DELETED.val()));
+		// 新增一条数据
+		SysUserExtRecord insertExtRecord = BeanUtil.copyProperties(userExtRecord, SysUserExtRecord.class);
+		insertExtRecord.setUserId(hnqzUser.getId());
+		insertExtRecord.setDeptId(hnqzUser.getDeptId());
+		insertExtRecord.setCreateTime(LocalDateTime.now());
+		insertExtRecord.setCreateUser(hnqzUser.getId());
+		this.save(insertExtRecord);
+	}
+
+	/**
+	 * 查询E证通是否认证过
+	 *
+	 * @return
+	 */
+	@Override
+	public boolean existUserExtRecord() {
+		Integer userId = SecurityUtils.getUser().getId();
+		int count = this.count(Wrappers.<SysUserExtRecord>lambdaQuery()
+				.eq(SysUserExtRecord::getUserId, userId)
+				.eq(SysUserExtRecord::getDelFlag, DelEnum.NOT_DEL.val()));
+
+		return count > 0;
+	}
+
+}

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

@@ -17,6 +17,7 @@ import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.output.SettleAmountMonitorOutput;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserSubMapper;
@@ -304,8 +305,6 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 
 			switch (gigTypeEnum) {
 				case REN_LI_JIA:
-				case JIN_YUAN:
-				case XIN_TAI_ZI:
 				case OLADING:
 					if (!Objects.equals(userSub.getCertStatus(), DingEnum.CER_STATUS_1.getType())) {
 						return R.failed(user.getRealname() + "未认证,不能发起结算");
@@ -461,8 +460,6 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 
 			switch (gigTypeEnum) {
 				case REN_LI_JIA:
-				case JIN_YUAN:
-				case XIN_TAI_ZI:
 				case OLADING:
 					if (!Objects.equals(userSub.getCertStatus(), DingEnum.CER_STATUS_1.getType())) {
 						return R.failed(user.getRealname() + "未认证,不能发起结算");
@@ -802,16 +799,14 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 				params.put("acceptanceStandard", "完成不同任务获得不同任务积分,根据不同任务给与0~30000积分,每个积分兑换0.8~1.2元,按次数结算");
 
 
-				GigTypeEnum gigTypeEnum = GigTypeEnum.resolve(Integer.parseInt(note.getSubType()));
-
-				if (GigTypeEnum.JIN_YUAN.equals(gigTypeEnum)) {
+				if (SubjectLocation.JIN_YUAN.equals(input.getSubjectLocation())) {
 					params.put("channel", "JIN_YUAN");
 					params.put("taxMode", "GENERAL");
 					params.put("transactionModel", "SUPERVISE");
 				}
 				// 海南飞亿 和 河南薪泰梓
 				else {
-					params.put("channel", GigTypeEnum.OLADING.equals(gigTypeEnum) ? "DEFAULT" : "XIN_TAI_ZI");
+					params.put("channel", SubjectLocation.FEI_YI.equals(input.getSubjectLocation()) ? "DEFAULT" : "XIN_TAI_ZI");
 					params.put("taxMode", "SPECIAL");
 					params.put("transactionModel", "CHANNEL");
 				}

+ 5 - 12
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageSettleNoteServiceImpl.java

@@ -37,6 +37,7 @@ import com.qunzhixinxi.hnqz.admin.entity.output.SettleAmountMonitorOutput;
 import com.qunzhixinxi.hnqz.admin.entity.output.WmTaskSettleNoteOutput;
 import com.qunzhixinxi.hnqz.admin.enums.ChannelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserSubMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmScorePackageMapper;
@@ -523,8 +524,6 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 
 		switch (gigTypeEnum) {
 			case REN_LI_JIA:
-			case JIN_YUAN:
-			case XIN_TAI_ZI:
 			case OLADING:
 				if (!Objects.equals(userSub.getCertStatus(), DingEnum.CER_STATUS_1.getType())) {
 					return R.failed(sysUser.getRealname() + "未认证,不能发起结算");
@@ -641,8 +640,6 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 
 			switch (gigTypeEnum) {
 				case REN_LI_JIA:
-				case XIN_TAI_ZI:
-				case JIN_YUAN:
 				case OLADING:
 					if (!Objects.equals(userSub.getCertStatus(), DingEnum.CER_STATUS_1.getType())) {
 						return R.failed(sysUser.getRealname() + "未认证,不能发起结算");
@@ -801,16 +798,14 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 				params.put("taskDescription", "根据要求,执行、并完成学术推广活动,并以在线平台工具采集、记录活动内容");
 				params.put("acceptanceStandard", "完成不同任务获得不同任务积分,根据不同任务给与0~30000积分,每个积分兑换0.8~1.2元,按次数结算");
 
-				GigTypeEnum gigTypeEnum = GigTypeEnum.resolve(Integer.parseInt(note.getSubType()));
-
-				if (GigTypeEnum.JIN_YUAN.equals(gigTypeEnum)) {
+				if (SubjectLocation.JIN_YUAN.equals(note.getSubjectLocation())) {
 					params.put("channel", "JIN_YUAN");
 					params.put("taxMode", "GENERAL");
 					params.put("transactionModel", "SUPERVISE");
 				}
 				// 海南飞亿 和 河南薪泰梓
 				else {
-					params.put("channel", GigTypeEnum.OLADING.equals(gigTypeEnum) ? "DEFAULT" : "XIN_TAI_ZI");
+					params.put("channel", SubjectLocation.FEI_YI.equals(note.getSubjectLocation()) ? "DEFAULT" : "XIN_TAI_ZI");
 					params.put("taxMode", "SPECIAL");
 					params.put("transactionModel", "CHANNEL");
 				}
@@ -1070,16 +1065,14 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 			params.put("acceptanceStandard", "完成不同任务获得不同任务积分,根据不同任务给与0~30000积分,每个积分兑换0.8~1.2元,按次数结算");
 
 
-			GigTypeEnum gigTypeEnum = GigTypeEnum.resolve(Integer.parseInt(note.getSubType()));
-
-			if (GigTypeEnum.JIN_YUAN.equals(gigTypeEnum)) {
+			if (SubjectLocation.JIN_YUAN.equals(note.getSubjectLocation())) {
 				params.put("channel", "JIN_YUAN");
 				params.put("taxMode", "GENERAL");
 				params.put("transactionModel", "SUPERVISE");
 			}
 			// 海南飞亿 和 河南薪泰梓
 			else {
-				params.put("channel", GigTypeEnum.OLADING.equals(gigTypeEnum) ? "DEFAULT" : "XIN_TAI_ZI");
+				params.put("channel", SubjectLocation.FEI_YI.equals(note.getSubjectLocation()) ? "DEFAULT" : "XIN_TAI_ZI");
 				params.put("taxMode", "SPECIAL");
 				params.put("transactionModel", "CHANNEL");
 			}

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

@@ -13,6 +13,7 @@ import com.qunzhixinxi.hnqz.admin.enums.GigCallBackStatus;
 import com.qunzhixinxi.hnqz.admin.enums.GigChannelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.RenlijiaCertStatus;
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
 import com.qunzhixinxi.hnqz.admin.mapper.WmSettleAccountReceiveMapper;
 import com.qunzhixinxi.hnqz.admin.service.*;
 import com.qunzhixinxi.hnqz.common.ding.entity.*;
@@ -200,7 +201,8 @@ public class WmSettlementServiceImpl implements WmSettlementService {
 	private void updateUserSub(EmployCheckNotifyDataItem item, SysUser updateUser) {
 		SysUserSub userSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
 				.eq(SysUserSub::getUserId, updateUser.getUserId())
-				.eq(SysUserSub::getGigType, GigTypeEnum.REN_LI_JIA));
+				.eq(SysUserSub::getGigType, GigTypeEnum.REN_LI_JIA)
+				.eq(SysUserSub::getSubjectLocation, SubjectLocation.REN_LI_JIA));
 		LocalDateTime now = LocalDateTime.now();
 
 		if (userSub != null) {
@@ -220,6 +222,7 @@ public class WmSettlementServiceImpl implements WmSettlementService {
 			saveUserSub.setUserId(updateUser.getUserId());
 			saveUserSub.setGigType(GigTypeEnum.REN_LI_JIA);
 			saveUserSub.setGigChannel(GigChannelEnum.DEFAULT);
+			saveUserSub.setSubjectLocation(SubjectLocation.REN_LI_JIA);
 			saveUserSub.setCertRemark(item.getRemark());
 			saveUserSub.setCertStatus(item.getStatus());
 			saveUserSub.setCallbackStatus(GigCallBackStatus.RETURNED);