From 3fbb39474e796aa610e013194fae15fc4974a759 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Fri, 3 Nov 2023 16:43:33 +0800 Subject: [PATCH] =?UTF-8?q?update=E6=A0=A1=E9=AA=8C=E6=9C=AA=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/SpringBootTestController.java | 3 +- .../jsowell/adapay/service/AdapayService.java | 17 ++++--- .../impl/OrderBasicInfoServiceImpl.java | 45 ++++++++++++++++++- 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 3fb27bcc0..6cdfb7084 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -242,8 +242,9 @@ public class SpringBootTestController { @Test public void queryPaymentByOrderNoTest() { String orderNo = "C44903356969"; + String wechatAppId = "wxbb3e0d474569481d"; try { - List adaPayments = adapayService.queryPaymentByOrderNo(orderNo); + List adaPayments = adapayService.queryPaymentByOrderNo(orderNo, wechatAppId); System.out.println(JSON.toJSONString(adaPayments)); } catch (BaseAdaPayException e) { throw new RuntimeException(e); diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java index 29c1865b5..57cb69c4b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java @@ -1106,7 +1106,12 @@ public class AdapayService { public List queryPaymentList(String startTime, String endTime) throws BaseAdaPayException { List resultList = Lists.newArrayList(); String wechatAppId = "wxbb3e0d474569481d"; - String appId = "app_d0c80cb1-ffc8-48cb-a030-fe9bec823aaa"; + + AbstractAdapayConfig config = AdapayConfigFactory.getConfig(wechatAppId); + if (config == null) { + throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR); + } + String appId = config.getAdapayAppId(); long begin = DateUtils.dateStrToTimestamp(startTime); // 13位时间戳 long end = DateUtils.dateStrToTimestamp(endTime); // 13位时间戳 int pageNum = 0; // 页面容量,取值范围 1~20,默认值为 10 @@ -1143,11 +1148,13 @@ public class AdapayService { /** * 查询支付列表 */ - public List queryPaymentByOrderNo(String orderNo) throws BaseAdaPayException { + public List queryPaymentByOrderNo(String orderNo, String wechatAppId) throws BaseAdaPayException { List resultList = Lists.newArrayList(); - String wechatAppId = "wxbb3e0d474569481d"; - String appId = "app_d0c80cb1-ffc8-48cb-a030-fe9bec823aaa"; - + AbstractAdapayConfig config = AdapayConfigFactory.getConfig(wechatAppId); + if (config == null) { + throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR); + } + String appId = config.getAdapayAppId(); int pageNum = 0; // 页面容量,取值范围 1~20,默认值为 10 int pageSize = 20; // 页面容量,取值范围 1~20,默认值为 10 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 478d40a76..4cda09a05 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.huifu.adapay.core.exception.BaseAdaPayException; +import com.jsowell.adapay.common.AdaPayment; import com.jsowell.adapay.dto.QueryPaymentConfirmDTO; import com.jsowell.adapay.operation.PaymentReverseOperation; import com.jsowell.adapay.response.PaymentConfirmResponse; @@ -25,6 +26,7 @@ import com.jsowell.common.enums.AcquirerEnum; import com.jsowell.common.enums.DelFlagEnum; import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.adapay.AdapayStatusEnum; +import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; import com.jsowell.common.enums.ykc.*; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; @@ -2014,12 +2016,53 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { this.cleanCacheByOrderCode(orderBasicInfo.getOrderCode(), orderBasicInfo.getTransactionCode()); // 通过订单号查询汇付有没有支付单 - + checkUnpaidOrder(orderBasicInfo); } } return orderList.size(); } + /** + * 校验未支付订单 + * 如果存在因为未收到支付回调导致超时关闭的订单,在修改订单状态后,检查一下是否支付过,把支付的金额退款 + * @param orderBasicInfo + */ + private void checkUnpaidOrder(OrderBasicInfo orderBasicInfo) { + String orderCode = orderBasicInfo.getOrderCode(); + List adaPayments = null; + String memberId = orderBasicInfo.getMemberId(); + String merchantId = orderBasicInfo.getMerchantId(); + String wechatAppId = pileMerchantInfoService.queryAppIdByMerchantId(merchantId); + String delayMode = pileMerchantInfoService.getDelayModeByWechatAppId(wechatAppId); + try { + adaPayments = adapayService.queryPaymentByOrderNo(orderCode, wechatAppId); + } catch (BaseAdaPayException e) { + throw new RuntimeException(e); + } + + if (CollectionUtils.isEmpty(adaPayments)) { + return; + } + + // 退款 + for (AdaPayment adaPayment : adaPayments) { + String status = adaPayment.getStatus(); + if (!AdapayStatusEnum.SUCCEEDED.getValue().equals(status)) { + // 不是交易完成状态,就跳过 + continue; + } + String paymentId = adaPayment.getId(); + BigDecimal payAmt = new BigDecimal(adaPayment.getPay_amt()); + if (MerchantDelayModeEnum.DELAY.getMode().equals(delayMode)) { + // 延时分账商户,创建交易撤销请求 + adapayService.createPaymentReverseRequest(paymentId, payAmt, wechatAppId, memberId, ScenarioEnum.ORDER.getValue(), orderCode); + } else { + // 实时分账商户,创建交易退款请求 + adapayService.createRefundRequest(paymentId, payAmt, wechatAppId, memberId, ScenarioEnum.ORDER.getValue(), orderCode); + } + } + } + /** * 微信支付-订单退款处理逻辑 */