From a96fb4e518cdee6f2e452b94a402ff7888350258 Mon Sep 17 00:00:00 2001 From: yh <1844516659@qq.com> Date: Mon, 18 Jul 2022 16:36:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A3=9E=E6=BB=B4=E5=87=BA=E8=A1=8C=E7=BD=91?= =?UTF-8?q?=E7=BA=A6=E8=BD=A62022-service-price=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E4=BC=A0=E5=85=A5=E6=97=B6=E9=95=BF=E9=87=8C=E7=A8=8B=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E8=A7=84=E5=88=99=E8=AE=A1=E7=AE=97=E6=80=BB=E8=B4=B9?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ForecastPriceService.java | 61 ++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/service-price/src/main/java/com/mashibing/serviceprice/service/ForecastPriceService.java b/service-price/src/main/java/com/mashibing/serviceprice/service/ForecastPriceService.java index e43168f..c205150 100644 --- a/service-price/src/main/java/com/mashibing/serviceprice/service/ForecastPriceService.java +++ b/service-price/src/main/java/com/mashibing/serviceprice/service/ForecastPriceService.java @@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -67,9 +68,67 @@ public class ForecastPriceService { // 根据 距离时长 进行价格预估 ForecastPriceResponse priceResponse = new ForecastPriceResponse(); - priceResponse.setPrice(12.34); + Double price = getPriceByRule(distance, duration, priceRule); + priceResponse.setPrice(price); return ResponseResult.success(priceResponse); } + /** + 根据距离、时长和计价规则,计算最终价格 + *@param distance 距离 + * @param duration 时长 + * @param priceRule 计价规则 + *@return + */ + private Double getPriceByRule (Integer distance,Integer duration,PriceRule priceRule) { + // BigDecimal + BigDecimal sumPriceDecimal = new BigDecimal(0); + // 起步价 + Double startFare = priceRule.getStartFare(); + BigDecimal startFareDecimal = new BigDecimal(startFare); + sumPriceDecimal = sumPriceDecimal.add(startFareDecimal); + + //里程费 + // 总里程 m => km + BigDecimal distanceDecimal = new BigDecimal(distance); + BigDecimal distanceMileDecimal = distanceDecimal.divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP); + // 起步里程 + Integer startMile = priceRule.getStartMile(); + BigDecimal startMileDecimal = new BigDecimal(startMile); + // 需收费的里程数 + double mileTmp = distanceMileDecimal.subtract(startMileDecimal).doubleValue(); + if(mileTmp < 0){ + mileTmp = 0; + } + BigDecimal subMileDecimal = new BigDecimal(mileTmp); + // 获取计费规则-每公里收费 + Double unitPricePerMile = priceRule.getUnitPricePerMile(); + BigDecimal unitPricePerMileDecimal = new BigDecimal(unitPricePerMile); + // 计算最终里程费用 + BigDecimal finalMileFareDecimal = subMileDecimal.multiply(unitPricePerMileDecimal).setScale(2, BigDecimal.ROUND_HALF_UP); + sumPriceDecimal = sumPriceDecimal.add(finalMileFareDecimal); + + //时长费 + // 时长的分钟数 s => min + BigDecimal durationDecimal = new BigDecimal(duration); + BigDecimal durationMinDecimal = durationDecimal.divide(new BigDecimal(60), 2, BigDecimal.ROUND_HALF_UP); + // 获取计费规则-每分钟收费 + Double unitPricePerMinute = priceRule.getUnitPricePerMinute(); + BigDecimal unitPricePerMinuteDecimal = new BigDecimal(unitPricePerMinute); + // 计算最终时长费用 + BigDecimal finalTimeFareDecimal = durationMinDecimal.multiply(unitPricePerMinuteDecimal.setScale(2, BigDecimal.ROUND_HALF_UP)); + sumPriceDecimal = sumPriceDecimal.add(finalTimeFareDecimal); + + return sumPriceDecimal.doubleValue(); + } + +// public static void main(String[] args) { +// PriceRule priceRule = new PriceRule(); +// priceRule.setUnitPricePerMile(1.8); +// priceRule.setUnitPricePerMinute(0.5); +// priceRule.setStartFare(10.0); +// priceRule.setStartMile(3); +// System.out.println( getPriceByRule(6500 , 1800 , priceRule) ); +// } } \ No newline at end of file