fix(firstleg): allow domestic history container details
This commit is contained in:
-1
@@ -38,7 +38,6 @@ public class ContainerWorkbenchService {
|
|||||||
|
|
||||||
public WorkbenchItem domesticDetail(long id, Set<String> permissions) {
|
public WorkbenchItem domesticDetail(long id, Set<String> permissions) {
|
||||||
ContainerBookingEntity value = required(id);
|
ContainerBookingEntity value = required(id);
|
||||||
if (repository.departed(id)) throw new BizException(ResultCode.NOT_FOUND, "国内工作台货柜不存在");
|
|
||||||
ContainerActualFacts facts = actualFacts(List.of(id)).get(id);
|
ContainerActualFacts facts = actualFacts(List.of(id)).get(id);
|
||||||
return item("DOMESTIC", value, facts, null, permissions);
|
return item("DOMESTIC", value, facts, null, permissions);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -445,7 +445,7 @@ paths:
|
|||||||
/api/platform/v1/containers/domestic/{id}:
|
/api/platform/v1/containers/domestic/{id}:
|
||||||
get:
|
get:
|
||||||
summary: 查询国内货柜工作台详情
|
summary: 查询国内货柜工作台详情
|
||||||
description: 需要 platform:firstleg:container:list;装柜清单只返回唯一loadingPlanId/planNo/planStatus关联
|
description: 需要 platform:firstleg:container:list;国内ACTIVE与HISTORY共用该只读详情,已真实离仓柜仍可打开;装柜清单只返回唯一loadingPlanId/planNo/planStatus关联
|
||||||
parameters: [{$ref: '#/components/parameters/ContainerBookingId'}]
|
parameters: [{$ref: '#/components/parameters/ContainerBookingId'}]
|
||||||
responses: {'200': {description: 成功, content: {application/json: {schema: {$ref: '#/components/schemas/ContainerWorkbenchEnvelope'}}}}}
|
responses: {'200': {description: 成功, content: {application/json: {schema: {$ref: '#/components/schemas/ContainerWorkbenchEnvelope'}}}}}
|
||||||
/api/platform/v1/containers/overseas/{id}:
|
/api/platform/v1/containers/overseas/{id}:
|
||||||
|
|||||||
+1
@@ -66,6 +66,7 @@ class ContainerControllerContractTest {
|
|||||||
.contains("/api/platform/v1/containers/{id}/ocean-booking-link:")
|
.contains("/api/platform/v1/containers/{id}/ocean-booking-link:")
|
||||||
.contains("/api/platform/v1/containers/domestic:")
|
.contains("/api/platform/v1/containers/domestic:")
|
||||||
.contains("/api/platform/v1/containers/overseas:")
|
.contains("/api/platform/v1/containers/overseas:")
|
||||||
|
.contains("国内ACTIVE与HISTORY共用该只读详情,已真实离仓柜仍可打开")
|
||||||
.contains("scope, in: query, required: true")
|
.contains("scope, in: query, required: true")
|
||||||
.contains("首次关联允许 WAIT_LOADING 或已有预排货的 EDITING 模拟柜")
|
.contains("首次关联允许 WAIT_LOADING 或已有预排货的 EDITING 模拟柜")
|
||||||
.contains("RELEASED oceanBookingId")
|
.contains("RELEASED oceanBookingId")
|
||||||
|
|||||||
+30
@@ -19,6 +19,7 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.*;
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
@@ -83,6 +84,35 @@ class ContainerWorkbenchServiceTest {
|
|||||||
verifyNoInteractions(carrierSchedules);
|
verifyNoInteractions(carrierSchedules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void domesticHistoryDetailKeepsTheDepartedContainerAndItsUniqueLoadingPlan() {
|
||||||
|
ContainerBookingEntity container = container();
|
||||||
|
container.setOutboundConfirmedAt(LocalDateTime.of(2026, 9, 8, 10, 0));
|
||||||
|
when(repository.find(11L)).thenReturn(container);
|
||||||
|
when(repository.departed(11L)).thenReturn(true);
|
||||||
|
when(carrierSchedules.containerActualFacts(List.of(11L))).thenReturn(List.of(facts("DEPARTED_WAREHOUSE")));
|
||||||
|
|
||||||
|
var result = service.domesticDetail(11L, Set.of("platform:firstleg:container:list"));
|
||||||
|
|
||||||
|
assertThat(result.workbenchStage()).isEqualTo("DEPARTED_WAREHOUSE");
|
||||||
|
assertThat(result.container().getPlanId()).isEqualTo(31L);
|
||||||
|
assertThat(result.container().getPlanNo()).isEqualTo("LP-260908-0001");
|
||||||
|
assertThat(result.allowedActions()).isEmpty();
|
||||||
|
verify(repository, never()).departed(11L);
|
||||||
|
verifyNoInteractions(terminalDrayages);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void domesticDetailStillRejectsContainersOutsideTheActiveMasterSet() {
|
||||||
|
when(repository.find(404L)).thenReturn(null);
|
||||||
|
|
||||||
|
assertThatThrownBy(() -> service.domesticDetail(404L, Set.of("platform:firstleg:container:list")))
|
||||||
|
.isInstanceOf(com.baiyue.common.core.exception.BizException.class)
|
||||||
|
.hasMessage("货柜不存在");
|
||||||
|
|
||||||
|
verifyNoInteractions(carrierSchedules, terminalDrayages);
|
||||||
|
}
|
||||||
|
|
||||||
private static Query query(WorkbenchScope scope) {
|
private static Query query(WorkbenchScope scope) {
|
||||||
return new Query(null, null, null, null, null, null, null, null, null, null, null,
|
return new Query(null, null, null, null, null, null, null, null, null, null, null,
|
||||||
null, null, null, scope, 1, 20);
|
null, null, null, scope, 1, 20);
|
||||||
|
|||||||
Reference in New Issue
Block a user