Bugfix: annualCost in d2d routing (Issue #79)

This commit is contained in:
Jan 2025-12-14 13:10:14 +01:00
parent bce745e458
commit adc1ee0d04
4 changed files with 9 additions and 5 deletions

View file

@ -75,6 +75,7 @@ public class MaterialRepository {
return jdbcTemplate.query(query, new MaterialMapper(), params.toArray());
}
@Transactional
public Optional<Material> getByPartNumber(String partNumber) {
if (partNumber == null) {
return Optional.empty();

View file

@ -78,7 +78,7 @@ public class DistanceApiService {
Optional<Distance> cachedDistance = distanceMatrixRepository.getDistance(from, isUsrFrom, to, isUsrTo);
if (cachedDistance.isPresent() && cachedDistance.get().getState() == DistanceMatrixState.VALID) {
logger.info("Found cached distance from node {} to node {}", from.getExternalMappingId(), to.getExternalMappingId());
logger.info("Found cached distance from node {} (user: {}) to node {} (user {})", from.getExternalMappingId(), isUsrFrom, to.getExternalMappingId(), isUsrTo);
return cachedDistance;
}

View file

@ -29,6 +29,7 @@ public class MaterialBulkImportService {
}
}
private void updateMaterial(Material material) {
var foundMaterial = materialRepository.getByPartNumber(material.getNormalizedPartNumber());

View file

@ -64,7 +64,7 @@ public class RouteSectionCostCalculationService {
// Set premise metadata
result.setStacked(premise.getHuStackable());
result.setUnmixedPrice(premise.getHuMixable());
result.setUnmixedPrice(!premise.getHuMixable());
// Get nodes and distance
Node fromNode = premise.getSupplierNodeId() != null ? nodeRepository.getById(premise.getSupplierNodeId()).orElseThrow() : userNodeRepository.getById(premise.getUserSupplierNodeId()).orElseThrow();
@ -81,8 +81,10 @@ public class RouteSectionCostCalculationService {
result.setTransitTime(transitTime);
// Calculate price and annual cost
BigDecimal huAnnualAmount = BigDecimal.valueOf(destination.getAnnualAmount()).divide(BigDecimal.valueOf(containerCalculation.getHu().getContentUnitCount()), 2, RoundingMode.HALF_UP);
BigDecimal utilization = getUtilization(setId, RateType.CONTAINER); /* D2D is always 40ft container */
double annualVolume = destination.getAnnualAmount() * containerCalculation.getHu().getVolume(DimensionUnit.M);
BigDecimal annualVolume =huAnnualAmount.multiply(BigDecimal.valueOf(containerCalculation.getHu().getVolume(DimensionUnit.M)));
BigDecimal annualWeight = huAnnualAmount.multiply(BigDecimal.valueOf(containerCalculation.getHu().getWeight(WeightUnit.KG)));
PriceCalculationResult prices = calculatePrices(
premise.getHuMixable(),
@ -102,7 +104,7 @@ public class RouteSectionCostCalculationService {
var chanceRiskFactors = changeRiskFactorCalculationService.getChanceRiskFactors(setId, periodId);
BigDecimal annualCost = (containerCalculation.isWeightExceeded() ? prices.weightPrice : prices.volumePrice).multiply(BigDecimal.valueOf(annualVolume));
BigDecimal annualCost = (containerCalculation.isWeightExceeded() ? prices.weightPrice.multiply(annualWeight) : prices.volumePrice.multiply(annualVolume));
BigDecimal annualRiskCost = annualCost.multiply(chanceRiskFactors.getRiskFactor());
BigDecimal annualChanceCost = annualCost.multiply(chanceRiskFactors.getChanceFactor());
@ -300,7 +302,7 @@ public class RouteSectionCostCalculationService {
throw new NoSuchElementException("Destination node not found for route section" + toNode.getName());
}
return distanceService.getDistanceForNode(optSrcNode.get(), optDestNode.get(), false);
return distanceService.getDistanceForNode(optSrcNode.get(), optDestNode.get());
}