Browse Source

feat: 签约认证相关接口

lixuesong 3 years ago
parent
commit
5855d7a098

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

@@ -1,17 +1,17 @@
 -- 用户签约认证主体信息表
 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 '零工平台类型(订单支付方式类型:0-人力家 1-税邦云 2-自由职家 3-易联数科)',
-    `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 '银行预留手机号',
+    `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 '身份证照片-反面',
-    agreement_url       varchar(255) null comment '协议',
+    `agreement_url`     varchar(255) DEFAULT NULL comment '协议',
     `create_time`       DATETIME     DEFAULT NULL COMMENT '创建时间',
     `create_user`       INT          DEFAULT NULL COMMENT '创建人',
     `update_time`       DATETIME     DEFAULT NULL COMMENT '更新时间',

+ 5 - 0
hnqz-common/hnqz-common-mq/pom.xml

@@ -19,6 +19,11 @@
 			<groupId>com.qunzhixinxi</groupId>
 			<artifactId>hnqz-common-core</artifactId>
 		</dependency>
+		<!-- 核心模块 -->
+		<dependency>
+			<groupId>com.qunzhixinxi</groupId>
+			<artifactId>hnqz-common-data</artifactId>
+		</dependency>
 		<!-- 消息总线 rabbitmq -->
 		<dependency>
 			<groupId>org.springframework.cloud</groupId>

+ 62 - 0
hnqz-common/hnqz-common-mq/src/main/java/com/qunzhixinxi/hnqz/common/rabbitmq/core/BaseRabbiMqHandler.java

@@ -3,12 +3,46 @@ package com.qunzhixinxi.hnqz.common.rabbitmq.core;
 import com.qunzhixinxi.hnqz.common.rabbitmq.listenter.MqListener;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
 
 import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 @Slf4j
 public class BaseRabbiMqHandler<T> {
 
+	@Autowired
+	private StringRedisTemplate redisTemplate;
+
+	private static final long DEF_REPORT_TTL = 7L * 24 * 60 * 60 * 1000;
+
+	public void onMessageAck(T t, Long deliveryTag, Channel channel, MqListener mqListener) {
+		log.warn("==================== delivery-tag:[{}], ack 开始 ==========================", deliveryTag);
+		Map<String, String> res = null;
+		try {
+			log.warn("开始执行操作");
+			res = mqListener.handler(t, channel);
+		} catch (Exception e) {
+			log.info("接收消息失败,但不放回队列");
+			e.printStackTrace();
+		} finally {
+			// 插入redis
+			setIntoRedis(res.get("key"), res.get("res"));
+
+			log.warn("开始ack操作");
+			try {
+				channel.basicAck(deliveryTag, false);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+
+			log.warn("==================== delivery-tag:[{}], ack 结束 ==========================", deliveryTag);
+		}
+
+	}
+
     public void onMessage(T t, Long deliveryTag, Channel channel, MqListener mqListener) {
         try {
             mqListener.handler(t, channel);
@@ -28,4 +62,32 @@ public class BaseRabbiMqHandler<T> {
         }
 
     }
+
+	private void setIntoRedis(final String key, final String res) {
+
+		log.warn("-----------------------------循环插入redis开始--------------------------------------");
+
+		for (int i = 0; ; i++) {
+			log.info("-----------redis写入中,第 [{}] 次-----------", i);
+			redisTemplate.opsForValue().set(key, res, DEF_REPORT_TTL, TimeUnit.MILLISECONDS);
+			try {
+				Thread.sleep(50);
+			} catch (Exception e) {
+				continue;
+			}
+
+			String s = redisTemplate.opsForValue().get(key);
+
+			if (res.equals(s)) {
+				log.info("r-key:{}", key);
+				log.info("r-res:{}", res);
+				log.info("r-content :{}", s);
+				log.info("-----------redis成功-----------");
+				break;
+			}
+		}
+
+		log.warn("-----------------------------循环插入redis开始--------------------------------------");
+
+	}
 }

+ 3 - 2
hnqz-common/hnqz-common-mq/src/main/java/com/qunzhixinxi/hnqz/common/rabbitmq/listenter/MqListener.java

@@ -2,9 +2,10 @@ package com.qunzhixinxi.hnqz.common.rabbitmq.listenter;
 
 import com.rabbitmq.client.Channel;
 
+import java.util.Map;
+
 public interface MqListener<T> {
 
-    default void handler(T map, Channel channel) {
-    }
+	Map<String,String> handler(T map, Channel channel) throws Exception;
 
 }

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

@@ -59,7 +59,7 @@ public class SysUserSignCertController {
 		if (userSignCertDTO.getUserId() == null) {
 			return R.failed("userId不能为空");
 		}
-		if (StrUtil.isNotBlank(userSignCertDTO.getAgreementUrl())) {
+		if (StrUtil.isBlank(userSignCertDTO.getAgreementUrl())) {
 			return R.failed("协议不能为空");
 		}
 		sysUserSignCertService.signAgreement(userSignCertDTO);
@@ -75,7 +75,7 @@ public class SysUserSignCertController {
 	 */
 	@SysLog("人身验证")
 	@PostMapping("/personal-identity-verification")
-	public R<?> personalIdentityVerification(UserSignCertDTO userSignCertDTO) {
+	public R<?> personalIdentityVerification(@RequestBody UserSignCertDTO userSignCertDTO) {
 		if (userSignCertDTO.getUserId() == null) {
 			return R.failed("userId不能为空");
 		}

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

@@ -24,6 +24,5 @@ public enum GigTypeEnum {
 	@EnumValue
 	private int code;
 
-	@JsonValue
 	private String desc;
 }

+ 0 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/UserSubCertStatusEnum.java

@@ -1,7 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.fasterxml.jackson.annotation.JsonValue;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -30,6 +29,5 @@ public enum UserSubCertStatusEnum {
 	@EnumValue
 	private int code;
 
-	@JsonValue
 	private String desc;
 }

+ 11 - 23
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mq/GigSignCertReceiver.java

@@ -35,29 +35,17 @@ 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 {
-//
-//
-//            }
-//        });
+        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());
+
+			return null;
+        });
     }
 
 

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

@@ -1,39 +0,0 @@
-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);
-
-}

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

@@ -1,31 +0,0 @@
-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;
-	}
-}

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

