|
@@ -43,17 +43,20 @@ class Quality
|
|
|
protected $mMchoilctl;
|
|
|
protected $mSpeeds;
|
|
|
protected $mQualities;
|
|
|
+ protected $mTryAdjuster;
|
|
|
|
|
|
public function __construct()
|
|
|
{
|
|
|
$this->mMchPhonectl = new mchctl();
|
|
|
$this->mMchoilctl = new mchoilctl();
|
|
|
+ $this->mTryAdjuster = new try_judge();
|
|
|
}
|
|
|
|
|
|
public function load()
|
|
|
{
|
|
|
$this->mMchPhonectl->load();
|
|
|
$this->mMchoilctl->load();
|
|
|
+ $this->mTryAdjuster->load();
|
|
|
}
|
|
|
|
|
|
public function find_quality($mchid, $card_type, $quality, $times, $used_time, $caller): array
|
|
@@ -168,13 +171,13 @@ class Quality
|
|
|
}
|
|
|
|
|
|
$max_times = $this->mSpeeds[$org]['retry_times'];
|
|
|
- $qualities = $this->calc_phone_quality($qualities,$times,$used_time,$time_out,$max_times);
|
|
|
+ $qualities = $this->calc_phone_quality($qualities,$times,$used_time,$time_out,$max_times,$mchid);
|
|
|
|
|
|
return [$org,$qualities];
|
|
|
}
|
|
|
|
|
|
//通过每种类型通道耗时,倒推当前可用通道,并优先走推荐通道.
|
|
|
- private function calc_phone_quality($qualities, $times, $used_time, $time_out, $max_times)
|
|
|
+ private function calc_phone_quality($qualities, $times, $used_time, $time_out, $max_times,$mchid)
|
|
|
{
|
|
|
$left_time = $time_out - $used_time;
|
|
|
if($left_time <= 0 || $max_times <= $times) return [];
|
|
@@ -214,11 +217,31 @@ class Quality
|
|
|
return $result;
|
|
|
};
|
|
|
|
|
|
- if($times > 0) {
|
|
|
+ $pTryAdjuster = $this->mTryAdjuster;
|
|
|
+ $timeing_checker = function ($qualities) use($pTryAdjuster,$mchid)
|
|
|
+ {
|
|
|
+ foreach ($qualities as $quality)
|
|
|
+ {
|
|
|
+ $ret = $pTryAdjuster->can_try($mchid,$quality);
|
|
|
+ if($ret == false) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+
|
|
|
+ if($times > 0)
|
|
|
+ {
|
|
|
$qualities = $times_checker($qualities,$times);
|
|
|
Log::record("calc_quality times_checker result = " . implode($qualities),Log::DEBUG);
|
|
|
$qualities = $timeout_checker($qualities,$left_time);
|
|
|
Log::record("calc_quality timeout_checker result = " . implode($qualities),Log::DEBUG);
|
|
|
+
|
|
|
+ if(!$timeing_checker($qualities)) {
|
|
|
+ $qualities = [];
|
|
|
+ Log::record("calc_quality timeing_checker result is empty", Log::DEBUG);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return $qualities;
|