Browse Source

优惠逻辑处理

loemkie 1 week ago
parent
commit
6395e9263f
1 changed files with 29 additions and 1 deletions
  1. 29 1
      src/main/java/com/qmrb/parking/fee/ParkingFeeCalculator.java

+ 29 - 1
src/main/java/com/qmrb/parking/fee/ParkingFeeCalculator.java

@@ -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;