@@ -8,17 +8,18 @@ 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.config.UpmsConfig;
 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.admin.util.Base64Util;
 import com.qunzhixinxi.hnqz.common.rabbitmq.client.RabbitMqClient;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import lombok.AllArgsConstructor;
@@ -49,6 +50,8 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 
 	private final RedisTemplate redisTemplate;
 
+	private final UpmsConfig upmsConfig;
+
 	/**
 	 * 保存用户基础信息
 	 *
@@ -56,18 +59,20 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 	 */
 	@Override
 	public void saveBaseInfo(UserSignCertDTO userSignCertDTO) {
+		Integer operateUserId = SecurityUtils.getUser().getId();
 		// 更新用户信息
 		SysUser updateUser = new SysUser();
 		updateUser.setUserId(userSignCertDTO.getUserId());
 		updateUser.setIdCardNumber(userSignCertDTO.getIdCardNumber());
-		updateUser.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+//		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.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+			userSub.setCreateUser(operateUserId);
 			userSub.setCreateTime(LocalDateTime.now());
 			// 税邦云单独设置渠道类型
 			if (GigTypeEnum.TAX_HELPOR.equals(gigType)) {
@@ -79,7 +84,18 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 			} else {
 				userSub.setGigChannel(GigChannelEnum.DEFAULT);
 			}
-			sysUserSubService.save(userSub);
+			SysUserSub queryUserSub = sysUserSubService.getOne(Wrappers.<SysUserSub>lambdaQuery()
+					.eq(SysUserSub::getUserId, userSignCertDTO.getUserId())
+					.eq(SysUserSub::getGigType, gigType));
+			if (queryUserSub != null) {
+				queryUserSub.setGigChannel(userSub.getGigChannel());
+				queryUserSub.setBankCardNumber(userSignCertDTO.getBankCardNumber());
+				queryUserSub.setUpdateTime(LocalDateTime.now());
+				queryUserSub.setUpdateUser(operateUserId);
+				sysUserSubService.updateById(queryUserSub);
+			} else {
+				sysUserSubService.save(userSub);
+			}
 		});
 	}
 
