JK 3 年 前
コミット
1be3eacb41

+ 74 - 42
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -1471,59 +1471,43 @@ public class PayOrderController {
                     p.setDzkAmt(dzkAmt.doubleValue());
                     BigDecimal oilPrice = new BigDecimal(infoMap.get("oilPirce").toString());            //油品价格
 
+                    BigDecimal couponAmt = coupon.getCouponAmt();                                       //优惠券金额:金额 比例值
+                    String couponType = coupon.getCouponType();                                         //优惠劵类型 1现金劵,2折扣券,3兑换券
+
+                    //计算优惠券优惠后金额
+                    PayOrder resultCalCoupon = calCouponAmt(couponType, receivableAmt, couponAmt, dzkAmt, amt, isCardFlag, isMarketFlag);
                     //查询优惠券使用时间
-                    //String effectiveTimeType = coupon.getEffectiveTimeType();
                     String availableControl = coupon.getAvailableControl();
-                    if(availableControl.equals("0")) {
-                        BigDecimal couponAmt = coupon.getCouponAmt();                                       //优惠券金额:金额 比例值
-                        String couponType = coupon.getCouponType();     //优惠劵类型 1现金劵,2折扣券,3兑换券
-                        switch (couponType) {
+                    switch (availableControl){
+                        case "0":
+                            p.setDzkAmt(resultCalCoupon.getDzkAmt());
+                            p.setAmt(resultCalCoupon.getAmt());
+                            break;
                         case "1":
-                            //现金券
-                            //与营销方案,电子卡互斥
-                            BigDecimal subtract = receivableAmt.subtract(couponAmt);
-                            subtract = subtract.signum() == -1 ? new BigDecimal("0.01") : subtract;
-                            p.setAmt(subtract.doubleValue());
-                            p.setDzkAmt(subtract.doubleValue());
-                            //是否与电子卡叠加
-                            if (isCardFlag.equals("1")) {
-                                BigDecimal dzkAmtSub = dzkAmt.subtract(couponAmt);
-                                dzkAmtSub = dzkAmtSub.signum() == -1 ? new BigDecimal("0.01") : dzkAmtSub;
-                                p.setDzkAmt(dzkAmtSub.doubleValue());
-                            }
-                            //是否与营销方案叠加
-                            if (isMarketFlag.equals("1")) {
-                                BigDecimal marketSub = amt.subtract(couponAmt);
-                                marketSub = marketSub.signum() == -1 ? new BigDecimal("0.01") : marketSub;
-                                p.setAmt(marketSub.doubleValue());
+                            boolean activityDay = this.isActivityDay("1", coupon.getCycleDays());
+                            if(activityDay){
+                                p.setDzkAmt(resultCalCoupon.getDzkAmt());
+                                p.setAmt(resultCalCoupon.getAmt());
                             }
                             break;
                         case "2":
-                            //折扣券
-                            BigDecimal multiply = receivableAmt.multiply(couponAmt);
-                            multiply = receivableAmt.subtract(multiply).setScale(2, BigDecimal.ROUND_HALF_UP);
-                            p.setAmt(multiply.doubleValue());
-                            p.setDzkAmt(multiply.doubleValue());
-                            //是否与电子卡叠加
-                            if (isGradeFlag.equals("1")) {
-                                BigDecimal multiplyCard = dzkAmt.multiply(couponAmt);
-                                multiplyCard = dzkAmt.subtract(multiplyCard).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                p.setDzkAmt(multiplyCard.doubleValue());
-                            }
-                            //是否与营销方案叠加
-                            if (isMarketFlag.equals("1")) {
-                                BigDecimal multiplyMarket = amt.multiply(couponAmt);
-                                multiplyMarket = amt.subtract(multiplyMarket).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                p.setAmt(multiplyMarket.doubleValue());
+                            boolean activityDay2 = this.isActivityDay("2", coupon.getCycleDays());
+                            if(activityDay2){
+                                p.setDzkAmt(resultCalCoupon.getDzkAmt());
+                                p.setAmt(resultCalCoupon.getAmt());
                             }
                             break;
+                        case "3":
+                            boolean activityDay3 = this.isActivityDay("3", coupon.getCycleDays());
+                            if(activityDay3){
+                                p.setDzkAmt(resultCalCoupon.getDzkAmt());
+                                p.setAmt(resultCalCoupon.getAmt());
+                            }
+
                     }
-                    }
-                    //
                     resultData = ResultData.success(payOrder);
-
                 }else {
-                   // resultData = ResultData.error(2,"");
+                    resultData = ResultData.error(CodeMsg.COUPON_LOSE_EFFECTIVE);
                 }
             }else {
                 resultData = ResultData.error(CodeMsg.NO_COUPON);
@@ -1534,6 +1518,54 @@ public class PayOrderController {
         return gson.toJson(resultData);
     }
 
+    //计算优惠券金额
+    public PayOrder calCouponAmt(String couponType, BigDecimal receivableAmt,
+                                 BigDecimal couponAmt, BigDecimal dzkAmt, BigDecimal amt, String isCardFlag, String isMarketFlag){
+        PayOrder p = new PayOrder();
+        switch (couponType) {
+            case "1":
+                //现金券
+                //与营销方案,电子卡互斥
+                BigDecimal subtract = receivableAmt.subtract(couponAmt);
+                subtract = subtract.signum() == -1 ? new BigDecimal("0.01") : subtract;
+                p.setAmt(subtract.doubleValue());
+                p.setDzkAmt(subtract.doubleValue());
+                //是否与电子卡叠加
+                if (isCardFlag.equals("1")) {
+                    BigDecimal dzkAmtSub = dzkAmt.subtract(couponAmt);
+                    dzkAmtSub = dzkAmtSub.signum() == -1 ? new BigDecimal("0.01") : dzkAmtSub;
+                    p.setDzkAmt(dzkAmtSub.doubleValue());
+                }
+                //是否与营销方案叠加
+                if (isMarketFlag.equals("1")) {
+                    BigDecimal marketSub = amt.subtract(couponAmt);
+                    marketSub = marketSub.signum() == -1 ? new BigDecimal("0.01") : marketSub;
+                    p.setAmt(marketSub.doubleValue());
+                }
+                break;
+            case "2":
+                //折扣券
+                BigDecimal multiply = receivableAmt.multiply(couponAmt);
+                multiply = receivableAmt.subtract(multiply).setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.setAmt(multiply.doubleValue());
+                p.setDzkAmt(multiply.doubleValue());
+                //是否与电子卡叠加
+                if (isCardFlag.equals("1")) {
+                    BigDecimal multiplyCard = dzkAmt.multiply(couponAmt);
+                    multiplyCard = dzkAmt.subtract(multiplyCard).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    p.setDzkAmt(multiplyCard.doubleValue());
+                }
+                //是否与营销方案叠加
+                if (isMarketFlag.equals("1")) {
+                    BigDecimal multiplyMarket = amt.multiply(couponAmt);
+                    multiplyMarket = amt.subtract(multiplyMarket).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    p.setAmt(multiplyMarket.doubleValue());
+                }
+                break;
+        }
+        return p;
+    }
+
 
     /**
      * 根据订单号获取订单信息