fix: persist overseas delivery completion history

This commit is contained in:
2026-09-15 12:47:45 +08:00
parent 13ff7e1513
commit a7a6d78568
2 changed files with 64 additions and 1 deletions
@@ -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);
@@ -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<OrderStatusHistoryEntity> history = ArgumentCaptor.forClass(OrderStatusHistoryEntity.class);
verify(histories).insert(history.capture());
assertThat(history.getValue().getAction()).isEqualTo("OVERSEAS_DELIVERED").hasSizeLessThanOrEqualTo(24);
}
}