fix(firstleg): publish only actually loaded items
This commit is contained in:
@@ -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')
|
||||
|
||||
+16
-2
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user