|
@@ -124,9 +124,60 @@ public class PayOrderController {
|
|
|
logger.info("油站是否开启电子会员卡功能: " +stationCardEnabledFlag);
|
|
|
//查询油站是否开启电子会员卡功能
|
|
|
if(stationCardEnabledFlag.equals("1")){
|
|
|
+
|
|
|
+ CustomerCardSetting customerCardSetting = new CustomerCardSetting();
|
|
|
+ customerCardSetting.setStationId(payOrderRequest.getStationId());
|
|
|
+ List<CustomerCardSetting> cardRechargeSettingList = electronicMembershipCardService.getCardRechargeSettingList(customerCardSetting);
|
|
|
+ if(cardRechargeSettingList !=null && cardRechargeSettingList.size()>0){
|
|
|
+ String isMarket = cardRechargeSettingList.get(0).getIsMarket(); //是否叠加营销方案
|
|
|
+ String isGradeSetting = cardRechargeSettingList.get(0).getIsGradeSetting(); //是否叠加等级直降
|
|
|
+
|
|
|
+ Map<String, Object> paramsMap = new HashMap<>();
|
|
|
+ paramsMap.put("stationId", payOrderRequest.getStationId());
|
|
|
+ paramsMap.put("oilName", payOrderRequest.getOilName());
|
|
|
+ paramsMap.put("receivableAmt", payOrderRequest.getReceivableAmt());
|
|
|
+ //获取油品价格
|
|
|
+ StationOilPrice stationOilPrice = new StationOilPrice();
|
|
|
+ stationOilPrice.setStationId(payOrderRequest.getStationId());
|
|
|
+ stationOilPrice.setOilName(payOrderRequest.getOilName());
|
|
|
+ StationOilPrice oilPriceInfo = stationService.getStationOilPrice(stationOilPrice);
|
|
|
+ String oilPrice = oilPriceInfo.getOilPrice();
|
|
|
+ paramsMap.put("oilPrice", oilPrice);
|
|
|
+ paramsMap.put("mobilePhone", appUserInfoList.get(0).getMobilePhone());
|
|
|
+ paramsMap.put("minaOpenid", appUserInfoList.get(0).getMinaOpenid());
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(isMarket) && isMarket.equals("0")){
|
|
|
+ if(StringUtils.isNotBlank(isGradeSetting) && isGradeSetting.equals("0")){
|
|
|
+ //如果营销和等级都设置叠加
|
|
|
+ resultMap.put("amt_dzk", resultMap.get("amt").toString());
|
|
|
+ }else {
|
|
|
+ //如果营销叠加电子卡不叠加:则用总的实际所有的支付金额+等级优惠的金额
|
|
|
+ Map<String, Object> map = this.calcuteDengJiZhiJiang(paramsMap);
|
|
|
+ String string = map.get("discountAmt").toString();
|
|
|
+ BigDecimal amt_dzk = new BigDecimal(resultMap.get("amt").toString()).add(new BigDecimal(string));
|
|
|
+ resultMap.put("amt_dzk",amt_dzk.doubleValue());
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //如果不叠加营销,只叠加等级优惠
|
|
|
+ if(StringUtils.isNotBlank(isGradeSetting) && isGradeSetting.equals("0")){
|
|
|
+ Map<String, Object> map = this.calcuteDengJiZhiJiang(paramsMap);
|
|
|
+ String string = map.get("discountAmt").toString();
|
|
|
+ BigDecimal amt_dzk = new BigDecimal(payOrderRequest.getReceivableAmt()).subtract(new BigDecimal(string));
|
|
|
+ resultMap.put("amt_dzk", amt_dzk);
|
|
|
+
|
|
|
+ }else {
|
|
|
+ //如果既不叠加营销优惠也不叠加等级优惠
|
|
|
+ resultMap.put("amt_dzk", payOrderRequest.getReceivableAmt());
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取用户电子卡余额
|
|
|
Map<String, String> map = this.selectCardBalance(payOrderRequest.getStationId(), payOrderRequest.getOilName(), appUserInfoList.get(0).getUnionId());
|
|
|
resultMap.put("balance", map.get("balance")); //电子卡余额
|
|
|
resultMap.put("cardOilsType", map.get("cardOilsType")); //电子卡类型1.汽油; 2.柴油
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
payOrder.setReceivableAmt(payOrderRequest.getReceivableAmt()); //订单应收金额
|
|
@@ -139,7 +190,7 @@ public class PayOrderController {
|
|
|
case "95#":
|
|
|
payOrder.setOilType("2");
|
|
|
break;
|
|
|
- case "97#":
|
|
|
+ case "98#":
|
|
|
payOrder.setOilType("2");
|
|
|
break;
|
|
|
case "0#":
|
|
@@ -200,7 +251,7 @@ public class PayOrderController {
|
|
|
case "95#":
|
|
|
cardOilsType ="1";
|
|
|
break;
|
|
|
- case "97#":
|
|
|
+ case "98#":
|
|
|
cardOilsType ="1";
|
|
|
break;
|
|
|
case "0#":
|
|
@@ -451,7 +502,7 @@ public class PayOrderController {
|
|
|
|
|
|
/*
|
|
|
* ===========================计算订单金额======================================
|
|
|
- * 修订时间:2021年4月20日15:31:30
|
|
|
+ * 第一次修订时间:2021年4月20日15:31:30
|
|
|
* 修订标题:修订优惠计算
|
|
|
* 修订内容 :
|
|
|
* 修改为目前只有三种优惠:根据立减、满减、独立直降;
|
|
@@ -570,12 +621,11 @@ public class PayOrderController {
|
|
|
amt = receivableAmt_b.subtract(discountAmt); //实收金额
|
|
|
oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP); //加油升数
|
|
|
discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
- //discountPrice = amt.divide(oilLiters,2,BigDecimal.ROUND_HALF_UP); //优惠价格
|
|
|
switch (vipDiscountyPlus){
|
|
|
case "1":
|
|
|
Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
|
|
|
discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
|
|
|
- amt = amt.subtract(discountAmt);
|
|
|
+ amt = receivableAmt_b.subtract(discountAmt);
|
|
|
discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
resultMap.put("discountAmt", discountAmt.doubleValue());
|
|
|
resultMap.put("amt", amt.doubleValue());
|
|
@@ -594,8 +644,7 @@ public class PayOrderController {
|
|
|
case "1":
|
|
|
Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
|
|
|
discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
|
|
|
- amt = amt.subtract(discountAmt);
|
|
|
- //discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ amt = receivableAmt_b.subtract(discountAmt);
|
|
|
discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
resultMap.put("discountAmt", discountAmt.doubleValue());
|
|
|
resultMap.put("amt", amt.doubleValue());
|
|
@@ -603,10 +652,11 @@ public class PayOrderController {
|
|
|
resultMap.put("discountPrice", discountPrice.doubleValue());
|
|
|
break;
|
|
|
case "2":
|
|
|
- resultMap.put("discountAmt", discountAmt.doubleValue());
|
|
|
- resultMap.put("amt", amt.doubleValue());
|
|
|
+ resultMap.put("discountAmt", 0);
|
|
|
+ resultMap.put("amt", receivableAmt.doubleValue());
|
|
|
+ oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP); //加油升数
|
|
|
resultMap.put("oilLiters", oilLiters.doubleValue());
|
|
|
- resultMap.put("discountPrice", discountPrice.doubleValue());
|
|
|
+ resultMap.put("discountPrice", oilPrice);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -639,7 +689,7 @@ public class PayOrderController {
|
|
|
case "1":
|
|
|
Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
|
|
|
discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
|
|
|
- amt = amt.subtract(discountAmt);
|
|
|
+ amt = receivableAmt_b.subtract(discountAmt);
|
|
|
discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
//discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
resultMap.put("discountAmt", discountAmt.doubleValue());
|
|
@@ -660,7 +710,7 @@ public class PayOrderController {
|
|
|
case "1":
|
|
|
Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
|
|
|
discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
|
|
|
- amt = amt.subtract(discountAmt);
|
|
|
+ amt = receivableAmt_b.subtract(discountAmt);
|
|
|
discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
//discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
resultMap.put("discountAmt", discountAmt.doubleValue());
|
|
@@ -669,10 +719,11 @@ public class PayOrderController {
|
|
|
resultMap.put("discountPrice", discountPrice.doubleValue());
|
|
|
break;
|
|
|
case "2":
|
|
|
- resultMap.put("discountAmt", discountAmt.doubleValue());
|
|
|
- resultMap.put("amt", amt.doubleValue());
|
|
|
+ resultMap.put("discountAmt", 0);
|
|
|
+ resultMap.put("amt", receivableAmt.doubleValue());
|
|
|
+ oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP); //加油升数
|
|
|
resultMap.put("oilLiters", oilLiters.doubleValue());
|
|
|
- resultMap.put("discountPrice", discountPrice.doubleValue());
|
|
|
+ resultMap.put("discountPrice", oilPrice);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -709,7 +760,7 @@ public class PayOrderController {
|
|
|
if(vipDiscountyPlus_3.equals("1")){
|
|
|
Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
|
|
|
discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
|
|
|
- amt = amt.subtract(discountAmt);
|
|
|
+ amt = receivableAmt_b.subtract(discountAmt);
|
|
|
discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
//discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
}
|
|
@@ -732,7 +783,7 @@ public class PayOrderController {
|
|
|
if(vipDiscountyPlus_3.equals("1")){
|
|
|
Map<String, Object> map = this.calcuteDengJiZhiJiang(params);
|
|
|
discountAmt = discountAmt.add(new BigDecimal(map.get("discountAmt").toString()));
|
|
|
- amt = amt.subtract(discountAmt);
|
|
|
+ amt = receivableAmt_b.subtract(discountAmt);
|
|
|
discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
//discountPrice = amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
|
|
|
}
|
|
@@ -801,7 +852,7 @@ public class PayOrderController {
|
|
|
if(customerGradeList !=null && customerGradeList.size() >0){
|
|
|
//用户第一次购买 取等级最低初始会员的优惠条件计算
|
|
|
oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_HALF_UP); //加油升数
|
|
|
- if(customerGradeInfo.get(0).get("gasoilDiscountLitre") !=null){
|
|
|
+ if(customerGradeList.get(0).get("gasoilDiscountLitre") !=null){
|
|
|
discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString()));
|
|
|
discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
}else {
|