|
@@ -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;
|
|
@@ -1443,4 +1444,68 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
|
|
|
|
|
|
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.getOrderType().getCode());
|
|
|
+ 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);
|
|
|
+
|
|
|
+ }
|
|
|
}
|