|
@@ -14,6 +14,7 @@ import com.microsvc.toolkit.middleware.payment.common.api.PaymentServiceContext;
|
|
|
import com.microsvc.toolkit.middleware.payment.common.api.entity.*;
|
|
|
import com.microsvc.toolkit.middleware.payment.common.api.enums.DivideBackStatus;
|
|
|
import com.microsvc.toolkit.middleware.payment.common.api.enums.PaymentStatus;
|
|
|
+import com.microsvc.toolkit.middleware.payment.enums.EPaymentVendor;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.*;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.*;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
|
|
@@ -233,31 +234,8 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
throw new BizException("无效的支付订单");
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- if (EPaymentStatus.CLOSED == paymentOrder.getStatus() && StringUtils.isNotBlank(paymentOrder.getErrorMsg())) {
|
|
|
-
|
|
|
-
|
|
|
- if (PaymentStatus.SUCCESSED == paymentResp.getPaymentStatus()) {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- executePaymentSuccess(UserPaymentOrderWrapper.UserPaymentOrder.from(JSON.toJSONString(paymentOrder)), paymentResp);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- log.error("executePaymentCallback 关单异常,更新订单状态为已支付, error={}, status={}, paymentResp={}", paymentOrder.getErrorMsg(),
|
|
|
- paymentOrder.getStatus(), JSON.toJSONString(paymentResp));
|
|
|
- }
|
|
|
- } else
|
|
|
|
|
|
- if (EPaymentStatus.WAIT_PAY == paymentOrder.getStatus() || EPaymentStatus.PAYING == paymentOrder.getStatus()) {
|
|
|
+ if (EPaymentStatus.WAIT_PAY == paymentOrder.getStatus() || EPaymentStatus.PAYING == paymentOrder.getStatus() || PAID == paymentOrder.getStatus()) {
|
|
|
|
|
|
|
|
|
if (PaymentStatus.SUCCESSED == paymentResp.getPaymentStatus()) {
|
|
@@ -266,14 +244,14 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- if (PaymentStatus.FAILED == paymentResp.getPaymentStatus()) {
|
|
|
+ if (PaymentStatus.FAILED == paymentResp.getPaymentStatus() || PaymentStatus.CLOSED == paymentResp.getPaymentStatus()) {
|
|
|
|
|
|
|
|
|
UserPaymentOrderWrapper.UserPaymentOrder order = UserPaymentOrderWrapper.UserPaymentOrder
|
|
|
.builder()
|
|
|
.transNo(paymentResp.getTransNo())
|
|
|
.id(paymentOrder.getId())
|
|
|
- .status(EPaymentStatus.FAIL)
|
|
|
+ .status(PaymentStatus.FAILED == paymentResp.getPaymentStatus() ? EPaymentStatus.FAIL: EPaymentStatus.CLOSED)
|
|
|
.updateTime(DateTime.now().toDate())
|
|
|
.build();
|
|
|
userPaymentOrderService.updateById(order);
|
|
@@ -284,6 +262,13 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
|
|
|
log.info("executePaymentCallback WAIT_PAY, status={}, paymentResp={}", paymentOrder.getStatus(),
|
|
|
JSON.toJSONString(paymentResp));
|
|
|
+ } else {
|
|
|
+
|
|
|
+
|
|
|
+ if (PaymentStatus.SUCCESSED == paymentResp.getPaymentStatus()) {
|
|
|
+
|
|
|
+ refundOnly("订单已超时,金额原路退回", paymentOrder.getOrderNo());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}, 60L, TimeUnit.SECONDS);
|
|
@@ -413,7 +398,15 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
|
|
|
|
|
|
throw new BizException("订单支付已完成");
|
|
|
- }
|
|
|
+ } else
|
|
|
+
|
|
|
+
|
|
|
+ if ((PaymentStatus.CLOSED == paymentResp.getPaymentStatus() || PaymentStatus.FAILED == paymentResp.getPaymentStatus())
|
|
|
+ && EPaymentStatus.CLOSED != paymentOrder.getStatus()) {
|
|
|
+
|
|
|
+
|
|
|
+ closeWaitOrder(paymentOrder);
|
|
|
+ } else
|
|
|
|
|
|
|
|
|
if (PaymentStatus.PENDDING == paymentResp.getPaymentStatus()) {
|
|
@@ -446,8 +439,6 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
|
|
|
userPaymentOrderService.updateById(order);
|
|
|
|
|
|
-
|
|
|
- userOrderService.payCancel(userOrderService.detail(order.getId()));
|
|
|
});
|
|
|
throw new BizException("查询交易中,请耐心等待!");
|
|
|
}
|
|
@@ -711,15 +702,15 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
if (EPaymentStatus.WAIT_PAY == userPaymentOrder.getStatus() || EPaymentStatus.PAYING == userPaymentOrder.getStatus()) {
|
|
|
|
|
|
|
|
|
- SpringContextHolder.getBean(UserPaymentCoreService.class)
|
|
|
+ applicationContext.getBean(UserPaymentCoreService.class)
|
|
|
.executePaymentSuccess(UserPaymentOrderWrapper.UserPaymentOrder.from(JSON.toJSONString(userPaymentOrder)), paymentResp);
|
|
|
}
|
|
|
|
|
|
|
|
|
- redisCacheService.deleteUserPaymentConfig(userId, userPaymentOrder.getOrderType().getCode());
|
|
|
+ redisCacheService.deleteUserPaymentConfig(userId, userPaymentOrder.getOrderNo());
|
|
|
|
|
|
|
|
|
- redisCacheService.deleteUserOrderConfig(userId, userPaymentOrder.getOrderType().getCode());
|
|
|
+ redisCacheService.deleteUserOrderConfig(userId, userPaymentOrder.getOrderNo());
|
|
|
}
|
|
|
|
|
|
|
|
@@ -734,11 +725,26 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
userPaymentOrderService.updateById(update);
|
|
|
|
|
|
|
|
|
- SpringContextHolder.getBean(UserPaymentCoreService.class)
|
|
|
+ applicationContext.getBean(UserPaymentCoreService.class)
|
|
|
.cancelPayment(UserPaymentOrderWrapper.UserPaymentOrder.from(JSON.toJSONString(userPaymentOrder)), paymentResp);
|
|
|
|
|
|
|
|
|
- redisCacheService.deleteUserPaymentConfig(userId, userPaymentOrder.getOrderType().getCode());
|
|
|
+ redisCacheService.deleteUserPaymentConfig(userId, userPaymentOrder.getOrderNo());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (PaymentStatus.CLOSED == paymentResp.getPaymentStatus() && EPaymentStatus.CLOSED != userPaymentOrder.getStatus()) {
|
|
|
+
|
|
|
+
|
|
|
+ applicationContext.getBean(UserPaymentCoreService.class)
|
|
|
+ .cancelPayment(UserPaymentOrderWrapper.UserPaymentOrder.from(JSON.toJSONString(userPaymentOrder)), paymentResp);
|
|
|
+
|
|
|
+
|
|
|
+ redisCacheService.deleteUserPaymentConfig(userId, userPaymentOrder.getOrderNo());
|
|
|
+
|
|
|
+
|
|
|
+ redisCacheService.deleteUserOrderConfig(userId, userPaymentOrder.getOrderNo());
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -923,17 +929,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
if (StringUtils.isEmpty(paymentOrder.getTransNo())
|
|
|
&& (EPaymentStatus.WAIT_PAY == paymentOrder.getStatus()||EPaymentStatus.PAYING == paymentOrder.getStatus())) {
|
|
|
|
|
|
-
|
|
|
- UserPaymentOrderWrapper.UserPaymentOrder order = UserPaymentOrderWrapper.UserPaymentOrder
|
|
|
- .builder()
|
|
|
- .id(paymentOrder.getId())
|
|
|
- .status(EPaymentStatus.CLOSED)
|
|
|
- .updateTime(DateTime.now().toDate())
|
|
|
- .build();
|
|
|
- userPaymentOrderService.updateById(order);
|
|
|
-
|
|
|
-
|
|
|
- userOrderService.payCancel(userOrderService.detail(order.getId()));
|
|
|
+ closeWaitOrder(paymentOrder);
|
|
|
|
|
|
} else {
|
|
|
|
|
@@ -953,6 +949,20 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private void closeWaitOrder(UserPaymentOrderWrapper.UserPaymentOrder paymentOrder) {
|
|
|
+
|
|
|
+ UserPaymentOrderWrapper.UserPaymentOrder order = UserPaymentOrderWrapper.UserPaymentOrder
|
|
|
+ .builder()
|
|
|
+ .id(paymentOrder.getId())
|
|
|
+ .status(EPaymentStatus.CLOSED)
|
|
|
+ .updateTime(DateTime.now().toDate())
|
|
|
+ .build();
|
|
|
+ userPaymentOrderService.updateById(order);
|
|
|
+
|
|
|
+
|
|
|
+ userOrderService.payCancel(userOrderService.detail(order.getId()));
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
* 扫描支付超时定时
|
|
@@ -978,7 +988,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
UserPaymentOrderWrapper.UserPaymentOrderQuery payingQuery = UserPaymentOrderWrapper.UserPaymentOrderQuery
|
|
|
.builder()
|
|
|
.paymentStatus(Lists.newArrayList(OrderStatusEnum.parse(EPaymentStatus.PAYING)))
|
|
|
- .endTime(DateTime.now().plusMinutes(120).toDate())
|
|
|
+
|
|
|
.build();
|
|
|
|
|
|
userPaymentOrderService.selectPage(page, payingQuery);
|
|
@@ -1222,7 +1232,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
|
|
|
if (PaymentStatus.SUCCESSED == paymentResp.getPaymentStatus()) {
|
|
|
|
|
|
- SpringContextHolder.getBean(UserPaymentCoreService.class)
|
|
|
+ applicationContext.getBean(UserPaymentCoreService.class)
|
|
|
.executePaymentSuccess(UserPaymentOrderWrapper.UserPaymentOrder.from(JSON.toJSONString(item)), paymentResp);
|
|
|
}
|
|
|
|
|
@@ -1316,9 +1326,6 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
if (Objects.isNull(paymentOrder)) {
|
|
|
throw new BizException("订单信息不存在");
|
|
|
}
|
|
|
- if (!OrderStatusEnum.PAID.getCode().equals(paymentOrder.getStatus().getCode())) {
|
|
|
- throw new BizException("订单状态异常");
|
|
|
- }
|
|
|
UserOrderVo detail = userOrderService.detail(paymentOrder.getId());
|
|
|
if (Objects.isNull(detail)) {
|
|
|
throw new BizException("订单信息不存在");
|
|
@@ -1425,4 +1432,95 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
return refundFlag;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ * 关闭订单
|
|
|
+ *
|
|
|
+ * @param userInfo JwtUserInfo
|
|
|
+ * @param paymentOrder UserPaymentOrder
|
|
|
+ * @return PaymentResp
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public PaymentResp closedPayment( UserPaymentOrderWrapper.UserPaymentOrder paymentOrder) {
|
|
|
+
|
|
|
+
|
|
|
+ if (Optional.ofNullable(paymentServiceContext.getProperties().getDebug()).orElse(false)) {
|
|
|
+
|
|
|
+ PaymentClose paymentClose = paymentServiceContext.getPaymentService(paymentOrder.getPaymentVendor())
|
|
|
+ .close(paymentOrder.getTransNo(), "订单超时", paymentOrder.getOrderNo());
|
|
|
+ log.info("closedPayment VENDOR: {}, CHANNEL: {} paymentClose={}", paymentOrder.getPaymentVendor(),
|
|
|
+ paymentOrder.getPaymentChannel(), JSON.toJSONString(paymentClose));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ PaymentResp paymentResp = paymentServiceContext.getPaymentService(paymentOrder.getPaymentVendor())
|
|
|
+ .query(paymentOrder.getTransNo(), paymentOrder.getOrderNo());
|
|
|
+ log.info("closedPayment VENDOR: {}, CHANNEL: {} paymentResp={}", paymentOrder.getPaymentVendor(),
|
|
|
+ paymentOrder.getPaymentChannel(), JSON.toJSONString(paymentResp));
|
|
|
+
|
|
|
+ return paymentResp;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public void paymentStatus(String orderNo) {
|
|
|
+
|
|
|
+
|
|
|
+ UserPaymentOrderWrapper.UserPaymentOrder paymentOrder = userPaymentOrderService.getUserPaymentOrderByOrderNo( orderNo);
|
|
|
+ if (Objects.isNull(paymentOrder)) {
|
|
|
+ throw new BizException("订单不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ UserPaymentOrderWrapper.PaymentOrderReqConfig reqConfig = UserPaymentOrderWrapper.PaymentOrderReqConfig
|
|
|
+ .builder()
|
|
|
+ .userId(String.valueOf(paymentOrder.getUserId()))
|
|
|
+ .merOrderNo(orderNo)
|
|
|
+ .build();
|
|
|
+
|
|
|
+
|
|
|
+ String lockName = redisCacheService.getPaymentCacheKey(orderNo);
|
|
|
+ DistributedLock.of(redissonClient).runIfLockCanGet(lockName, () -> {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(paymentOrder.getTransNo())
|
|
|
+ || EPaymentVendor.ORIGINAL.name().equalsIgnoreCase(paymentOrder.getPaymentVendor())
|
|
|
+ || EPaymentVendor.WXPAY.name().equalsIgnoreCase(paymentOrder.getPaymentVendor())
|
|
|
+ || EPaymentVendor.ALIPAY.name().equalsIgnoreCase(paymentOrder.getPaymentVendor())) {
|
|
|
+
|
|
|
+
|
|
|
+ PaymentResp paymentResp = paymentServiceContext.getPaymentService(paymentOrder.getPaymentVendor())
|
|
|
+ .query(paymentOrder.getTransNo(), paymentOrder.getOrderNo());
|
|
|
+ if (Objects.nonNull(paymentResp)) {
|
|
|
+ if (PaymentStatus.PENDDING == paymentResp.getPaymentStatus()) {
|
|
|
+
|
|
|
+
|
|
|
+ String paymentConfig = redisCacheService.getUserPaymentConfig(reqConfig.getUserId(), paymentOrder.getOrderNo());
|
|
|
+ if (StringUtils.isBlank(paymentConfig) && EPaymentStatus.CLOSED != paymentOrder.getStatus()) {
|
|
|
+
|
|
|
+ PaymentClose paymentClose = paymentServiceContext.getPaymentService(paymentOrder.getPaymentVendor())
|
|
|
+ .close(paymentOrder.getTransNo(), "支付超时", paymentOrder.getOrderNo());
|
|
|
+
|
|
|
+
|
|
|
+ UserPaymentOrderWrapper.UserPaymentOrder update = UserPaymentOrderWrapper.UserPaymentOrder
|
|
|
+ .builder()
|
|
|
+ .id(paymentOrder.getId())
|
|
|
+ .status(EPaymentStatus.CLOSED)
|
|
|
+ .errorMsg(paymentClose.getMsg())
|
|
|
+ .build();
|
|
|
+ userPaymentOrderService.updateById(JSON.parseObject(update.jsonString(), UserPaymentOrderWrapper.UserPaymentOrder.class));
|
|
|
+
|
|
|
+
|
|
|
+ cancelPayment(UserPaymentOrderWrapper.UserPaymentOrder.from(JSON.toJSONString(paymentOrder)), paymentResp);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ updateUserPaymentOrderStatus(reqConfig.getUserId(), paymentOrder, paymentResp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },10L,TimeUnit.SECONDS);
|
|
|
+
|
|
|
+ }
|
|
|
}
|