fix: allow overseas container detail before carrier tracking

This commit is contained in:
2026-09-10 10:59:09 +08:00
parent 3e4b9d0a9a
commit a926a23b87
2 changed files with 27 additions and 4 deletions
@@ -45,8 +45,10 @@ public class ContainerWorkbenchService {
public WorkbenchItem overseasDetail(long id, Set<String> permissions) {
ContainerBookingEntity value = required(id);
if (!repository.departed(id)) throw new BizException(ResultCode.NOT_FOUND, "国外工作台货柜不存在");
View drayage = terminalDrayages.authorize(terminalDrayages.detail(id), permissions);
return item("OVERSEAS", value, drayage.actualFacts(), drayage, permissions);
View drayage = terminalDrayages.authorize(terminalDrayages.views(List.of(id)), permissions).stream()
.filter(candidate -> candidate.containerBookingId() == id)
.findFirst().orElse(null);
return item("OVERSEAS", value, drayage == null ? null : drayage.actualFacts(), drayage, permissions);
}
private PageResult<WorkbenchItem> page(String workbench, Query query, Set<String> permissions) {
@@ -84,6 +84,27 @@ class ContainerWorkbenchServiceTest {
verifyNoInteractions(carrierSchedules);
}
@Test
void overseasDetailKeepsNewlyDepartedContainerBeforeCarrierTrackingExists() {
ContainerBookingEntity container = container();
container.setOutboundConfirmedAt(LocalDateTime.of(2026, 9, 10, 10, 50));
Set<String> permissions = Set.of("platform:firstleg:terminal-drayage:list",
"platform:firstleg:terminal-drayage:document:edit");
when(repository.find(11L)).thenReturn(container);
when(repository.departed(11L)).thenReturn(true);
when(terminalDrayages.views(List.of(11L))).thenReturn(List.of());
when(terminalDrayages.authorize(List.of(), permissions)).thenReturn(List.of());
var result = service.overseasDetail(11L, permissions);
assertThat(result.workbenchStage()).isEqualTo("DEPARTED_WAREHOUSE");
assertThat(result.actualFacts()).isNull();
assertThat(result.terminalDrayage()).isNull();
assertThat(result.allowedActions()).containsExactly("MANAGE_DESTINATION_DOCUMENTS");
verify(terminalDrayages, never()).detail(11L);
verifyNoInteractions(carrierSchedules);
}
@Test
void realOverseasListAndDetailProjectBothEmptyReturnActions() throws Exception {
verifyRealEmptyReturnProjection(true, true);
@@ -139,8 +160,8 @@ class ContainerWorkbenchServiceTest {
var serialized = json.readTree(json.writeValueAsString(com.baiyue.common.core.api.ApiResponse.success(page)));
assertThat(serialized.at("/data/records/0/allowedActions")).isEqualTo(json.valueToTree(expected));
assertThat(serialized.at("/data/records/0/terminalDrayage/allowedActions")).isEqualTo(json.valueToTree(expected));
verify(mapper).findAll(List.of(11L));
verify(mapper).contexts(List.of(11L));
verify(mapper, times(2)).findAll(List.of(11L));
verify(mapper, times(2)).contexts(List.of(11L));
}
@Test