stanley-king 2 年之前
父節點
當前提交
a4d183af15
共有 2 個文件被更改,包括 38 次插入34 次删除
  1. 19 8
      helper/refill/policy/mratio_controlex.php
  2. 19 26
      helper/refill/policy/quaility.php

+ 19 - 8
helper/refill/policy/mratio_controlex.php

@@ -266,25 +266,36 @@ class mratio_controlex
     public function ratio_match($mchid, $org_quality, $card_type, $spec, $qualities)
     {
         if (count($qualities) <= 1) {
-            return true;
+            return [true, true];
         }
 
         $header = __METHOD__ . " mchid={$mchid} card_type={$card_type} spec={$spec}";
         [$lowest_ratio, $period] = $this->lowest_ratio($mchid);
 
-        [$submit_count, $succ_count, $fail_count, $gross_ratio, $profit, $profit_ratio] = $this->gross_ratio($mchid);
+        $lowest_pratio = $this->profit_ratio($mchid);
+        [$submit_count, $succ_count, $fail_count, $gross_ratio, $profit, $gross_pratio] = $this->gross_ratio($mchid);
         Log::record("{$header} gross_ratio={$gross_ratio}, lower_ratio={$lowest_ratio}", Log::DEBUG);
 
-        if (!PolicyUtil::mixed_quality($org_quality)) {
+        if ($gross_pratio > $lowest_pratio) {
+            $can_last = true;
+        } else {
+            $can_last = false;
+        }
+
+        if (!PolicyUtil::mixed_quality($org_quality))
+        {
             if ($gross_ratio >= $lowest_ratio) {
-                return true;
+                return [true,true];
             } else {
-                return false;
+                return [false,true];
             }
-        } elseif ($gross_ratio >= $lowest_ratio) {
-            return $this->pre_checker($mchid, $card_type, $spec, $header, $lowest_ratio);
+        }
+        elseif ($gross_ratio >= $lowest_ratio) {
+            $match = $this->pre_checker($mchid, $card_type, $spec, $header, $lowest_ratio);
+            return [$match,$can_last];
         } else {
-            return $this->all_checker($mchid, $card_type, $spec, $header, $lowest_ratio);
+            $match = $this->all_checker($mchid, $card_type, $spec, $header, $lowest_ratio);
+            return [$match,$can_last];
         }
     }
 

+ 19 - 26
helper/refill/policy/quaility.php

@@ -333,39 +333,32 @@ class Quality
             Log::record("{$tag}={$str}", Log::DEBUG);
         };
 
-        if($used_times > 0)
-        {
-            $qualities_log("{$mchid}-{$card_type}-{$spec} all_qualities",$all_qualities);
-            $match_ratio = $this->mRatioCtl->ratio_match($mchid, $org_quality, $card_type, $spec, $all_qualities);
-            Log::record("mchid={$mchid} must calc next quality match_ratio={$match_ratio}",Log::DEBUG);
-
-            $times_qualities = $times_checker($match_ratio, $all_qualities, $used_times);
-            $qualities_log("{$mchid}-{$card_type}-{$spec} times_qualities",$times_qualities);
+        $qualities_log("{$mchid}-{$card_type}-{$spec} all_qualities", $all_qualities);
+        [$match_ratio, $can_last] = $this->mRatioCtl->ratio_match($mchid, $org_quality, $card_type, $spec, $all_qualities);
+        Log::record("mchid={$mchid} must calc next quality match_ratio={$match_ratio}", Log::DEBUG);
 
-            $timeout_qualities = $timeout_checker($match_ratio, $all_qualities, $left_time);
-            $qualities_log("{$mchid}-{$card_type}-{$spec} timeout_qualities",$timeout_qualities);
+        $times_qualities = $times_checker($match_ratio, $all_qualities, $used_times);
+        $qualities_log("{$mchid}-{$card_type}-{$spec} times_qualities", $times_qualities);
 
-            $pre_qualities = array_intersect($times_qualities, $timeout_qualities, $all_qualities);
-            $qualities_log("{$mchid}-{$card_type}-{$spec} pre_qualities",$pre_qualities);
+        $timeout_qualities = $timeout_checker($match_ratio, $all_qualities, $left_time);
+        $qualities_log("{$mchid}-{$card_type}-{$spec} timeout_qualities", $timeout_qualities);
 
+        $pre_qualities = array_intersect($times_qualities, $timeout_qualities, $all_qualities);
+        $qualities_log("{$mchid}-{$card_type}-{$spec} pre_qualities", $pre_qualities);
 
-            if(!$timeing_checker($pre_qualities)) {
-                $pre_qualities = [];
-                Log::record("calc_quality timeing_checker result is empty", Log::DEBUG);
-            }
 
-            $qualities_log("{$mchid}-{$card_type}-{$spec} after timeing_checker qualities",$pre_qualities);
-            $cur_qualities = $pre_qualities;
-        }
-        else {
-            $match_ratio = true;
-            $cur_qualities = $all_qualities;
+        if (!$timeing_checker($pre_qualities)) {
+            $pre_qualities = [];
+            Log::record("calc_quality timeing_checker result is empty", Log::DEBUG);
         }
 
-//        if ($match_ratio) {
-//            $all = $this->qualities($org_quality);
-//            $cur_qualities = PolicyUtil::mixed_remove_last($org_quality, $cur_qualities, $all);
-//        }
+        $qualities_log("{$mchid}-{$card_type}-{$spec} after timeing_checker qualities", $pre_qualities);
+        $cur_qualities = $pre_qualities;
+
+        if (!$can_last) {
+            $all = $this->qualities($org_quality);
+            $cur_qualities = PolicyUtil::mixed_remove_last($org_quality, $cur_qualities, $all);
+        }
 
         return [$cur_qualities,$match_ratio];