diff --git a/src/main/java/de/avatic/lcc/repositories/MaterialRepository.java b/src/main/java/de/avatic/lcc/repositories/MaterialRepository.java index 8582b0a..c4b5d52 100644 --- a/src/main/java/de/avatic/lcc/repositories/MaterialRepository.java +++ b/src/main/java/de/avatic/lcc/repositories/MaterialRepository.java @@ -75,6 +75,7 @@ public class MaterialRepository { return jdbcTemplate.query(query, new MaterialMapper(), params.toArray()); } + @Transactional public Optional getByPartNumber(String partNumber) { if (partNumber == null) { return Optional.empty(); diff --git a/src/main/java/de/avatic/lcc/service/api/DistanceApiService.java b/src/main/java/de/avatic/lcc/service/api/DistanceApiService.java index 1150ebd..1f237d4 100644 --- a/src/main/java/de/avatic/lcc/service/api/DistanceApiService.java +++ b/src/main/java/de/avatic/lcc/service/api/DistanceApiService.java @@ -78,7 +78,7 @@ public class DistanceApiService { Optional 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; } diff --git a/src/main/java/de/avatic/lcc/service/bulk/bulkImport/MaterialBulkImportService.java b/src/main/java/de/avatic/lcc/service/bulk/bulkImport/MaterialBulkImportService.java index 2f9c4c1..e5ef06f 100644 --- a/src/main/java/de/avatic/lcc/service/bulk/bulkImport/MaterialBulkImportService.java +++ b/src/main/java/de/avatic/lcc/service/bulk/bulkImport/MaterialBulkImportService.java @@ -29,6 +29,7 @@ public class MaterialBulkImportService { } } + private void updateMaterial(Material material) { var foundMaterial = materialRepository.getByPartNumber(material.getNormalizedPartNumber()); diff --git a/src/main/java/de/avatic/lcc/service/calculation/execution/steps/RouteSectionCostCalculationService.java b/src/main/java/de/avatic/lcc/service/calculation/execution/steps/RouteSectionCostCalculationService.java index 377c058..31b2b31 100644 --- a/src/main/java/de/avatic/lcc/service/calculation/execution/steps/RouteSectionCostCalculationService.java +++ b/src/main/java/de/avatic/lcc/service/calculation/execution/steps/RouteSectionCostCalculationService.java @@ -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()); }