From a7a6d78568dd66bcbdb1ff2154f838438aafbf61 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 15 Sep 2026 12:47:45 +0800 Subject: [PATCH] fix: persist overseas delivery completion history --- .../OrderFulfillmentCompletionService.java | 2 +- ...OrderFulfillmentCompletionServiceTest.java | 63 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 order/src/test/java/com/baiyue/order/service/OrderFulfillmentCompletionServiceTest.java diff --git a/order/src/main/java/com/baiyue/order/service/OrderFulfillmentCompletionService.java b/order/src/main/java/com/baiyue/order/service/OrderFulfillmentCompletionService.java index 899b20ae4..41ef25794 100644 --- a/order/src/main/java/com/baiyue/order/service/OrderFulfillmentCompletionService.java +++ b/order/src/main/java/com/baiyue/order/service/OrderFulfillmentCompletionService.java @@ -56,7 +56,7 @@ public class OrderFulfillmentCompletionService { OrderStatusHistoryEntity history = new OrderStatusHistoryEntity(); history.setId(IdWorker.getId()); history.setTenantId(tenantId); history.setOrderId(orderId); history.setFromStatus(from); history.setToStatus(OrderStatus.COMPLETED); - history.setAction("OVERSEAS_DELIVERY_COMPLETED"); + history.setAction("OVERSEAS_DELIVERED"); history.setReason("海外派送单 " + request.deliveryNo() + " 已签收"); history.setOperatorId(0L); history.setOperatorName("OVERSEAS_EVENT_BRIDGE"); history.setOccurredAt(completedAt); histories.insert(history); diff --git a/order/src/test/java/com/baiyue/order/service/OrderFulfillmentCompletionServiceTest.java b/order/src/test/java/com/baiyue/order/service/OrderFulfillmentCompletionServiceTest.java new file mode 100644 index 000000000..8651dbc72 --- /dev/null +++ b/order/src/test/java/com/baiyue/order/service/OrderFulfillmentCompletionServiceTest.java @@ -0,0 +1,63 @@ +package com.baiyue.order.service; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.MybatisConfiguration; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import com.baiyue.order.entity.OrderEntity; +import com.baiyue.order.entity.OrderStatus; +import com.baiyue.order.entity.OrderStatusHistoryEntity; +import com.baiyue.order.mapper.OrderMapper; +import com.baiyue.order.mapper.OrderStatusHistoryMapper; +import org.apache.ibatis.builder.MapperBuilderAssistant; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.time.Instant; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class OrderFulfillmentCompletionServiceTest { + @Mock private OrderMapper orders; + @Mock private OrderStatusHistoryMapper histories; + @InjectMocks private OrderFulfillmentCompletionService service; + + @BeforeAll + static void initializeTableMetadata() { + TableInfoHelper.initTableInfo( + new MapperBuilderAssistant(new MybatisConfiguration(), "order-fulfillment-completion-test"), + OrderEntity.class); + } + + @Test + void completesOrderWithHistoryActionThatFitsThePersistedColumn() { + OrderEntity order = new OrderEntity(); + order.setId(201L); + order.setTenantId(11L); + order.setOrderNo("FL201"); + order.setInboundCode("IN-201"); + order.setStatus(OrderStatus.PROCESSING); + order.setVersion(7); + when(orders.lockOwned(11L, 201L)).thenReturn(order); + when(orders.update(isNull(), any(LambdaUpdateWrapper.class))).thenReturn(1); + when(histories.insert(any(OrderStatusHistoryEntity.class))).thenReturn(1); + + var result = service.complete(new OrderFulfillmentCompletionService.Request( + "11", "201", "FL201", "IN-201", "DL-201", Instant.parse("2026-09-15T12:00:00Z"), + "event-201", "sha256:test")); + + assertThat(result.status()).isEqualTo("COMPLETED"); + ArgumentCaptor history = ArgumentCaptor.forClass(OrderStatusHistoryEntity.class); + verify(histories).insert(history.capture()); + assertThat(history.getValue().getAction()).isEqualTo("OVERSEAS_DELIVERED").hasSizeLessThanOrEqualTo(24); + } +}