Bladeren bron

feat: 甲方接口添加税邦云签约

shc 3 jaren geleden
bovenliggende
commit
a3a17bbe53

+ 33 - 10
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/PartyAController.java

@@ -11,6 +11,7 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.ScorePackageSettleNoteDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.SettlementDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAckBindingCardDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAddMemberDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAgreementSignatureDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperBindingCardCodeDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperTokenDTO;
 import com.qunzhixinxi.hnqz.admin.entity.input.TaskSettleBatch;
@@ -65,7 +66,7 @@ public class PartyAController {
 	 * @return 增员操作结果
 	 */
 	@PostMapping(value = "/tax-helper/member")
-	public R taxHelperAddMember(@RequestBody EncryptedInput input) {
+	public R<?> taxHelperAddMember(@RequestBody EncryptedInput input) {
 
 		// 获取解密的文档
 		String decodeStr = input.getEncryptedInfo();
@@ -81,6 +82,28 @@ public class PartyAController {
 		}
 	}
 
+	/**
+	 * 用户协议签署
+	 * @param input 加密信息
+	 * @return 签署结果
+	 */
+	@PostMapping(value = "/tax-helper/agreement-signature")
+	public R<?> taxHelper(@RequestBody EncryptedInput input){
+
+		// 获取解密的文档
+		String decodeStr = input.getEncryptedInfo();
+
+		// 实际业务处理
+		TaxHelperAgreementSignatureDTO taxHelperAgreementSignatureDTO = JSONUtil.toBean(decodeStr, TaxHelperAgreementSignatureDTO.class);
+		Map<String, String> result = partyAService.userAgreementAuthorization(taxHelperAgreementSignatureDTO);
+
+		if ("2000".equals(result.get("code"))) {
+			return R.ok(result);
+		} else {
+			return R.failed(result);
+		}
+	}
+
 	/**
 	 * 获取税邦云h5认证token
 	 *
@@ -88,7 +111,7 @@ public class PartyAController {
 	 * @return 结果
 	 */
 	@PostMapping(value = "/tax-helper/h5-token")
-	public R taxHelperH5Token(@RequestBody EncryptedInput input) {
+	public R<?> taxHelperH5Token(@RequestBody EncryptedInput input) {
 
 		// 获取解密的文档
 		String decodeStr = input.getEncryptedInfo();
@@ -111,7 +134,7 @@ public class PartyAController {
 	 * @return 结果
 	 */
 	@PostMapping(value = "/tax-helper/binding-card-code")
-	public R taxHelperBindingCardVerification(@RequestBody EncryptedInput input) {
+	public R<?> taxHelperBindingCardVerification(@RequestBody EncryptedInput input) {
 
 		// 获取解密的文档
 		String decodeStr = input.getEncryptedInfo();
@@ -134,7 +157,7 @@ public class PartyAController {
 	 * @return 结果
 	 */
 	@PostMapping(value = "/tax-helper/ack-binding-card")
-	public R taxHelperAckBindingCard(@RequestBody EncryptedInput input) {
+	public R<?> taxHelperAckBindingCard(@RequestBody EncryptedInput input) {
 		// 获取解密的文档
 		String decodeStr = input.getEncryptedInfo();
 
@@ -156,7 +179,7 @@ public class PartyAController {
 	 * @return 结果
 	 */
 	@PostMapping("/score-package")
-	public R createScorePackage(@RequestBody EncryptedInput input) {
+	public R<?> createScorePackage(@RequestBody EncryptedInput input) {
 		// 获取解密的文档
 		String decodeStr = input.getEncryptedInfo();
 
@@ -178,7 +201,7 @@ public class PartyAController {
 	 * @return 结果
 	 */
 	@PutMapping(value = "/score-package/pick-up")
-	public R pickUpScorePackage(@RequestBody EncryptedInput input) {
+	public R<?> pickUpScorePackage(@RequestBody EncryptedInput input) {
 		// 获取解密文档
 		String decodeStr = input.getEncryptedInfo();
 
@@ -200,7 +223,7 @@ public class PartyAController {
 	 * @return 结果
 	 */
 	@DeleteMapping("/score-package/cancellation")
-	public R cancelScorePackage(@RequestBody EncryptedInput input) {
+	public R<?> cancelScorePackage(@RequestBody EncryptedInput input) {
 		// 获取解密文档
 		String decodeStr = input.getEncryptedInfo();
 
@@ -222,7 +245,7 @@ public class PartyAController {
 	 * @return 结果
 	 */
 	@PostMapping("/score-package/evidence")
-	public R submitEvidence(@RequestBody EncryptedInput input) {
+	public R<?> submitEvidence(@RequestBody EncryptedInput input) {
 		// 获取解密文档
 		String decodeStr = input.getEncryptedInfo();
 
@@ -244,7 +267,7 @@ public class PartyAController {
 	 * @return 结果
 	 */
 	@PostMapping(value = "/settlement-note")
-	public R submitSettlement(@RequestBody EncryptedInput input) {
+	public R<?> submitSettlement(@RequestBody EncryptedInput input) {
 		// 获取解密文档
 		String decodeStr = input.getEncryptedInfo();
 
@@ -266,7 +289,7 @@ public class PartyAController {
 	 * @return 结果
 	 */
 	@PostMapping(value = "/settlement")
-	public R doSettlement(@RequestBody EncryptedInput input){
+	public R<?> doSettlement(@RequestBody EncryptedInput input){
 		// 获取解密文档
 		String decodeStr = input.getEncryptedInfo();
 

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

@@ -0,0 +1,19 @@
+package com.qunzhixinxi.hnqz.admin.entity.dto;
+
+import lombok.Data;
+
+/**
+ * {@code TaxHelperAgreementSignatureDTO}
+ * <p>
+ * 税邦云签约dto
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/08/30 16:22:06
+ */
+@Data
+public class TaxHelperAgreementSignatureDTO  extends BaseTaxHelperDTO{
+	private static final long serialVersionUID = -3051890641975938436L;
+
+
+}

+ 6 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/PartyAService.java

@@ -8,6 +8,7 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.ScorePackageSettleNoteDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.SettlementDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAckBindingCardDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAddMemberDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAgreementSignatureDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperBindingCardCodeDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperTokenDTO;
 import com.qunzhixinxi.hnqz.admin.entity.input.TaskSettleBatch;
@@ -104,4 +105,9 @@ public interface PartyAService {
 	 */
 	Map<String, String> doSettlement(List<ExecSettlementDTO> execSettlementDTOList);
 
+	/**
+	 * 签署用户信息
+	 * @return 签署结果
+	 */
+	Map<String, String> userAgreementAuthorization(TaxHelperAgreementSignatureDTO taxHelperAgreementSignatureDTO);
 }

+ 128 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/PartyAServiceImpl.java

@@ -1,6 +1,7 @@
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -10,6 +11,7 @@ import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUserRole;
+import com.qunzhixinxi.hnqz.admin.api.entity.UserAgreementSignatureRecord;
 import com.qunzhixinxi.hnqz.admin.config.TaxNotifyConfig;
 import com.qunzhixinxi.hnqz.admin.entity.MonitoringIndicator;
 import com.qunzhixinxi.hnqz.admin.entity.SysCertResultRecord;
@@ -28,6 +30,7 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.ScorePackageSettleNoteDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.SettlementDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAckBindingCardDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAddMemberDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAgreementSignatureDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperBindingCardCodeDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperTokenDTO;
 import com.qunzhixinxi.hnqz.admin.entity.input.Record;
@@ -42,6 +45,7 @@ import com.qunzhixinxi.hnqz.admin.enums.PackageFinishStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysCertResultRecordMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.UserAgreementSignatureRecordMapper;
 import com.qunzhixinxi.hnqz.admin.service.MonitoringIndicatorService;
 import com.qunzhixinxi.hnqz.admin.service.PartyAService;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
@@ -61,13 +65,17 @@ import com.qunzhixinxi.hnqz.common.taxhelper.config.TaxHelperConfig;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperAddMemberModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperBindingCardConfirmModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperBindingCardVerificationModel;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperGetUserAgreementModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperH5BizTokenModel;
 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.TaxHelperAddMemberRequest;
 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.TaxHelperGetUserAgreementRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperH5BizTokenRequest;
 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.qunzhixinxi.hnqz.common.taxhelper.enums.TaxHelperCertStatus;
 import com.qunzhixinxi.hnqz.common.taxhelper.service.TaxHelperService;
@@ -178,6 +186,8 @@ public class PartyAServiceImpl implements PartyAService {
 
 	private final RedisTemplate redisTemplate;
 
+	private final UserAgreementSignatureRecordMapper userAgreementSignatureRecordMapper;
+
 	/**
 	 * 税邦云增员
 	 *
@@ -254,6 +264,121 @@ public class PartyAServiceImpl implements PartyAService {
 		return getResultMap(CommonConstants.CLIENT_ERROR_CODE + "", response.getMessage());
 	}
 
+	/**
+	 * 回传用户协议授权信息
+	 *
+	 * @return 回传结果
+	 */
+	public Map<String, String> userAgreementAuthorization(TaxHelperAgreementSignatureDTO taxHelperAgreementSignatureDTO) {
+
+		// 获取用户并校验
+		SysUser member = userService.getOne(Wrappers.<SysUser>query()
+				.eq("username", taxHelperAgreementSignatureDTO.getUsername())
+				.eq("dept_id", taxHelperAgreementSignatureDTO.getDeptId()));
+		String info = checkoutMemberInfo(member, CommonConstants.ADD_MEMBER_METHOD);
+		if (StringUtils.isNotEmpty(info)) {
+			return getResultMap("4000", info);
+		}
+
+		// 校验用户是否已经签署了信息
+		if (member.getTaxHelperAgreementSignature() == 1) {
+			return getResultMap("2000", "协议已签署");
+		}
+
+		// 获取部门并校验
+		SysDept dept = deptService.getById(taxHelperAgreementSignatureDTO.getDeptId());
+		info = checkoutDeptInfo(dept);
+		if (StringUtils.isNotEmpty(info)) {
+			return getResultMap("4000", info);
+		}
+
+		// 校验结算信息
+		SysDeptSub query = new SysDeptSub();
+		query.setDeptId(dept.getDeptId());
+		query.setSubjectType(SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
+		query.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
+		SysDeptSub deptSub = sysDeptSubService.getOne(Wrappers.query(query));
+		info = checkoutDeptSubInfo(deptSub, ChannelEnum.TAX_HELPER, null);
+		if (StringUtils.isNotEmpty(info)) {
+			return getResultMap("4000", info);
+		}
+
+		// 签约开始
+		log.info("【{}({})】,获取签约信息", member.getRealname(), member.getUsername());
+		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(null);
+		record.setSubjectType(1);
+		record.setMethod("税邦云用户协议");
+		record.setUserId(member.getUserId());
+		sysCertResultRecordMapper.insert(record);
+
+
+		if (!userAgreement.success()) {
+			return getResultMap("4000", userAgreement.getMessage());
+		}
+
+
+		// 签约
+		log.info("【{}({})】,签约开始", member.getRealname(), member.getUsername());
+		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(member.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(null);
+		record.setSubjectType(1);
+		record.setMethod("税邦云回传用户协议授权信息");
+		record.setUserId(member.getUserId());
+		sysCertResultRecordMapper.insert(record);
+
+		if (response.success()) {
+			// 签署协议
+			UserAgreementSignatureRecord uasr = new UserAgreementSignatureRecord();
+			uasr.setAgreement(userAgreement.getData());
+			uasr.setUserId(member.getUserId());
+			uasr.setCreateTime(LocalDateTime.now());
+			uasr.setTarget(1);
+			uasr.setSignTime(signTime);
+			userAgreementSignatureRecordMapper.insert(uasr);
+
+
+			// 修改用户状态
+			member.setUpdateTime(LocalDateTime.now());
+			member.setTaxHelperAgreementSignature(1);
+			userService.updateById(member);
+
+
+			return getResultMap("2000", response.getMessage());
+		}
+		return getResultMap("4000", response.getMessage());
+	}
+
+
 	/**
 	 * 获取税邦云H5 token
 	 *
@@ -1117,7 +1242,7 @@ public class PartyAServiceImpl implements PartyAService {
 		for (WmScorePackageSettleNote note : noteList) {
 			tmp = tmp.add(note.getSettleAmount());
 		}
-		String errInfo = checkoutSettleLimit(member,noteList.stream().mapToInt(WmScorePackageSettleNote::getId).boxed()
+		String errInfo = checkoutSettleLimit(member, noteList.stream().mapToInt(WmScorePackageSettleNote::getId).boxed()
 				.collect(Collectors.toList()), deptSub.getLimitAmount(), tmp);
 		if (StringUtils.isNotEmpty(errInfo)) {
 			log.error(errInfo);
@@ -1150,12 +1275,12 @@ public class PartyAServiceImpl implements PartyAService {
 	 * 校验结算限制
 	 *
 	 * @param user         被校验者
-	 * @param noteIds 	   结算记录id
+	 * @param noteIds      结算记录id
 	 * @param limitAmount  限制金额
 	 * @param settleAmount 本次上传证据链累计金额
 	 * @return 校验错误信息,如果没有错误返回{@code null}
 	 */
-	private String checkoutSettleLimit(SysUser user, List<Integer> noteIds ,BigDecimal limitAmount, BigDecimal settleAmount) {
+	private String checkoutSettleLimit(SysUser user, List<Integer> noteIds, BigDecimal limitAmount, BigDecimal settleAmount) {
 
 		String info = null;