Browse Source

小数点计算优化

jk-GitHub-coder 3 years ago
parent
commit
1be5240394

+ 9 - 1
YijiaRestful/src/main/java/com/platform/yijia/controller/PayController.java

@@ -2186,7 +2186,15 @@ public class PayController {
     }
 
 
-    //
+    //支付宝扫码随行付支付
+    @RequestMapping(value = "/aliPayAmt", consumes = "application/json", method = RequestMethod.POST)
+    @ResponseBody
+    public String aliPayAmt(@RequestBody PayOrder payOrder){
+        Gson gson =new Gson();
+        //返回结果集
+        ResultData resultData = null;
+        return gson.toJson(resultData);
+    }
 
 
     @RequestMapping(value = "/posPrintReceiptCeshi", consumes = "application/json", method = RequestMethod.POST)

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

@@ -701,6 +701,23 @@ public class PayOrderController {
             payOrderResultInfo.setOilsCardFlag(map.get("oilsCardFlag"));
             payOrderResultInfo.setCardOilsType(map.get("cardOilsType"));
             payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
+            if(oilLiters.toString().equals("0.0000")){
+                payOrderResultInfo.setDzkAmt("0.01");
+                payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
+            }else {
+                String dzkAmt = payOrderResultInfo.getDzkAmt();
+                //如果电子卡的支付金额与微信支付金额相同
+                if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
+                    payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
+                }else{
+                    //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
+                    BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) == 1 ? oilPrice : dzkDiscountPrice;
+                    payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
+                }
+            }
         }
         return payOrderResultInfo;
     }
@@ -875,8 +892,16 @@ public class PayOrderController {
                 payOrderResultInfo.setDzkAmt("0.01");
                 payOrderResultInfo.setDzkDiscountPrice(oilPrice.toString());
             }else {
-                BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters, 2, BigDecimal.ROUND_HALF_UP);
-                payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
+                //如果电子卡的支付金额与微信支付金额相同
+                if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
+                    payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
+                }else{
+                    //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
+                    BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
+                }
             }
         }
         return  payOrderResultInfo;
@@ -1093,9 +1118,17 @@ public class PayOrderController {
                 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());
+                //如果电子卡的支付金额与微信支付金额相同
+                if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
+                    payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
+                }else{
+                    //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
+                    BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) == 1 ? oilPrice : dzkDiscountPrice;
+                    payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
+                }
             }
         }
         return  payOrderResultInfo;
@@ -1243,9 +1276,17 @@ public class PayOrderController {
                 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());
+                //如果电子卡的支付金额与微信支付金额相同
+                if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
+                    payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
+                }else{
+                    //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
+                    BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) ==1 ? oilPrice : dzkDiscountPrice;
+                    payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
+                }
             }
         }
         return  payOrderResultInfo;
@@ -1396,9 +1437,17 @@ public class PayOrderController {
                 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());
+                //如果电子卡的支付金额与微信支付金额相同
+                if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
+                    payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
+                }else{
+                    //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
+                    BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) ==1 ? oilPrice : dzkDiscountPrice;
+                    payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
+                }
             }
         }
         return payOrderResultInfo;
@@ -1528,9 +1577,18 @@ public class PayOrderController {
                 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());
+
+                //如果电子卡的支付金额与微信支付金额相同
+                if(amt.compareTo(new BigDecimal(dzkAmt)) == 0){
+                    payOrderResultInfo.setDzkDiscountPrice(discountPrice.toString());
+                }else{
+                    //此处重新计算油升数原因:电子卡在计算支付0.01时优惠价格时,如果保留小数位数过低则会出现误差;
+                    BigDecimal oilLiters_dzk = receivableAmt.divide(oilPrice,7, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal dzkDiscountPrice = oilLiters_dzk.toString().equals("0.0000000") ? oilPrice: new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    //BigDecimal dzkDiscountPrice = new BigDecimal(dzkAmt).divide(oilLiters_dzk, 2, BigDecimal.ROUND_HALF_UP);
+                    dzkDiscountPrice = dzkDiscountPrice.compareTo(oilPrice) ==1 ? oilPrice : dzkDiscountPrice;
+                    payOrderResultInfo.setDzkDiscountPrice(dzkDiscountPrice.toString());
+                }
             }
         }
         return  payOrderResultInfo;

+ 1 - 1
YijiaRestful/src/main/resources/mapper/CardExcelImportMapper.xml

@@ -32,7 +32,7 @@
     FROM
       card_excel_import
     <where>
-            import_flag = "0"
+            import_flag = "0" AND del_flag = "0"
           <if test="stationId !=null and stationId !=''">
              AND station_id = #{stationId}
           </if>