Преглед изворни кода

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

- 使用 bcmul 函数替换直接乘法运算,确保价格计算精度
- 统一所有涉及金额计算的地方使用高精度数学函数
- 修复养老金额度计算的精度丢失问题
- 确保订单总价和各项费用计算的准确性
- 防止浮点数运算导致的金额偏差问题
shichen пре 3 месеци
родитељ
комит
2f797aae02
1 измењених фајлова са 9 додато и 9 уклоњено
  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
             //var_dump($ss);
2391
             //var_dump($ss);
2392
             //支付组合
2392
             //支付组合
2393
             $num_yl = 0;
2393
             $num_yl = 0;
@@ -2411,7 +2411,7 @@ class StoreOrderRepository extends BaseRepository
2411
 
2411
 
2412
             if ($store_product_datas['mer_id'] == 496) {
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
                 $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2415
                 $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2416
                 $pv = $num_yl;
2416
                 $pv = $num_yl;
2417
                 //$v['vr']=$v['price'];
2417
                 //$v['vr']=$v['price'];
@@ -2468,7 +2468,7 @@ class StoreOrderRepository extends BaseRepository
2468
                 $jf = $orderpri - bcmul($store_product_datas['concession_pri'], 0.3, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.3, 2);
2468
                 $jf = $orderpri - bcmul($store_product_datas['concession_pri'], 0.3, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.3, 2);
2469
                 $jd = $orderpri - bcmul($store_product_datas['concession_pri'], 0.35, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.35, 2);
2469
                 $jd = $orderpri - bcmul($store_product_datas['concession_pri'], 0.35, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.35, 2);
2470
                 if ($store_product_datas['concession_pri'] != null || $store_product_datas['concession_pri'] != 0) {
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
                     $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2472
                     $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2473
                     $pv = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2473
                     $pv = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2474
                     $srtArry['jfduihuan'] = $jf;
2474
                     $srtArry['jfduihuan'] = $jf;
@@ -2477,11 +2477,11 @@ class StoreOrderRepository extends BaseRepository
2477
                     $gongxian = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2477
                     $gongxian = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2478
 
2478
 
2479
                     $jcvr = bcsub($orderpri, bcmul($store_product_datas['concession_pri'], 0.3, 2), 2);
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
                     $jcprice = bcsub($orderpri, bcmul($store_product_datas['concession_pri'], 0.3, 2), 2);
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
                     $jcvr1 = bcsub($orderpri, bcmul($store_product_datas['concession_pri'], 0.35, 2), 2);
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
                     $jcprice1 = bcsub($orderpri, bcmul($store_product_datas['concession_pri'], 0.35, 2), 2);
2485
                     $jcprice1 = bcsub($orderpri, bcmul($store_product_datas['concession_pri'], 0.35, 2), 2);
2486
                     $jcjd1 = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2486
                     $jcjd1 = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2487
 
2487
 
@@ -2526,7 +2526,7 @@ class StoreOrderRepository extends BaseRepository
2526
                 $pv = $productSku['plate_mer_profit'] ?? 0.00;
2526
                 $pv = $productSku['plate_mer_profit'] ?? 0.00;
2527
                 //复购区
2527
                 //复购区
2528
                 // $pv = bcmul($orderpri, 0.3, 2);
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
                 $cartInfo['list'][$_k]['pv'] = $pv;
2530
                 $cartInfo['list'][$_k]['pv'] = $pv;
2531
                 $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2531
                 $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2532
 
2532
 
@@ -2544,7 +2544,7 @@ class StoreOrderRepository extends BaseRepository
2544
                 $pvProportion = bcsub('1', bcdiv($sharedProsperityRecommendConfigEntityByMaxRewardRatio->getRewardRatio(), '100', 4), 2);
2544
                 $pvProportion = bcsub('1', bcdiv($sharedProsperityRecommendConfigEntityByMaxRewardRatio->getRewardRatio(), '100', 4), 2);
2545
                 $pv = bcmul($productSku['plate_mer_profit'], $pvProportion, CommonEnum::DECIMAL_PLACES_OF_THE_AMOUNT);
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
                 $cartInfo['list'][$_k]['pv'] = $pv;
2548
                 $cartInfo['list'][$_k]['pv'] = $pv;
2549
                 $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2549
                 $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2550
 
2550
 
@@ -2562,7 +2562,7 @@ class StoreOrderRepository extends BaseRepository
2562
                     $jf = $orderpri - bcmul($store_product_datas['concession_pri'], 0.3, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.3, 2);
2562
                     $jf = $orderpri - bcmul($store_product_datas['concession_pri'], 0.3, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.3, 2);
2563
                     $jd = $orderpri - bcmul($store_product_datas['concession_pri'], 0.35, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.35, 2);
2563
                     $jd = $orderpri - bcmul($store_product_datas['concession_pri'], 0.35, 2) . ' + ' . bcmul($store_product_datas['concession_pri'], 0.35, 2);
2564
                     if ($store_product_datas['concession_pri'] != null || $store_product_datas['concession_pri'] != 0) {
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
                         $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2566
                         $cartInfo['list'][$_k]['yanglao'] = $yanglao;
2567
                         $pv = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2567
                         $pv = bcmul($store_product_datas['concession_pri'], 0.35, 2);
2568
                         $srtArry['jfduihuan'] = $jf;
2568
                         $srtArry['jfduihuan'] = $jf;