fix(firstleg): publish only actually loaded items
This commit is contained in:
@@ -29,6 +29,14 @@ public interface LoadingCompletedEventMapper {
|
|||||||
FROM fl_loading_plan p
|
FROM fl_loading_plan p
|
||||||
JOIN fl_container_booking b ON b.id = p.container_booking_id
|
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_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
|
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)
|
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'
|
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,
|
i.product_name_zh, i.package_count, i.product_quantity,
|
||||||
label.box_code
|
label.box_code
|
||||||
FROM fl_loading_plan_item i
|
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
|
JOIN fl_inbound_pallet_allocation a
|
||||||
ON a.tenant_id = i.account_id AND a.inbound_id = i.inbound_id
|
ON a.tenant_id = i.account_id AND a.inbound_id = i.inbound_id
|
||||||
AND a.allocation_status IN ('CONFIRMED','TRANSFERRED','RELEASED')
|
AND a.allocation_status IN ('CONFIRMED','TRANSFERRED','RELEASED')
|
||||||
|
|||||||
+16
-2
@@ -138,11 +138,25 @@ class LoadingCompletedOutboxServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test void snapshotOnlyPublishesFinalizedLoadedInbounds() throws Exception {
|
@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+", " ");
|
.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'");
|
.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 {
|
@Test void publishesDropshipPalletSkuAndCartonSnapshots() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user