|
@@ -1,7 +1,9 @@
|
|
|
package com.qmrb.parking.fee;
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.Duration;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.LocalTime;
|
|
@@ -114,10 +116,36 @@ public class ParkingFeeCalculator {
|
|
|
|
|
|
// 7. 扣除已支付金额
|
|
|
totalFee = Math.max(0, totalFee - parkingRecord.paidAmount);
|
|
|
-
|
|
|
+ //8. 优惠券逻辑处理
|
|
|
+ try{
|
|
|
+ totalFee = calcCouponFee(totalFee, parkingRecord.couponRecord, feeRule);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error(e.getMessage(),e);
|
|
|
+ }
|
|
|
return totalFee;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 计算优惠券费用
|
|
|
+ * @param totalFee
|
|
|
+ * @param couponRecord
|
|
|
+ * @param feeRule
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static double calcCouponFee(double totalFee, CouponRecord couponRecord,FeeRule feeRule) {
|
|
|
+ if (StringUtils.equals(couponRecord.couponType,"1")) {//金额券
|
|
|
+ log.info("优惠金额: "+couponRecord.denomination+"元");
|
|
|
+ totalFee = totalFee - couponRecord.denomination;
|
|
|
+ if(totalFee<0){
|
|
|
+ return 0.0;
|
|
|
+ }
|
|
|
+ } else if (StringUtils.equals(couponRecord.couponType,"2")) {//时长券
|
|
|
+ double dicFee = calculateRemainingFee(Duration.ofMinutes(new BigDecimal(couponRecord.denomination).intValue()), feeRule);
|
|
|
+ log.info("优惠金额: "+dicFee+"元");
|
|
|
+ return totalFee - dicFee;
|
|
|
+ }
|
|
|
+ return totalFee;
|
|
|
+ }
|
|
|
// 计算不足 24 小时的费用
|
|
|
private static double calculateRemainingFee(Duration duration, FeeRule feeRule) {
|
|
|
double totalFee = 0.0;
|