fix(firstleg): publish only actually loaded items

This commit is contained in:
2026-08-25 15:00:03 +08:00
parent a067a9f056
commit 39988cbaa5
2 changed files with 32 additions and 2 deletions
@@ -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')
@@ -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 {