Selaa lähdekoodia

feat: 自由职家回调

lixuesong 3 vuotta sitten
vanhempi
commit
d06d72ffd2

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

@@ -0,0 +1,82 @@
+package com.qunzhixinxi.hnqz.admin.api.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * 自由职家的统一请求参数
+ *
+ * @author lixuesong
+ * @date 2022年04月18日 12:00
+ */
+@Data
+public class OladingCommonRequest implements Serializable {
+
+	private static final long serialVersionUID = -467629451978460444L;
+
+	/**
+	 * 数据报文
+	 */
+	@NotNull(message = "req必填")
+	private Req req;
+
+	/**
+	 * base64编码的签名数据
+	 */
+	@NotEmpty(message = "sign必填")
+	private String sign;
+
+
+	/**
+	 * 数据报文
+	 */
+	@Data
+	public static class Req implements Serializable {
+
+		private static final long serialVersionUID = 2615670481019232417L;
+
+		/**
+		 * 接口名称
+		 */
+		private String name;
+
+		/**
+		 * 给客户端分配的唯一标识
+		 */
+		@JsonProperty("client_key")
+		private String clientKey;
+
+		/**
+		 * 客户端生成报文的时间戳,如果和服务端时间相差过大,会被拒绝处理。
+		 */
+		private String timestamp;
+
+		/**
+		 * 接口业务数据
+		 */
+		private Map<String, Object> data;
+	}
+
+	/**
+	 * 接口名称枚举
+	 */
+	@Getter
+	@AllArgsConstructor
+	public enum InterfaceName {
+
+		// 接口名称
+		SIGN_UP_NOTIFY("签约回调"), UPLOAD_ID_CARD_IMAGE("证照上传回调");
+
+		/**
+		 * 描述
+		 */
+		private String desc;
+	}
+}

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

@@ -1,8 +1,15 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.json.JSONUtil;
+import com.qunzhixinxi.hnqz.admin.api.dto.OladingCommonRequest;
+import com.qunzhixinxi.hnqz.admin.entity.OladingInputRecord;
 import com.qunzhixinxi.hnqz.admin.entity.model.GigOladingSignUpRequest;
 import com.qunzhixinxi.hnqz.admin.service.gig.GigThirdApiService;
+import com.qunzhixinxi.hnqz.admin.service.gig.OladingInputRecordService;
+import com.qunzhixinxi.hnqz.admin.util.HMACSignProvider;
+import com.qunzhixinxi.hnqz.common.core.exception.ValidateCodeException;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
@@ -13,8 +20,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
+import java.util.Map;
 
 /**
  * 第三方零工接口
@@ -30,21 +37,78 @@ public class GigThirdApiController {
 
 	private final GigThirdApiService gigThirdApiService;
 
+	private final OladingInputRecordService oladingInputRecordService;
+
+	private static final HMACSignProvider hMACSignProvide = new HMACSignProvider();
+
+	/**
+	 * 公钥
+	 */
+	private static final String PUBLIC_KEY = "123123123";
+
+	/**
+	 * 算法类型
+	 */
+	private static final String ALGORITHM_TYPE = "HmacSHA256";
+
 	/**
-	 * 自由职家签约结果回调 TODO 需要解密
+	 * 自由职家统一请求地址
 	 *
-	 * @param request
 	 * @return
 	 */
 	@Inner(value = false)
