From 4277601999c823768a77c92d34651847c03f69a6 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Thu, 15 Oct 2026 20:03:41 +0800 Subject: [PATCH] perf(firstleg): scope appointment fact source aggregation by container --- .../mapper/AppointmentWorkSourceMapper.java | 17 +++++++++++++++-- .../service/AppointmentWorkSourceService.java | 2 +- .../mapper/AppointmentWorkSourceMapperTest.java | 16 +++++++++++++--- .../AppointmentWorkSourceServiceTest.java | 14 ++++++++------ 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/firstleg/src/main/java/com/baiyue/firstleg/portschedule/mapper/AppointmentWorkSourceMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/portschedule/mapper/AppointmentWorkSourceMapper.java index 15ecd6177..c84449fce 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/portschedule/mapper/AppointmentWorkSourceMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/portschedule/mapper/AppointmentWorkSourceMapper.java @@ -15,7 +15,7 @@ public interface AppointmentWorkSourceMapper { public Cargo cargo() { return new Cargo(inboundId,customerId,orderId,orderNo,inboundCode,destinationKind,destinationCode,destinationName,packageCount); } } - String SOURCES = """ + String SOURCE_ROWS = """ SELECT b.id,b.cabinet_no,b.container_no,b.departure_port_name,b.destination_warehouse_name, MIN(CASE WHEN f.standard_node='DEPARTED_ORIGIN_PORT' THEN f.actual_at END) departed_local_at, MIN(f.actual_at) sailed_evidence_local_at, @@ -25,13 +25,26 @@ public interface AppointmentWorkSourceMapper { WHERE b.record_status='ACTIVE' AND f.actual_at IS NOT NULL AND f.standard_node IN ('DEPARTED_ORIGIN_PORT','IN_TRANSIT','ARRIVED_DESTINATION_PORT', 'DISCHARGED_FROM_VESSEL','PICKUP_READY','PICKED_UP','EMPTY_RETURNED') + """; + String SOURCE_ORDER = """ GROUP BY b.id,b.cabinet_no,b.container_no,b.departure_port_name,b.destination_warehouse_name,b.version ORDER BY b.id """; // A complete identity/version manifest also detects deletions or edits between cursor pages. - @Select(SOURCES) + @Select(SOURCE_ROWS + SOURCE_ORDER) List sources(); + /** Same live eligibility and aggregate facts as the manifest, restricted before aggregation. */ + @Select("") + List sourcesByIds(@Param("ids") List ids); + @Select("""