|
@@ -23,41 +23,96 @@ class Quality
|
|
|
const DefSuccess = 13; // 4 -> 3 -> 1 -> 2
|
|
|
const NormalQuick = 14;
|
|
|
|
|
|
- protected $mMchctl;
|
|
|
+ protected $mMchPhonectl;
|
|
|
+ protected $mMchoilctl;
|
|
|
protected $mSpeeds;
|
|
|
protected $mQualities;
|
|
|
|
|
|
public function __construct()
|
|
|
{
|
|
|
- $this->mMchctl = new mchctl();
|
|
|
+ $this->mMchPhonectl = new mchctl();
|
|
|
+ $this->mMchoilctl = new mchoilctl();
|
|
|
}
|
|
|
|
|
|
public function load()
|
|
|
{
|
|
|
- $this->mMchctl->load();
|
|
|
+ $this->mMchPhonectl->load();
|
|
|
+ $this->mMchoilctl->load();
|
|
|
}
|
|
|
|
|
|
- public function find_quality($mchid,$card_type,$quality,$times,$used_time): array
|
|
|
+ public function find_quality($mchid, $card_type, $quality, $times, $used_time, $caller): array
|
|
|
{
|
|
|
if($card_type == mtopcard\ChinaMobileCard || $card_type == mtopcard\ChinaUnicomCard || $card_type == mtopcard\ChinaTelecomCard) {
|
|
|
return $this->mobile_quality($mchid, $quality, $times, $used_time);
|
|
|
}
|
|
|
elseif($card_type == mtopcard\PetroChinaCard || $card_type == mtopcard\SinopecCard) {
|
|
|
- return [1, [1]];
|
|
|
+ return $this->oil_quality($mchid, $quality, $times,$caller);
|
|
|
}
|
|
|
else {
|
|
|
return [0, []];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private function oil_quality($mchid, $quality, $times, $caller): array
|
|
|
+ {
|
|
|
+ if($quality == 0)
|
|
|
+ {
|
|
|
+ [$success,$setting_quality,$time_out] = $this->mMchoilctl->getCtls($mchid);
|
|
|
+ if($success)
|
|
|
+ {
|
|
|
+ if(array_key_exists($setting_quality,$this->mQualities)) {
|
|
|
+ $org = $setting_quality;
|
|
|
+ $qualities = $this->mQualities[$setting_quality];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $org = $setting_quality;
|
|
|
+ $qualities = [$setting_quality];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $org = self::ThirdNormal;
|
|
|
+ $qualities = $this->mQualities[$org];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ elseif(array_key_exists($quality,$this->mQualities)) {
|
|
|
+ $org = $quality;
|
|
|
+ $qualities = $this->mQualities[$quality];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ Log::record("find_quality: cannot find any quality",Log::DEBUG);
|
|
|
+ return [0,[]];
|
|
|
+ }
|
|
|
+
|
|
|
+ $qualities = $this->calc_oil_quality($qualities,$times,$caller);
|
|
|
+
|
|
|
+ return [$org,$qualities];
|
|
|
+ }
|
|
|
+
|
|
|
+ //通过每种类型通道耗时,倒推当前可用通道,并优先走推荐通道.
|
|
|
+ private function calc_oil_quality($qualities, $times, $caller)
|
|
|
+ {
|
|
|
+ $result = [];
|
|
|
+ $total_times = 0;
|
|
|
+ foreach ($qualities as $quality)
|
|
|
+ {
|
|
|
+ $total_times += $caller->calc_times($quality);
|
|
|
+
|
|
|
+ if($total_times > $times) {
|
|
|
+ $result[] = $quality;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Log::record("calc_oil_quality result = " . implode($result),Log::DEBUG);
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
private function mobile_quality($mchid,$quality,$times,$used_time): array
|
|
|
{
|
|
|
if($quality == 0)
|
|
|
{
|
|
|
- [$sucdess,$setting_quality,$time_out] = $this->mMchctl->getCtls($mchid);
|
|
|
- if($sucdess)
|
|
|
+ [$success,$setting_quality,$time_out] = $this->mMchPhonectl->getCtls($mchid);
|
|
|
+ if($success)
|
|
|
{
|
|
|
if(array_key_exists($setting_quality,$this->mQualities)) {
|
|
|
$org = $setting_quality;
|
|
@@ -77,7 +132,7 @@ class Quality
|
|
|
elseif(array_key_exists($quality,$this->mQualities)) {
|
|
|
$org = $quality;
|
|
|
$qualities = $this->mQualities[$quality];
|
|
|
- [$sucdess, $setting_quality, $time_out] = $this->mMchctl->getCtls($mchid);
|
|
|
+ [$success, $setting_quality, $time_out] = $this->mMchPhonectl->getCtls($mchid);
|
|
|
}
|
|
|
else {
|
|
|
Log::record("find_quality: cannot find any quality",Log::DEBUG);
|
|
@@ -89,13 +144,13 @@ class Quality
|
|
|
}
|
|
|
|
|
|
$max_times = $this->mSpeeds[$org]['retry_times'];
|
|
|
- $qualities = $this->calc_quality($qualities,$times,$used_time,$time_out,$max_times);
|
|
|
+ $qualities = $this->calc_phone_quality($qualities,$times,$used_time,$time_out,$max_times);
|
|
|
|
|
|
return [$org,$qualities];
|
|
|
}
|
|
|
|
|
|
//通过每种类型通道耗时,倒推当前可用通道,并优先走推荐通道.
|
|
|
- private function calc_quality($qualities, $times, $used_time, $time_out, $max_times)
|
|
|
+ private function calc_phone_quality($qualities, $times, $used_time, $time_out, $max_times)
|
|
|
{
|
|
|
$left_time = $time_out - $used_time;
|
|
|
if($left_time <= 0 || $max_times <= $times) return [];
|