修复一次支付发放两张会员卡的问题

This commit was merged in pull request #45.
This commit is contained in:
2026-06-28 17:56:31 +08:00
parent f8279129be
commit 80759f6793
5 changed files with 2983 additions and 78 deletions
@@ -22,7 +22,6 @@ public class PaymentNotifyServiceImpl implements PaymentNotifyService {
private final MemberStoredCardRepository memberStoredCardRepository;
private final MemberStoredCardRechargeRepository memberStoredCardRechargeRepository;
private final IMemberCardService memberCardService;
private Long memberIdGlob;
public PaymentNotifyServiceImpl(PaymentOrderRepository paymentOrderRepository,
MemberStoredCardRepository memberStoredCardRepository,
@@ -35,8 +34,7 @@ public class PaymentNotifyServiceImpl implements PaymentNotifyService {
}
@Override
public Mono<Void> notifyPaymentStatus(String orderNo, String status,Long memberId) {
memberIdGlob = memberId;
public Mono<Void> notifyPaymentStatus(String orderNo, String status, Long memberId) {
return paymentOrderRepository.findByOrderNo(orderNo)
.flatMap(order -> {
log.info("[PaymentNotify] 支付通知: orderNo={}, status={}, orderType={}", orderNo, status, order.getOrderType());
@@ -114,13 +112,15 @@ public class PaymentNotifyServiceImpl implements PaymentNotifyService {
final Long finalMemberCardId = memberCardId;
final int finalCount = count;
final Long sourceOrderId = order.getId();
final Long orderMemberId = order.getMemberId();
log.info("[PaymentNotify] 处理会员卡购买: orderNo={}, memberId={}, memberCardId={}, count={}",
order.getOrderNo(), memberIdGlob, finalMemberCardId, finalCount);
order.getOrderNo(), orderMemberId, finalMemberCardId, finalCount);
return memberCardService.purchaseCard(memberIdGlob, finalMemberCardId, sourceOrderId)
// 幂等性检查:同一笔支付订单只创建一次会员卡记录
return memberCardService.purchaseCard(orderMemberId, finalMemberCardId, sourceOrderId)
.doOnSuccess(record -> log.info("[PaymentNotify] 会员卡购买完成: orderNo={}, memberId={}, memberCardRecordId={}",
order.getOrderNo(), memberIdGlob, record.getMemberCardRecordId()))
order.getOrderNo(), orderMemberId, record.getMemberCardRecordId()))
.doOnError(e -> log.error("[PaymentNotify] 会员卡购买异常, orderNo={}", order.getOrderNo(), e))
.onErrorResume(e -> Mono.empty())
.then();
@@ -166,7 +166,7 @@ public class PaymentNotifyServiceImpl implements PaymentNotifyService {
final BigDecimal finalRechargeAmount = rechargeAmount;
final BigDecimal finalBonus = bonus != null ? bonus : BigDecimal.ZERO;
final BigDecimal totalAddAmount = finalRechargeAmount.add(finalBonus);
Long memberId = memberIdGlob;
Long memberId = order.getMemberId();
final String orderNo = order.getOrderNo();
final BigDecimal payAmount = order.getTransAmt();
final LocalDateTime now = LocalDateTime.now();