From 5edc2fc1bd600c7e627c0dc55f494baf0864d5b0 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Mon, 24 Aug 2026 20:14:39 +0800 Subject: [PATCH] fix(lastleg): restore overseas receiving build --- .../pda/service/ReceivingContainerService.java | 2 +- .../pda/ReceivingContainerContractTest.java | 7 ++++--- .../service/InboundStockReceiptServiceTest.java | 2 +- .../ReceivingContainerServiceBehaviorTest.java | 14 ++++++++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/inboundplan/pda/service/ReceivingContainerService.java b/lastleg-service/src/main/java/com/baiyue/lastleg/inboundplan/pda/service/ReceivingContainerService.java index 7262e4677..4c6682853 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/inboundplan/pda/service/ReceivingContainerService.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/inboundplan/pda/service/ReceivingContainerService.java @@ -451,7 +451,7 @@ public class ReceivingContainerService { .map(ReceivingContainerRequests.SignedPhoto::role).collect(Collectors.toSet()); if (roles.size() != 3 || roles.contains(null)) throw conflict("Each unload photo role is required exactly once"); Set fileIds = request.photos().stream().map(ReceivingContainerRequests.SignedPhoto::fileId) - .boxed().collect(Collectors.toSet()); + .collect(Collectors.toSet()); if (fileIds.size() != 3 || fileIds.stream().anyMatch(value -> value == null || value <= 0)) { throw conflict("Unload photo file IDs must be positive and unique"); } diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/ReceivingContainerContractTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/ReceivingContainerContractTest.java index 5736a0949..d49cf48e4 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/ReceivingContainerContractTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/ReceivingContainerContractTest.java @@ -65,8 +65,9 @@ class ReceivingContainerContractTest { assertTrue(schema.contains("create table if not exists ll_receiving_container_operation")); assertTrue(schema.contains("create table if not exists ll_receiving_sku_receipt")); assertTrue(schema.contains("unique key uk_ll_receiving_sku_pallet (customer_id,line_id,pallet_id,sku_code)")); - assertTrue(schema.contains("sign_photos json")); - assertFalse(schema.contains("photo_file_ids json")); + String receivingSession = tableBlock(schema, "ll_receiving_container_session"); + assertTrue(receivingSession.contains("sign_photos json")); + assertFalse(receivingSession.contains("photo_file_ids json")); assertTrue(unified.contains("create table if not exists ll_receiving_sku_receipt")); assertTrue(unified.contains("column_name='sign_photos'")); assertTrue(schema.contains("wait_sign、signed、receiving、completed")); @@ -93,7 +94,7 @@ class ReceivingContainerContractTest { assertTrue(successResponses.stream().allMatch(line -> line.contains("content: { application/json: { schema: { $ref: '#/components/schemas/Receiving"))); assertTrue(receivingPaths.contains("返回 WAIT_SIGN、SIGNED 或 RECEIVING 当前柜")); - assertTrue(receivingPaths.contains("LICENSE_PLATE, CONTAINER_SEAL, DOOR_OPEN")); + assertTrue(yaml.contains("enum: [LICENSE_PLATE, CONTAINER_SEAL, DOOR_OPEN]")); assertFalse(receivingPaths.contains("photoFileIds")); } diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/service/InboundStockReceiptServiceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/service/InboundStockReceiptServiceTest.java index 3f1f93bb2..d856e2e58 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/service/InboundStockReceiptServiceTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/service/InboundStockReceiptServiceTest.java @@ -134,7 +134,7 @@ class InboundStockReceiptServiceTest { ArgumentCaptor requests = ArgumentCaptor.forClass(InventoryCommandRequests.StockIn.class); verify(inventory, times(2)).stockIn(eq("100"), eq("operator"), requests.capture()); assertEquals(java.util.Set.of("SKU-1:2001", "SKU-2:2002"), requests.getAllValues().stream() - .map(value -> value.skuCode() + ":" + value.warehousePalletId()).collect(java.util.stream.Collectors.toSet())); + .map(value -> value.skuCode() + ":" + value.palletId()).collect(java.util.stream.Collectors.toSet())); } @Test diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/service/ReceivingContainerServiceBehaviorTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/service/ReceivingContainerServiceBehaviorTest.java index 0ebcaab05..498415847 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/service/ReceivingContainerServiceBehaviorTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/inboundplan/pda/service/ReceivingContainerServiceBehaviorTest.java @@ -197,6 +197,7 @@ class ReceivingContainerServiceBehaviorTest { @Test void localFailureAfterRemoteReservationTriggersReleaseCompensation() { stubCurrent("FBA", "CONT-A"); + stubSku(); when(warehouse.resolvePallet("PAL-1")).thenReturn(resource(100L, "FBA-1")); when(pallets.selectList(any())).thenReturn(List.of(planPallet())); when(workflow.assignResolvedPallet(any(), any(), any(), any())).thenReturn(55L); @@ -244,6 +245,19 @@ class ReceivingContainerServiceBehaviorTest { verifyNoInteractions(unloadPhotos); } + @Test + void signRejectsDuplicateFileIdsBeforeFileValidation() { + when(sessions.lockActiveByOperator("100", "100:7")).thenReturn(session("CONT-A", "WAIT_SIGN")); + ReceivingContainerRequests.Sign request = new ReceivingContainerRequests.Sign(List.of( + new ReceivingContainerRequests.SignedPhoto(ReceivingPhotoRole.LICENSE_PLATE, 1L), + new ReceivingContainerRequests.SignedPhoto(ReceivingPhotoRole.CONTAINER_SEAL, 1L), + new ReceivingContainerRequests.SignedPhoto(ReceivingPhotoRole.DOOR_OPEN, 3L)), "invalid-files"); + + assertThatThrownBy(() -> service.sign("100", "7", "receiver", request)) + .isInstanceOf(ResponseStatusException.class).hasMessageContaining("409"); + verifyNoInteractions(unloadPhotos); + } + @Test void bulkRejectsSkuOverReceiptBeforeWarehouseLookup() { stubCurrent("FBA", "CONT-A");