|
|
@@ -499,6 +499,18 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
|
|
|
payScoreOrderId = preAuth.getString("payScoreOrderId");
|
|
|
payScoreState = preAuth.getString("payScoreState");
|
|
|
serviceId = preAuth.getString("serviceId");
|
|
|
+ } else {
|
|
|
+ // Redis 预授权已过期,尝试从追踪SET恢复
|
|
|
+ payScoreOrderId = ((com.haha.service.payment.payscore.impl.PayScoreServiceImpl) payScoreService)
|
|
|
+ .tryRecoverPayScoreOrderId(record.getUserId(), record.getDeviceId());
|
|
|
+ if (payScoreOrderId != null) {
|
|
|
+ payScoreState = PayScoreState.CREATED.getCode();
|
|
|
+ log.info("从追踪SET恢复支付分订单ID成功 - userId: {}, deviceId: {}, payScoreOrderId: {}",
|
|
|
+ record.getUserId(), record.getDeviceId(), payScoreOrderId);
|
|
|
+ } else {
|
|
|
+ log.warn("Redis预授权已过期且追踪SET未找到 - userId: {}, deviceId: {}",
|
|
|
+ record.getUserId(), record.getDeviceId());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1157,12 +1169,24 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
|
|
|
String payScoreState = null;
|
|
|
String serviceId = null;
|
|
|
if (payScoreService != null && deviceId != null && userId != null) {
|
|
|
+ Long uid = Long.parseLong(userId);
|
|
|
com.alibaba.fastjson2.JSONObject preAuth = ((com.haha.service.payment.payscore.impl.PayScoreServiceImpl) payScoreService)
|
|
|
- .readPreAuthFromRedis(deviceId, Long.parseLong(userId));
|
|
|
+ .readPreAuthFromRedis(deviceId, uid);
|
|
|
if (preAuth != null) {
|
|
|
payScoreOrderId = preAuth.getString("payScoreOrderId");
|
|
|
payScoreState = preAuth.getString("payScoreState");
|
|
|
serviceId = preAuth.getString("serviceId");
|
|
|
+ } else {
|
|
|
+ // Redis 预授权已过期,尝试从追踪SET恢复
|
|
|
+ payScoreOrderId = ((com.haha.service.payment.payscore.impl.PayScoreServiceImpl) payScoreService)
|
|
|
+ .tryRecoverPayScoreOrderId(uid, deviceId);
|
|
|
+ if (payScoreOrderId != null) {
|
|
|
+ payScoreState = PayScoreState.CREATED.getCode();
|
|
|
+ log.info("从追踪SET恢复支付分订单ID成功 - userId: {}, deviceId: {}, payScoreOrderId: {}",
|
|
|
+ userId, deviceId, payScoreOrderId);
|
|
|
+ } else {
|
|
|
+ log.warn("Redis预授权已过期且追踪SET未找到 - userId: {}, deviceId: {}", userId, deviceId);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1605,9 +1629,35 @@ public class HahaCallbackServiceImpl implements HahaCallbackService {
|
|
|
boolean isPayScore = PaymentChannel.WECHAT_PAYSCORE.getCode().equals(order.getPayChannel())
|
|
|
|| order.getPayScoreOrderId() != null;
|
|
|
if (!isPayScore) {
|
|
|
- log.debug("订单未使用支付分,跳过扣费 - orderId: {}, payChannel: {}",
|
|
|
- order.getId(), order.getPayChannel());
|
|
|
- return;
|
|
|
+ // 最后一层兜底:尝试从 Redis 追踪SET 恢复支付分订单ID
|
|
|
+ if (payScoreService != null && order.getUserId() != null && order.getDeviceId() != null) {
|
|
|
+ String recovered = ((com.haha.service.payment.payscore.impl.PayScoreServiceImpl) payScoreService)
|
|
|
+ .tryRecoverPayScoreOrderId(order.getUserId(), order.getDeviceId());
|
|
|
+ if (recovered != null) {
|
|
|
+ order.setPayScoreOrderId(recovered);
|
|
|
+ order.setPayChannel(PaymentChannel.WECHAT_PAYSCORE.getCode());
|
|
|
+ order.setPayType("微信支付分");
|
|
|
+ order.setPayScoreState(PayScoreState.CREATED.getCode());
|
|
|
+ // 回写到数据库
|
|
|
+ orderService.lambdaUpdate()
|
|
|
+ .set(Order::getPayScoreOrderId, recovered)
|
|
|
+ .set(Order::getPayChannel, PaymentChannel.WECHAT_PAYSCORE.getCode())
|
|
|
+ .set(Order::getPayType, "微信支付分")
|
|
|
+ .set(Order::getPayScoreState, PayScoreState.CREATED.getCode())
|
|
|
+ .eq(Order::getId, order.getId())
|
|
|
+ .update();
|
|
|
+ log.info("支付分订单ID已从追踪SET恢复 - orderId: {}, payScoreOrderId: {}",
|
|
|
+ order.getId(), recovered);
|
|
|
+ } else {
|
|
|
+ log.debug("订单未使用支付分,跳过扣费 - orderId: {}, payChannel: {}",
|
|
|
+ order.getId(), order.getPayChannel());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.debug("订单未使用支付分,跳过扣费 - orderId: {}, payChannel: {}",
|
|
|
+ order.getId(), order.getPayChannel());
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 补全可能丢失的 payChannel
|