Ver código fonte

fix: 1.防止eid获取结果并保存出现并发问题;2.endType定义到nacos变量

lixuesong 2 anos atrás
pai
commit
2f147e2c3e

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

@@ -120,4 +120,9 @@ public interface CacheConstants {
 	 */
 	String OLADING_CERT_SEND_CHANNEL = "OLADING:CERT:SEND:CHANNEL:";
 
+	/**
+	 * E证通获取认证结果key
+	 */
+	String EID_RESULT_KEY = "EID:RESULT:KEY:";
+
 }

+ 4 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/config/UpmsConfig.java

@@ -48,5 +48,9 @@ public class UpmsConfig {
 
 	private Map<Integer, Long> custMeetingTimes;
 
+	/**
+	 * 端类型
+	 */
+	private String endType;
 
 }

+ 10 - 29
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -2,7 +2,6 @@ package com.qunzhixinxi.hnqz.admin.controller;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.Assert;
@@ -12,7 +11,6 @@ import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.JSONPObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -26,12 +24,9 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysDictItem;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysRole;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmAdRecord;
-import com.qunzhixinxi.hnqz.admin.api.enums.SignatureStatusEnum;
 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;
@@ -99,21 +94,12 @@ import com.qunzhixinxi.hnqz.admin.util.QRCodeGenerator;
 import com.qunzhixinxi.hnqz.admin.view.user.UserUpdateInput;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.core.util.R;
-import com.qunzhixinxi.hnqz.common.ding.config.DingConfig;
-import com.qunzhixinxi.hnqz.common.ding.entity.EmployCheckResponse;
-import com.qunzhixinxi.hnqz.common.ding.entity.EmployCheckResultItem;
-import com.qunzhixinxi.hnqz.common.ding.enums.DingEnum;
 import com.qunzhixinxi.hnqz.common.ding.service.DingService;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.oss.service.OssTemplate;
 import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
-import com.qunzhixinxi.hnqz.common.taxhelper.config.TaxHelperConfig;
-import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperAddMemberModel;
-import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperAddMemberRequest;
-import com.qunzhixinxi.hnqz.common.taxhelper.entity.response.TaxHelperResponse;
-import com.qunzhixinxi.hnqz.common.taxhelper.enums.TaxHelperCertStatus;
 import com.qunzhixinxi.hnqz.common.taxhelper.service.TaxHelperService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -156,11 +142,9 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.time.Instant;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
-import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -3981,8 +3965,9 @@ public class ApiController {
 	@GetMapping(value = "/eid")
 	public R<?> getEidToken(@RequestParam(value = "idCard") String idCard,
 							@RequestParam(value = "realName") String realName,
-							@RequestParam(value = "endType") String endType){
+							@RequestParam(value = "endType", required = false) String endType){
 
+		endType = upmsConfig.getEndType();
 
 		String tokenUrl = upmsConfig.getGigServiceUrl() + "/gig/operation/eid?idCard={idCard}&realName={realName}&endType={endType}";
 
@@ -4008,6 +3993,7 @@ public class ApiController {
 	public R<?> getEidResult(@RequestParam(value = "token") String token,
 							 @RequestParam(value = "endType") String endType){
 
+		endType = upmsConfig.getEndType();
 
 		String tokenUrl = upmsConfig.getGigServiceUrl() + "/gig/operation/eid/result?token={token}&endType={endType}";
 
@@ -4021,18 +4007,13 @@ public class ApiController {
 			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);
+
+					Boolean absent = redisTemplate.opsForValue()
+							.setIfAbsent(CacheConstants.EID_RESULT_KEY + token, tokenResult.getBody(), 30, TimeUnit.SECONDS);
+					if (absent) {
+						// 认证成功,则保存
+						sysUserExtRecordService.eidResultHandler(data);
+					}
 				}
 			}
 		}

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

@@ -1,5 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.service;
 
+import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.admin.entity.SysUserExtRecord;
@@ -25,4 +26,11 @@ public interface SysUserExtRecordService extends IService<SysUserExtRecord> {
 	 * @return
 	 */
 	boolean existUserExtRecord();
+
+	/**
+	 * 保存E证通认证结果
+	 *
+	 * @param data
+	 */
+	void eidResultHandler(JSONObject data);
 }

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

@@ -1,6 +1,7 @@
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.entity.SysUserExtRecord;
@@ -10,6 +11,7 @@ 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 lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -19,9 +21,12 @@ import java.time.LocalDateTime;
  * 用户认证相关的扩展信息服务
  */
 @Service
+@AllArgsConstructor
 public class SysUserExtRecordServiceImpl extends ServiceImpl<SysUserExtRecordMapper, SysUserExtRecord>
 		implements SysUserExtRecordService {
 
+	private final SysUserExtRecordService sysUserExtRecordService;
+
 	/**
 	 * 保存E证通认证结果
 	 *
@@ -61,4 +66,26 @@ public class SysUserExtRecordServiceImpl extends ServiceImpl<SysUserExtRecordMap
 		return count > 0;
 	}
 
+	/**
+	 * 保存E证通认证结果
+	 *
+	 * @param data
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void eidResultHandler(JSONObject data) {
+		// 认证成功,则保存
+		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);
+	}
+
 }