JK преди 4 години
родител
ревизия
bea53a6f50

+ 56 - 14
YijiaRestful/src/main/java/com/platform/yijia/controller/PayOrderController.java

@@ -573,7 +573,10 @@ public class PayOrderController {
                     List<Map<String, Object>> customerGradeInfo = customerGradeServices.getCustomerGradeInfo(params);
                     if(customerGradeInfo != null && customerGradeInfo.size() >0){   //已存在客户等级信息
                         //使用客户已存在的等级计算优惠
-                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                        }
                         if(customerGradeInfo.get(0).get("gasoilDiscountLitre") !=null){
                             discountAmt = oilLiters.multiply(new BigDecimal(customerGradeInfo.get(0).get("gasoilDiscountLitre").toString()));
                             discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -592,7 +595,10 @@ public class PayOrderController {
                         //如果存在
                         if(customerGradeList !=null && customerGradeList.size() >0){
                             //用户第一次购买 取等级最低初始会员的优惠条件计算
-                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_UP);   //加油升数
+                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                            if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                            }
 
                             if(customerGradeList.get(0).get("gasoilDiscountLitre") !=null){
                                 discountAmt = oilLiters.multiply(new BigDecimal(customerGradeList.get(0).get("gasoilDiscountLitre").toString()));
@@ -631,7 +637,10 @@ public class PayOrderController {
                             discountAmt = receivableAmt_b.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP).multiply(gasoilDiscountAmt_b);  //优惠金额
                             discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
                             amt = receivableAmt_b.subtract(discountAmt);   //实收金额
-                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);   //加油升数
+                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                            if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                            }
                             discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                             switch (vipDiscountyPlus){
                                 case "1":
@@ -666,7 +675,10 @@ public class PayOrderController {
                                 case "2":
                                     resultMap.put("discountAmt", 0);
                                     resultMap.put("amt", receivableAmt.doubleValue());
-                                    oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);   //加油升数
+                                    oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                                    if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                                    }
                                     resultMap.put("oilLiters", oilLiters.doubleValue());
                                     resultMap.put("discountPrice", oilPrice);
                                     break;
@@ -694,7 +706,10 @@ public class PayOrderController {
                             BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList_2.get(0).get("gasoilDiscountAmt").toString());   //满多少优惠多少的金额
                             discountAmt = gasoilDiscountAmt_b;  //优惠金额
                             amt = receivableAmt_b.subtract(gasoilDiscountAmt_b);   //实收金额
-                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_UP);   //加油升数
+                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                            if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                            }
                             discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_UP);
                             switch (vipDiscountyPlus){
                                 case "1":
@@ -732,7 +747,10 @@ public class PayOrderController {
                                 case "2":
                                     resultMap.put("discountAmt", 0);
                                     resultMap.put("amt", receivableAmt.doubleValue());
-                                    oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);   //加油升数
+                                    oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                                    if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                                    }
                                     resultMap.put("oilLiters", oilLiters.doubleValue());
                                     resultMap.put("discountPrice", oilPrice);
                                     break;
@@ -756,7 +774,10 @@ public class PayOrderController {
                         String vipDiscountyPlus_4 = customerMarkertPlanList_3.get(0).get("vipDiscountyPlus").toString();
                         BigDecimal discountAmt_b = new BigDecimal(customerMarkertPlanList_3.get(0).get("discountAmt").toString());   //条件金额
                         BigDecimal gasoilDiscountAmt_b = new BigDecimal(customerMarkertPlanList_3.get(0).get("gasoilDiscountAmt").toString());
-                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_UP);   //加油升数
+                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                        }
                         if(customerMarkertPlanList_3.get(0).get("discountTerm").toString().equals("1")){   //按升数优惠
                             if(oilLiters.compareTo(discountAmt_b) ==1 || oilLiters.compareTo(discountAmt_b) ==0){
                                 //计算
@@ -794,7 +815,10 @@ public class PayOrderController {
                                     case "2":
                                         resultMap.put("discountAmt", 0);
                                         resultMap.put("amt", receivableAmt.doubleValue());
-                                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);   //加油升数
+                                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                                        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                                        }
                                         resultMap.put("oilLiters", oilLiters.doubleValue());
                                         resultMap.put("discountPrice", oilPrice);
                                         break;
@@ -835,7 +859,10 @@ public class PayOrderController {
                                     case "2":
                                         resultMap.put("discountAmt", 0);
                                         resultMap.put("amt", receivableAmt.doubleValue());
-                                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);   //加油升数
+                                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                                        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                                        }
                                         resultMap.put("oilLiters", oilLiters.doubleValue());
                                         resultMap.put("discountPrice", oilPrice);
                                         break;
