Bläddra i källkod

fix(order): 修复订单计算中的精度问题

- 使用 bcmul 函数替换直接乘法运算,确保价格计算精度
- 统一所有涉及金额计算的地方使用高精度数学函数
- 修复养老金额度计算的精度丢失问题
- 确保订单总价和各项费用计算的准确性
- 防止浮点数运算导致的金额偏差问题
shichen 3 månader sedan
förälder
incheckning
2f797aae02
1 ändrade filer med 9 tillägg och 9 borttagningar
  1. 9 9
      app/common/repositories/store/order/StoreOrderRepository.php

+ 9 - 9
app/common/repositories/store/order/StoreOrderRepository.php

@@ -2387,7 +2387,7 @@ class StoreOrderRepository extends BaseRepository
2387 2387
                 }
2388 2388
             }
2389 2389
 
2390
-            $orderpri = $cartInfo['list'][$_k]['productAttr']['price'] * $cartInfo['list'][$_k]['cart_num'];
2390
+            $orderpri = bcmul($cartInfo['list'][$_k]['productAttr']['price'], $cartInfo['list'][$_k]['cart_num'], 2);
2391 2391
             //var_dump($ss);
2392 2392
             //支付组合
2393 2393
             $num_yl = 0;
@@ -2411,7 +2411,7 @@ class StoreOrderRepository extends BaseRepository
2411 2411
 
2412 2412
             if ($store_product_datas['mer_id'] == 496) {
2413 2413
 
2414
-                $yanglao = bcmul($num_yl, 0.035, 2) * $cartInfo['list'][$_k]['cart_num'];//给预下订单中的商品展示 养老金 显示作用
2414
+                $yanglao = bcmul(bcmul($num_yl, 0.035, 2) , $cartInfo['list'][$_k]['cart_num'],2);//给预下订单中的商品展示 养老金 显示作用
2415 2415
                 $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2416 2416
                 $pv = $num_yl;
2417 2417
                 //$v['vr']=$v['price'];
@@ -2468,7 +2468,7 @@ class StoreOrderRepository extends BaseRepository
2468 2468
                 $jf = $orderpri - bcmul($store_product_datas['concession_pri'], 0.3, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.3, 2);
2469 2469
                 $jd = $orderpri - bcmul($store_product_datas['concession_pri'], 0.35, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.35, 2);
2470 2470
                 if ($store_product_datas['concession_pri'] != null || $store_product_datas['concession_pri'] != 0) {
2471
-                    $yanglao = bcmul($store_product_datas['concession_pri'], 0.3, 2) * $cartInfo['list'][$_k]['cart_num'];
2471
+                    $yanglao = bcmul(bcmul($store_product_datas['concession_pri'], 0.3, 2) , $cartInfo['list'][$_k]['cart_num'],2);
2472 2472
                     $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2473 2473
                     $pv = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2474 2474
                     $srtArry['jfduihuan'] = $jf;
@@ -2477,11 +2477,11 @@ class StoreOrderRepository extends BaseRepository
2477 2477
                     $gongxian = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2478 2478
 
2479 2479
                     $jcvr = bcsub($orderpri, bcmul($store_product_datas['concession_pri'], 0.3, 2), 2);
2480
-                    $jcjf = bcmul($store_product_datas['concession_pri'], 0.3, 2) * $cartInfo['list'][$_k]['cart_num'];
2480
+                    $jcjf = bcmul(bcmul($store_product_datas['concession_pri'], 0.3, 2) , $cartInfo['list'][$_k]['cart_num'],2);
2481 2481
                     $jcprice = bcsub($orderpri, bcmul($store_product_datas['concession_pri'], 0.3, 2), 2);
2482
-                    $jcjf1 = bcmul($store_product_datas['concession_pri'], 0.3, 2) * $cartInfo['list'][$_k]['cart_num'];
2482
+                    $jcjf1 = bcmul(bcmul($store_product_datas['concession_pri'], 0.3, 2) , $cartInfo['list'][$_k]['cart_num'],2);
2483 2483
                     $jcvr1 = bcsub($orderpri, bcmul($store_product_datas['concession_pri'], 0.35, 2), 2);
2484
-                    $jcjd = bcmul($store_product_datas['concession_pri'], 0.35, 2) * $cartInfo['list'][$_k]['cart_num'];
2484
+                    $jcjd = bcmul(bcmul($store_product_datas['concession_pri'], 0.35, 2), $cartInfo['list'][$_k]['cart_num'], 2);
2485 2485
                     $jcprice1 = bcsub($orderpri, bcmul($store_product_datas['concession_pri'], 0.35, 2), 2);
2486 2486
                     $jcjd1 = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2487 2487
 
@@ -2526,7 +2526,7 @@ class StoreOrderRepository extends BaseRepository
2526 2526
                 $pv = $productSku['plate_mer_profit'] ?? 0.00;
2527 2527
                 //复购区
2528 2528
                 // $pv = bcmul($orderpri, 0.3, 2);
2529
-                $yanglao = bcmul($pv, 0.5, 2) * $cartInfo['list'][$_k]['cart_num'];//给预下订单中的商品展示 养老金 显示作用
2529
+                $yanglao = bcmul(bcmul($pv, 0.5, 2) , $cartInfo['list'][$_k]['cart_num'],2);//给预下订单中的商品展示 养老金 显示作用
2530 2530
                 $cartInfo['list'][$_k]['pv'] = $pv;
2531 2531
                 $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2532 2532
 
@@ -2544,7 +2544,7 @@ class StoreOrderRepository extends BaseRepository
2544 2544
                 $pvProportion = bcsub('1', bcdiv($sharedProsperityRecommendConfigEntityByMaxRewardRatio->getRewardRatio(), '100', 4), 2);
2545 2545
                 $pv = bcmul($productSku['plate_mer_profit'], $pvProportion, CommonEnum::DECIMAL_PLACES_OF_THE_AMOUNT);
2546 2546
 
2547
-                $yanglao = bcmul($productSku['price'], CommonEnum::ORDER_EARNING_ALLOCATION['SharedProsperity']['Self']['YangLaoJin']['Ratio']['code'], 2) * $cartInfo['list'][$_k]['cart_num'];
2547
+                $yanglao = bcmul(bcmul($productSku['price'], CommonEnum::ORDER_EARNING_ALLOCATION['SharedProsperity']['Self']['YangLaoJin']['Ratio']['code'], 2), $cartInfo['list'][$_k]['cart_num'], 2);
2548 2548
                 $cartInfo['list'][$_k]['pv'] = $pv;
2549 2549
                 $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2550 2550
 
@@ -2562,7 +2562,7 @@ class StoreOrderRepository extends BaseRepository
2562 2562
                     $jf = $orderpri - bcmul($store_product_datas['concession_pri'], 0.3, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.3, 2);
2563 2563
                     $jd = $orderpri - bcmul($store_product_datas['concession_pri'], 0.35, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.35, 2);
2564 2564
                     if ($store_product_datas['concession_pri'] != null || $store_product_datas['concession_pri'] != 0) {
2565
-                        $yanglao = bcmul($store_product_datas['concession_pri'], 0.3, 2) * $cartInfo['list'][$_k]['cart_num'];
2565
+                        $yanglao = bcmul(bcmul($store_product_datas['concession_pri'], 0.3, 2), $cartInfo['list'][$_k]['cart_num'], 2);
2566 2566
                         $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2567 2567
                         $pv = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2568 2568
                         $srtArry['jfduihuan'] = $jf;