Prechádzať zdrojové kódy

feat: 税邦云用户协议签署

shc 3 rokov pred
rodič
commit
2b8bb726fb

+ 23 - 0
db/v2.0/0810.sql

@@ -0,0 +1,23 @@
+USE `hnqzx`;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for user_agreement_signature_record
+-- ----------------------------
+DROP TABLE IF EXISTS `user_agreement_signature_record`;
+CREATE TABLE `user_agreement_signature_record`
+(
+    `id`          INT AUTO_INCREMENT COMMENT 'id',
+    `user_id`     INT      NOT NULL COMMENT '用户id',
+    `target`      INT(1)  NOT NULL COMMENT '协议方',
+    `agreement`   MEDIUMTEXT        DEFAULT NULL COMMENT '协议文本',
+    `sign_time`   DATETIME NOT NULL COMMENT '签署时间',
+    `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB
+  AUTO_INCREMENT = 9
+  DEFAULT CHARSET = utf8mb4 COMMENT ='用户协议签名';
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 1 - 1
hnqz-common/hnqz-common-taxhelper/src/main/java/com/logosdata/security/util/SignUtils.java

@@ -142,7 +142,7 @@ public final class SignUtils {
 			map.put("privateKey", "/excel/privatekey.pem");
 		}
 		if (osName.indexOf("mac") != -1){
-			map.put("publicKey", "/Users/xuqiqi/IdeaProjects/logos/dzdk-api-gateway/publickey.pem");
+			map.put("publicKey", "/Users/jimmy/Develops/publickey.pem");
 			map.put("privateKey", "/Users/xuqiqi/IdeaProjects/logos/dzdk-api-gateway/privatekey.pem");
 		}
 		if (osName.indexOf("windows") != -1) {

+ 1 - 0
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/common/CommonConstants.java

@@ -14,6 +14,7 @@ public interface CommonConstants {
 	 * 登录时间参数格式化格式模板
 	 */
 	String LOGIN_DATE_TIME_FORMAT_PATTERN = "yyyyMMddHHmmss";
+	String DEFAULT_DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss";
 
 	//~=======================================[ 状态码常量 ]=========================================
 	/**

+ 31 - 0
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/model/TaxHelperGetUserAgreementModel.java

@@ -0,0 +1,31 @@
+package com.qunzhixinxi.hnqz.common.taxhelper.entity.model;
+
+import com.qunzhixinxi.hnqz.common.taxhelper.config.TaxHelperConfig;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * {@code TaxHelperGetUserAgreementModel}
+ * <p>
+ * 获取用户协议内容模型
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/08/09 16:24:37
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TaxHelperGetUserAgreementModel extends TaxHelperModel {
+	private static final long serialVersionUID = 3735101469690170491L;
+
+	/**
+	 * 企业的统一社会信用代码
+	 */
+	private String enterpriseCode;
+
+	public TaxHelperGetUserAgreementModel(TaxHelperConfig config){
+		this.appId = config.getAppId();
+		this.appSecrete = config.getAppSecrete();
+		this.queryUrl = config.getQueryUrl();
+	}
+}

+ 46 - 0
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/model/TaxHelperUserAgreementAuthorizationModel.java

@@ -0,0 +1,46 @@
+package com.qunzhixinxi.hnqz.common.taxhelper.entity.model;
+
+import com.qunzhixinxi.hnqz.common.taxhelper.config.TaxHelperConfig;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * {@code TaxHelperUserAgreementAuthorizationModel}
+ * <p>
+ * 回传用户协议授权信息
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/08/09 17:30:49
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TaxHelperUserAgreementAuthorizationModel extends TaxHelperModel{
+
+
+	private static final long serialVersionUID = 3089361332652564285L;
+
+	/**
+	 * 统一社会信用吗
+	 */
+	private String enterpriseCode;
+
+	/**
+	 * 身份证
+	 */
+	private String idCard;
+
+	/**
+	 * 签署时间 yyyy-MM-dd hh:mm:ss
+	 */
+	private String authorizationTime;
+
+
+	public TaxHelperUserAgreementAuthorizationModel(TaxHelperConfig config){
+		this.appId = config.getAppId();
+		this.appSecrete = config.getAppSecrete();
+		this.queryUrl = config.getQueryUrl();
+	}
+
+
+}

+ 28 - 0
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/request/TaxHelperGetUserAgreementRequest.java

@@ -0,0 +1,28 @@
+package com.qunzhixinxi.hnqz.common.taxhelper.entity.request;
+
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperGetUserAgreementModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * {@code TaxHelperGetUserAgreementRequest}
+ * <p>
+ * TODO
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/08/09 16:29:14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TaxHelperGetUserAgreementRequest extends TaxHelperRequest {
+
+	private final static String PATH = "/lgsby/api/getUserAgreement";
+
+
+	public TaxHelperGetUserAgreementRequest(TaxHelperGetUserAgreementModel bizModel) {
+		this.bizModel = bizModel;
+		this.queryUrl = String.format("%s%s", bizModel.getQueryUrl(), PATH);
+	}
+
+}

+ 28 - 0
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/request/TaxHelperUserAgreementAuthorizationRequest.java

@@ -0,0 +1,28 @@
+package com.qunzhixinxi.hnqz.common.taxhelper.entity.request;
+
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperGetUserAgreementModel;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperUserAgreementAuthorizationModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * {@code TaxHelperUserAgreementAuthorizationRequest}
+ * <p>
+ * TODO
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/08/09 17:43:49
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TaxHelperUserAgreementAuthorizationRequest extends TaxHelperRequest{
+
+	private final static String PATH = "/lgsby/api/userAgreementAuthorization";
+
+
+	public TaxHelperUserAgreementAuthorizationRequest(TaxHelperUserAgreementAuthorizationModel bizModel) {
+		this.bizModel = bizModel;
+		this.queryUrl = String.format("%s%s", bizModel.getQueryUrl(), PATH);
+	}
+}

+ 76 - 1
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/service/TaxHelperService.java

@@ -15,7 +15,9 @@ import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperBindingCardCo
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperBindingCardVerificationModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperECheckModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperEidTokenModel;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperGetUserAgreementModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperSettlementModel;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperUserAgreementAuthorizationModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperAppletCheckFaceRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperBindingCardVerificationRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperModel;
@@ -24,6 +26,7 @@ import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperAppletBizTo
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperBindingCardConfirmRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperECheckRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperEidTokenRequest;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperGetUserAgreementRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperH5BizTokenRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperLoginRequest;
 import com.logosdata.security.SM3;
@@ -31,6 +34,7 @@ import com.logosdata.security.SM4;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperLoginModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperSettlementRequest;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperUserAgreementAuthorizationRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.response.TaxHelperResponse;
 import com.logosdata.security.util.SignUtils;
 import com.qunzhixinxi.hnqz.common.taxhelper.util.HttpUtils;
@@ -46,6 +50,7 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 
 import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.Map;
 
@@ -246,6 +251,44 @@ public class TaxHelperService {
 		return response;
 	}
 
+	/**
+	 * 获取用户协议内容接口
+	 *
+	 * @param request 请求
+	 * @return 结果字符串
+	 * @throws Exception
+	 */
+	@TaxHelper(value = "getUserAgreement")
+	public TaxHelperResponse getUserAgreement(TaxHelperGetUserAgreementRequest request) {
+		TaxHelperResponse response = null;
+		try {
+			response = process(request);
+		} catch (Exception e) {
+			log.error("税邦云用户协议内容获取失败:{}", e.getMessage());
+			response = customResponse(e.getMessage());
+		}
+		return response;
+	}
+
+	/**
+	 * 回传用户协议授权信息接口
+	 *
+	 * @param request 请求
+	 * @return 结果字符串
+	 * @throws Exception
+	 */
+	@TaxHelper(value = "userAgreementAuthorization")
+	public TaxHelperResponse userAgreementAuthorization(TaxHelperUserAgreementAuthorizationRequest request) {
+		TaxHelperResponse response = null;
+		try {
+			response = process(request);
+		} catch (Exception e) {
+			log.error("税邦云用户协议内容获取失败:{}", e.getMessage());
+			response = customResponse(e.getMessage());
+		}
+		return response;
+	}
+
 	/**
 	 * 自定义响应结果
 	 *
@@ -345,6 +388,8 @@ public class TaxHelperService {
 			String status = jsonObject.getString("status");
 			// 获取数据内容
 			String data = jsonObject.getString("data");
+			// 用户协议
+			String userAgreement = jsonObject.getString("userAgreement");
 
 			// 获取小程序token的时候没有code
 			if (StringUtils.isEmpty(code)) {
@@ -367,7 +412,12 @@ public class TaxHelperService {
 						if (StringUtils.isNotEmpty(status)) {
 							data = status;
 						} else {
-							msg = StringUtils.isEmpty(msg) ? data : msg;
+							// 判断是否是获取用户协议
+							if (StringUtils.isNotEmpty(userAgreement)) {
+								data = userAgreement;
+							} else {
+								msg = StringUtils.isEmpty(msg) ? data : msg;
+							}
 						}
 					}
 				}
@@ -424,6 +474,31 @@ public class TaxHelperService {
 	// 	System.out.println(s1);
 	// 	System.out.println("7d301043970be6b51fd6a89cc245c936d72ea4ac3560585136d5dd8af10e06cb".length());
 	//
+	//
+	// 	// System.out.println("====================================================");
+	// 	//
+	// 	// TaxHelperGetUserAgreementModel model = new TaxHelperGetUserAgreementModel(taxHelperConfig);
+	// 	// model.setEnterpriseCode("91430181MA4RJ12345");
+	// 	// TaxHelperGetUserAgreementRequest taxHelperGetUserAgreementRequest = new TaxHelperGetUserAgreementRequest(model);
+	// 	// taxHelperGetUserAgreementRequest.setKey(randomKey);
+	// 	// TaxHelperResponse userAgreement = service.getUserAgreement(taxHelperGetUserAgreementRequest);
+	// 	// System.out.println(userAgreement.getData());
+	//
+	//
+	// 	System.out.println("====================================================");
+	// 	TaxHelperUserAgreementAuthorizationModel model1 = new TaxHelperUserAgreementAuthorizationModel(taxHelperConfig);
+	// 	model1.setEnterpriseCode("91430181MA4RJ12345");
+	// 	model1.setIdCard("110227200001010570");
+	//
+	// 	model1.setAuthorizationTime("2021-08-09 12:56:12");
+	//
+	// 	TaxHelperUserAgreementAuthorizationRequest rq1 = new TaxHelperUserAgreementAuthorizationRequest(model1);
+	// 	rq1.setKey(randomKey);
+	// 	TaxHelperResponse response1 = service.userAgreementAuthorization(rq1);
+	// 	System.out.println(response1);
+	//
+	// }
+
 	// 	System.out.println("================================================================================================================");
 	// 	TaxHelperAddMemberModel addMemberModel = new TaxHelperAddMemberModel(taxHelperConfig);
 	// 	addMemberModel.setEnterpriseCode("91430181MA4RJ12345");

+ 41 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/UserAgreementSignatureRecord.java

@@ -0,0 +1,41 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * {@code UserAgreementSignatureRecord}
+ * <p>
+ * 用户协议实体
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/08/10 11:15:54
+ */
+@Data
+@TableName(value = "user_agreement_signature_record")
+public class UserAgreementSignatureRecord implements Serializable {
+
+
+	private static final long serialVersionUID = 7659864427981671591L;
+
+	@TableId(value = "id", type = IdType.AUTO)
+	public Integer id;
+
+	private Integer userId;
+
+	private  Integer target;
+
+	private String agreement;
+
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime signTime;
+
+	private LocalDateTime createTime;
+}

+ 127 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaxHelperController.java

@@ -1,5 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
@@ -9,6 +10,7 @@ import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysSocialDetails;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
+import com.qunzhixinxi.hnqz.admin.api.entity.UserAgreementSignatureRecord;
 import com.qunzhixinxi.hnqz.admin.config.TaxNotifyConfig;
 import com.qunzhixinxi.hnqz.admin.entity.SysCertResultRecord;
 import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
@@ -18,10 +20,12 @@ import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysCertResultRecordMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysSocialDetailsMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.UserAgreementSignatureRecordMapper;
 import com.qunzhixinxi.hnqz.admin.service.*;
 import com.qunzhixinxi.hnqz.admin.service.retry.PartyARetryService;
 import com.qunzhixinxi.hnqz.common.core.constant.enums.LoginTypeEnum;
 import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
@@ -33,12 +37,16 @@ import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperBindingCardCo
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperBindingCardVerificationModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperECheckModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperEidTokenModel;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperGetUserAgreementModel;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperUserAgreementAuthorizationModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperAddMemberRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperAppletBizTokenRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperBindingCardConfirmRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperBindingCardVerificationRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperECheckRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperEidTokenRequest;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperGetUserAgreementRequest;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperUserAgreementAuthorizationRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.response.TaxHelperResponse;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.vo.TaxHelperAddMemberVo;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.vo.TaxHelperBingCardConfirmVo;
@@ -96,6 +104,7 @@ public class WmTaxHelperController {
 	private final WmScorePackageSettleNoteService settleNoteService;
 	private final SysDeptSubService sysDeptSubService;
 	private final PartyARetryService partyARetryService;
+	private final UserAgreementSignatureRecordMapper userAgreementSignatureRecordMapper;
 
 
 	/**
@@ -104,7 +113,7 @@ public class WmTaxHelperController {
 	 * @param vo 税邦云增员vo
 	 * @return 返回增员结果
 	 */
-
+	@SysLog(value = "税邦云增员")
 	@PostMapping(value = "/addMember")
 	public R taxHelperAddMember(@RequestBody TaxHelperAddMemberVo vo) {
 
@@ -178,11 +187,124 @@ public class WmTaxHelperController {
 		}
 	}
 
+	/**
+	 * 回传用户协议授权信息
+	 *
+	 * @return 回传结果
+	 */
+	@SysLog(value = "税邦云回传用户协议授权信息")
+	@PostMapping(value = "/agreement-signature")
+	public R<?> userAgreementAuthorization() {
+		HnqzUser hnqzUser = SecurityUtils.getUser();
+
+		// 判断当前用户是否已经存在回调操作,避免同时多次回调
+		String cacheKey = CacheConstants.TAX_HELPER_CHECK_FACE_NOTIFY_KEY + hnqzUser.getId();
+		if (redisTemplate.hasKey(cacheKey)) {
+			log.error("当前用户:{},正在处理回调操作。", hnqzUser.getId());
+			R.failed("系统正在处理,请稍后");
+		} else {
+			// 加锁
+			redisTemplate.opsForValue().set(cacheKey, IdUtil.fastSimpleUUID(), 5, TimeUnit.SECONDS);
+		}
+
+		// 获取用户
+		SysUser user = userService.getById(hnqzUser.getId());
+
+		// 校验用户是否已经签署了信息
+		if(user.getTaxHelperAgreementSignature() == 0){
+			return R.ok("已经签署");
+		}
+
+		// 获取结算主体
+		SysDept dept = deptService.getById(user.getDeptId());
+
+		SysDeptSub query = new SysDeptSub();
+		query.setDeptId(user.getDeptId());
+		query.setSubjectType(SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
+		query.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
+		SysDeptSub deptSub = sysDeptSubService.getOne(Wrappers.query(query));
+		if (null != deptSub && StringUtils.isNotEmpty(deptSub.getAppId())) {
+			TaxHelperConfig config = new TaxHelperConfig();
+			config.setAppId(deptSub.getAppId());
+			config.setAppSecrete(deptSub.getAppSecret());
+			config.setQueryUrl(deptSub.getQueryUrl());
+
+			// 获取
+			TaxHelperGetUserAgreementModel getUserAgreementModel = new TaxHelperGetUserAgreementModel(config);
+			getUserAgreementModel.setEnterpriseCode(dept.getTaxCode());
+			TaxHelperGetUserAgreementRequest getUserAgreementRequest = new TaxHelperGetUserAgreementRequest(getUserAgreementModel);
+			TaxHelperResponse userAgreement = taxHelperService.getUserAgreement(getUserAgreementRequest);
+
+			// 记录认证结果
+			SysCertResultRecord record = new SysCertResultRecord();
+			record.setCode(userAgreement.getCode());
+			record.setCreateTime(LocalDateTime.now());
+			record.setDeptId(dept.getDeptId());
+			record.setMessage(StringUtils.isNotEmpty(userAgreement.getMessage()) ? userAgreement.getMessage() : "无");
+			record.setStatus(StringUtils.isNotEmpty(userAgreement.getData()) ? userAgreement.getData() : null);
+			record.setSubjectType(1);
+			record.setMethod("税邦云用户协议");
+			record.setUserId(user.getUserId());
+			sysCertResultRecordMapper.insert(record);
+
+
+			if (!userAgreement.success()){
+				return R.failed(userAgreement);
+			}
+
+
+			//
+			TaxHelperUserAgreementAuthorizationModel model = new TaxHelperUserAgreementAuthorizationModel(config);
+			model.setEnterpriseCode(dept.getTaxCode());
+			LocalDateTime signTime = LocalDateTime.now();
+			model.setAuthorizationTime(LocalDateTimeUtil.format(signTime, CommonConstants.DEFAULT_DATE_TIME_FORMAT_PATTERN));
+			model.setIdCard(user.getIdCardNumber());
+
+			TaxHelperUserAgreementAuthorizationRequest request = new TaxHelperUserAgreementAuthorizationRequest(model);
+			TaxHelperResponse response = taxHelperService.userAgreementAuthorization(request);
+
+			// 记录认证结果
+			record.setCode(response.getCode());
+			record.setCreateTime(LocalDateTime.now());
+			record.setDeptId(dept.getDeptId());
+			record.setMessage(StringUtils.isNotEmpty(response.getMessage()) ? response.getMessage() : "无");
+			record.setStatus(StringUtils.isNotEmpty(response.getData()) ? response.getData() : null);
+			record.setSubjectType(1);
+			record.setMethod("税邦云回传用户协议授权信息");
+			record.setUserId(user.getUserId());
+			sysCertResultRecordMapper.insert(record);
+
+			if (response.success()) {
+				// 签署协议
+				UserAgreementSignatureRecord uasr = new UserAgreementSignatureRecord();
+				uasr.setAgreement(userAgreement.getData());
+				uasr.setUserId(user.getUserId());
+				uasr.setCreateTime(LocalDateTime.now());
+				uasr.setTarget(1);
+				uasr.setSignTime(signTime);
+				userAgreementSignatureRecordMapper.insert(uasr);
+
+
+				// 修改用户状态
+				user.setUpdateTime(LocalDateTime.now());
+				user.setTaxHelperAgreementSignature(1);
+				userService.updateById(user);
+
+
+				return R.ok(response);
+			}
+			return R.failed(response);
+		}
+		return R.failed("该结算主体信息不全,不支持税邦云操作");
+
+	}
+
 	/**
 	 * 获取税邦云E证通认证token
 	 *
 	 * @return 返回获取结果
 	 */
+	@SysLog(value = "获取税邦云E证通认证token")
 	@GetMapping(value = "/e-token")
 	public R taxHelperECheckToken() {
 
@@ -272,6 +394,7 @@ public class WmTaxHelperController {
 	 *
 	 * @return 回调结果
 	 */
+	@SysLog(value = "E证通回调")
 	@GetMapping(value = "/e-check-result")
 	public R taxHelperECheckFaceNotify(@RequestParam String eCheckToken) {
 
@@ -377,6 +500,7 @@ public class WmTaxHelperController {
 	 *
 	 * @return 返回获取结果
 	 */
+	@SysLog(value = "获取税邦云认证token")
 	@GetMapping(value = "/bizToken")
 	public R taxHelperAppletBizToken() {
 
@@ -583,6 +707,7 @@ public class WmTaxHelperController {
 	 * @param phone      手机号
 	 * @return 获取信息
 	 */
+	@SysLog(value = "获取税邦云绑卡验证码")
 	@GetMapping(value = "/bindingCardVerification")
 	public R bindingCardVerification(@RequestParam(value = "payAccount") String payAccount,
 									 @RequestParam(value = "phone") String phone) {
@@ -643,6 +768,7 @@ public class WmTaxHelperController {
 	 * @param vo 绑卡确认vo
 	 * @return 获取信息
 	 */
+	@SysLog(value = "绑卡确认")
 	@PostMapping(value = "/bindingCardConfirm")
 	public R bindingCardVerification(@RequestBody TaxHelperBingCardConfirmVo vo) {
 

+ 18 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/UserAgreementSignatureRecordMapper.java

@@ -0,0 +1,18 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.api.entity.UserAgreementSignatureRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * {@code UserAgreementSignatureRecord}
+ * <p>
+ * TODO
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/08/10 11:24:17
+ */
+@Mapper
+public interface UserAgreementSignatureRecordMapper extends BaseMapper<UserAgreementSignatureRecord> {
+}

+ 1 - 1
pom.xml

@@ -43,7 +43,7 @@
 		<spring.checkstyle.version>0.0.22</spring.checkstyle.version>
 		<git.commit.version>2.2.5</git.commit.version>
 		<spring-boot-admin.version>2.2.3</spring-boot-admin.version>
-		<hutool.version>5.3.7</hutool.version>
+		<hutool.version>5.7.7</hutool.version>
 		<kaptcha.version>1.2.0</kaptcha.version>
 		<swagger.fox.version>2.9.2</swagger.fox.version>
 		<knife4j.version>2.0.3</knife4j.version>