diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/InboundSplitSettlementMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/InboundSplitSettlementMapper.java index ed0190ff2..bb29c8c8c 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/InboundSplitSettlementMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/InboundSplitSettlementMapper.java @@ -205,9 +205,10 @@ public interface InboundSplitSettlementMapper { @Update(""" UPDATE fl_inbound_measurement_item - SET package_count=#{packageCount}, - total_volume_cbm=unit_volume_cbm*#{packageCount}, - volume_weight_kg=volume_weight_kg/NULLIF(package_count,0)*#{packageCount}, + SET total_volume_cbm=COALESCE(unit_volume_cbm,0)*#{packageCount}, + volume_weight_kg=CASE WHEN #{packageCount}=0 THEN 0 + ELSE COALESCE(volume_weight_kg/NULLIF(package_count,0)*#{packageCount},0) END, + package_count=#{packageCount}, updated_at=CURRENT_TIMESTAMP(3) WHERE id=#{measurementItemId} AND tenant_id=#{accountId} """) diff --git a/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java index 636087f87..a7703c107 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java @@ -136,6 +136,18 @@ class PdaSplitSettlementSqlContractTest { .contains("plan_item.package_count = pick_item.picked_package_count"); } + @Test + void zeroPackageSettlementNeverWritesNullVolumeWeight() throws Exception { + String update = String.join(" ", InboundSplitSettlementMapper.class.getMethod( + "updateMeasurementItemForLoaded", long.class, long.class, int.class) + .getAnnotation(Update.class).value()).replaceAll("\\s+", " "); + + assertThat(update) + .contains("volume_weight_kg=CASE WHEN #{packageCount}=0 THEN 0") + .contains("COALESCE(volume_weight_kg/NULLIF(package_count,0)*#{packageCount},0)"); + assertThat(update.indexOf("volume_weight_kg=")).isLessThan(update.indexOf("package_count=#{packageCount}")); + } + @Test void keepsAllocationConfirmedUntilReleaseStep() throws Exception { String consume = InboundPalletAllocationMapper.class.getMethod("consume",