From 39988cbaa51607d7b39c974ffa8f2d58f2cb0088 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 25 Aug 2026 15:00:03 +0800 Subject: [PATCH] fix(firstleg): publish only actually loaded items --- .../mapper/LoadingCompletedEventMapper.java | 16 ++++++++++++++++ .../LoadingCompletedOutboxServiceTest.java | 18 ++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/LoadingCompletedEventMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/LoadingCompletedEventMapper.java index 8675643a5..f4e907a2a 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/LoadingCompletedEventMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/LoadingCompletedEventMapper.java @@ -29,6 +29,14 @@ public interface LoadingCompletedEventMapper { FROM fl_loading_plan p JOIN fl_container_booking b ON b.id = p.container_booking_id JOIN fl_loading_plan_item i ON i.loading_plan_id = p.id AND i.deleted = 0 + JOIN fl_loading_pick_item actual_pick + ON actual_pick.loading_plan_item_id = i.id + AND actual_pick.item_status IN ('PICKED','PARTIAL') + AND actual_pick.picked_package_count > 0 + AND actual_pick.picked_package_count = i.package_count + JOIN fl_loading_pick_task actual_task + ON actual_task.id = actual_pick.pick_task_id + AND actual_task.loading_plan_id = p.id JOIN fl_inbound_order o ON o.id = i.inbound_id AND o.tenant_id = i.account_id AND o.deleted = 0 LEFT JOIN fl_inbound_order root_order ON root_order.id = COALESCE(o.root_inbound_id, o.id) WHERE p.id = #{planId} AND p.plan_status = 'COMPLETED' @@ -46,6 +54,14 @@ public interface LoadingCompletedEventMapper { i.product_name_zh, i.package_count, i.product_quantity, label.box_code FROM fl_loading_plan_item i + JOIN fl_loading_pick_item actual_pick + ON actual_pick.loading_plan_item_id = i.id + AND actual_pick.item_status IN ('PICKED','PARTIAL') + AND actual_pick.picked_package_count > 0 + AND actual_pick.picked_package_count = i.package_count + JOIN fl_loading_pick_task actual_task + ON actual_task.id = actual_pick.pick_task_id + AND actual_task.loading_plan_id = #{planId} JOIN fl_inbound_pallet_allocation a ON a.tenant_id = i.account_id AND a.inbound_id = i.inbound_id AND a.allocation_status IN ('CONFIRMED','TRANSFERRED','RELEASED') diff --git a/firstleg/src/test/java/com/baiyue/firstleg/service/LoadingCompletedOutboxServiceTest.java b/firstleg/src/test/java/com/baiyue/firstleg/service/LoadingCompletedOutboxServiceTest.java index 461aca213..785252006 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/service/LoadingCompletedOutboxServiceTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/service/LoadingCompletedOutboxServiceTest.java @@ -138,11 +138,25 @@ class LoadingCompletedOutboxServiceTest { } @Test void snapshotOnlyPublishesFinalizedLoadedInbounds() throws Exception { - String sql = String.join(" ", LoadingCompletedEventMapper.class.getMethod("rows", long.class) + String rowsSql = String.join(" ", LoadingCompletedEventMapper.class.getMethod("rows", long.class) + .getAnnotation(Select.class).value()).replaceAll("\\s+", " "); + String palletsSql = String.join(" ", LoadingCompletedEventMapper.class.getMethod("palletRows", long.class) .getAnnotation(Select.class).value()).replaceAll("\\s+", " "); - assertThat(sql).contains("p.plan_status = 'COMPLETED'") + assertThat(rowsSql).contains("p.plan_status = 'COMPLETED'") .contains("o.process_status = 'LOADED'"); + for (String sql : List.of(rowsSql, palletsSql)) { + assertThat(sql) + .contains("actual_pick.loading_plan_item_id = i.id") + .contains("actual_pick.item_status IN ('PICKED','PARTIAL')") + .contains("actual_pick.picked_package_count > 0") + .contains("actual_pick.picked_package_count = i.package_count") + .contains("actual_task.id = actual_pick.pick_task_id") + .contains("actual_task.loading_plan_id =") + .doesNotContain("'SKIPPED'") + .doesNotContain("'PENDING'") + .doesNotContain("'PICKING'"); + } } @Test void publishesDropshipPalletSkuAndCartonSnapshots() throws Exception {