修改提交
This commit is contained in:
+7
-7
@@ -90,10 +90,10 @@ class CartonMeasurementServiceTest {
|
||||
assertThat(result.scannedShipmentId()).isEqualTo("FBA-SCAN-002");
|
||||
assertThat(insertedItem.get().getScannedShipmentId()).isEqualTo("FBA-SCAN-002");
|
||||
assertThat(insertedItem.get().getMeasurementId()).isEqualTo(30001L);
|
||||
assertThat(insertedItem.get().getTotalVolumeCbm()).isEqualByComparingTo("0.1870");
|
||||
assertThat(insertedItem.get().getOuterLengthCm()).isEqualByComparingTo("64.000");
|
||||
assertThat(insertedItem.get().getOuterWidthCm()).isEqualByComparingTo("54.000");
|
||||
assertThat(insertedItem.get().getOuterHeightCm()).isEqualByComparingTo("54.000");
|
||||
assertThat(insertedItem.get().getTotalVolumeCbm()).isEqualByComparingTo("0.1680");
|
||||
assertThat(insertedItem.get().getOuterLengthCm()).isEqualByComparingTo("62.000");
|
||||
assertThat(insertedItem.get().getOuterWidthCm()).isEqualByComparingTo("52.000");
|
||||
assertThat(insertedItem.get().getOuterHeightCm()).isEqualByComparingTo("52.000");
|
||||
assertThat(measurement.getSourceType()).isEqualTo(MeasurementBatchService.SOURCE_THIRD_PARTY);
|
||||
assertThat(measurement.getSourceCode()).isEqualTo("DEVICE");
|
||||
}
|
||||
@@ -155,9 +155,9 @@ class CartonMeasurementServiceTest {
|
||||
assertThat(result.created()).isFalse();
|
||||
assertThat(result.confirmedPackageCount()).isEqualTo(4);
|
||||
assertThat(existing.getLengthCm()).isEqualByComparingTo("59.500");
|
||||
assertThat(existing.getUnitVolumeCbm()).isEqualByComparingTo("0.187");
|
||||
assertThat(existing.getTotalVolumeCbm()).isEqualByComparingTo("0.7480");
|
||||
assertThat(existing.getVolumeWeightKg()).isEqualByComparingTo("124.916");
|
||||
assertThat(existing.getUnitVolumeCbm()).isEqualByComparingTo("0.168");
|
||||
assertThat(existing.getTotalVolumeCbm()).isEqualByComparingTo("0.6720");
|
||||
assertThat(existing.getVolumeWeightKg()).isEqualByComparingTo("112.224");
|
||||
assertThat(existing.getSourceImageFileId()).isEqualTo(99001L);
|
||||
assertThat(existing.getScannedShipmentId()).isEqualTo("FBA-SCAN-002");
|
||||
verify(images).delete("internal-token", 90001L, 10001L, 70001L, 88001L);
|
||||
|
||||
+4
-4
@@ -95,10 +95,10 @@ class CustomerDimensionConfigServiceTest {
|
||||
assertThat(result.rules()).extracting(rule -> rule.boxType())
|
||||
.containsExactly(CustomerDimensionBoxType.values());
|
||||
assertThat(result.rules().get(0).boxTypeName()).isEqualTo("小箱");
|
||||
assertThat(result.rules().get(0).outerLengthCm()).isEqualByComparingTo("34.000");
|
||||
assertThat(result.rules().get(0).outerWidthCm()).isEqualByComparingTo("24.000");
|
||||
assertThat(result.rules().get(0).outerHeightCm()).isEqualByComparingTo("24.000");
|
||||
assertThat(result.rules().get(0).volumeCbm()).isEqualByComparingTo("0.020");
|
||||
assertThat(result.rules().get(0).outerLengthCm()).isEqualByComparingTo("32.000");
|
||||
assertThat(result.rules().get(0).outerWidthCm()).isEqualByComparingTo("22.000");
|
||||
assertThat(result.rules().get(0).outerHeightCm()).isEqualByComparingTo("22.000");
|
||||
assertThat(result.rules().get(0).volumeCbm()).isEqualByComparingTo("0.015");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ class CustomerDimensionPricingFlowTest {
|
||||
var kgEstimate = pricing.estimate(rate("KG", "8.700000"), actualWeight, twoCartonsVolume);
|
||||
var cbmEstimate = pricing.estimate(rate("CBM", "1400.000000"), actualWeight, twoCartonsVolume);
|
||||
|
||||
assertThat(twoCartonsVolume).isEqualByComparingTo("0.040");
|
||||
assertThat(twoCartonsVolume).isEqualByComparingTo("0.030");
|
||||
assertThat(kgEstimate.quantity()).isEqualByComparingTo("24.000000");
|
||||
assertThat(kgEstimate.amount()).isEqualByComparingTo("208.80");
|
||||
assertThat(cbmEstimate.quantity()).isEqualByComparingTo("0.066116");
|
||||
|
||||
+14
-13
@@ -26,16 +26,16 @@ class CustomerDimensionWeightingServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void measuredDimensionsUseSmallestContainingRuleAndAddEachEdgeTwice() {
|
||||
void measuredDimensionsUseSmallestContainingRuleAndAddConfiguredValueOncePerDimension() {
|
||||
var weighted = service.load(10001L).resolve(
|
||||
new BigDecimal("10"), new BigDecimal("10"), new BigDecimal("10"));
|
||||
|
||||
assertThat(weighted.boxType()).isEqualTo(CustomerDimensionBoxType.SMALL);
|
||||
assertThat(weighted.outerLengthCm()).isEqualByComparingTo("34.000");
|
||||
assertThat(weighted.outerWidthCm()).isEqualByComparingTo("24.000");
|
||||
assertThat(weighted.outerHeightCm()).isEqualByComparingTo("24.000");
|
||||
assertThat(weighted.rawVolumeCbm()).isEqualByComparingTo("0.019584");
|
||||
assertThat(weighted.unitVolumeCbm()).isEqualByComparingTo("0.020");
|
||||
assertThat(weighted.outerLengthCm()).isEqualByComparingTo("32.000");
|
||||
assertThat(weighted.outerWidthCm()).isEqualByComparingTo("22.000");
|
||||
assertThat(weighted.outerHeightCm()).isEqualByComparingTo("22.000");
|
||||
assertThat(weighted.rawVolumeCbm()).isEqualByComparingTo("0.015488");
|
||||
assertThat(weighted.unitVolumeCbm()).isEqualByComparingTo("0.015");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -52,19 +52,20 @@ class CustomerDimensionWeightingServiceTest {
|
||||
new BigDecimal("30.001"), new BigDecimal("20"), new BigDecimal("20"));
|
||||
|
||||
assertThat(weighted.boxType()).isEqualTo(CustomerDimensionBoxType.MEDIUM);
|
||||
assertThat(weighted.unitVolumeCbm()).isEqualByComparingTo("0.051");
|
||||
assertThat(weighted.unitVolumeCbm()).isEqualByComparingTo("0.043");
|
||||
}
|
||||
|
||||
@Test
|
||||
void dimensionsOutsideConfiguredWeightingRulesUseActualDimensions() {
|
||||
void dimensionsOutsideConfiguredWeightingRulesUseLargestTierAdditionOnActualDimensions() {
|
||||
var weighted = service.load(10001L).resolve(
|
||||
new BigDecimal("60.001"), new BigDecimal("50"), new BigDecimal("50"));
|
||||
|
||||
assertThat(weighted.boxType()).isNull();
|
||||
assertThat(weighted.outerLengthCm()).isEqualByComparingTo("60.001");
|
||||
assertThat(weighted.outerWidthCm()).isEqualByComparingTo("50");
|
||||
assertThat(weighted.outerHeightCm()).isEqualByComparingTo("50");
|
||||
assertThat(weighted.calculationRuleVersion()).isEqualTo("ACTUAL_DIMENSION_V1");
|
||||
assertThat(weighted.boxType()).isEqualTo(CustomerDimensionBoxType.EXTRA_LARGE);
|
||||
assertThat(weighted.edgeAdditionCm()).isEqualByComparingTo("2.000");
|
||||
assertThat(weighted.outerLengthCm()).isEqualByComparingTo("62.001");
|
||||
assertThat(weighted.outerWidthCm()).isEqualByComparingTo("52.000");
|
||||
assertThat(weighted.outerHeightCm()).isEqualByComparingTo("52.000");
|
||||
assertThat(weighted.calculationRuleVersion()).isEqualTo("CUSTOMER_DIMENSION_EXTRA_LARGE_V3");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+4
-4
@@ -24,13 +24,13 @@ class CustomerDimensionWeightingTerminalRulesTest {
|
||||
var ruleSet = service.load(10001L);
|
||||
|
||||
assertWeighted(ruleSet, "10", "10", "10", CustomerDimensionBoxType.SMALL,
|
||||
"34", "24", "24", "0.020");
|
||||
"32", "22", "22", "0.015");
|
||||
assertWeighted(ruleSet, "35", "25", "25", CustomerDimensionBoxType.MEDIUM,
|
||||
"44", "34", "34", "0.051");
|
||||
"42", "32", "32", "0.043");
|
||||
assertWeighted(ruleSet, "45", "35", "35", CustomerDimensionBoxType.LARGE,
|
||||
"54", "44", "44", "0.105");
|
||||
"52", "42", "42", "0.092");
|
||||
assertWeighted(ruleSet, "55", "45", "45", CustomerDimensionBoxType.EXTRA_LARGE,
|
||||
"64", "54", "54", "0.187");
|
||||
"62", "52", "52", "0.168");
|
||||
}
|
||||
|
||||
private static void assertWeighted(CustomerDimensionWeightingService.RuleSet rules,
|
||||
|
||||
+76
-11
@@ -152,8 +152,8 @@ class MeasurementBatchServiceTest {
|
||||
+ "LARGE:50,40,40;系数:1.3;大箱:—;EXTRA_LARGE:60,50,50;系数:1.4;特大箱:—");
|
||||
when(pricingRepository.findDefaultRule(1L, 1L)).thenReturn(rule);
|
||||
MeasurementBatchCommand.Item small = new MeasurementBatchCommand.Item(
|
||||
80001L, "001", "A", 1, new BigDecimal("30"), new BigDecimal("20"),
|
||||
new BigDecimal("20"), 500L, null, null, null, null, null, null, "小箱");
|
||||
80001L, "001", "A", 1, new BigDecimal("10"), new BigDecimal("10"),
|
||||
new BigDecimal("10"), 500L, null, null, null, null, null, null, "低于最小档");
|
||||
MeasurementBatchCommand.Item medium = new MeasurementBatchCommand.Item(
|
||||
80002L, "002", "B", 1, new BigDecimal("31"), new BigDecimal("20"),
|
||||
new BigDecimal("20"), 501L, null, null, null, null, null, null, "中箱");
|
||||
@@ -166,9 +166,9 @@ class MeasurementBatchServiceTest {
|
||||
ArgumentCaptor<List<InboundMeasurementItemEntity>> items = ArgumentCaptor.forClass(List.class);
|
||||
verify(repository).replaceItems(org.mockito.ArgumentMatchers.eq(1L),
|
||||
org.mockito.ArgumentMatchers.eq(100L), items.capture());
|
||||
assertThat(items.getValue().get(0).getOuterLengthCm()).isEqualByComparingTo("33.000");
|
||||
assertThat(items.getValue().get(0).getOuterWidthCm()).isEqualByComparingTo("22.000");
|
||||
assertThat(items.getValue().get(0).getOuterHeightCm()).isEqualByComparingTo("22.000");
|
||||
assertThat(items.getValue().get(0).getOuterLengthCm()).isEqualByComparingTo("11.000");
|
||||
assertThat(items.getValue().get(0).getOuterWidthCm()).isEqualByComparingTo("11.000");
|
||||
assertThat(items.getValue().get(0).getOuterHeightCm()).isEqualByComparingTo("11.000");
|
||||
assertThat(items.getValue().get(1).getOuterLengthCm()).isEqualByComparingTo("37.200");
|
||||
assertThat(items.getValue().get(1).getOuterWidthCm()).isEqualByComparingTo("24.000");
|
||||
assertThat(items.getValue().get(1).getOuterHeightCm()).isEqualByComparingTo("24.000");
|
||||
@@ -221,7 +221,32 @@ class MeasurementBatchServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void warehouseOuterDimensionsOverrideCalculatedCartonAndAllDerivedValues() {
|
||||
void dimensionsAboveLargestTierAddLargestTierValueToMeasuredDimensions() {
|
||||
MeasurementBatchCommand.Item source = new MeasurementBatchCommand.Item(
|
||||
80001L, "001", "A", 2, new BigDecimal("60.001"), new BigDecimal("50"),
|
||||
new BigDecimal("50"), 500L, null, null, null, null, null, "ADD", "超过最大箱规");
|
||||
MeasurementBatchCommand command = new MeasurementBatchCommand(
|
||||
1L, 10L, null, 0, "MANUAL", "PLATFORM", null, null, null,
|
||||
LocalDateTime.now(), null, null, null, null, null, 9L, List.of(source));
|
||||
|
||||
service.saveBatch(command);
|
||||
|
||||
ArgumentCaptor<List<InboundMeasurementItemEntity>> items = ArgumentCaptor.forClass(List.class);
|
||||
verify(repository).replaceItems(org.mockito.ArgumentMatchers.eq(1L),
|
||||
org.mockito.ArgumentMatchers.eq(100L), items.capture());
|
||||
InboundMeasurementItemEntity calculated = items.getValue().get(0);
|
||||
assertThat(calculated.getOuterLengthCm()).isEqualByComparingTo("62.001");
|
||||
assertThat(calculated.getOuterWidthCm()).isEqualByComparingTo("52.000");
|
||||
assertThat(calculated.getOuterHeightCm()).isEqualByComparingTo("52.000");
|
||||
assertThat(calculated.getGirthCm()).isEqualByComparingTo("270.001");
|
||||
assertThat(calculated.getUnitVolumeCbm()).isEqualByComparingTo("0.168");
|
||||
assertThat(calculated.getTotalVolumeCbm()).isEqualByComparingTo("0.3360");
|
||||
assertThat(calculated.getCalculationRuleVersion())
|
||||
.isEqualTo("CUSTOMER_DIMENSION_EXTRA_LARGE_V0");
|
||||
}
|
||||
|
||||
@Test
|
||||
void warehouseOuterDimensionsBecomeBaseValuesBeforeAddStrategy() {
|
||||
MeasurementBatchCommand.Item source = new MeasurementBatchCommand.Item(
|
||||
80001L, "001", "A", 2, new BigDecimal("40"), new BigDecimal("30"),
|
||||
new BigDecimal("20"), 500L, null, new BigDecimal("50"),
|
||||
@@ -239,10 +264,10 @@ class MeasurementBatchServiceTest {
|
||||
assertThat(calculated.getOuterLengthCm()).isEqualByComparingTo("50.000");
|
||||
assertThat(calculated.getOuterWidthCm()).isEqualByComparingTo("40.000");
|
||||
assertThat(calculated.getOuterHeightCm()).isEqualByComparingTo("30.000");
|
||||
assertThat(calculated.getGirthCm()).isEqualByComparingTo("190.000");
|
||||
assertThat(calculated.getUnitVolumeCbm()).isEqualByComparingTo("0.0600");
|
||||
assertThat(calculated.getTotalVolumeCbm()).isEqualByComparingTo("0.1200");
|
||||
assertThat(calculated.getVolumeWeightKg()).isEqualByComparingTo("20.040");
|
||||
assertThat(calculated.getGirthCm()).isEqualByComparingTo("200.000");
|
||||
assertThat(calculated.getUnitVolumeCbm()).isEqualByComparingTo("0.0699");
|
||||
assertThat(calculated.getTotalVolumeCbm()).isEqualByComparingTo("0.1398");
|
||||
assertThat(calculated.getVolumeWeightKg()).isEqualByComparingTo("23.347");
|
||||
assertThat(calculated.getCalculationRuleVersion()).isEqualTo("WAREHOUSE_OUTER_OVERRIDE_V1");
|
||||
}
|
||||
|
||||
@@ -265,7 +290,47 @@ class MeasurementBatchServiceTest {
|
||||
assertThat(calculated.getOuterLengthCm()).isEqualByComparingTo("50.000");
|
||||
assertThat(calculated.getOuterWidthCm()).isEqualByComparingTo("32.000");
|
||||
assertThat(calculated.getOuterHeightCm()).isEqualByComparingTo("22.000");
|
||||
assertThat(calculated.getUnitVolumeCbm()).isEqualByComparingTo("0.0352");
|
||||
assertThat(calculated.getUnitVolumeCbm()).isEqualByComparingTo("0.0367");
|
||||
assertThat(calculated.getTotalVolumeCbm()).isEqualByComparingTo("0.0734");
|
||||
assertThat(calculated.getGirthCm()).isEqualByComparingTo("160.000");
|
||||
assertThat(calculated.getCalculationRuleVersion()).isEqualTo("WAREHOUSE_OUTER_OVERRIDE_L_V1");
|
||||
}
|
||||
|
||||
@Test
|
||||
void warehouseOverrideUsesTheTierMatchedByItsBaseDimensionsBeforeMultiplyStrategy() {
|
||||
CustomerChargeRuleEntity rule = new CustomerChargeRuleEntity();
|
||||
rule.setId(79L);
|
||||
rule.setTenantId(1L);
|
||||
rule.setCustomerId(1L);
|
||||
rule.setRuleCode("TIERED-OVERRIDE");
|
||||
rule.setRuleVersion(1);
|
||||
rule.setStatus("ACTIVE");
|
||||
rule.setDefaultRule(true);
|
||||
rule.setLengthFactor(new BigDecimal("1.1"));
|
||||
rule.setWidthFactor(new BigDecimal("1.1"));
|
||||
rule.setHeightFactor(new BigDecimal("1.1"));
|
||||
rule.setRemark("SMALL:30,20,20;系数:1.1;小箱:—;MEDIUM:40,30,30;系数:1.2;中箱:—");
|
||||
when(pricingRepository.findDefaultRule(1L, 1L)).thenReturn(rule);
|
||||
MeasurementBatchCommand.Item source = new MeasurementBatchCommand.Item(
|
||||
80001L, "001", "A", 1, new BigDecimal("30"), new BigDecimal("20"),
|
||||
new BigDecimal("20"), 500L, null, new BigDecimal("31"),
|
||||
null, null, null, "MULTIPLY", "仅修改长度");
|
||||
MeasurementBatchCommand command = new MeasurementBatchCommand(
|
||||
1L, 10L, null, 0, "MANUAL", "PLATFORM", null, null, null,
|
||||
LocalDateTime.now(), null, null, null, null, null, 9L, List.of(source));
|
||||
|
||||
service.saveBatch(command);
|
||||
|
||||
ArgumentCaptor<List<InboundMeasurementItemEntity>> items = ArgumentCaptor.forClass(List.class);
|
||||
verify(repository).replaceItems(org.mockito.ArgumentMatchers.eq(1L),
|
||||
org.mockito.ArgumentMatchers.eq(100L), items.capture());
|
||||
InboundMeasurementItemEntity calculated = items.getValue().get(0);
|
||||
assertThat(calculated.getOuterLengthCm()).isEqualByComparingTo("31.000");
|
||||
assertThat(calculated.getOuterWidthCm()).isEqualByComparingTo("24.000");
|
||||
assertThat(calculated.getOuterHeightCm()).isEqualByComparingTo("24.000");
|
||||
assertThat(calculated.getUnitVolumeCbm()).isEqualByComparingTo("0.0215");
|
||||
assertThat(calculated.getGirthCm()).isEqualByComparingTo("133.200");
|
||||
assertThat(calculated.getChargeRuleId()).isEqualTo(79L);
|
||||
assertThat(calculated.getCalculationRuleVersion()).isEqualTo("WAREHOUSE_OUTER_OVERRIDE_L_V1");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user