@@ -139,7 +155,6 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				.eq(SysUserSub::getUserId, userId));
 		if (CollUtil.isNotEmpty(userSubList)) {
 			// 封装请求数据
-			GigSignCertRequest request = new GigSignCertRequest();
 			Map<GigTypeEnum, GigInfoModel> gigInfo = MapUtil.newHashMap(4);
 			userSubList.forEach(userSub -> {
 				// 基础信息
@@ -154,15 +169,22 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 				userInfoModel.setPhone(sysUser.getUsername());
 				userInfoModel.setBankPhone(userSub.getBankPhone());
 				userInfoModel.setBankCard(userSub.getBankCardNumber());
+				userInfoModel.setIdCardFront(StrUtil.isBlank(userSub.getIdCardFrontUrl())
+						? null : Base64Util.picToBase64(upmsConfig.getClientUrl() + userSub.getIdCardFrontUrl()));
+				userInfoModel.setIdCardBack(StrUtil.isBlank(userSub.getIdCardBackUrl())
+						? null : Base64Util.picToBase64(upmsConfig.getClientUrl() + userSub.getIdCardBackUrl()));
+				userInfoModel.setCertVideo1(StrUtil.isBlank(userSub.getCertVideo1Url())
+						? null : Base64Util.videoToBase64(upmsConfig.getClientUrl() + userSub.getCertVideo1Url()));
+				userInfoModel.setCertVideo2(StrUtil.isBlank(userSub.getCertVideo2Url())
+						? null : Base64Util.videoToBase64(upmsConfig.getClientUrl() + userSub.getCertVideo2Url()));
 
 				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));
+			rabbitMqClient.sendMessage(MqConstants.DIRECT_MODE_GIG_SIGN_CERT_QUEUE, JSONUtil.toJsonStr(gigInfo));
 			return true;
 		}
 		return false;

+ 41 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/util/Base64Util.java

@@ -1,5 +1,7 @@
 package com.qunzhixinxi.hnqz.admin.util;
 
+import cn.hutool.http.HttpUtil;
+
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
@@ -17,4 +19,43 @@ public class Base64Util {
 		return Base64.getEncoder().encodeToString(outputStream.toByteArray());
 	}
 
+	/**
+	 * 将指定url的图片转换为base64字符串
+	 *
+	 * @param url
+	 * @return
+	 */
+	public static String picToBase64(String url){
+		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+		// false:是否关闭输出流
+		HttpUtil.download(url,outputStream,true);
+
+		byte[] bytes = outputStream.toByteArray();
+
+		StringBuffer base64 = new StringBuffer();
+		// 用于说明文件格式
+		base64.append("data:").append("image/").append(url.substring(url.lastIndexOf(".") + 1)).append(";base64,");
+		base64.append(Base64.getEncoder().encodeToString(bytes));
+		return base64.toString();
+	}
+
+	/**
+	 * 将指定url的视频转换为base64字符串
+	 *
+	 * @param url
+	 * @return
+	 */
+	public static String videoToBase64(String url){
+		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+		// false:是否关闭输出流
+		HttpUtil.download(url,outputStream,true);
+
+		byte[] bytes = outputStream.toByteArray();
+
+		StringBuffer base64 = new StringBuffer();
+		// 用于说明文件格式
+		base64.append("data:").append("video/").append(url.substring(url.lastIndexOf(".") + 1)).append(";base64,");
+		base64.append(Base64.getEncoder().encodeToString(bytes));
+		return base64.toString();
+	}
 }