From 61ffff1be0c86c1c8efa968df0ae0ca103e97e0e Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 8 Sep 2026 07:39:17 +0800 Subject: [PATCH] fix: keep terminal drayage actions executable --- .../service/TerminalDrayageService.java | 2 +- .../service/TerminalDrayageServiceTest.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/firstleg/src/main/java/com/baiyue/firstleg/terminaldrayage/service/TerminalDrayageService.java b/firstleg/src/main/java/com/baiyue/firstleg/terminaldrayage/service/TerminalDrayageService.java index 177e4ab7c..47224afc3 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/terminaldrayage/service/TerminalDrayageService.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/terminaldrayage/service/TerminalDrayageService.java @@ -257,7 +257,7 @@ public class TerminalDrayageService { if (current != null && current.sequence() >= CarrierScheduleNode.PICKUP_READY.sequence() && value != null && value.getFleetSupplierId() != null && value.getPickupAppointmentAt() != null && actualPickupAt(context, value) == null) result.add("RECORD_PICKUP"); - if (context.unloadingCompletedAt() != null && actualPickupAt(context, value) != null + if (value != null && context.unloadingCompletedAt() != null && actualPickupAt(context, value) != null && actualEmptyReturnAt(context, value) == null) result.add("RECORD_EMPTY_RETURN"); return List.copyOf(result); } diff --git a/firstleg/src/test/java/com/baiyue/firstleg/terminaldrayage/service/TerminalDrayageServiceTest.java b/firstleg/src/test/java/com/baiyue/firstleg/terminaldrayage/service/TerminalDrayageServiceTest.java index d48b14f53..03e270d7d 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/terminaldrayage/service/TerminalDrayageServiceTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/terminaldrayage/service/TerminalDrayageServiceTest.java @@ -154,6 +154,19 @@ class TerminalDrayageServiceTest { assertThat(service.detail(11L).emptyReturnWarning().overdueHours()).isZero(); } + @Test + void doesNotOfferEmptyReturnWithoutExecutableDrayageAggregate() { + LocalDateTime unloadedAt = LocalDateTime.of(2026, 9, 3, 0, 0); + Context context = context("PICKED_UP", unloadedAt); + when(mapper.context(11L)).thenReturn(context); + when(mapper.find(11L)).thenReturn(null); + + var result = service.detail(11L); + + assertThat(result.status()).isEqualTo("UNLOADED"); + assertThat(result.allowedActions()).doesNotContain("RECORD_EMPTY_RETURN"); + } + @Test void sameIdempotencyKeyWithDifferentPayloadConflictsWithoutWriting() { Context context = context("ARRIVED_DESTINATION_PORT", null);