|
|
@@ -3,6 +3,7 @@ package com.ruoyi.app.pay;
|
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
|
import com.ruoyi.app.omgpay.OmgPaymentCreateOutcome;
|
|
|
import com.ruoyi.app.omgpay.OmgPaymentCreateService;
|
|
|
+import com.ruoyi.app.omgpay.OmgPaymentRetryService;
|
|
|
import com.ruoyi.app.omgpay.OmgPaymentMethod;
|
|
|
import com.ruoyi.app.omgpay.dto.OmgCreatePaymentResponse;
|
|
|
import com.ruoyi.app.pay.dto.PayMethodSwitchRequest;
|
|
|
@@ -90,7 +91,7 @@ class PayMethodSwitchServiceTest {
|
|
|
@Test
|
|
|
void switchLinePayOrderToOfflineUpdatesPayTypeWritesLogAndSkipsPayment() {
|
|
|
IPosOrderService orderService = mock(IPosOrderService.class);
|
|
|
- OmgPaymentCreateService omgPaymentCreateService = mock(OmgPaymentCreateService.class);
|
|
|
+ OmgPaymentRetryService omgPaymentRetryService = mock(OmgPaymentRetryService.class);
|
|
|
LinePayService linePayService = mock(LinePayService.class);
|
|
|
OrderLogHelper orderLogHelper = mock(OrderLogHelper.class);
|
|
|
IInfoUserService infoUserService = mock(IInfoUserService.class);
|
|
|
@@ -102,7 +103,7 @@ class PayMethodSwitchServiceTest {
|
|
|
when(orderService.getOne(any(Wrapper.class))).thenReturn(order);
|
|
|
when(orderService.updateById(any(PosOrder.class))).thenReturn(true);
|
|
|
PayMethodSwitchService service = new PayMethodSwitchService(orderService,
|
|
|
- omgPaymentCreateService, linePayService, orderLogHelper, infoUserService);
|
|
|
+ omgPaymentRetryService, linePayService, orderLogHelper, infoUserService);
|
|
|
|
|
|
AjaxResult result = service.switchMethod(7L, request("dd-1", "1"));
|
|
|
|
|
|
@@ -122,7 +123,7 @@ class PayMethodSwitchServiceTest {
|
|
|
order.setType(0L);
|
|
|
when(orderService.getOne(any(Wrapper.class))).thenReturn(order);
|
|
|
PayMethodSwitchService service = new PayMethodSwitchService(orderService,
|
|
|
- mock(OmgPaymentCreateService.class), mock(LinePayService.class),
|
|
|
+ mock(OmgPaymentRetryService.class), mock(LinePayService.class),
|
|
|
mock(OrderLogHelper.class), mock(IInfoUserService.class));
|
|
|
|
|
|
ServiceException exception = assertThrows(ServiceException.class,
|
|
|
@@ -135,22 +136,23 @@ class PayMethodSwitchServiceTest {
|
|
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
|
|
void switchToCreditCardRewritesPayTypeBeforeOmgCreate() {
|
|
|
IPosOrderService orderService = mock(IPosOrderService.class);
|
|
|
- OmgPaymentCreateService omgPaymentCreateService = mock(OmgPaymentCreateService.class);
|
|
|
- when(omgPaymentCreateService.create(eq(7L), eq("dd-1"), eq(OmgPaymentMethod.CREDIT)))
|
|
|
+ OmgPaymentRetryService omgPaymentRetryService = mock(OmgPaymentRetryService.class);
|
|
|
+ when(omgPaymentRetryService.retry(eq(7L), eq("dd-1"), eq(OmgPaymentMethod.CREDIT)))
|
|
|
.thenReturn(new OmgPaymentCreateOutcome(mock(OmgCreatePaymentResponse.class), 1L, "dd-1", 7L, 5L, 90, "abcde***fghi"));
|
|
|
PosOrder order = baseOrder();
|
|
|
when(orderService.getOne(any(Wrapper.class))).thenReturn(order);
|
|
|
when(orderService.updateById(any(PosOrder.class))).thenReturn(true);
|
|
|
PayMethodSwitchService service = new PayMethodSwitchService(orderService,
|
|
|
- omgPaymentCreateService, mock(LinePayService.class), mock(OrderLogHelper.class),
|
|
|
+ omgPaymentRetryService, mock(LinePayService.class), mock(OrderLogHelper.class),
|
|
|
mock(IInfoUserService.class));
|
|
|
|
|
|
AjaxResult result = service.switchMethod(7L, request("dd-1", "2"));
|
|
|
|
|
|
- // 顺序约束:必须先回写 payType 再调 OMG 创建,否则创建校验按旧 payType 拒绝
|
|
|
- InOrder inOrder = inOrder(orderService, omgPaymentCreateService);
|
|
|
+ // 顺序约束:先回写 payType 再拉起渠道;走 retry 路径:旧 Apple Pay 尝试仍激活时
|
|
|
+ // 替换重建而非 PAYMENT_ATTEMPT_EXISTS 死锁(组内 5->2 切换线上事故场景)
|
|
|
+ InOrder inOrder = inOrder(orderService, omgPaymentRetryService);
|
|
|
inOrder.verify(orderService).updateById(any(PosOrder.class));
|
|
|
- inOrder.verify(omgPaymentCreateService).create(eq(7L), eq("dd-1"), eq(OmgPaymentMethod.CREDIT));
|
|
|
+ inOrder.verify(omgPaymentRetryService).retry(eq(7L), eq("dd-1"), eq(OmgPaymentMethod.CREDIT));
|
|
|
Map<?, ?> data = (Map<?, ?>) result.get("data");
|
|
|
assertEquals("2", data.get("payType"));
|
|
|
assertNotNull(data.get("payParams"), "在线方式应带渠道支付参数");
|
|
|
@@ -159,20 +161,20 @@ class PayMethodSwitchServiceTest {
|
|
|
@Test
|
|
|
void sameMethodSkipsRewriteButStillDelegates() {
|
|
|
IPosOrderService orderService = mock(IPosOrderService.class);
|
|
|
- OmgPaymentCreateService omgPaymentCreateService = mock(OmgPaymentCreateService.class);
|
|
|
- when(omgPaymentCreateService.create(any(), anyString(), any(OmgPaymentMethod.class)))
|
|
|
+ OmgPaymentRetryService omgPaymentRetryService = mock(OmgPaymentRetryService.class);
|
|
|
+ when(omgPaymentRetryService.retry(any(), anyString(), any(OmgPaymentMethod.class)))
|
|
|
.thenReturn(new OmgPaymentCreateOutcome(mock(OmgCreatePaymentResponse.class), 1L, "dd-1", 7L, 5L, 90, "abcde***fghi"));
|
|
|
PosOrder order = baseOrder();
|
|
|
order.setPayType("2");
|
|
|
when(orderService.getOne(any(Wrapper.class))).thenReturn(order);
|
|
|
PayMethodSwitchService service = new PayMethodSwitchService(orderService,
|
|
|
- omgPaymentCreateService, mock(LinePayService.class), mock(OrderLogHelper.class),
|
|
|
+ omgPaymentRetryService, mock(LinePayService.class), mock(OrderLogHelper.class),
|
|
|
mock(IInfoUserService.class));
|
|
|
|
|
|
service.switchMethod(7L, request("dd-1", "2"));
|
|
|
|
|
|
verify(orderService, never()).updateById(any(PosOrder.class));
|
|
|
- verify(omgPaymentCreateService, times(1)).create(eq(7L), eq("dd-1"), eq(OmgPaymentMethod.CREDIT));
|
|
|
+ verify(omgPaymentRetryService, times(1)).retry(eq(7L), eq("dd-1"), eq(OmgPaymentMethod.CREDIT));
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
@@ -182,7 +184,7 @@ class PayMethodSwitchServiceTest {
|
|
|
order.setPayStatus(1L);
|
|
|
when(orderService.getOne(any(Wrapper.class))).thenReturn(order);
|
|
|
PayMethodSwitchService service = new PayMethodSwitchService(orderService,
|
|
|
- mock(OmgPaymentCreateService.class), mock(LinePayService.class),
|
|
|
+ mock(OmgPaymentRetryService.class), mock(LinePayService.class),
|
|
|
mock(OrderLogHelper.class), mock(IInfoUserService.class));
|
|
|
|
|
|
ServiceException exception = assertThrows(ServiceException.class,
|
|
|
@@ -194,7 +196,7 @@ class PayMethodSwitchServiceTest {
|
|
|
void unknownMethodIsRejectedBeforeOrderLookup() {
|
|
|
IPosOrderService orderService = mock(IPosOrderService.class);
|
|
|
PayMethodSwitchService service = new PayMethodSwitchService(orderService,
|
|
|
- mock(OmgPaymentCreateService.class), mock(LinePayService.class),
|
|
|
+ mock(OmgPaymentRetryService.class), mock(LinePayService.class),
|
|
|
mock(OrderLogHelper.class), mock(IInfoUserService.class));
|
|
|
|
|
|
ServiceException exception = assertThrows(ServiceException.class,
|
|
|
@@ -210,7 +212,7 @@ class PayMethodSwitchServiceTest {
|
|
|
order.setUserId(8L);
|
|
|
when(orderService.getOne(any(Wrapper.class))).thenReturn(order);
|
|
|
PayMethodSwitchService service = new PayMethodSwitchService(orderService,
|
|
|
- mock(OmgPaymentCreateService.class), mock(LinePayService.class),
|
|
|
+ mock(OmgPaymentRetryService.class), mock(LinePayService.class),
|
|
|
mock(OrderLogHelper.class), mock(IInfoUserService.class));
|
|
|
|
|
|
ServiceException exception = assertThrows(ServiceException.class,
|
|
|
@@ -225,7 +227,7 @@ class PayMethodSwitchServiceTest {
|
|
|
order.setParentDdId("dd-parent");
|
|
|
when(orderService.getOne(any(Wrapper.class))).thenReturn(order);
|
|
|
PayMethodSwitchService service = new PayMethodSwitchService(orderService,
|
|
|
- mock(OmgPaymentCreateService.class), mock(LinePayService.class),
|
|
|
+ mock(OmgPaymentRetryService.class), mock(LinePayService.class),
|
|
|
mock(OrderLogHelper.class), mock(IInfoUserService.class));
|
|
|
|
|
|
ServiceException exception = assertThrows(ServiceException.class,
|