-	@SysLog("自由职家签约结果回调")
-	@PostMapping("/olading-sign-up-notify")
-	public R<?> oladingSignUpNotify(@Valid @RequestBody GigOladingSignUpRequest signUpRequest, HttpServletRequest request) {
-		log.info("自由职家签约结果回调 客户ip:{}", request.getRemoteAddr());
-		log.info("自由职家签约结果回调 参数:{}", JSONUtil.toJsonStr(signUpRequest));
+	@SysLog("自由职家统一请求地址")
+	@PostMapping("/olading")
+	public R<?> oladingRequest(@Valid @RequestBody OladingCommonRequest oladingRequest) {
+
+		log.info("自由职家请求方法参数:" + JSONUtil.toJsonStr(oladingRequest));
+
+		// 请求数据
+		OladingCommonRequest.Req req = oladingRequest.getReq();
+		// 签名数据
+		String sign = oladingRequest.getSign();
+		// 请求接口名称
+		String interfaceName = req.getName();
+
+		// 1.请求记录
+		OladingInputRecord record = new OladingInputRecord();
+		record.setInterfaceName(interfaceName);
+		record.setReqBody(JSONUtil.toJsonStr(oladingRequest));
+		record.setPrivateKey("");
+		record.setPublicKey(PUBLIC_KEY);
+		oladingInputRecordService.save(record);
 
-		gigThirdApiService.oladingSignUpNotify(signUpRequest.getRequestId(), signUpRequest.getStatus());
+		try {
+			// 2. 验签
+			boolean verfyResult =
+					hMACSignProvide.verfy(ALGORITHM_TYPE, PUBLIC_KEY, JSONUtil.toJsonStr(req.getData()), sign);
+			log.info("验签结果: {}", verfyResult);
 
-		return R.ok();
+			// 3.实际操作
+
+			OladingCommonRequest.InterfaceName interfaceNameEnum = Enum.valueOf(OladingCommonRequest.InterfaceName.class, interfaceName);
+			switch (interfaceNameEnum) {
+				case SIGN_UP_NOTIFY:
+					// 签约回调
+					Map<String, Object> data = req.getData();
+					GigOladingSignUpRequest signUpRequest =
+							BeanUtil.mapToBean(data, GigOladingSignUpRequest.class, true, CopyOptions.create());
+					gigThirdApiService.oladingSignUpNotify(signUpRequest);
+					break;
+				case UPLOAD_ID_CARD_IMAGE:
+					// 证照上传回调 TODO
+					break;
+				default:
+
+			}
+			return R.ok();
+		} catch (Exception e) {
+			log.error("自由职家统一请求异常", e);
+			if (e instanceof ValidateCodeException) {
+				return R.failed(e.getMessage());
+			}
+			return R.failed("处理失败");
+		}
 	}
+
 }

+ 51 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/OladingInputRecord.java

@@ -0,0 +1,51 @@
+package com.qunzhixinxi.hnqz.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 自由职家请求记录实体
+ *
+ * @author lixuesong
+ * @date 2022年04月18日 15:33
+ */
+@Data
+public class OladingInputRecord extends Model<OladingInputRecord> {
+
+	private static final long serialVersionUID = 8128442024567142412L;
+
+	/**
+	 * 主键id
+	 */
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+
+	/**
+	 * 请求接口名称
+	 */
+	private String interfaceName;
+
+	/**
+	 * 请求body内容
+	 */
+	private String reqBody;
+
+	/**
+	 * 请求公钥
+	 */
+	private String publicKey;
+
+	/**
+	 * 请求时私钥
+	 */
+	private String privateKey;
+
+	/**
+	 * 创建时间
+	 */
+	private LocalDateTime createTime;
+}

+ 15 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/OladingInputRecordMapper.java

@@ -0,0 +1,15 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.entity.OladingInputRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 自由职家请求记录Mapper
+ *
+ * @author lixuesong
+ * @date 2022年04月18日 15:40
+ */
+@Mapper
+public interface OladingInputRecordMapper extends BaseMapper<OladingInputRecord> {
+}

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

@@ -13,8 +13,7 @@ public interface GigThirdApiService {
 	/**
 	 * 自由职家签约结果回调
 	 *
-	 * @param requestId
-	 * @param status
+	 * @param signUpRequest
 	 */
-	void oladingSignUpNotify(String requestId, GigOladingSignUpRequest.CertStatus status);
+	void oladingSignUpNotify(GigOladingSignUpRequest signUpRequest);
 }

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

