diff --git a/online-taxi-public/servcie-price/src/main/java/com/taxi/serviceprice/service/ForecastPriceService.java b/online-taxi-public/servcie-price/src/main/java/com/taxi/serviceprice/service/ForecastPriceService.java index 62df458..ba8261a 100644 --- a/online-taxi-public/servcie-price/src/main/java/com/taxi/serviceprice/service/ForecastPriceService.java +++ b/online-taxi-public/servcie-price/src/main/java/com/taxi/serviceprice/service/ForecastPriceService.java @@ -5,12 +5,15 @@ import com.internal.dto.PriceRule; import com.internal.dto.ResponseResult; import com.internal.request.ForecastPriceDTO; import com.internal.response.DirectionResponse; +import com.internal.response.ForecastPriceResponse; import com.taxi.serviceprice.mapper.PriceRuleMapper; import com.taxi.serviceprice.remote.ServiceMapClient; +import javafx.scene.effect.Light; 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; @@ -41,7 +44,7 @@ public class ForecastPriceService { log.info("目的地纬度," + destLatitude); log.info("调用地图服务,查询地图和时长"); - + Double price = 0.0; ForecastPriceDTO forecastPriceDTO = new ForecastPriceDTO(); forecastPriceDTO.setDepLongitude(depLongitude); @@ -60,9 +63,65 @@ public class ForecastPriceService { if(pricetRules.size() < 1){ ResponseResult.fail(CommonStatusEnum.PRICE_RULE_EMPTY); }else{ - + price = getPrice(directionResponse.getData().getDistance(), + directionResponse.getData().getDuration(),pricetRules.get(0)); } log.info("根据距离、时长,计价规则;计算价格"); - return ResponseResult.success(); + ForecastPriceResponse forecastPriceResponse = new ForecastPriceResponse(); + forecastPriceResponse.setPrice(price); + return ResponseResult.success(forecastPriceResponse); + } + + + /*** + * 根据距离、时长和计价规则,计算最终价格 + * @param distance + * @param duration + * @param priceRule + * @return + */ + private double getPrice(Integer distance,Integer duration,PriceRule priceRule){ + BigDecimal price = new BigDecimal(0); + //BigDecimal //起步价 + Double startFare = priceRule.getStartFare(); + BigDecimal startFareDecimal = new BigDecimal(startFare); + price = price.add(startFareDecimal); + //里程碑 m + BigDecimal distanceBigDecimal = new BigDecimal(distance); + //总里程 km + BigDecimal distanceMileDecimal = distanceBigDecimal.divide(new BigDecimal(1000),2,BigDecimal.ROUND_HALF_UP); + //起步里程 + Integer startMile = priceRule.getStartMile(); + BigDecimal startMileDecimal = new BigDecimal(startMile); + double distanceSubtract = distanceMileDecimal.subtract(startMileDecimal).doubleValue(); + //最终收费里程数 km + Double mile = distanceSubtract < 0 ? 0:distanceSubtract; + BigDecimal mileDecimal = new BigDecimal(mile); + //计程单价 元/km + Double unitPricePerMile = priceRule.getUnitPricePerMile(); + BigDecimal unitPricePerMilDecimal = new BigDecimal(unitPricePerMile); + //里程价格 + BigDecimal mileFare = mileDecimal.multiply(unitPricePerMilDecimal).setScale(2,BigDecimal.ROUND_HALF_UP); + price = price.add(mileFare); + //时长费用 + BigDecimal time = new BigDecimal(duration); + //时长的分钟数 + BigDecimal timeDecimal = time.divide(new BigDecimal(60),2,BigDecimal.ROUND_HALF_UP); + //计时单价 + Double unitPricePerMinute = priceRule.getUnitPricePerMinute(); + BigDecimal unitPricePerMinuteDecimal = new BigDecimal(unitPricePerMinute); + BigDecimal timeFare = timeDecimal.multiply(unitPricePerMinuteDecimal); + price = price.add(timeFare).setScale(2,BigDecimal.ROUND_HALF_UP); + + return price.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(getPrice(6500,1800,priceRule)); +// } }