fix: publish holds for local overseas orders

This commit is contained in:
2026-09-08 00:51:32 +08:00
parent bb68e8a580
commit 287c0f3ce8
2 changed files with 55 additions and 1 deletions
@@ -38,11 +38,13 @@ public class InboundOrderDetainedOutboxService {
JsonNode payloadNode = objectMapper.valueToTree(payload);
String eventKey = EventTypes.OVERSEAS_INBOUND_ORDER_DETAINED_CHANGED + ':'
+ order.getSourceInboundId() + ':' + changeVersion;
String causationId = EventIdentifiers.isSupported(order.getSourceEventId())
? order.getSourceEventId() : null;
EventEnvelope envelope = new EventEnvelope(EventIdentifiers.newUuid(),
EventTypes.OVERSEAS_INBOUND_ORDER_DETAINED_CHANGED, 1, changedAt,
RegionCode.OVERSEAS, RegionCode.CN, order.getCustomerId(), "INBOUND_ORDER",
order.getSourceInboundId(), changeVersion, 1L, EventIdentifiers.newUuid(),
eventKey, order.getSourceEventId(), payloadNode,
eventKey, causationId, payloadNode,
EventPayloadHash.sha256(EventPayloadCanonicalizer.canonicalize(payloadNode))).requireValid();
LastlegEventOutbox event = new LastlegEventOutbox();
@@ -0,0 +1,52 @@
package com.baiyue.lastleg.service;
import com.baiyue.lastleg.entity.LastlegEventOutbox;
import com.baiyue.lastleg.entity.LastlegOrder;
import com.baiyue.lastleg.mapper.LastlegEventOutboxMapper;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.util.ReflectionTestUtils;
import java.time.Instant;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.verify;
@ExtendWith(MockitoExtension.class)
class InboundOrderDetainedOutboxServiceTest {
@Mock private LastlegEventOutboxMapper mapper;
private final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules();
private InboundOrderDetainedOutboxService service;
@BeforeEach
void setUp() {
service = new InboundOrderDetainedOutboxService();
ReflectionTestUtils.setField(service, "mapper", mapper);
ReflectionTestUtils.setField(service, "objectMapper", objectMapper);
}
@Test
void localSyntheticSourceReferenceIsNotWrittenAsEventCausationId() throws Exception {
LastlegOrder order = new LastlegOrder();
order.setId(101L);
order.setCustomerId("201");
order.setOrderNo("WT-WH-20260907-972865");
order.setSourceInboundId("WAREHOUSE_TRANSFER:WT-WH-20260907-778561");
order.setInboundCode("NYEXX2609070253");
order.setSourceEventId("WAREHOUSE_TRANSFER:WT-WH-20260907-778561");
service.publish(order, true, "等待质检", "301", "operator", Instant.parse("2026-09-07T16:00:00Z"), 1L);
ArgumentCaptor<LastlegEventOutbox> captor = ArgumentCaptor.forClass(LastlegEventOutbox.class);
verify(mapper).insert(captor.capture());
JsonNode envelope = objectMapper.readTree(captor.getValue().getPayloadJson());
assertThat(envelope.path("causationId").isNull()).isTrue();
assertThat(envelope.path("aggregateId").asText()).isEqualTo(order.getSourceInboundId());
}
}