@@ -0,0 +1,13 @@
+package com.qunzhixinxi.hnqz.admin.service.gig;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.entity.OladingInputRecord;
+
+/**
+ * 自由职家请求记录服务
+ *
+ * @author lixuesong
+ * @date 2022年04月18日 15:41
+ */
+public interface OladingInputRecordService extends IService<OladingInputRecord> {
+}

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

@@ -3,11 +3,13 @@ package com.qunzhixinxi.hnqz.admin.service.gig.impl;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.entity.SysUserSub;
+import com.qunzhixinxi.hnqz.admin.entity.dto.UserSignCertDTO;
 import com.qunzhixinxi.hnqz.admin.entity.model.GigOladingSignUpRequest;
 import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.OladingCertStatus;
 import com.qunzhixinxi.hnqz.admin.service.SysUserSubService;
 import com.qunzhixinxi.hnqz.admin.service.gig.GigThirdApiService;
+import com.qunzhixinxi.hnqz.admin.service.gig.SysUserSignCertService;
 import com.qunzhixinxi.hnqz.common.core.exception.ValidateCodeException;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -15,6 +17,7 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Collections;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -28,19 +31,22 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 
 	private final SysUserSubService sysUserSubService;
 
+	private final SysUserSignCertService sysUserSignCertService;
+
 	private final RedisTemplate redisTemplate;
 
 	/**
 	 * 自由职家签约结果回调
 	 *
-	 * @param requestId
-	 * @param status
+	 * @param signUpRequest
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void oladingSignUpNotify(String requestId, GigOladingSignUpRequest.CertStatus status) {
+	public void oladingSignUpNotify(GigOladingSignUpRequest signUpRequest) {
+		String requestId = signUpRequest.getRequestId();
+		GigOladingSignUpRequest.CertStatus status = signUpRequest.getStatus();
 		String redisKey = CacheConstants.OLADING_SIGN_UP_NOTIFY_KEY + requestId;
-		Boolean absent = redisTemplate.opsForValue().setIfAbsent(redisKey, status.getCode(), 5, TimeUnit.SECONDS);
+		Boolean absent = redisTemplate.opsForValue().setIfAbsent(redisKey, status.getCode(), 10, TimeUnit.SECONDS);
 		if (!absent) {
 			log.error("存在在途操作{}", requestId);
 			throw new ValidateCodeException("存在在途操作");
@@ -57,13 +63,18 @@ public class GigThirdApiServiceImpl implements GigThirdApiService {
 				throw new ValidateCodeException("已回调");
 			}
 			// 更新状态
-			userSub.setCertStatus(status.getCode());
+			SysUserSub updateUserSub = new SysUserSub();
+			updateUserSub.setId(userSub.getId());
+			updateUserSub.setCertStatus(status.getCode());
 			sysUserSubService.updateById(userSub);
 
 			// 如果成功,则发送证照上传MQ
-		} catch (Exception e) {
-			log.error("自由职家签约结果回调异常", e);
-			throw new ValidateCodeException("业务处理异常");
+			if (OladingCertStatus.SIGNED.getCode().equals(String.valueOf(status.getCode()))) {
+				UserSignCertDTO userSignCertDTO = new UserSignCertDTO();
+				userSignCertDTO.setUserId(userSub.getUserId());
+				userSignCertDTO.setGigTypeList(Collections.singletonList(GigTypeEnum.OLADING));
+				sysUserSignCertService.batchChannelCert(userSignCertDTO);
+			}
 		} finally {
 			redisTemplate.delete(redisKey);
 		}

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

@@ -0,0 +1,20 @@
+package com.qunzhixinxi.hnqz.admin.service.gig.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.entity.OladingInputRecord;
+import com.qunzhixinxi.hnqz.admin.mapper.OladingInputRecordMapper;
+import com.qunzhixinxi.hnqz.admin.service.gig.OladingInputRecordService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author lixuesong
+ * @date 2022年04月18日 15:42
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class OladingInputRecordServiceImpl extends ServiceImpl<OladingInputRecordMapper, OladingInputRecord>
+		implements OladingInputRecordService {
+}

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

@@ -165,7 +165,7 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 			sysUserService.updateById(updateUser);
 		}
 		// 查找是否有可复用的认证信息
-		List<SysUserSub> userSubList =this.listUserSignCert(userSignCertDTO.getUserId());
+		List<SysUserSub> userSubList = this.listUserSignCert(userSignCertDTO.getUserId());
 		List<SysUserSub> copyUserSubList = userSubList.stream().filter(sysUserSub -> {
 			// 过滤只要认证成功的数据
 			if (GigTypeEnum.TAX_HELPOR.equals(sysUserSub.getGigType())
@@ -317,80 +317,79 @@ public class SysUserSignCertServiceImpl implements SysUserSignCertService {
 		List<SysUserSub> userSubList = sysUserSubService.list(userSubWrapper);
 		if (CollUtil.isNotEmpty(userSubList)) {
 			// 封装请求数据
-			BaseMap gigInfo = new BaseMap();
-			userSubList.stream()
-					.filter(sysUserSub -> {
-						// 过滤掉认证成功的数据
-						if (GigTypeEnum.TAX_HELPOR.equals(sysUserSub.getGigType())
-								&& TaxHelperCertStatus.CHECKED_UNBIND.getCode() != sysUserSub.getCertStatus()
-								&& TaxHelperCertStatus.CERT.getCode() != sysUserSub.getCertStatus()) {
-							return true;
-						} else if (GigTypeEnum.YEE.equals(sysUserSub.getGigType())
-								&& !YeeCertStatus.SIGNED.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
-							return true;
-						} else if (GigTypeEnum.OLADING.equals(sysUserSub.getGigType())
-								&& !YeeCertStatus.SIGNED.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
-							return true;
-						} else if (GigTypeEnum.REN_LI_JIA.equals(sysUserSub.getGigType())
-								&& RenlijiaCertStatus.CER_STATUS_1.getCode() != sysUserSub.getCertStatus()) {
-							return true;
-						}
-						return false;
-					}).forEach(userSub -> {
-						// 请求流水号
-						String requestId = IdUtil.fastSimpleUUID();
-						// 基础信息
-						GigBaseInfoModel baseInfoModel = new GigBaseInfoModel();
-						baseInfoModel.setRequestId(requestId);
-						baseInfoModel.setGigType(userSub.getGigType());
-						baseInfoModel.setGigChannel(userSub.getGigChannel());
-						// 用户信息
-						GigUserInfoModel userInfoModel = new GigUserInfoModel();
-						userInfoModel.setUserId(userId);
-						userInfoModel.setName(sysUser.getRealname());
-						userInfoModel.setUsername(sysUser.getUsername());
-						userInfoModel.setEntCode(dept.getTaxCode());
-						userInfoModel.setDeptId(sysUser.getDeptId());
-						userInfoModel.setIdCard(sysUser.getIdCardNumber());
-						userInfoModel.setIdCardType(MemberIDCardType.ID_CARD);
-						userInfoModel.setMemberType(MemberType.YAOYI_EXCLUSIVE_PERSONNEL);
-						userInfoModel.setEmail("gig_service@yaoyi.net"); // TODO
-						userInfoModel.setAddress("北京市-房山区-长阳镇");
-						userInfoModel.setPayChannel(PayChannel.BANK_CARD);
-						userInfoModel.setBankPhone(userSub.getBankPhone());
-						userInfoModel.setBankCard(userSub.getBankCardNumber());
-						userInfoModel.setIdCardFront(StrUtil.isBlank(userSub.getIdCardFrontUrl())
-								? null : userSub.getIdCardFrontUrl().startsWith("https")
-								? userSub.getIdCardFrontUrl() : upmsConfig.getClientUrl() + userSub.getIdCardFrontUrl());
-						userInfoModel.setIdCardBack(StrUtil.isBlank(userSub.getIdCardBackUrl())
-								? null : userSub.getIdCardBackUrl().startsWith("https")
-								? userSub.getIdCardBackUrl() : upmsConfig.getClientUrl() + userSub.getIdCardBackUrl());
-						userInfoModel.setCertVideo1(StrUtil.isBlank(userSub.getCertVideo1Url())
-								? null : userSub.getCertVideo1Url().startsWith("https")
-								? userSub.getCertVideo1Url() : upmsConfig.getClientUrl() + userSub.getCertVideo1Url());
-						userInfoModel.setCertVideo2(StrUtil.isBlank(userSub.getCertVideo2Url())
-								? null : userSub.getCertVideo2Url().startsWith("https")
-								? userSub.getCertVideo2Url() : upmsConfig.getClientUrl() + userSub.getCertVideo2Url());
-						userInfoModel.setSignImageUrl(StrUtil.isBlank(userSub.getAgreementUrl())
-								? null : userSub.getAgreementUrl().startsWith("https")
-								? userSub.getAgreementUrl() : upmsConfig.getClientUrl() + userSub.getAgreementUrl());
-
-						GigInfoModel infoModel = new GigInfoModel();
-						infoModel.setBaseInfo(baseInfoModel);
-						infoModel.setUserInfo(userInfoModel);
-						gigInfo.put(userSub.getGigType().name(), infoModel);
-
-						// 更新为进行中状态
-						SysUserSub updateUserSub = new SysUserSub();
-						updateUserSub.setId(userSub.getId());
-						updateUserSub.setRequestId(requestId);
-						updateUserSub.setCallbackStatus(GigCallBackStatus.IN_PROGRESS);
-						sysUserSubService.updateById(updateUserSub);
-					});
-			// 发送mq
-			if (CollUtil.isNotEmpty(gigInfo)) {
+			userSubList.stream().filter(sysUserSub -> {
+				// 过滤掉认证成功的数据
+				if (GigTypeEnum.TAX_HELPOR.equals(sysUserSub.getGigType())
+						&& TaxHelperCertStatus.CHECKED_UNBIND.getCode() != sysUserSub.getCertStatus()
+						&& TaxHelperCertStatus.CERT.getCode() != sysUserSub.getCertStatus()) {
+					return true;
+				} else if (GigTypeEnum.YEE.equals(sysUserSub.getGigType())
+						&& !YeeCertStatus.SIGNED.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
+					return true;
+				} else if (GigTypeEnum.OLADING.equals(sysUserSub.getGigType())
+						&& !YeeCertStatus.SIGNED.getCode().equals(String.valueOf(sysUserSub.getCertStatus()))) {
+					return true;
+				} else if (GigTypeEnum.REN_LI_JIA.equals(sysUserSub.getGigType())
+						&& RenlijiaCertStatus.CER_STATUS_1.getCode() != sysUserSub.getCertStatus()) {
+					return true;
+				}
+				return false;
+			}).forEach(userSub -> {
+				// 请求流水号
+				String requestId = IdUtil.fastSimpleUUID();
+				// 基础信息
+				GigBaseInfoModel baseInfoModel = new GigBaseInfoModel();
+				baseInfoModel.setRequestId(requestId);
+				baseInfoModel.setGigType(userSub.getGigType());
+				baseInfoModel.setGigChannel(userSub.getGigChannel());
+				// 用户信息
+				GigUserInfoModel userInfoModel = new GigUserInfoModel();
+				userInfoModel.setUserId(userId);
+				userInfoModel.setName(sysUser.getRealname());
+				userInfoModel.setUsername(sysUser.getUsername());
+				userInfoModel.setEntCode(dept.getTaxCode());
+				userInfoModel.setDeptId(sysUser.getDeptId());
+				userInfoModel.setIdCard(sysUser.getIdCardNumber());
+				userInfoModel.setIdCardType(MemberIDCardType.ID_CARD);
+				userInfoModel.setMemberType(MemberType.YAOYI_EXCLUSIVE_PERSONNEL);
+				userInfoModel.setEmail("gig_service@yaoyi.net"); // TODO
+				userInfoModel.setAddress("北京市-房山区-长阳镇");
+				userInfoModel.setPayChannel(PayChannel.BANK_CARD);
+				userInfoModel.setBankPhone(userSub.getBankPhone());
+				userInfoModel.setBankCard(userSub.getBankCardNumber());
+				userInfoModel.setIdCardFront(StrUtil.isBlank(userSub.getIdCardFrontUrl())
+						? null : userSub.getIdCardFrontUrl().startsWith("https")
+						? userSub.getIdCardFrontUrl() : upmsConfig.getClientUrl() + userSub.getIdCardFrontUrl());
+				userInfoModel.setIdCardBack(StrUtil.isBlank(userSub.getIdCardBackUrl())
+						? null : userSub.getIdCardBackUrl().startsWith("https")
+						? userSub.getIdCardBackUrl() : upmsConfig.getClientUrl() + userSub.getIdCardBackUrl());
+				userInfoModel.setCertVideo1(StrUtil.isBlank(userSub.getCertVideo1Url())
+						? null : userSub.getCertVideo1Url().startsWith("https")
+						? userSub.getCertVideo1Url() : upmsConfig.getClientUrl() + userSub.getCertVideo1Url());
+				userInfoModel.setCertVideo2(StrUtil.isBlank(userSub.getCertVideo2Url())
+						? null : userSub.getCertVideo2Url().startsWith("https")
+						? userSub.getCertVideo2Url() : upmsConfig.getClientUrl() + userSub.getCertVideo2Url());
+				userInfoModel.setSignImageUrl(StrUtil.isBlank(userSub.getAgreementUrl())
+						? null : userSub.getAgreementUrl().startsWith("https")
+						? userSub.getAgreementUrl() : upmsConfig.getClientUrl() + userSub.getAgreementUrl());
+
+				GigInfoModel infoModel = new GigInfoModel();
+				infoModel.setBaseInfo(baseInfoModel);
+				infoModel.setUserInfo(userInfoModel);
+
+				// 更新为进行中状态
+				SysUserSub updateUserSub = new SysUserSub();
+				updateUserSub.setId(userSub.getId());
+				updateUserSub.setRequestId(requestId);
+				updateUserSub.setCallbackStatus(GigCallBackStatus.IN_PROGRESS);
+				sysUserSubService.updateById(updateUserSub);
+
+				// 发送mq
+				BaseMap gigInfo = new BaseMap();
+				gigInfo.put(userSub.getGigType().name(), infoModel);
 				rabbitMqClient.sendMessage(MqConstants.DIRECT_MODE_GIG_SIGN_CERT_QUEUE, JSONUtil.toJsonStr(gigInfo));
-			}
+
+			});
 			return true;
 		}
 		return false;

+ 44 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/util/HMACSignProvider.java

@@ -0,0 +1,44 @@
+package com.qunzhixinxi.hnqz.admin.util;
+
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Mac;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.util.LinkedList;
+import java.util.List;
+
+public class HMACSignProvider {
+
+    public List<String> getMechanismNames() {
+        List<String> list = new LinkedList<>();
+        list.add("HmacSHA256");
+        return list;
+    }
+
+    public String sign(String type, String privateKey, String data) throws Exception {
+        try {
+            SecretKey secretKey = new SecretKeySpec(privateKey.getBytes(StandardCharsets.UTF_8),
+                    type);
+            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
+            mac.init(secretKey);
+            return Base64.encodeBase64String(mac.doFinal(data.getBytes(StandardCharsets.UTF_8)));
+        } catch (Exception e) {
+            throw e;
+        }
+
+    }
+
+    public boolean verfy(String type, String publicKey, String data, String sign) throws Exception {
+        try {
+            SecretKey secretKey = new SecretKeySpec(publicKey.getBytes(StandardCharsets.UTF_8),
+                    type);
+            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
+            mac.init(secretKey);
+            return Base64.encodeBase64String(mac.doFinal(data.getBytes(StandardCharsets.UTF_8))).equals(sign);
+        } catch (Exception e) {
+            throw e;
+        }
+    }
+}