优化
This commit is contained in:
+56
-12
@@ -117,7 +117,7 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
when(shippingGates.receivingAvailable("BOOKING-A", "CONT-A")).thenReturn(0);
|
||||
|
||||
assertThat(service.candidates("7", 100L)).isEmpty();
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-A",
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-A", "BOOKING-A",
|
||||
new ReceivingContainerRequests.Action("not-ready")))
|
||||
.isInstanceOf(ResponseStatusException.class).hasMessageContaining("409");
|
||||
verifyNoInteractions(warehouse);
|
||||
@@ -133,7 +133,7 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
when(sessions.insert(any(ReceivingContainerSession.class))).thenReturn(1);
|
||||
when(operations.insert(any(ReceivingContainerOperation.class))).thenReturn(1);
|
||||
when(warehouse.requireActiveSharedWarehouse(100L)).thenReturn(warehouseReference());
|
||||
var response = service.prepare("7", "receiver", 100L, "CONT-A",
|
||||
var response = service.prepare("7", "receiver", 100L, "CONT-A", "BOOKING-A",
|
||||
new ReceivingContainerRequests.Action("same-key"));
|
||||
assertThat(response.overseasWarehouseId()).isEqualTo(100L);
|
||||
assertThat(response.overseasWarehouseName()).isEqualTo("Shared LAX");
|
||||
@@ -145,7 +145,7 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
verify(operations).insert(saved.capture());
|
||||
when(operations.find("7", "same-key")).thenReturn(saved.getValue());
|
||||
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-B",
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-B", "BOOKING-A",
|
||||
new ReceivingContainerRequests.Action("same-key"))).isInstanceOf(ResponseStatusException.class)
|
||||
.hasMessageContaining("409");
|
||||
}
|
||||
@@ -249,13 +249,44 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
when(warehouse.requireActiveSharedWarehouse(100L)).thenReturn(warehouseReference());
|
||||
|
||||
var candidate = service.candidates("7", 100L).get(0);
|
||||
var detail = service.detail("7", 100L, "TSTU0000204");
|
||||
var detail = service.detail("7", 100L, "TSTU0000204", "BOOKING-204");
|
||||
|
||||
assertThat(candidate.operable()).isTrue();
|
||||
assertThat(detail.overseasWarehouseId()).isEqualTo(100L);
|
||||
assertThat(detail.overseasWarehouseCode()).isEqualTo("SHARED-LAX");
|
||||
}
|
||||
|
||||
@Test
|
||||
void detailUsesBookingOccurrenceWhenPhysicalContainerNumberIsReused() {
|
||||
InboundPlan historicalPlan = plan("VAXU2748524");
|
||||
historicalPlan.setId(2L); historicalPlan.setPlanNo("PLAN-OLD"); historicalPlan.setStatus("COMPLETED");
|
||||
InboundPlan currentPlan = plan("VAXU2748524");
|
||||
currentPlan.setId(3L); currentPlan.setPlanNo("PLAN-CURRENT");
|
||||
InboundPlanLine historicalLine = line("FBA");
|
||||
historicalLine.setId(10L); historicalLine.setPlanId(2L); historicalLine.setOrderId(1L);
|
||||
historicalLine.setInboundCode("IN-OLD");
|
||||
InboundPlanLine currentLine = line("FBA");
|
||||
currentLine.setId(11L); currentLine.setPlanId(3L); currentLine.setOrderId(2L);
|
||||
currentLine.setInboundCode("IN-CURRENT");
|
||||
LastlegOrder historicalOrder = containerOrder(
|
||||
1L, "100", "VAXU2748524", "BOOKING-OLD", "IN-OLD");
|
||||
LastlegOrder currentOrder = containerOrder(
|
||||
2L, "100", "VAXU2748524", "BOOKING-CURRENT", "IN-CURRENT");
|
||||
when(plans.selectList(any())).thenReturn(List.of(historicalPlan, currentPlan));
|
||||
when(lines.selectList(any())).thenReturn(
|
||||
List.of(currentLine),
|
||||
List.of(historicalLine), List.of(currentLine),
|
||||
List.of(historicalLine), List.of(currentLine));
|
||||
when(orders.selectList(any())).thenReturn(List.of(currentOrder));
|
||||
when(orders.selectById(1L)).thenReturn(historicalOrder);
|
||||
when(orders.selectById(2L)).thenReturn(currentOrder);
|
||||
when(warehouse.requireActiveSharedWarehouse(100L)).thenReturn(warehouseReference());
|
||||
|
||||
var detail = service.detail("7", 100L, "VAXU2748524", "BOOKING-CURRENT");
|
||||
|
||||
assertThat(detail.inbounds()).extracting("inboundCode").containsExactly("IN-CURRENT");
|
||||
}
|
||||
|
||||
@Test
|
||||
void prepareAtomicallyBindsUnassignedPlansToThePickerWarehouse() {
|
||||
InboundPlan unassigned = plan("TSTU0195472");
|
||||
@@ -269,7 +300,7 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
when(orders.selectById(1L)).thenReturn(order);
|
||||
when(warehouse.requireActiveSharedWarehouse(100L)).thenReturn(warehouseReference());
|
||||
|
||||
var result = service.prepare("7", "receiver", 100L, "TSTU0195472",
|
||||
var result = service.prepare("7", "receiver", 100L, "TSTU0195472", "BOOKING-472",
|
||||
new ReceivingContainerRequests.Action("bind-warehouse"));
|
||||
|
||||
assertThat(result.overseasWarehouseId()).isEqualTo(100L);
|
||||
@@ -285,9 +316,10 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
when(plans.selectList(any())).thenReturn(List.of(plan));
|
||||
when(lines.selectList(any())).thenReturn(List.of(planLine));
|
||||
when(orders.selectList(any())).thenReturn(List.of(order));
|
||||
when(orders.selectById(1L)).thenReturn(order);
|
||||
when(pallets.selectCount(any())).thenReturn(0L);
|
||||
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "TSTU0195472",
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "TSTU0195472", "BOOKING-472",
|
||||
new ReceivingContainerRequests.Action("missing-real-pallets")))
|
||||
.isInstanceOf(ResponseStatusException.class)
|
||||
.hasMessageContaining("尚未完整绑定真实托盘");
|
||||
@@ -339,7 +371,7 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
assertThat(candidate.pendingPlanCount()).isEqualTo(1);
|
||||
assertThat(candidate.operable()).isFalse();
|
||||
assertThat(candidate.blockReason()).isEqualTo("1个入仓码已生成计划,1个订单未操作/缺入仓码");
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-A",
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-A", "BOOKING-A",
|
||||
new ReceivingContainerRequests.Action("partial")))
|
||||
.isInstanceOf(ResponseStatusException.class).hasMessageContaining("409");
|
||||
verify(sessions, never()).insert(any(ReceivingContainerSession.class));
|
||||
@@ -351,12 +383,14 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
when(lines.selectList(any())).thenReturn(List.of(line("FBA")));
|
||||
when(orders.selectList(any())).thenReturn(List.of(
|
||||
containerOrder(1L, "100", "CONT-B", "BOOKING-B", "IN-1")));
|
||||
when(orders.selectById(1L)).thenReturn(
|
||||
containerOrder(1L, "100", "CONT-B", "BOOKING-B", "IN-1"));
|
||||
ReceivingContainerSession other = session("CONT-B", "SIGNED");
|
||||
other.setOperatorKey("8"); other.setActiveOperatorKey("OPERATOR:8");
|
||||
other.setActiveContainerKey("CONTAINER:CONT-B");
|
||||
when(sessions.findActiveByContainer("CONTAINER:CONT-B")).thenReturn(other);
|
||||
|
||||
assertThatThrownBy(() -> service.detail("7", 100L, "CONT-B"))
|
||||
assertThatThrownBy(() -> service.detail("7", 100L, "CONT-B", "BOOKING-B"))
|
||||
.isInstanceOf(ResponseStatusException.class).hasMessageContaining("409");
|
||||
verifyNoInteractions(warehouse);
|
||||
}
|
||||
@@ -367,8 +401,10 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
when(lines.selectList(any())).thenReturn(List.of(line("FBA")));
|
||||
when(orders.selectList(any())).thenReturn(List.of(
|
||||
containerOrder(1L, "100", "CONT-B", "BOOKING-B", "IN-1")));
|
||||
when(orders.selectById(1L)).thenReturn(
|
||||
containerOrder(1L, "100", "CONT-B", "BOOKING-B", "IN-1"));
|
||||
when(sessions.findActiveByOperator("OPERATOR:7")).thenReturn(session("CONT-A", "WAIT_SIGN"));
|
||||
assertThatThrownBy(() -> service.detail("7", 100L, "CONT-B"))
|
||||
assertThatThrownBy(() -> service.detail("7", 100L, "CONT-B", "BOOKING-B"))
|
||||
.isInstanceOf(ResponseStatusException.class).hasMessageContaining("409");
|
||||
}
|
||||
|
||||
@@ -378,14 +414,15 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
when(lines.selectList(any())).thenReturn(List.of(line("FBA")));
|
||||
LastlegOrder order = containerOrder(1L, "100", "CONT-B", "BOOKING-B", "IN-1");
|
||||
when(orders.selectList(any())).thenReturn(List.of(order));
|
||||
when(orders.selectById(1L)).thenReturn(order);
|
||||
when(sessions.lockActiveByOperator("OPERATOR:7")).thenReturn(session("CONT-A", "WAIT_SIGN"));
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-B",
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-B", "BOOKING-B",
|
||||
new ReceivingContainerRequests.Action("account-lock"))).isInstanceOf(ResponseStatusException.class);
|
||||
verify(sessions, never()).insert(any(ReceivingContainerSession.class));
|
||||
|
||||
org.mockito.Mockito.reset(sessions, operations);
|
||||
when(sessions.lockActiveByContainer("CONTAINER:CONT-B")).thenReturn(session("CONT-B", "WAIT_SIGN"));
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-B",
|
||||
assertThatThrownBy(() -> service.prepare("7", "receiver", 100L, "CONT-B", "BOOKING-B",
|
||||
new ReceivingContainerRequests.Action("container-lock"))).isInstanceOf(ResponseStatusException.class);
|
||||
verify(sessions, never()).insert(any(ReceivingContainerSession.class));
|
||||
}
|
||||
@@ -675,7 +712,8 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
void signRequiresEachTypedPhotoExactlyOnceAndRestoresRoles() {
|
||||
when(sessions.lockActiveByOperator("OPERATOR:7")).thenReturn(session("CONT-A", "WAIT_SIGN"));
|
||||
when(plans.selectList(any())).thenReturn(List.of(plan("CONT-A")));
|
||||
when(lines.selectList(any())).thenReturn(List.of());
|
||||
when(lines.selectList(any())).thenReturn(List.of(line("FBA")));
|
||||
when(orders.selectById(1L)).thenReturn(order("FBA"));
|
||||
when(sessions.updateById(any(ReceivingContainerSession.class))).thenReturn(1);
|
||||
when(operations.insert(any(ReceivingContainerOperation.class))).thenReturn(1);
|
||||
ReceivingContainerRequests.Sign request = new ReceivingContainerRequests.Sign(List.of(
|
||||
@@ -1046,9 +1084,12 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
InboundPlan plan = plan(containerNo);
|
||||
InboundPlanLine line = line(destinationType);
|
||||
LastlegOrder order = order(destinationType);
|
||||
order.setContainerNo(containerNo); order.setSourceContainerBookingId("BOOKING-A");
|
||||
order.setInboundCode("IN-1");
|
||||
when(sessions.lockActiveByOperator("OPERATOR:7")).thenReturn(session(containerNo, "SIGNED"));
|
||||
when(plans.selectList(any())).thenReturn(List.of(plan));
|
||||
when(lines.selectList(any())).thenReturn(List.of(line));
|
||||
org.mockito.Mockito.lenient().when(orders.selectList(any())).thenReturn(List.of(order));
|
||||
when(orders.selectById(1L)).thenReturn(order);
|
||||
}
|
||||
|
||||
@@ -1076,6 +1117,8 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
private static LastlegOrder order(String destinationType) {
|
||||
LastlegOrder value = new LastlegOrder();
|
||||
value.setId(1L); value.setCustomerId("100"); value.setDestinationType(destinationType);
|
||||
value.setContainerNo("CONT-A"); value.setSourceContainerBookingId("BOOKING-A");
|
||||
value.setInboundCode("IN-1");
|
||||
value.setOverseasWarehouseId("100"); value.setOverseasWarehouseCode("SHARED-LAX");
|
||||
value.setOverseasWarehouseName("Shared LAX");
|
||||
value.setFbaWarehouseCode("FBA".equals(destinationType) ? "FBA-1" : null);
|
||||
@@ -1100,6 +1143,7 @@ class ReceivingContainerServiceBehaviorTest {
|
||||
private static ReceivingContainerSession session(String containerNo, String status) {
|
||||
ReceivingContainerSession value = new ReceivingContainerSession();
|
||||
value.setId(8L); value.setContainerNo(containerNo); value.setOperatorKey("7");
|
||||
value.setSourceContainerBookingId("BOOKING-A");
|
||||
value.setOverseasWarehouseId(100L); value.setOverseasWarehouseCode("SHARED-LAX");
|
||||
value.setOverseasWarehouseName("Shared LAX");
|
||||
value.setStatus(status); value.setVersion(0);
|
||||
|
||||
Reference in New Issue
Block a user