Selaa lähdekoodia

feat: 批量签约认证

lixuesong 3 vuotta sitten
vanhempi
commit
c8ec2b5cf9
19 muutettua tiedostoa jossa 749 lisäystä ja 12 poistoa
  1. 8 6
      db/v2.0/220301.sql
  2. 5 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/MqConstants.java
  3. 108 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserSignCertController.java
  4. 27 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysUserSub.java
  5. 61 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/UserSignCertDTO.java
  6. 30 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigBaseInfoModel.java
  7. 10 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigBindingCardConfirmRequest.java
  8. 10 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigBindingCardVerificationRequest.java
  9. 23 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigInfoModel.java
  10. 19 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigSignCertRequest.java
  11. 10 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigSignResponse.java
  12. 59 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/model/GigUserInfoModel.java
  13. 28 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigChannelEnum.java
  14. 5 5
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/GigTypeEnum.java
  15. 64 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java
  16. 39 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/GigService.java
  17. 42 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/SysUserSignCertService.java
  18. 31 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/GigServiceImpl.java
  19. 170 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/impl/SysUserSignCertServiceImpl.java

+ 8 - 6
db/v2.0/220301.sql

@@ -1,18 +1,20 @@
 -- 用户签约认证主体信息表
 CREATE TABLE `sys_user_sub`
 (
-    `id`                INT    NOT NULL AUTO_INCREMENT COMMENT '主键ID',
-    `user_id`           INT    NOT NULL COMMENT '用户ID',
-    `gig_type`          INT(2) NOT NULL COMMENT '零工平台类型',
-    `cert_status`       INT    NOT NULL COMMENT '认证状态',
+    `id`                INT          NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+    `user_id`           INT          NOT NULL COMMENT '用户ID',
+    `gig_type`          INT(2)       NOT NULL COMMENT '零工平台类型(订单支付方式类型:0-人力家 1-税邦云 2-自由职家 3-易联数科)',
+    `cert_status`       INT          NOT NULL COMMENT '认证状态',
     `cert_remark`       VARCHAR(255) DEFAULT NULL COMMENT '认证结果描述',
     `user_type`         VARCHAR(2)   DEFAULT NULL COMMENT '人员类型',
     `bank_card_number`  VARCHAR(19)  DEFAULT NULL COMMENT '银行卡号',
+    bank_phone          VARCHAR(11)  DEFAULT NULL comment '银行预留手机号',
     `id_card_front_url` VARCHAR(255) DEFAULT NULL COMMENT '身份证照片-正面',
     `id_card_back_url`  VARCHAR(255) DEFAULT NULL COMMENT '身份证照片-反面',
-    `create_time`       datetime     DEFAULT NULL COMMENT '创建时间',
+    agreement_url       varchar(255) null comment '协议',
+    `create_time`       DATETIME     DEFAULT NULL COMMENT '创建时间',
     `create_user`       INT          DEFAULT NULL COMMENT '创建人',
-    `update_time`       datetime     DEFAULT NULL COMMENT '更新时间',
+    `update_time`       DATETIME     DEFAULT NULL COMMENT '更新时间',
     `update_user`       INT          DEFAULT NULL COMMENT '更新人',
     PRIMARY KEY (`id`)
 ) ENGINE = INNODB

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

@@ -18,4 +18,9 @@ public interface MqConstants {
 	String DIRECT_MODE_REPORT_EXPORT_NBA_QUEUE = "direct_mode_report_export_nba_queue";
 	String DIRECT_MODE_REPORT_EXPORT_NBA_HISTORY_QUEUE = "direct_mode_report_export_nba_history_queue";
 	String DIRECT_MODE_REPORT_EXPORT_NB_QUEUE = "direct_mode_report_export_nb_queue";
+
+	/**
+	 * gig服务队列
+	 */
+	String DIRECT_MODE_GIG_SIGN_CERT_QUEUE = "direct_mode_gig_sign_cert_queue";
 }

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

