Pārlūkot izejas kodu

fix: 修改税邦云回调逻辑

shc 3 gadi atpakaļ
vecāks
revīzija
8cd08b74ad

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

@@ -24,7 +24,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
-import com.qunzhixinxi.hnqz.admin.config.UpmsConfig;
+import com.qunzhixinxi.hnqz.admin.config.onfig;
 import com.qunzhixinxi.hnqz.admin.entity.*;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmPackageExportApiInput;
 import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;

+ 44 - 53
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmTaxHelperController.java

@@ -244,7 +244,7 @@ public class WmTaxHelperController {
 				return R.ok(response);
 			} else {
 				// 上次认证成功
-				if (CommonConstants.LAST_STATUS_SUCCESS_CODE == Integer.parseInt(response.getData())){
+				if (CommonConstants.LAST_STATUS_SUCCESS_CODE == Integer.parseInt(response.getData())) {
 					// 修改用户状态
 					user.setUpdateTime(LocalDateTime.now());
 					if (Objects.equals(user.getCertStatus(), TaxHelperCertStatus.ADD_MEMBER.getCode())
@@ -328,7 +328,7 @@ public class WmTaxHelperController {
 			record.setMethod("E证通认证状态查询");
 			record.setUserId(user.getUserId());
 			sysCertResultRecordMapper.insert(record);
-			if (response.success()){
+			if (response.success()) {
 				// 认证成功更新用户状态
 				if ("1".equals(status)) {
 					switch (certStatus) {
@@ -736,14 +736,23 @@ public class WmTaxHelperController {
 	/**
 	 * 结算回调操作
 	 *
-	 * @param userId  用户id
-	 * @param body    回调内容(加密)
+	 * @param userId 用户id
+	 * @param body   回调内容(加密)
 	 * @return 回调结果
 	 */
 	@Inner(value = false)
 	@PostMapping(value = "/{user_id}/settlementNotify")
 	public TaxHelperResponse taxHelperSettlementNotify(@PathVariable(value = "user_id") String userId,
 													   @RequestBody String body) {
+		// 判断当前用户是否已经存在回调操作,避免多次回调
+		String cacheKey = CacheConstants.TAX_HELPER_SETTLEMENT_NOTIFY_KEY + userId;
+		boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, userId, 3, TimeUnit.SECONDS);
+
+		if (!absent) {
+			log.error("当前用户:{},正在处理结算回调操作。", userId);
+			return new TaxHelperResponse("4000", "结算通知回调重复");
+		}
+
 		try {
 			// 获取税邦云账号
 			SysSocialDetails condition = new SysSocialDetails();
@@ -755,35 +764,21 @@ public class WmTaxHelperController {
 			String resInfo = taxHelperService.decryptResp(body, randomKey);
 			JSONObject jsonObject = JSONUtil.parseObj(resInfo);
 			String code = jsonObject.getStr("code");
+			String streamId = jsonObject.getStr("streamId");
 
+			int settleStatus = 1;
 			// 回调成功操作
-			if ("2000".equals(code)) {
-				String streamId = jsonObject.getStr("streamId");
-
-				if (StringUtils.isEmpty(streamId)) {
-					log.info("streamId获取失败,{}", userId);
-				} else {
-					// 判断当前用户是否已经存在回调操作,避免多次回调
-					String cacheKey = CacheConstants.TAX_HELPER_SETTLEMENT_NOTIFY_KEY + userId;
-
-					boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, userId, 3, TimeUnit.SECONDS);
+			if (!"2000".equals(code)) {
+				settleStatus = 2;
+			}
 
-					if (!absent) {
-						log.error("当前用户:{},正在处理结算回调操作。", userId);
-						return new TaxHelperResponse("4000", "结算通知回调重复");
-					}
+			settleNoteService.settleNotify(streamId, settleStatus, true);
 
-					settleNoteService.settleNotify(streamId, true);
-				}
-				return new TaxHelperResponse("2000", "结算通知回调成功");
-			} else {
-				return new TaxHelperResponse("4000", "结算通知回调失败");
-			}
 
 		} catch (Exception e) {
 			log.error("税邦云解密失败");
-			return new TaxHelperResponse("4000", "回调信息解密失败");
 		}
+		return new TaxHelperResponse("2000", "结算通知回调成功");
 	}
 
 
@@ -798,8 +793,18 @@ public class WmTaxHelperController {
 	@Inner(value = false)
 	@PostMapping(value = "/{user_id}/{version}/settlementNotify")
 	public TaxHelperResponse taxHelperSettlementNotifyV2(@PathVariable(value = "user_id") String userId,
-													   @PathVariable(value = "version") String version,
-													   @RequestBody String body) {
+														 @PathVariable(value = "version") String version,
+														 @RequestBody String body) {
+
+		// 判断当前用户是否已经存在回调操作,避免多次回调
+		String cacheKey = CacheConstants.TAX_HELPER_SETTLEMENT_NOTIFY_KEY + userId;
+
+		boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, userId, 3, TimeUnit.SECONDS);
+
+		if (!absent) {
+			log.error("当前用户:{},正在处理结算回调操作。", userId);
+			return new TaxHelperResponse("4000", "结算通知回调重复");
+		}
 
 		try {
 			// 获取税邦云账号
@@ -812,40 +817,26 @@ public class WmTaxHelperController {
 			String resInfo = taxHelperService.decryptResp(body, randomKey);
 			JSONObject jsonObject = JSONUtil.parseObj(resInfo);
 			String code = jsonObject.getStr("code");
+			String streamId = jsonObject.getStr("streamId");
 
+			int settleStatus = 1;
 			// 回调成功操作
-			if ("2000".equals(code)) {
-				String streamId = jsonObject.getStr("streamId");
-
-				if (StringUtils.isEmpty(streamId)) {
-					log.info("streamId获取失败,{}", userId);
-				} else {
-					// 判断当前用户是否已经存在回调操作,避免多次回调
-					String cacheKey = CacheConstants.TAX_HELPER_SETTLEMENT_NOTIFY_KEY + userId;
-
-					boolean absent = redisTemplate.opsForValue().setIfAbsent(cacheKey, userId, 3, TimeUnit.SECONDS);
-
-					if (!absent) {
-						log.error("当前用户:{},正在处理结算回调操作。", userId);
-						return new TaxHelperResponse("4000", "结算通知回调重复");
-					}
+			if (!"2000".equals(code)) {
+				settleStatus = 2;
+			}
 
-					R r =  settleNoteService.settleNotify(streamId, !userId.contains("|"));
+			R<?> r = settleNoteService.settleNotify(streamId, settleStatus, !userId.contains("|"));
 
-					//回调
-					if ("v2".equals(version)){
-						List<WmScorePackageSettleNote> noteList = (List<WmScorePackageSettleNote>) r.getData();
-						partyARetryService.doRetryableSettleNoteCallBack(noteList);
-					}
-				}
-				return new TaxHelperResponse("2000", "结算通知回调成功");
-			} else {
-				return new TaxHelperResponse("4000", "结算通知回调失败");
+			//回调
+			if ("v2".equals(version)) {
+				List<WmScorePackageSettleNote> noteList = (List<WmScorePackageSettleNote>) r.getData();
+				partyARetryService.doRetryableSettleNoteCallBack(noteList);
 			}
 
+
 		} catch (Exception e) {
 			log.error("税邦云解密失败");
-			return new TaxHelperResponse("4000", "回调信息解密失败");
 		}
+		return new TaxHelperResponse("2000", "结算通知回调成功");
 	}
 }

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

@@ -69,9 +69,10 @@ public interface WmScorePackageSettleNoteService extends IService<WmScorePackage
 	/**
 	 * 税邦云 结算回调
 	 *
-	 * @param streamId
+	 * @param streamId 流水号
+	 * @param settleStatus 结算状态
 	 * @param izSingle 是否是单一计算
 	 * @return
 	 */
-	R settleNotify(String streamId, Boolean izSingle);
+	R<?> settleNotify(String streamId, Integer settleStatus, Boolean izSingle);
 }

+ 10 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageSettleNoteServiceImpl.java

@@ -451,7 +451,7 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 
 		SysUser sysUser = sysUserService.getById(note.getUserId());
 		if (redisTemplate.hasKey(CacheConstants.SETTLE_PACKAGE_KEY + note.getId())) {
-			return R.failed("结算对象-" + sysUser.getRealname() + ":正在结算,请勿重复结算");
+			return R.failed("结算对象-" + sysUser.getRealname() + ":");
 		}
 		if (SubjectTypeEnum.TYPE_RENLIJIA.getCode().equals(note.getSubType())) {
 			log.info("结算渠道 {}", SubjectTypeEnum.TYPE_RENLIJIA.getDesc());
@@ -824,7 +824,7 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 	}
 
 	@Override
-	public R settleNotify(String streamId, Boolean izSingle) {
+	public R settleNotify(String streamId, Integer settleStatus, Boolean izSingle) {
 
 
 		WmScorePackageSettleNote query = new WmScorePackageSettleNote();
@@ -836,14 +836,14 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 			if (izSingle) {
 				WmScorePackageSettleNote updateEntity = new WmScorePackageSettleNote();
 				updateEntity.setId(tmp.getId());
-				updateEntity.setSettleNoteStatus(1);
+				updateEntity.setSettleNoteStatus(settleStatus);
 				updateEntity.setNotifyTime(LocalDateTime.now());
 				this.baseMapper.updateById(updateEntity);
 			} else {
 				List<WmScorePackageSettleNote> updateList = noteList.stream().map(note -> {
 					WmScorePackageSettleNote updateEntity = new WmScorePackageSettleNote();
 					updateEntity.setId(note.getId());
-					updateEntity.setSettleNoteStatus(1);
+					updateEntity.setSettleNoteStatus(settleStatus);
 					updateEntity.setNotifyTime(LocalDateTime.now());
 					return updateEntity;
 				}).collect(Collectors.toList());
@@ -854,10 +854,15 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 			log.info("更新积分包状态:{}", tmp);
 			WmScorePackage wmScorePackage = new WmScorePackage();
 			wmScorePackage.setId(tmp.getPackageId());
-			wmScorePackage.setSettleStatus(1);
+			wmScorePackage.setSettleStatus(settleStatus);
 			wmScorePackage.setUpdateTime(LocalDateTime.now());
 			wmScorePackageMapper.updateById(wmScorePackage);
 
+			// 如果结算失败删除缓存
+			if (settleStatus == 2 ){
+				redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + tmp.getId());
+			}
+
 		} else {
 			log.info("回调成功,流水号异常: {}", streamId);
 		}