@@ -872,7 +899,10 @@ public class PayOrderController {
         List<Map<String, Object>> customerGradeInfo = customerGradeServices.getCustomerGradeInfo(params);
         if(customerGradeInfo != null && customerGradeInfo.size() >0){   //已存在客户等级信息
             //使用客户已存在的等级计算优惠
-            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+            if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+            }
             if(customerGradeInfo.get(0).get("gasoilDiscountLitre") !=null){
                 discountAmt = oilLiters.multiply(new BigDecimal(customerGradeInfo.get(0).get("gasoilDiscountLitre").toString()));
                 discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -892,7 +922,10 @@ public class PayOrderController {
             //如果存在
             if(customerGradeList !=null && customerGradeList.size() >0){
                 //用户第一次购买 取等级最低初始会员的优惠条件计算
-                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_UP);   //加油升数
+                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                    oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                }
                 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);
@@ -910,7 +943,10 @@ public class PayOrderController {
                 //不存在
                 resultMap.put("discountAmt", 0);
                 resultMap.put("amt", receivableAmt.doubleValue());
-                oilLiters = new BigDecimal(receivableAmt).divide(new BigDecimal(oilPrice), 2, BigDecimal.ROUND_UP);
+                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                    oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                }
                 resultMap.put("oilLiters", oilLiters.doubleValue());
                 resultMap.put("discountPrice", oilPrice);
             }
@@ -942,7 +978,10 @@ public class PayOrderController {
                 discountAmt = receivableAmt_b.divide(discountAmt_b, 2, BigDecimal.ROUND_UP).multiply(gasoilDiscountAmt_b);  //优惠金额
                 discountAmt = discountAmt.setScale(2, BigDecimal.ROUND_HALF_UP);
                 amt = receivableAmt_b.subtract(discountAmt);   //实收金额
-                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);   //加油升数
+                oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                    oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                }
                 discountPrice = oilLiters.equals(new BigDecimal("0.00")) ? new BigDecimal(oilPrice) : amt.divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
                 switch (vipDiscountyPlus){
                     case "1":
@@ -977,7 +1016,10 @@ public class PayOrderController {
                     case "2":
                         resultMap.put("discountAmt", 0);
                         resultMap.put("amt", receivableAmt.doubleValue());
-                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);   //加油升数
+                        oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_HALF_UP);   //加油升数
+                        if(!oilLiters.toString().substring(oilLiters.toString().indexOf(".") + 1).equals("00")){
+                            oilLiters = receivableAmt_b.divide(new BigDecimal(oilPrice),2, BigDecimal.ROUND_UP);
+                        }
                         resultMap.put("oilLiters", oilLiters.doubleValue());
                         resultMap.put("discountPrice", oilPrice);
                         break;

+ 16 - 22
YijiaRestful/src/test/java/com/palatform/yijia/test.java

@@ -3,34 +3,28 @@ package com.palatform.yijia;
 import org.apache.commons.codec.digest.DigestUtils;
 
 import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.text.Bidi;
 import java.util.Calendar;
 import java.util.Date;
 
 public class test {
 
     public static void main(String[] args) {
-//        byte[] digesta = {0, 1, 0, 1};
-//        byte[] digestb = {0, 0, 0, 1};
-//        boolean equal = test.isEqual(digesta, digestb);
-//        System.out.println(equal);
-        //DigestUtils.sha1();
-
-
-
-        BigDecimal b1 = new BigDecimal("64.7024");//24.698,24.702
-        BigDecimal b2 = new BigDecimal("1.234");
-
-//        System.out.println(b1.add(b2));
-//        System.out.println(b1.subtract(b2));
-//        System.out.println(b1.multiply(b2));
-        //ROUND_HALF_UP:四舍五入(一般采用这个)
-        System.out.println(b1.divide(b2,2,BigDecimal.ROUND_HALF_UP));
-        //ROUND_HALF_DOWN:四舍五入,如果结果小数位只比保留位多一位且最后一位为5则不进位
-        System.out.println(b1.divide(b2,3,BigDecimal.ROUND_HALF_DOWN));
-        //ROUND_UP:始终加一
-        System.out.println(b1.divide(b2,3,BigDecimal.ROUND_UP));
-        //ROUND_DOWN:直接截取
-        System.out.println(b1.divide(b2,3,BigDecimal.ROUND_DOWN));
+
+        BigDecimal discountAmt_b = new BigDecimal(5.79);
+        BigDecimal receivableAmt_b = new BigDecimal(100);
+        BigDecimal oilLiters =null;
+        oilLiters = receivableAmt_b.divide(discountAmt_b, 2, BigDecimal.ROUND_HALF_UP);
+        System.out.println(oilLiters);
+        String s = oilLiters.toString();
+        String substring = s.substring(s.indexOf(".") + 1);
+        System.out.println(substring);
+        if(!substring.equals("00")){
+            oilLiters = receivableAmt_b.divide(discountAmt_b, 2, BigDecimal.ROUND_UP);
+        }
+        System.out.println(oilLiters);
+
 
     }