@@ -0,0 +1,108 @@
+package com.qunzhixinxi.hnqz.admin.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.qunzhixinxi.hnqz.admin.entity.dto.UserSignCertDTO;
+import com.qunzhixinxi.hnqz.admin.service.gig.SysUserSignCertService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 用户签约认证
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 14:34
+ */
+@Slf4j
+@RestController
+@AllArgsConstructor
+@RequestMapping("/user-sign-cert")
+public class SysUserSignCertController {
+
+	private final SysUserSignCertService sysUserSignCertService;
+
+	/**
+	 * 保存用户基础信息
+	 *
+	 * @param userSignCertDTO
+	 * @return
+	 */
+	@SysLog("保存用户基础信息")
+	@PostMapping("/save-base-info")
+	public R<?> saveBaseInfo(@RequestBody UserSignCertDTO userSignCertDTO) {
+		if (userSignCertDTO.getUserId() == null) {
+			return R.failed("userId不能为空");
+		}
+		if (CollUtil.isEmpty(userSignCertDTO.getGigTypeList())) {
+			return R.failed("认证渠道不能为空");
+		}
+		sysUserSignCertService.saveBaseInfo(userSignCertDTO);
+
+		return R.ok();
+	}
+
+	/**
+	 * 签协议
+	 *
+	 * @param userSignCertDTO
+	 * @return
+	 */
+	@SysLog("签协议")
+	@PostMapping("/sign-agreement")
+	public R<?> signAgreement(@RequestBody UserSignCertDTO userSignCertDTO) {
+		if (userSignCertDTO.getUserId() == null) {
+			return R.failed("userId不能为空");
+		}
+		if (StrUtil.isNotBlank(userSignCertDTO.getAgreementUrl())) {
+			return R.failed("协议不能为空");
+		}
+		sysUserSignCertService.signAgreement(userSignCertDTO);
+
+		return R.ok();
+	}
+
+	/**
+	 * 人身验证
+	 *
+	 * @param userSignCertDTO
+	 * @return
+	 */
+	@SysLog("人身验证")
+	@PostMapping("/personal-identity-verification")
+	public R<?> personalIdentityVerification(UserSignCertDTO userSignCertDTO) {
+		if (userSignCertDTO.getUserId() == null) {
+			return R.failed("userId不能为空");
+		}
+		if (!StrUtil.isAllNotBlank(userSignCertDTO.getIdCardFrontUrl(), userSignCertDTO.getIdCardBackUrl(),
+				userSignCertDTO.getCertVideo1Url(), userSignCertDTO.getCertVideo2Url())) {
+			return R.failed("身份证或视频信息不能为空");
+		}
+
+		sysUserSignCertService.personalIdentityVerification(userSignCertDTO);
+
+		return R.ok();
+	}
+
+	/**
+	 * 批量发起用户签约认证
+	 *
+	 * @param userSignCertDTO
+	 * @return R
+	 */
+	@SysLog("用户签约认证")
+	@PostMapping("/batch-channel-cert")
+	public R<?> batchChannelCert(@RequestBody UserSignCertDTO userSignCertDTO) {
+		if (userSignCertDTO.getUserId() == null) {
+			return R.failed("userId不能为空");
+		}
+		sysUserSignCertService.batchChannelCert(userSignCertDTO);
+
+		return R.ok();
+	}
+}

+ 27 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/SysUserSub.java

@@ -3,6 +3,7 @@ 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.GigChannelEnum;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.UserSubCertStatusEnum;
 import lombok.Data;
