时长费用计算、总费用计算

main
topsun 2 years ago
parent c0b7556927
commit d8b4a33404

@ -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));
// }
}

Loading…
Cancel
Save