fix(firstleg): settle zero-package measurements safely
This commit is contained in:
@@ -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}
|
||||
""")
|
||||
|
||||
+12
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user