@@ -33,10 +34,15 @@ public class SysUserSub extends Model<SysUserSub> {
 	private Integer userId;
 
 	/**
-	 * 零工平台类型
+	 * 零工平台类型(订单支付方式类型)
 	 */
 	private GigTypeEnum gigType;
 
+	/**
+	 * 渠道
+	 */
+	private GigChannelEnum gigChannel;
+
 	/**
 	 * 认证状态
 	 */
@@ -52,6 +58,11 @@ public class SysUserSub extends Model<SysUserSub> {
 	 */
 	private String userType;
 
+	/**
+	 * 银行预留手机号
+	 */
+	private String bankPhone;
+
 	/**
 	 * 银行卡号
 	 */
@@ -67,6 +78,21 @@ public class SysUserSub extends Model<SysUserSub> {
 	 */
 	private String idCardBackUrl;
 
+	/**
+	 * 认证视频1
+	 */
+	private String certVideo1Url;
+
+	/**
+	 * 认证视频2
+	 */
+	private String certVideo2Url;
+
+	/**
+	 * 协议
+	 */
+	private String agreementUrl;
+
 	/**
 	 * 创建时间
 	 */

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

@@ -0,0 +1,61 @@
+package com.qunzhixinxi.hnqz.admin.entity.dto;
+
+import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 用户签约认证DTO
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 15:28
+ */
+@Data
+public class UserSignCertDTO {
+
+	/**
+	 * 用户id
+	 */
+	private Integer userId;
+
+	/**
+	 * 身份证号
+	 */
+	private String idCardNumber;
+
+	/**
+	 * 银行卡号
+	 */
+	private String bankCardNumber;
+
+	/**
+	 * 身份证照片-正面
+	 */
+	private String idCardFrontUrl;
+
+	/**
+	 * 身份证照片-反面
+	 */
+	private String idCardBackUrl;
+
+	/**
+	 * 认证视频1
+	 */
+	private String certVideo1Url;
+
+	/**
+	 * 认证视频2
+	 */
+	private String certVideo2Url;
+
+	/**
+	 * 协议
+	 */
+	private String agreementUrl;
+
+	/**
+	 * 零工认证渠道
+	 */
+	private List<GigTypeEnum> gigTypeList;
+}

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

@@ -0,0 +1,30 @@
+package com.qunzhixinxi.hnqz.admin.entity.model;
+
+import com.qunzhixinxi.hnqz.admin.enums.GigChannelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import lombok.Data;
+
+/**
+ * gig基本信息
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 14:26
+ */
+@Data
+public class GigBaseInfoModel {
+
+	/**
+	 * 零工平台类型
+	 */
+	private GigTypeEnum gigType;
+
+	/**
+	 * 渠道
+	 */
+	private GigChannelEnum gigChannel;
+
+	/**
+	 * 协议
+	 */
+	private String agreement;
+}

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

@@ -0,0 +1,10 @@
+package com.qunzhixinxi.hnqz.admin.entity.model;
+
+/**
+ * 税邦云绑卡确认request
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 13:39
+ */
+public class GigBindingCardConfirmRequest {
+}

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

@@ -0,0 +1,10 @@
+package com.qunzhixinxi.hnqz.admin.entity.model;
+
+/**
+ * 税邦云发送验证码request
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 13:42
+ */
+public class GigBindingCardVerificationRequest {
+}

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

@@ -0,0 +1,23 @@
+package com.qunzhixinxi.hnqz.admin.entity.model;
+
+import lombok.Data;
+
+/**
+ * gig信息
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 14:25
+ */
+@Data
+public class GigInfoModel {
+
+	/**
+	 * gig基本信息
+	 */
+	GigBaseInfoModel baseInfo;
+
+	/**
+	 * 用户信息
+	 */
+	GigUserInfoModel userInfo;
+}

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

@@ -0,0 +1,19 @@
+package com.qunzhixinxi.hnqz.admin.entity.model;
+
+import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * 零工平台签约认证request
+ *
+ * @author lixuesong
+ * @date 2022年03月02日 17:48
+ */
+@Data
+public class GigSignCertRequest {
+
+	Map<GigTypeEnum, GigInfoModel> info;
+
+}

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

@@ -0,0 +1,10 @@
+package com.qunzhixinxi.hnqz.admin.entity.model;
+
+/**
+ * 零工平台签约response
+ *
+ * @author lixuesong
+ * @date 2022年03月02日 18:06
+ */
+public class GigSignResponse {
+}

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

@@ -0,0 +1,59 @@
+package com.qunzhixinxi.hnqz.admin.entity.model;
+
+import lombok.Data;
+
+/**
+ * 用户信息
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 14:27
+ */
+@Data
+public class GigUserInfoModel {
+
+	/**
+	 * 用户id
+	 */
+	private Integer userId;
+
+	/**
+	 * 姓名
+	 */
+	private String name;
+
+	/**
+	 * 手机号
+	 */
+	private String phone;
+
+	/**
+	 * 银行预留手机号
+	 */
+	private String bankPhone;
+
+	/**
+	 * 银行卡号
+	 */
+	private String bankCard;
+
+
+	/**
+	 * 身份证照片-正面
+	 */
+	private String idCardFront;
+
+	/**
+	 * 身份证照片-反面
+	 */
+	private String idCardBack;
+
+	/**
+	 * 认证视频1
+	 */
+	private String certVideo1;
+
+	/**
+	 * 认证视频2
+	 */
+	private String certVideo2;
+}

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

@@ -0,0 +1,28 @@
+package com.qunzhixinxi.hnqz.admin.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 零工渠道(如税邦云的中金、平安银行)
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 14:06
+ */
+@Getter
+@AllArgsConstructor
+public enum GigChannelEnum {
+
+	// 渠道
+	DEFAULT(0, "默认渠道"),
+	CICC(1, "中金"),
+	PINGAN(2, "平安银行");
+
+	@EnumValue
+	private int code;
+
+	@JsonValue
+	private String desc;
+}

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

@@ -6,7 +6,7 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 /**
- * 零工平台类型
+ * 零工平台类型(订单支付方式类型)
  *
  * @author lixuesong
  * @date 2022年03月02日 11:10
@@ -16,10 +16,10 @@ import lombok.Getter;
 public enum GigTypeEnum {
 
 	// 零工平台类型
-	RENLIJIA(0, "人力家"),
-	TAX_HELPER(1, "税邦云"),
-	YEE(2, "易联"),
-	OLADING(3, "自由职家");
+	REN_LI_JIA(0, "人力家"),
+	TAX_HELPOR(1, "税邦云"),
+	OLADING(2, "自由职家"),
+	YEE(3, "易联数科");
 
 	@EnumValue
 	private int code;

+ 64 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java

@@ -0,0 +1,64 @@
+package com.qunzhixinxi.hnqz.admin.mq;
+
+import cn.hutool.json.JSONUtil;
+import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
+import com.qunzhixinxi.hnqz.admin.api.constant.MqConstants;
+import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
+import com.qunzhixinxi.hnqz.admin.entity.WmTask;
+import com.qunzhixinxi.hnqz.admin.service.ReportExportService;
+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.annotation.RabbitMqComponent;
+import com.qunzhixinxi.hnqz.common.rabbitmq.core.BaseRabbiMqHandler;
+import com.qunzhixinxi.hnqz.common.rabbitmq.listenter.MqListener;
+import com.rabbitmq.client.Channel;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.amqp.support.AmqpHeaders;
+import org.springframework.messaging.handler.annotation.Header;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * zb对列监听器
+ */
+@Slf4j
+@AllArgsConstructor
+//@RabbitListener(queues = MqConstants.DIRECT_MODE_GIG_SIGN_CERT_RESULT_QUEUE)
+@RabbitMqComponent(value = "reportExportReceiver")
+public class GigSignCertReceiver extends BaseRabbiMqHandler<BaseMap> {
+
+
+    @RabbitHandler
+    public void onMessage(BaseMap baseMap, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {
+//        super.onMessageAck(baseMap, deliveryTag, channel, (MqListener<BaseMap>) (map, channel1) -> {
+//
+//            //业务处理
+//            log.info("直接队列:zb报告导出,手动ACK,接收消息TAG:{},消息内容:{}", deliveryTag, baseMap);
+//            String requestBody = map.get("requestBody").toString();
+//            String username = map.get("username").toString();
+//            Boolean isGuangshengtang = map.get("isGuangshengtang");
+////            Integer exportRecordId = Integer.valueOf(map.get("recordId").toString());
+//            WmTask wmTask = JSONUtil.toBean(requestBody, WmTask.class);
+//            String key = String.format(CacheConstants.EXPORT_ZB_REPORT_CACHE, wmTask.getScorePackageDrugId());
+//            String resStr = "ERROR_未知错误,请联系管理员";
+//
+//            int exportStatus = WmReportOpt.WmReportOptStatus.GENERATED.ordinal();
+//            String name = "无";
+//            String title = "无";
+//
+//            try {
+//
+//            } finally {
+//
+//
+//            }
+//        });
+    }
+
+
+}

+ 39 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/gig/GigService.java

@@ -0,0 +1,39 @@
+package com.qunzhixinxi.hnqz.admin.service.gig;
+
+import com.qunzhixinxi.hnqz.admin.entity.model.GigBindingCardConfirmRequest;
+import com.qunzhixinxi.hnqz.admin.entity.model.GigBindingCardVerificationRequest;
+import com.qunzhixinxi.hnqz.admin.entity.model.GigSignCertRequest;
+
+/**
+ * 零工平台服务
+ *
+ * @author lixuesong
+ * @date 2022年03月02日 17:17
+ */
+public interface GigService {
+
+	/**
+	 * 签约
+	 *
+	 * @param request
+	 * @return
+	 */
+	boolean signCert(GigSignCertRequest request);
+
+	/**
+	 * 绑卡发送验证码
+	 *
+	 * @param request
+	 * @return
+	 */
+	boolean bindingCardVerification(GigBindingCardVerificationRequest request);
+
+	/**
+	 * 绑卡确认
+	 *
+	 * @param request
+	 * @return
+	 */
+	boolean bindingCardConfirm(GigBindingCardConfirmRequest request);
+
+}

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

@@ -0,0 +1,42 @@
+package com.qunzhixinxi.hnqz.admin.service.gig;
+
+import com.qunzhixinxi.hnqz.admin.entity.dto.UserSignCertDTO;
+
+/**
+ * 用户签约认证服务
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 14:38
+ */
+public interface SysUserSignCertService {
+
+	/**
+	 * 保存用户基础信息
+	 *
+	 * @param userSignCertDTO
+	 */
+	void saveBaseInfo(UserSignCertDTO userSignCertDTO);
+
+	/**
+	 * 签协议
+	 *
+	 * @param userSignCertDTO
+	 */
+	void signAgreement(UserSignCertDTO userSignCertDTO);
+
+	/**
+	 * 人身验证
+	 *
+	 * @param userSignCertDTO
+	 */
+	void personalIdentityVerification(UserSignCertDTO userSignCertDTO);
+
+	/**
+	 * 批量发起用户签约认证
+	 *
+	 * @param userSignCertDTO
+	 * @return
+	 */
+	boolean batchChannelCert(UserSignCertDTO userSignCertDTO);
+
+}

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

@@ -0,0 +1,31 @@
+package com.qunzhixinxi.hnqz.admin.service.gig.impl;
+
+import com.qunzhixinxi.hnqz.admin.entity.model.GigBindingCardConfirmRequest;
+import com.qunzhixinxi.hnqz.admin.entity.model.GigBindingCardVerificationRequest;
+import com.qunzhixinxi.hnqz.admin.entity.model.GigSignCertRequest;
+import com.qunzhixinxi.hnqz.admin.service.gig.GigService;
+
+/**
+ * 零工平台服务
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 14:19
+ */
+public class GigServiceImpl implements GigService {
+
+	@Override
+	public boolean signCert(GigSignCertRequest request) {
+
+		return false;
+	}
+
+	@Override
+	public boolean bindingCardVerification(GigBindingCardVerificationRequest request) {
+		return false;
+	}
+
+	@Override
+	public boolean bindingCardConfirm(GigBindingCardConfirmRequest request) {
+		return false;
+	}
+}

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

@@ -0,0 +1,170 @@
+package com.qunzhixinxi.hnqz.admin.service.gig.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.qunzhixinxi.hnqz.admin.api.constant.MqConstants;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
+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.GigSignCertRequest;
+import com.qunzhixinxi.hnqz.admin.entity.model.GigUserInfoModel;
+import com.qunzhixinxi.hnqz.admin.enums.GigChannelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.service.SysUserService;
+import com.qunzhixinxi.hnqz.admin.service.SysUserSubService;
+import com.qunzhixinxi.hnqz.admin.service.gig.SysUserSignCertService;
+import com.qunzhixinxi.hnqz.common.rabbitmq.client.RabbitMqClient;
+import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户签约认证服务
+ *
+ * @author lixuesong
+ * @date 2022年03月03日 14:38
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class SysUserSignCertServiceImpl implements SysUserSignCertService {
+
+	private final SysUserService sysUserService;
+
+	private final SysUserSubService sysUserSubService;
+
+	private final RabbitMqClient rabbitMqClient;
+
+	private final RedisTemplate redisTemplate;
+
+	/**
+	 * 保存用户基础信息
+	 *
+	 * @param userSignCertDTO
+	 */
+	@Override
+	public void saveBaseInfo(UserSignCertDTO userSignCertDTO) {
+		// 更新用户信息
+		SysUser updateUser = new SysUser();
+		updateUser.setUserId(userSignCertDTO.getUserId());
+		updateUser.setIdCardNumber(userSignCertDTO.getIdCardNumber());
+		updateUser.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+		sysUserService.updateById(updateUser);
+		// 更新用户签约认证主体信息
+		userSignCertDTO.getGigTypeList().forEach(gigType -> {
+			SysUserSub userSub = new SysUserSub();
+			userSub.setUserId(userSignCertDTO.getUserId());
+			userSub.setGigType(gigType);
+			userSub.setCreateUser(SecurityUtils.getUser().getId());
+			userSub.setCreateTime(LocalDateTime.now());
+			// 税邦云单独设置渠道类型
+			if (GigTypeEnum.TAX_HELPOR.equals(gigType)) {
+				if (StrUtil.isNotEmpty(userSignCertDTO.getBankCardNumber())) {
+					userSub.setGigChannel(GigChannelEnum.PINGAN);
+				} else {
+					userSub.setGigChannel(GigChannelEnum.CICC);
+				}
+			} else {
+				userSub.setGigChannel(GigChannelEnum.DEFAULT);
+			}
+			sysUserSubService.save(userSub);
+		});
+	}
+
+	/**
+	 * 签协议
+	 *
+	 * @param userSignCertDTO
+	 */
+	@Override
+	public void signAgreement(UserSignCertDTO userSignCertDTO) {
+		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.lambdaUpdate();
+		updateWrapper.eq(SysUserSub::getUserId, userSignCertDTO.getUserId());
+		if (CollUtil.isNotEmpty(userSignCertDTO.getGigTypeList())) {
+			updateWrapper.in(SysUserSub::getGigType, userSignCertDTO.getGigTypeList());
+		}
+		updateWrapper.set(SysUserSub::getAgreementUrl, userSignCertDTO.getAgreementUrl());
+		updateWrapper.set(SysUserSub::getUpdateUser, SecurityUtils.getUser().getId());
+		updateWrapper.set(SysUserSub::getUpdateTime, LocalDateTime.now());
+
+		sysUserSubService.update(updateWrapper);
+	}
+
+	/**
+	 * 人身验证
+	 *
+	 * @param userSignCertDTO
+	 */
+	@Override
+	public void personalIdentityVerification(UserSignCertDTO userSignCertDTO) {
+		LambdaUpdateWrapper<SysUserSub> updateWrapper = Wrappers.lambdaUpdate();
+		updateWrapper.eq(SysUserSub::getUserId, userSignCertDTO.getUserId());
+		if (CollUtil.isNotEmpty(userSignCertDTO.getGigTypeList())) {
+			updateWrapper.in(SysUserSub::getGigType, userSignCertDTO.getGigTypeList());
+		}
+		updateWrapper.set(SysUserSub::getIdCardFrontUrl, userSignCertDTO.getIdCardFrontUrl());
+		updateWrapper.set(SysUserSub::getIdCardBackUrl, userSignCertDTO.getIdCardBackUrl());
+		updateWrapper.set(SysUserSub::getCertVideo1Url, userSignCertDTO.getCertVideo1Url());
+		updateWrapper.set(SysUserSub::getCertVideo2Url, userSignCertDTO.getCertVideo2Url());
+		updateWrapper.set(SysUserSub::getUpdateUser, SecurityUtils.getUser().getId());
+		updateWrapper.set(SysUserSub::getUpdateTime, LocalDateTime.now());
+
+		sysUserSubService.update(updateWrapper);
+	}
+
+	/**
+	 * 批量发起用户签约认证
+	 *
+	 * @param userSignCertDTO
+	 * @return
+	 */
+	@Override
+	public boolean batchChannelCert(UserSignCertDTO userSignCertDTO) {
+		// 根据用户id查询用户信息、认证信息
+		Integer userId = userSignCertDTO.getUserId();
+		SysUser sysUser = sysUserService.getById(userId);
+		List<SysUserSub> userSubList = sysUserSubService.list(Wrappers.<SysUserSub>lambdaQuery()
+				.eq(SysUserSub::getUserId, userId));
+		if (CollUtil.isNotEmpty(userSubList)) {
+			// 封装请求数据
+			GigSignCertRequest request = new GigSignCertRequest();
+			Map<GigTypeEnum, GigInfoModel> gigInfo = MapUtil.newHashMap(4);
+			userSubList.forEach(userSub -> {
+				// 基础信息
+				GigBaseInfoModel baseInfoModel = new GigBaseInfoModel();
+				baseInfoModel.setGigType(userSub.getGigType());
+				baseInfoModel.setGigChannel(userSub.getGigChannel());
+				baseInfoModel.setAgreement(userSub.getAgreementUrl());
+				// 用户信息
+				GigUserInfoModel userInfoModel = new GigUserInfoModel();
+				userInfoModel.setUserId(userId);
+				userInfoModel.setName(sysUser.getRealname());
+				userInfoModel.setPhone(sysUser.getUsername());
+				userInfoModel.setBankPhone(userSub.getBankPhone());
+				userInfoModel.setBankCard(userSub.getBankCardNumber());
+
+				GigInfoModel infoModel = new GigInfoModel();
+				infoModel.setBaseInfo(baseInfoModel);
+				infoModel.setUserInfo(userInfoModel);
+				gigInfo.put(userSub.getGigType(), infoModel);
+				request.setInfo(gigInfo);
+			});
+			// 发送mq
+			rabbitMqClient.sendMessage(MqConstants.DIRECT_MODE_GIG_SIGN_CERT_QUEUE, JSONUtil.toJsonStr(request));
+			return true;
+		}
+		return false;
+	}
+}