jk-GitHub-coder 3 years ago
parent
commit
ada6bf6527

+ 151 - 88
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -566,17 +566,17 @@ public class PayOrderController {
     public PayOrderResultInfo calculateLabelDiscount(Map<String ,Object> params){
         BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString());    //油品价格
         BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString());   //应收金额
-        BigDecimal oilLiters = new BigDecimal("0.00");  //加油升数
+        BigDecimal oilLiters = new BigDecimal("0.0000");  //加油升数
         BigDecimal discountAmt = new BigDecimal(0);     //标签方案优惠金额
         BigDecimal dzkDiscountAmt = new BigDecimal(0);  //电子卡优惠金额
         BigDecimal amt = receivableAmt;
         BigDecimal discountPrice = oilPrice;
 
         //加油升数
-        oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
-        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
-            oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
-        }
+        oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
+//        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
+//            oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
+//        }
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
         //获取该油站的标签规则
         LabelRule labelRule = new LabelRule();
@@ -679,6 +679,7 @@ public class PayOrderController {
                 if(isLabel.equals("1")){
                     //电子卡支付金额 = 应收金额 - 标签优惠金额
                     BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
+                    dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                     dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;     //如果为负数,则默认设置0.01元
                     payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                     BigDecimal dzkDiscountAmtSum = dzkDiscountAmt; //电子卡总优惠金额
@@ -709,7 +710,7 @@ public class PayOrderController {
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();   //计算结果存放值
         BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString());    //油品价格
         BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString());   //应收金额
-        BigDecimal oilLiters = new BigDecimal("0.00");  //加油升数
+        BigDecimal oilLiters = new BigDecimal("0.0000");  //加油升数
         BigDecimal discountAmt = new BigDecimal(0);  //营销方案优惠金额
         BigDecimal amt = receivableAmt;
         BigDecimal discountPrice = oilPrice;
@@ -719,10 +720,10 @@ public class PayOrderController {
         BigDecimal dzkDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需营销优惠金额值
 
         //加油升数
-        oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
-        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
-            oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
-        }
+        oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
+//        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
+//            oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
+//        }
         //计算等级优惠
         PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
         gradeDiscountAmt = new BigDecimal(payOrderResultInfoGrade.getDiscountAmt());
@@ -739,10 +740,15 @@ public class PayOrderController {
                 if(discountTerm.equals("1")){
                     if(oilLiters.compareTo(discountAmt_b) ==1 || oilLiters.compareTo(discountAmt_b) ==0){
                         discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
-                        amt = discountPrice.multiply(oilLiters);
-                        discountAmt = receivableAmt.subtract(amt);
-                        //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
-                        discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        if(discountPrice.compareTo(oilPrice) ==0){
+                            amt = receivableAmt;
+                            discountAmt = new BigDecimal("0.00");
+                        }else {
+                            amt = discountPrice.multiply(oilLiters);
+                            discountAmt = receivableAmt.subtract(amt);
+                            //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
+                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }
                         dzkDiscountAmt = discountAmt;       //赋值电子卡优惠金额
                         String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
                         //该营销方案是否叠加等级优惠
@@ -757,10 +763,15 @@ public class PayOrderController {
                 }else if(discountTerm.equals("2")){
                     if(receivableAmt.compareTo(discountAmt_b) ==1 || receivableAmt.compareTo(discountAmt_b) ==0){
                         discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
-                        amt = discountPrice.multiply(oilLiters);
-                        discountAmt = receivableAmt.subtract(amt);
-                        //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
-                        discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        if(discountPrice.compareTo(oilPrice) == 0){
+                            amt = receivableAmt;
+                            discountAmt = new BigDecimal("0.00");
+                        }else {
+                            amt = discountPrice.multiply(oilLiters);
+                            discountAmt = receivableAmt.subtract(amt);
+                            //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
+                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }
                         dzkDiscountAmt = discountAmt;       //赋值电子卡优惠金额
                         String vipDiscountyPlus = m.get("vipDiscountyPlus").toString();
                         //该营销方案是否叠加等级优惠
@@ -820,6 +831,7 @@ public class PayOrderController {
                 if(isMarket.equals("1")){
                     if(isGradeSetting.equals("1")){
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
@@ -827,6 +839,7 @@ public class PayOrderController {
                     }else {
                         //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
@@ -835,6 +848,7 @@ public class PayOrderController {
                     if(isGradeSetting.equals("1")){
                         //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
@@ -857,7 +871,8 @@ public class PayOrderController {
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
             payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
             String dzkAmt = payOrderResultInfo.getDzkAmt();
-            if(oilLiters.toString().equals("0.00")){
+            if(oilLiters.toString().equals("0.0000")){
+                payOrderResultInfo.setDzkAmt("0.01");
                 payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
             }else {
                 BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
@@ -871,7 +886,7 @@ public class PayOrderController {
     public PayOrderResultInfo calculateZhiJiangDiscount(Map<String ,Object> params){
         BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString());    //油品价格
         BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString());   //应收金额
-        BigDecimal oilLiters = new BigDecimal("0.00");  //加油升数
+        BigDecimal oilLiters = new BigDecimal("0.0000");  //加油升数
         BigDecimal discountAmt = new BigDecimal(0);  //营销方案优惠金额
         BigDecimal amt = receivableAmt;
         BigDecimal discountPrice = oilPrice;
@@ -881,10 +896,10 @@ public class PayOrderController {
         BigDecimal dzkDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需营销优惠金额值
 
         //加油升数
-        oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
-        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
-            oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
-        }
+        oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
+//        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
+//            oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
+//        }
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();   //计算结果存放值
         //计算等级优惠
         PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
@@ -903,10 +918,14 @@ public class PayOrderController {
                 case "1":   //按加油升数
                     if(oilLiters.compareTo(discountAmt_b) ==1 || oilLiters.compareTo(discountAmt_b) ==0){
                         discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
-                        amt = discountPrice.multiply(oilLiters);
-                        discountAmt = receivableAmt.subtract(amt);
-//                        discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
-                        discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        if(discountPrice.compareTo(oilPrice) ==0){
+                            amt = receivableAmt;
+                            discountAmt = new BigDecimal("0.00");
+                        }else {
+                            amt = discountPrice.multiply(oilLiters);
+                            discountAmt = receivableAmt.subtract(amt);
+                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }
                         //会员活动是否开启:1是;0否'
                         if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
                             discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
@@ -919,10 +938,15 @@ public class PayOrderController {
                                     boolean b = isActivityDay(discountType, discountDate);
                                     if (b) {
                                         discountPrice = oilPrice.subtract(new BigDecimal(discountActivityAmt));
-                                        amt = discountPrice.multiply(oilLiters);
-                                        discountAmt = receivableAmt.subtract(amt);
-                                        //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
-                                        discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                        if(discountPrice.compareTo(oilPrice) == 0){
+                                            amt = amt;
+                                            discountAmt = discountAmt;
+                                        }else {
+                                            amt = discountPrice.multiply(oilLiters);
+                                            discountAmt = receivableAmt.subtract(amt);
+                                            //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
+                                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                        }
                                     }
                                 }
                             }
@@ -932,10 +956,14 @@ public class PayOrderController {
                 case "2":   //按加油金额
                     if(receivableAmt.compareTo(discountAmt_b) ==1 || receivableAmt.compareTo(discountAmt_b) ==0){
                         discountPrice = oilPrice.subtract(gasoilDiscountAmt_b);
-                        amt = discountPrice.multiply(oilLiters);
-                        discountAmt = receivableAmt.subtract(amt);
-                        //discountAmt = oilLiters.multiply(gasoilDiscountAmt_b);
-                        discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        if(discountPrice.compareTo(oilPrice) == 0){
+                            amt = receivableAmt;
+                            discountAmt = new BigDecimal("0.00");
+                        }else {
+                            amt = discountPrice.multiply(oilLiters);
+                            discountAmt = receivableAmt.subtract(amt);
+                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }
                         //会员活动是否开启:1是;0否'
                         if(customerMarkertPlanList.get(0).containsKey("discountSettingFlag") && customerMarkertPlanList.get(0).get("discountSettingFlag").toString() !="") {
                             discountSettingFlag = customerMarkertPlanList.get(0).get("discountSettingFlag").toString();
@@ -948,12 +976,16 @@ public class PayOrderController {
                                     boolean b = isActivityDay(discountType, discountDate);
                                     if (b) {
                                         discountPrice = oilPrice.subtract(new BigDecimal(discountActivityAmt));
-                                        amt = discountPrice.multiply(oilLiters);
-                                        discountAmt = receivableAmt.subtract(amt);
-                                        //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
-                                        discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                        if(discountPrice.compareTo(oilPrice) == 0){
+                                            amt = amt;
+                                            discountAmt = discountAmt;
+                                        }else {
+                                            amt = discountPrice.multiply(oilLiters);
+                                            discountAmt = receivableAmt.subtract(amt);
+                                            //discountAmt = oilLiters.multiply(new BigDecimal(discountActivityAmt));
+                                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                                        }
                                     }
-
                                 }
                             }
                         }
@@ -1016,6 +1048,7 @@ public class PayOrderController {
                     if(isGradeSetting.equals("1")){
                         //都叠加 电子卡支付金额 = 应收金额 - 营销优惠金额 - 等级优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;     //如果为负数,则默认设置0.01元
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡总优惠金额
@@ -1023,6 +1056,7 @@ public class PayOrderController {
                     }else {
                         //叠加营销方案不叠加等级优惠: 电子卡支付金额 =实收金额-营销优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
@@ -1031,6 +1065,7 @@ public class PayOrderController {
                     if(isGradeSetting.equals("1")){
                         //不叠加营销方案叠加等级优惠:电子卡支付金额 =应收金额-等级优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
@@ -1054,10 +1089,12 @@ public class PayOrderController {
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
             String dzkAmt = payOrderResultInfo.getDzkAmt();
             payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
-            if(oilLiters.toString().equals("0.00")){
+            if(oilLiters.toString().equals("0.0000")){
+                payOrderResultInfo.setDzkAmt("0.01");
                 payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
             }else {
                 BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
+                dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) == 1 ? oilPrice : dzkDiscountPrice;
                 payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
             }
         }
@@ -1068,7 +1105,7 @@ public class PayOrderController {
     public PayOrderResultInfo calculateLiJianDiscount(Map<String ,Object> params){
         BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString());    //油品价格
         BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString());   //应收金额
-        BigDecimal oilLiters = new BigDecimal("0.00");  //加油升数
+        BigDecimal oilLiters = new BigDecimal("0.0000");  //加油升数
         BigDecimal discountAmt = new BigDecimal(0);  //优惠金额
         BigDecimal amt = receivableAmt;
         BigDecimal discountPrice = oilPrice;
@@ -1076,10 +1113,10 @@ public class PayOrderController {
         BigDecimal dzkGradeDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需等级优惠金额值
         BigDecimal dzkDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需营销优惠金额值
         //加油升数
-        oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
-        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
-            oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
-        }
+        oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
+//        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
+//            oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
+//        }
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
 
         //计算等级优惠
@@ -1110,6 +1147,11 @@ public class PayOrderController {
                         }
                     }
                 }
+                amt = receivableAmt.subtract(discountAmt);  //应收金额
+                amt = amt.toString().equals("0.00") ? new BigDecimal("0.01") : amt;
+                amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
+                discountPrice = oilLiters.equals(new BigDecimal("0.0000")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);  //优惠价格
+                discountPrice =discountPrice.compareTo(oilPrice) == 1 ? oilPrice: discountPrice;
             }
             dzkDiscountAmt = discountAmt;
             String vipDiscountyPlus = customerMarkertPlanList.get(0).get("vipDiscountyPlus").toString();
@@ -1118,9 +1160,7 @@ public class PayOrderController {
                 discountAmt = discountAmt.add(gradeDiscountAmt);
             }
         }
-        amt = receivableAmt.subtract(discountAmt);  //应收金额
-        amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
-        discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);  //优惠价格
+
         payOrderResultInfo.setAmt(amt.toString());
         payOrderResultInfo.setDiscountAmt(discountAmt.toString());
         payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
@@ -1159,6 +1199,7 @@ public class PayOrderController {
                 if(isMarket.equals("1")){
                     if(isGradeSetting.equals("1")){
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
@@ -1166,6 +1207,7 @@ public class PayOrderController {
                     }else {
                         //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
@@ -1174,6 +1216,7 @@ public class PayOrderController {
                     if(isGradeSetting.equals("1")){
                         //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
@@ -1196,10 +1239,12 @@ public class PayOrderController {
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
             String dzkAmt = payOrderResultInfo.getDzkAmt();
             payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
-            if(oilLiters.toString().equals("0.00")){
+            if(oilLiters.toString().equals("0.0000")){
+                payOrderResultInfo.setDzkAmt("0.01");
                 payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
             }else {
                 BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
+                dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) ==1 ? oilPrice : dzkDiscountPrice;
                 payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
             }
         }
@@ -1210,7 +1255,7 @@ public class PayOrderController {
     public PayOrderResultInfo calculateManJianDiscount(Map<String ,Object> params){
         BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString());    //油品价格
         BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString());   //应收金额
-        BigDecimal oilLiters = new BigDecimal("0.00");  //加油升数
+        BigDecimal oilLiters = new BigDecimal("0.0000");  //加油升数
         BigDecimal discountAmt = new BigDecimal(0);  //优惠金额
         BigDecimal amt = receivableAmt;
         BigDecimal discountPrice = oilPrice;
@@ -1219,10 +1264,10 @@ public class PayOrderController {
         BigDecimal dzkDiscountAmt = new BigDecimal(0);    //计算电子卡金额时所需营销优惠金额值
 
         //加油升数
-        oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
-        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
-            oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
-        }
+        oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
+//        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
+//            oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
+//        }
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
         //计算等级优惠
         PayOrderResultInfo payOrderResultInfoGrade = this.calculateGradeDiscount(params);
@@ -1254,6 +1299,11 @@ public class PayOrderController {
 
                     }
                 }
+                amt = receivableAmt.subtract(discountAmt);  //应收金额
+                amt = amt.toString().equals("0.00") ? new BigDecimal("0.01") : amt;
+                amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
+                discountPrice = oilLiters.equals(new BigDecimal("0.0000")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);  //优惠价格
+                discountPrice =discountPrice.compareTo(oilPrice) == 1 ? oilPrice : discountPrice;
             }
             dzkDiscountAmt = discountAmt;
             //是否共享会员等级优惠叠加: 1 代表是; 2 代表否;
@@ -1263,9 +1313,6 @@ public class PayOrderController {
                 discountAmt = discountAmt.add(gradeDiscountAmt);
             }
         }
-        amt = receivableAmt.subtract(discountAmt);  //应收金额
-        amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
-        discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);  //优惠价格
         payOrderResultInfo.setAmt(amt.toString());
         payOrderResultInfo.setDiscountAmt(discountAmt.toString());
         payOrderResultInfo.setDzkDiscountAmt(discountAmt.toString());
@@ -1305,6 +1352,7 @@ public class PayOrderController {
                     if(isGradeSetting.equals("1")){
                         //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠-等级优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt).subtract(dzkGradeDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         BigDecimal dzkDiscountAmtSum = dzkDiscountAmt.add(dzkGradeDiscountAmt); //电子卡优惠金额
@@ -1312,6 +1360,7 @@ public class PayOrderController {
                     }else {
                         //如果电子卡设置执行营销方案不执行等级优惠 则 电子卡支付金额 =实收金额-营销优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         payOrderResultInfo.setDzkDiscountAmt(dzkDiscountAmt.toString());
@@ -1320,6 +1369,7 @@ public class PayOrderController {
                     if(isGradeSetting.equals("1")){
                         //如果电子卡设置不执行营销方案执行等级优惠 则 电子卡支付金额 =应收金额-等级优惠金额
                         BigDecimal dzkAmt = receivableAmt.subtract(dzkGradeDiscountAmt);
+                        dzkAmt =dzkAmt.toString().equals("0.00") ? new BigDecimal("0.01"): dzkAmt;
                         dzkAmt =dzkAmt.signum() == -1 ? new BigDecimal("0.01"): dzkAmt;
                         payOrderResultInfo.setDzkAmt(dzkAmt.toString());
                         payOrderResultInfo.setDzkDiscountAmt(dzkGradeDiscountAmt.toString());
@@ -1342,10 +1392,12 @@ public class PayOrderController {
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
             String dzkAmt = payOrderResultInfo.getDzkAmt();
             payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
-            if(oilLiters.toString().equals("0.00")){
+            if(oilLiters.toString().equals("0.0000")){
+                payOrderResultInfo.setDzkAmt("0.01");
                 payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
             }else {
                 BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
+                dzkDiscountPrice =dzkDiscountPrice.compareTo(oilPrice) == 1 ? oilPrice: dzkDiscountPrice;
                 payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
             }
         }
@@ -1358,18 +1410,18 @@ public class PayOrderController {
         String stationId = params.get("stationId").toString();
         BigDecimal oilPrice = new BigDecimal(params.get("oilPrice").toString());    //油品价格
         BigDecimal receivableAmt = new BigDecimal(params.get("receivableAmt").toString());   //应收金额
-        BigDecimal oilLiters = new BigDecimal("0.00");  //加油升数
-        BigDecimal discountAmt = new BigDecimal(0);  //优惠金额
+        BigDecimal oilLiters = new BigDecimal("0.0000");  //加油升数
+        BigDecimal discountAmt = new BigDecimal("0.00");  //优惠金额
         BigDecimal dzkDiscountAmt = discountAmt;  //优惠金额
         BigDecimal amt = receivableAmt;
         BigDecimal discountPrice = oilPrice;
-        BigDecimal gradeDiscountPriceAmt = new BigDecimal("0");  //价格优惠金额
+        BigDecimal gradeDiscountPriceAmt = new BigDecimal("0.00");  //价格优惠金额
         PayOrderResultInfo payOrderResultInfo = new PayOrderResultInfo();
 
-        oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_HALF_UP);
-        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
-            oilLiters = receivableAmt.divide(oilPrice,2, BigDecimal.ROUND_UP);
-        }
+        oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_HALF_UP);
+//        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("0000")){
+//            oilLiters = receivableAmt.divide(oilPrice,4, BigDecimal.ROUND_UP);
+//        }
         //当前客户是否已存在当前油站客户信息中
         CustomerManage customerManage = new CustomerManage();
         //customerManage.setPhoneNumber(params.get("mobilePhone").toString());
@@ -1386,8 +1438,12 @@ public class PayOrderController {
                     if(amtSum >= Double.valueOf(m.get("memberConditStart").toString())){
                         discountPrice = oilPrice.subtract(new BigDecimal(m.get("discountAmt").toString()));
                         gradeDiscountPriceAmt = new BigDecimal(m.get("discountAmt").toString());
-                        discountAmt = oilLiters.multiply(new BigDecimal(m.get("discountAmt").toString()));
-                        discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        if(discountPrice.compareTo(oilPrice) ==0){
+                            discountAmt = new BigDecimal("0.00");
+                        }else {
+                            discountAmt = oilLiters.multiply(new BigDecimal(m.get("discountAmt").toString()));
+                            discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                        }
                         break;
                     }
                 }
@@ -1398,11 +1454,16 @@ public class PayOrderController {
             if(customerGradeList !=null && customerGradeList.size() >0){
                 discountPrice = oilPrice.subtract(new BigDecimal(customerGradeList.get(0).get("discountAmt").toString()));
                 gradeDiscountPriceAmt = new BigDecimal(customerGradeList.get(0).get("discountAmt").toString());
-                discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("discountAmt").toString()));
-                discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                if(discountPrice.compareTo(oilPrice) == 0){
+                    discountAmt = new BigDecimal("0.00");
+                }else {
+                    discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("discountAmt").toString()));
+                    discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
+                }
             }
         }
         amt = receivableAmt.subtract(discountAmt);  //应收金额
+        amt =amt.toString().equals("0.00") ? new BigDecimal("0.01"): amt;
         amt =amt.signum() == -1 ? new BigDecimal("0.01"): amt;
         //discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? discountPrice : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);  //优惠价格
 
@@ -1463,10 +1524,12 @@ public class PayOrderController {
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
             String dzkAmt = payOrderResultInfo.getDzkAmt();
             payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
-            if(oilLiters.toString().equals("0.00")){
+            if(oilLiters.toString().equals("0.0000")){
+                payOrderResultInfo.setDzkAmt("0.01");
                 payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
             }else {
                 BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
+                dzkDiscountPrice =dzkDiscountPrice.compareTo(oilPrice) == 1 ? oilPrice: dzkDiscountPrice;
                 payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
             }
         }
@@ -1597,7 +1660,7 @@ public class PayOrderController {
                     case "1":
                         amtNew = new BigDecimal(amt).subtract(couponAmt);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
@@ -1610,7 +1673,7 @@ public class PayOrderController {
                         discountAmtNew = discountAmtNew.add(zheKouAmt);
                         amtNew = amtNew.subtract(zheKouAmt);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -1625,7 +1688,7 @@ public class PayOrderController {
                     case "1":
                         amtNew = new BigDecimal(receivableAmt).subtract(couponAmt);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
@@ -1641,7 +1704,7 @@ public class PayOrderController {
                         discountAmtNew = discountAmtNew.add(zheKouAmt);
                         amtNew = amtNew.subtract(discountAmtNew);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -1660,7 +1723,7 @@ public class PayOrderController {
                     case "1":
                         amtNew = new BigDecimal(amt).subtract(couponAmt);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
@@ -1673,7 +1736,7 @@ public class PayOrderController {
                         discountAmtNew = discountAmtNew.add(zheKouAmt);
                         amtNew = amtNew.subtract(zheKouAmt);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -1690,7 +1753,7 @@ public class PayOrderController {
                         amtNew = new BigDecimal(receivableAmt).subtract(couponAmt);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
                         //优惠券后的优惠价格
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         discountAmtNew = new BigDecimal("0.00");
@@ -1707,7 +1770,7 @@ public class PayOrderController {
                         amtNew = amtNew.subtract(discountAmtNew);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
                         //优惠券后的优惠价格
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -1726,7 +1789,7 @@ public class PayOrderController {
                     case "1":
                         amtNew = new BigDecimal(amt).subtract(couponAmt);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         couponReckonAmt.setDiscountPrice(discountPriceNew.toString());
@@ -1739,7 +1802,7 @@ public class PayOrderController {
                         discountAmtNew = discountAmtNew.add(zheKouAmt);
                         amtNew = amtNew.subtract(zheKouAmt);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -1755,7 +1818,7 @@ public class PayOrderController {
                         amtNew = new BigDecimal(receivableAmt).subtract(couponAmt);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
                         //优惠券后的优惠价格
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         discountAmtNew = new BigDecimal("0.00");
@@ -1772,7 +1835,7 @@ public class PayOrderController {
                         amtNew = amtNew.subtract(discountAmtNew);
                         amtNew = amtNew.signum() == -1 ? new BigDecimal("0.01") : amtNew.setScale(2,BigDecimal.ROUND_HALF_UP);
                         //优惠券后的优惠价格
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             discountPriceNew = amtNew.divide(new BigDecimal(oilLiters), 2, BigDecimal.ROUND_HALF_UP);
                         }
                         discountAmtNew = discountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -1795,7 +1858,7 @@ public class PayOrderController {
                         dzkDiscountAmtNew = dzkDiscountAmtNew.add(couponAmt);
                         couponReckonAmt.setDzkDiscountAmt(dzkDiscountAmtNew.toString());
                         couponReckonAmt.setDzkAmt(dzkAmtNew.toString());
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             dzkDiscountPriceNew = dzkAmtNew.divide(new BigDecimal(oilLiters), 2 ,BigDecimal.ROUND_HALF_UP);
                         }
                         couponReckonAmt.setDzkDiscountPrice(dzkDiscountPriceNew.toString());
@@ -1809,7 +1872,7 @@ public class PayOrderController {
                         dzkDiscountAmtNew = dzkDiscountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
                         couponReckonAmt.setDzkDiscountAmt(dzkDiscountAmtNew.toString());
                         couponReckonAmt.setDzkAmt(dzkAmtNew.toString());
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             dzkDiscountPriceNew = dzkAmtNew.divide(new BigDecimal(oilLiters), 2 ,BigDecimal.ROUND_HALF_UP);
                         }
                         couponReckonAmt.setDzkDiscountPrice(dzkDiscountPriceNew.toString());
@@ -1825,7 +1888,7 @@ public class PayOrderController {
                         dzkDiscountAmtNew = dzkDiscountAmtNew.add(couponAmt);
                         couponReckonAmt.setDzkDiscountAmt(dzkDiscountAmtNew.toString());
                         couponReckonAmt.setDzkAmt(dzkAmtNew.toString());
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             dzkDiscountPriceNew = dzkAmtNew.divide(new BigDecimal(oilLiters), 2 ,BigDecimal.ROUND_HALF_UP);
                         }
                         couponReckonAmt.setDzkDiscountPrice(dzkDiscountPriceNew.toString());
@@ -1839,7 +1902,7 @@ public class PayOrderController {
                         dzkDiscountAmtNew = dzkDiscountAmtNew.setScale(2, BigDecimal.ROUND_HALF_UP);
                         couponReckonAmt.setDzkDiscountAmt(dzkDiscountAmtNew.toString());
                         couponReckonAmt.setDzkAmt(dzkAmtNew.toString());
-                        if(!oilLiters.equals("0.00")){
+                        if(!oilLiters.equals("0.0000")){
                             dzkDiscountPriceNew = dzkAmtNew.divide(new BigDecimal(oilLiters), 2 ,BigDecimal.ROUND_HALF_UP);
                         }
                         couponReckonAmt.setDzkDiscountPrice(dzkDiscountPriceNew.toString());