diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/OrderDeclarationSyncMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/OrderDeclarationSyncMapper.java index 232d3c5b3..4e3cad5d9 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/OrderDeclarationSyncMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/OrderDeclarationSyncMapper.java @@ -41,7 +41,7 @@ public interface OrderDeclarationSyncMapper { WHERE inbound.tenant_id=#{tenantId} AND inbound.order_id=#{orderId} AND inbound.deleted=0 ORDER BY inbound.created_at DESC,inbound.id DESC LIMIT 1 FOR UPDATE """) - GateRow lockInbound(@Param("tenantId") long tenantId, @Param("orderId") long orderId); + InboundRow lockInbound(@Param("tenantId") long tenantId, @Param("orderId") long orderId); @Select("SELECT tenant_id tenantId,order_id orderId,event_id eventId,order_version orderVersion,request_hash requestHash " + "FROM fl_order_declaration_snapshot WHERE tenant_id=#{tenantId} AND order_id=#{orderId} FOR UPDATE") @@ -110,5 +110,7 @@ public interface OrderDeclarationSyncMapper { record GateRow(Long inboundId, Long orderId, String orderNo, String inboundCode, String processStatus, String channelCode, Integer incompatibleGroupCount, Integer splitCount, Integer preloadCount, Integer pdaCount) {} + record InboundRow(Long inboundId, Long orderId, String orderNo, String inboundCode, + String processStatus, String channelCode) {} record SnapshotRow(Long tenantId, Long orderId, String eventId, Integer orderVersion, String requestHash) {} } diff --git a/firstleg/src/test/java/com/baiyue/firstleg/mapper/OrderDeclarationSyncMapperContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/mapper/OrderDeclarationSyncMapperContractTest.java index 8605921a9..5c39d7002 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/mapper/OrderDeclarationSyncMapperContractTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/mapper/OrderDeclarationSyncMapperContractTest.java @@ -13,6 +13,12 @@ class OrderDeclarationSyncMapperContractTest { @Test void mapperIsExplicitAndProjectionUpdateCannotOverwriteOperationalFacts() throws Exception { assertThat(OrderDeclarationSyncMapper.class).hasAnnotation(Mapper.class); + assertThat(OrderDeclarationSyncMapper.class + .getDeclaredMethod("lockInbound", long.class, long.class).getReturnType()) + .isEqualTo(OrderDeclarationSyncMapper.InboundRow.class); + assertThat(OrderDeclarationSyncMapper.InboundRow.class.getRecordComponents()) + .extracting(java.lang.reflect.RecordComponent::getName) + .containsExactly("inboundId", "orderId", "orderNo", "inboundCode", "processStatus", "channelCode"); String sql = String.join(" ", OrderDeclarationSyncMapper.class .getDeclaredMethod("updateAllowedSnapshot", long.class, long.class, long.class, String.class, String.class, String.class, java.time.LocalDateTime.class, String.class, String.class, long.class) diff --git a/firstleg/src/test/java/com/baiyue/firstleg/service/OrderDeclarationSyncServiceTest.java b/firstleg/src/test/java/com/baiyue/firstleg/service/OrderDeclarationSyncServiceTest.java index 4d70fa641..98445bcd8 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/service/OrderDeclarationSyncServiceTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/service/OrderDeclarationSyncServiceTest.java @@ -66,7 +66,7 @@ class OrderDeclarationSyncServiceTest { @Test void persistsVersionedDeclarationAndUpdatesOnlyAllowedInboundProjection() { var event = event(4, "event-4"); - when(mapper.lockInbound(10001L, 77L)).thenReturn(row("WAIT_MEASURE", null, null, null, null)); + when(mapper.lockInbound(10001L, 77L)).thenReturn(inboundRow("WAIT_MEASURE")); when(mapper.insertSnapshot(anyLong(), anyLong(), anyString(), anyInt(), anyString(), any(), any(), anyString(), anyString(), anyString(), anyString(), any())).thenReturn(1); when(mapper.insertConsumedEvent(anyLong(), anyString(), anyLong(), anyInt(), anyString())).thenReturn(1); @@ -82,7 +82,7 @@ class OrderDeclarationSyncServiceTest { @Test void ignoresOlderVersionWithoutOverwritingCurrentProjection() { var event = event(4, "event-4"); - when(mapper.lockInbound(10001L, 77L)).thenReturn(row("WAIT_MEASURE", null, null, null, null)); + when(mapper.lockInbound(10001L, 77L)).thenReturn(inboundRow("WAIT_MEASURE")); when(mapper.lockSnapshot(10001L, 77L)).thenReturn( new OrderDeclarationSyncMapper.SnapshotRow(10001L, 77L, "event-5", 5, "hash")); when(mapper.insertConsumedEvent(anyLong(), anyString(), anyLong(), anyInt(), anyString())).thenReturn(1); @@ -101,7 +101,7 @@ class OrderDeclarationSyncServiceTest { var event = event(4, "event-4"); String hash = HexFormat.of().formatHex(MessageDigest.getInstance("SHA-256") .digest(json.writeValueAsBytes(event))); - when(mapper.lockInbound(10001L, 77L)).thenReturn(row("WAIT_MEASURE", null, null, null, null)); + when(mapper.lockInbound(10001L, 77L)).thenReturn(inboundRow("WAIT_MEASURE")); when(mapper.byEvent(10001L, "event-4")).thenReturn( new OrderDeclarationSyncMapper.SnapshotRow(10001L, 77L, "event-4", 4, hash)); @@ -118,6 +118,11 @@ class OrderDeclarationSyncServiceTest { "MATSON_OLD", group, split, preload, pda); } + private static OrderDeclarationSyncMapper.InboundRow inboundRow(String status) { + return new OrderDeclarationSyncMapper.InboundRow( + 88L, 77L, "FL-77", "RK-77", status, "MATSON_OLD"); + } + private static OrderDeclarationSync.UpdatedEvent event(int version, String eventId) { var cargo = new OrderDeclarationSync.Cargo(1, "衣服", "clothes", "SKU-1", null, 2, 20, new BigDecimal("10"), new BigDecimal("20"), new BigDecimal("30"), new BigDecimal("37"),