Explorar el Código

fix mixed ratios calc

stanley-king hace 3 años
padre
commit
5d2f60bac1
Se han modificado 2 ficheros con 20 adiciones y 3 borrados
  1. 19 2
      helper/refill/policy/mratio_control.php
  2. 1 1
      test/TestBigData.php

+ 19 - 2
helper/refill/policy/mratio_control.php

@@ -448,7 +448,24 @@ class mratio_control
 
     private function qts_checker($mchid, $org_quality,$cur_quality, $card_type, $spec, $qualities,$period,$header,$ratio)
     {
-        [$_succ, $_fail, $cur_ratio] = $this->detail_ratio($mchid, $cur_quality, $card_type, $spec, $period);
+        $ratio_calc = function ($mchid, $card_type, $spec, $period, $org_quality, $qualities)
+        {
+            $succs = 0;
+            $fails = 0;
+            foreach ($qualities as $quality)
+            {
+                if ($quality === $org_quality) continue;
+
+                [$_succ, $_fail, $cur_ratio] = $this->detail_ratio($mchid, $quality, $card_type, $spec, $period);
+                $succs += $_succ;
+                $fails += $_fail;
+            }
+            $ratio = round($succs / ($succs + $fails + 0.000001),4);
+
+            return $ratio;
+        };
+
+        $cur_ratio = $ratio_calc($mchid, $card_type, $spec, $period, $org_quality, $qualities);
         Log::record("{$header} cur_ratio = {$cur_ratio},lower_ratio={$ratio}",Log::DEBUG);
 
         if($cur_ratio >= $ratio) return true;
@@ -486,7 +503,7 @@ class mratio_control
             }
             else
             {
-                $cur_pratio = round($profit / ($amount + 0.00001),4);
+                $cur_pratio = round($profit / ($amount + 0.000001),4);
                 $profit_ratio = round($profit_ratio,4);
 
                 Log::record("{$header} qts_checker cur_pratio = {$cur_pratio},profit_ratio={$profit_ratio}",Log::DEBUG);

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
test/TestBigData.php