Merge remote-tracking branch 'origin/test' into dev
This commit is contained in:
@@ -534,18 +534,36 @@ public class InboundMeasurementService {
|
||||
}
|
||||
|
||||
private InboundMeasurementResponses.Item toItem(InboundMeasurementItemEntity item) {
|
||||
String overrideVersion = item.getCalculationRuleVersion();
|
||||
boolean legacyFullOverride = "WAREHOUSE_OUTER_OVERRIDE_V1".equals(overrideVersion);
|
||||
boolean lengthOverridden = legacyFullOverride || warehouseOverrideContains(overrideVersion, 'L');
|
||||
boolean widthOverridden = legacyFullOverride || warehouseOverrideContains(overrideVersion, 'W');
|
||||
boolean heightOverridden = legacyFullOverride || warehouseOverrideContains(overrideVersion, 'H');
|
||||
return new InboundMeasurementResponses.Item(
|
||||
item.getId(), item.getInboundDetailId(), item.getItemNo(), item.getBoxSpecification(), item.getPackageCount(),
|
||||
item.getLengthCm(), item.getWidthCm(), item.getHeightCm(), item.getGirthCm(),
|
||||
item.getUnitVolumeCbm(),
|
||||
item.getTotalVolumeCbm(), item.getVolumeWeightKg(), item.getSourceImageFileId(),
|
||||
item.getOverLimitWarning(), item.getOuterLengthCm(), item.getOuterWidthCm(),
|
||||
item.getOuterHeightCm(), item.getChargeRuleId(), item.getCoefficientMode(),
|
||||
item.getOverLimitWarning(), lengthOverridden ? item.getOuterLengthCm() : null,
|
||||
widthOverridden ? item.getOuterWidthCm() : null,
|
||||
heightOverridden ? item.getOuterHeightCm() : null,
|
||||
item.getChargeRuleId(), item.getCoefficientMode(),
|
||||
item.getRemark(), item.getBoxCode(), item.getScannedShipmentId(),
|
||||
item.getPackageCount(),
|
||||
item.getMachineNo(), item.getDeviceMeasuredAt(), item.getUpdatedAt());
|
||||
}
|
||||
|
||||
private boolean warehouseOverrideContains(String calculationRuleVersion, char dimension) {
|
||||
if (calculationRuleVersion == null
|
||||
|| !calculationRuleVersion.startsWith("WAREHOUSE_OUTER_OVERRIDE_")
|
||||
|| !calculationRuleVersion.endsWith("_V1")) {
|
||||
return false;
|
||||
}
|
||||
String dimensions = calculationRuleVersion.substring(
|
||||
"WAREHOUSE_OUTER_OVERRIDE_".length(), calculationRuleVersion.length() - 3);
|
||||
return dimensions.indexOf(dimension) >= 0;
|
||||
}
|
||||
|
||||
private void requireConfirmedPackageTotal(InboundOrderEntity inbound,
|
||||
List<InboundMeasurementItemEntity> items) {
|
||||
if (inbound.getTotalPackageCount() == null || inbound.getTotalPackageCount() < 1) {
|
||||
|
||||
@@ -201,26 +201,26 @@ public class MeasurementBatchService {
|
||||
boolean hasOuterOverride = source.outerLengthCm() != null
|
||||
|| source.outerWidthCm() != null
|
||||
|| source.outerHeightCm() != null;
|
||||
if (hasOuterOverride && (source.outerLengthCm() == null
|
||||
|| source.outerWidthCm() == null || source.outerHeightCm() == null
|
||||
|| source.outerLengthCm().signum() <= 0 || source.outerWidthCm().signum() <= 0
|
||||
|| source.outerHeightCm().signum() <= 0)) {
|
||||
if ((source.outerLengthCm() != null && source.outerLengthCm().signum() <= 0)
|
||||
|| (source.outerWidthCm() != null && source.outerWidthCm().signum() <= 0)
|
||||
|| (source.outerHeightCm() != null && source.outerHeightCm().signum() <= 0)) {
|
||||
throw new BizException(ResultCode.VALIDATION_FAILED,
|
||||
"仓库修改外箱长、宽、高必须同时填写且大于0,明细 " + source.itemNo());
|
||||
"仓库修改外箱尺寸必须大于0,明细 " + source.itemNo());
|
||||
}
|
||||
if (hasOuterOverride) {
|
||||
// Warehouse-confirmed outer dimensions are authoritative. Derived
|
||||
// values below (girth, volume and volumetric weight) use them directly.
|
||||
outerLength = source.outerLengthCm();
|
||||
outerWidth = source.outerWidthCm();
|
||||
outerHeight = source.outerHeightCm();
|
||||
} else if (coefficientRule != null) {
|
||||
if (coefficientRule != null) {
|
||||
BigDecimal specificationCoefficient = resolveSpecificationCoefficient(
|
||||
coefficientRule, source.lengthCm(), source.widthCm(), source.heightCm());
|
||||
outerLength = applyCoefficient(outerLength, specificationCoefficient);
|
||||
outerWidth = applyCoefficient(outerWidth, specificationCoefficient);
|
||||
outerHeight = applyCoefficient(outerHeight, specificationCoefficient);
|
||||
}
|
||||
if (hasOuterOverride) {
|
||||
// Each warehouse-confirmed dimension is authoritative on its own.
|
||||
// Unspecified dimensions keep their strategy-calculated values.
|
||||
if (source.outerLengthCm() != null) outerLength = source.outerLengthCm();
|
||||
if (source.outerWidthCm() != null) outerWidth = source.outerWidthCm();
|
||||
if (source.outerHeightCm() != null) outerHeight = source.outerHeightCm();
|
||||
}
|
||||
BigDecimal unitVolumeRaw = outerLength.multiply(outerWidth).multiply(outerHeight)
|
||||
.divide(new BigDecimal("1000000"), 6, RoundingMode.HALF_UP);
|
||||
BigDecimal unitVolume = hasMatchedAddition && !hasOuterOverride
|
||||
@@ -256,7 +256,7 @@ public class MeasurementBatchService {
|
||||
item.setVolumeWeightKg(totalVolume.multiply(VOLUME_WEIGHT_FACTOR).setScale(3, RoundingMode.CEILING));
|
||||
item.setChargeRuleId(coefficientRule == null ? null : coefficientRule.getId());
|
||||
item.setCoefficientMode(coefficientMode);
|
||||
item.setCalculationRuleVersion(hasOuterOverride ? "WAREHOUSE_OUTER_OVERRIDE_V1"
|
||||
item.setCalculationRuleVersion(hasOuterOverride ? warehouseOverrideVersion(source)
|
||||
: coefficientRule != null
|
||||
? "CUSTOMER_COEFFICIENT_V" + coefficientRule.getRuleVersion() + "_MULTIPLY"
|
||||
: useDimensionRule ? weighted.calculationRuleVersion() : "ACTUAL_DIMENSION_V1");
|
||||
@@ -271,6 +271,18 @@ public class MeasurementBatchService {
|
||||
}).toList();
|
||||
}
|
||||
|
||||
private String warehouseOverrideVersion(MeasurementBatchCommand.Item source) {
|
||||
if (source.outerLengthCm() != null && source.outerWidthCm() != null
|
||||
&& source.outerHeightCm() != null) {
|
||||
return "WAREHOUSE_OUTER_OVERRIDE_V1";
|
||||
}
|
||||
StringBuilder dimensions = new StringBuilder();
|
||||
if (source.outerLengthCm() != null) dimensions.append('L');
|
||||
if (source.outerWidthCm() != null) dimensions.append('W');
|
||||
if (source.outerHeightCm() != null) dimensions.append('H');
|
||||
return "WAREHOUSE_OUTER_OVERRIDE_" + dimensions + "_V1";
|
||||
}
|
||||
|
||||
private String normalizeMode(String mode) {
|
||||
if (mode == null || mode.isBlank()) return null;
|
||||
String normalized = mode.trim().toUpperCase(java.util.Locale.ROOT);
|
||||
|
||||
Reference in New Issue
Block a user