|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 根据订单号获取订单信息
|