|
@@ -83,13 +83,36 @@ class Quality
|
|
|
return $this->mMchPhonectl->mechants_quality();
|
|
|
}
|
|
|
|
|
|
- public function find_quality($mchid, $card_type, $spec, $org_quality, $cur_quality, $used_times, $used_time, $caller): array
|
|
|
+ public function find_quality(order $order, $caller): array
|
|
|
{
|
|
|
- if($card_type == mtopcard\ChinaMobileCard || $card_type == mtopcard\ChinaUnicomCard || $card_type == mtopcard\ChinaTelecomCard) {
|
|
|
- return $this->mobile_quality($mchid, $card_type, $spec, $org_quality, $cur_quality, $used_times, $used_time);
|
|
|
+ $card_type = $order->card_type();
|
|
|
+ $is_phone = function ($card_type)
|
|
|
+ {
|
|
|
+ $types = [mtopcard\ChinaMobileCard, mtopcard\ChinaUnicomCard, mtopcard\ChinaTelecomCard];
|
|
|
+ if (in_array($card_type, $types)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ $is_oil = function ($card_type)
|
|
|
+ {
|
|
|
+ $types = [mtopcard\PetroChinaCard, mtopcard\SinopecCard];
|
|
|
+ if (in_array($card_type, $types)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ if($is_phone($card_type)) {
|
|
|
+ return $this->mobile_quality($order);
|
|
|
}
|
|
|
- elseif($card_type == mtopcard\PetroChinaCard || $card_type == mtopcard\SinopecCard) {
|
|
|
- [$org,$qualities] = $this->oil_quality($mchid, $org_quality, $used_times,$used_time,$caller);
|
|
|
+ elseif($is_oil($card_type)) {
|
|
|
+ [$org, $qualities] = $this->oil_quality($order, $caller);
|
|
|
return [$org,$qualities,false];
|
|
|
}
|
|
|
else {
|
|
@@ -97,8 +120,13 @@ class Quality
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private function oil_quality($mchid, $quality, $times,$used_time,$caller): array
|
|
|
+ private function oil_quality(order $order, $caller): array
|
|
|
{
|
|
|
+ $mchid = $order->mchid();
|
|
|
+ $quality = $order->org_quality();
|
|
|
+ $times = $order->commit_times();
|
|
|
+ $used_time = $order->elapse_secs();
|
|
|
+
|
|
|
Log::record("oil_quality mchid={$mchid},quality={$quality},times={$times}",Log::DEBUG);
|
|
|
if($quality == 0)
|
|
|
{
|
|
@@ -159,17 +187,19 @@ class Quality
|
|
|
}
|
|
|
|
|
|
|
|
|
- private function mobile_quality($mchid, $card_type, $spec, $org_quality, $cur_quality, $used_times, $used_time): array
|
|
|
+ private function mobile_quality(order $order): array
|
|
|
{
|
|
|
+ $mchid = $order->mchid();
|
|
|
+ $org_quality = $order->org_quality();
|
|
|
+
|
|
|
if($org_quality == 0)
|
|
|
{
|
|
|
[$success,$setting_quality,$time_out] = $this->mMchPhonectl->getCtls($mchid);
|
|
|
if($success)
|
|
|
{
|
|
|
- if(array_key_exists($setting_quality,$this->mQualities)) {
|
|
|
+ if (array_key_exists($setting_quality, $this->mQualities)) {
|
|
|
$org_quality = $setting_quality;
|
|
|
- }
|
|
|
- else {
|
|
|
+ } else {
|
|
|
$org_quality = $setting_quality;
|
|
|
}
|
|
|
}
|
|
@@ -194,23 +224,31 @@ class Quality
|
|
|
$max_times = $this->max_times($mchid, $org_quality, $qualities);
|
|
|
if ($this->mRatioCtl->exist($mchid)) {
|
|
|
Log::record("ratio_phone_quality exist=true",Log::DEBUG);
|
|
|
- [$qualities,$match_ratio] = $this->ratio_phone_quality($org_quality, $qualities, $cur_quality, $used_times, $used_time, $mchid, $card_type, $spec);
|
|
|
+ [$qualities, $match_ratio] = $this->ratio_phone_quality($order, $qualities);
|
|
|
return [$org_quality, $qualities,$match_ratio];
|
|
|
} else {
|
|
|
$fMixed = PolicyUtil::mixed_quality($org_quality);
|
|
|
- $qualities = $this->calc_phone_quality($qualities, $fMixed, $cur_quality, $used_times, $used_time, $time_out, $max_times, $mchid);
|
|
|
+ $qualities = $this->calc_phone_quality($order, $qualities, $fMixed, $time_out, $max_times);
|
|
|
return [$org_quality, $qualities,false];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private function ratio_phone_quality($org_quality, $all_qualities, $cur_quality, $used_times, $used_time, $mchid, $card_type, $spec)
|
|
|
+ private function ratio_phone_quality(order $order, $all_qualities)
|
|
|
{
|
|
|
+ $mchid = $order->mchid();
|
|
|
+ $org_quality = $order->org_quality();
|
|
|
+
|
|
|
+ $spec = $order->spec();
|
|
|
+ $card_type = $order->card_type();
|
|
|
+ $cur_quality = $order->cur_quality();
|
|
|
+ $used_times = $order->commit_times();
|
|
|
+ $used_time = $order->elapse_secs();
|
|
|
+
|
|
|
[$succ,$max_times,$time_out] = $this->mRatioCtl->total($mchid,$all_qualities);
|
|
|
|
|
|
$left_time = $time_out - $used_time;
|
|
|
- Log::record("left_time = {$left_time} used_time={$used_time}",Log::DEBUG);
|
|
|
+ Log::record("left_time=$left_time used_time=$used_time max_times=$max_times used_times=$used_times",Log::DEBUG);
|
|
|
if ($left_time <= 0 || $max_times <= $used_times) {
|
|
|
- Log::record("max_times=$max_times used_times=$used_times",Log::DEBUG);
|
|
|
return [[],false];
|
|
|
}
|
|
|
|
|
@@ -287,10 +325,11 @@ class Quality
|
|
|
$result = [];
|
|
|
|
|
|
$qualities = array_reverse($qualities);
|
|
|
- foreach ($qualities as $quality) {
|
|
|
+ foreach ($qualities as $quality)
|
|
|
+ {
|
|
|
$per_secs = $this->mSpeeds[$quality]['per_secs'];
|
|
|
$qsecs = $this->mRatioCtl->seconds($mchid, $quality);
|
|
|
- Log::record("left_time={$left_time} quality={$quality} secs={$qsecs}", Log::DEBUG);
|
|
|
+ Log::record("left_time=$left_time quality=$quality secs=$qsecs", Log::DEBUG);
|
|
|
|
|
|
if ($qsecs == false) continue;
|
|
|
|
|
@@ -339,18 +378,18 @@ class Quality
|
|
|
|
|
|
if($used_times > 0)
|
|
|
{
|
|
|
- $qualities_log("ratio_phone_quality {$mchid}-{$card_type}-{$spec} all_qualities", $all_qualities);
|
|
|
+ $qualities_log("ratio_phone_quality $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("ratio_phone_quality mchid={$mchid} must calc next quality match_ratio={$match_ratio} can_last={$can_last}", Log::DEBUG);
|
|
|
+ Log::record("ratio_phone_quality mchid=$mchid must calc next quality match_ratio=$match_ratio can_last=$can_last", Log::DEBUG);
|
|
|
|
|
|
$times_qualities = $times_checker($match_ratio, $all_qualities, $used_times);
|
|
|
- $qualities_log("ratio_phone_quality {$mchid}-{$card_type}-{$spec} times_qualities", $times_qualities);
|
|
|
+ $qualities_log("ratio_phone_quality $mchid-$card_type-$spec times_qualities", $times_qualities);
|
|
|
|
|
|
$timeout_qualities = $timeout_checker($match_ratio, $all_qualities, $left_time);
|
|
|
- $qualities_log("ratio_phone_quality {$mchid}-{$card_type}-{$spec} timeout_qualities", $timeout_qualities);
|
|
|
+ $qualities_log("ratio_phone_quality $mchid-$card_type-$spec timeout_qualities", $timeout_qualities);
|
|
|
|
|
|
$pre_qualities = array_intersect($times_qualities, $timeout_qualities, $all_qualities);
|
|
|
- $qualities_log("ratio_phone_quality {$mchid}-{$card_type}-{$spec} pre_qualities", $pre_qualities);
|
|
|
+ $qualities_log("ratio_phone_quality $mchid-$card_type-$spec pre_qualities", $pre_qualities);
|
|
|
|
|
|
|
|
|
if (!$timeing_checker($pre_qualities)) {
|
|
@@ -358,7 +397,7 @@ class Quality
|
|
|
Log::record("calc_quality timeing_checker result is empty", Log::DEBUG);
|
|
|
}
|
|
|
|
|
|
- $qualities_log("ratio_phone_quality {$mchid}-{$card_type}-{$spec} after timeing_checker qualities", $pre_qualities);
|
|
|
+ $qualities_log("ratio_phone_quality $mchid-$card_type-$spec after timeing_checker qualities", $pre_qualities);
|
|
|
$cur_qualities = $pre_qualities;
|
|
|
|
|
|
if (!$can_last) {
|
|
@@ -371,9 +410,7 @@ class Quality
|
|
|
$cur_qualities = $all_qualities;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
return [$cur_qualities,$match_ratio];
|
|
|
-
|
|
|
}
|
|
|
|
|
|
private function max_times($mchid,$quality,$qualities)
|
|
@@ -387,12 +424,17 @@ class Quality
|
|
|
}
|
|
|
|
|
|
//通过每种类型通道耗时,倒推当前可用通道,并优先走推荐通道.
|
|
|
- private function calc_phone_quality($qualities,$fMixed, $cur_quality, $times, $used_time, $time_out, $max_times, $mchid)
|
|
|
+ private function calc_phone_quality(order $order, $qualities,$fMixed,$time_out, $max_times)
|
|
|
{
|
|
|
+ $mchid = $order->mchid();
|
|
|
+ $cur_quality = $order->cur_quality();
|
|
|
+ $used_times = $order->commit_times();
|
|
|
+ $used_time = $order->elapse_secs();
|
|
|
+
|
|
|
$left_time = $time_out - $used_time;
|
|
|
if(!$fMixed)
|
|
|
{
|
|
|
- if($left_time <= 0 || $max_times <= $times) {
|
|
|
+ if($left_time <= 0 || $max_times <= $used_times) {
|
|
|
return [];
|
|
|
}
|
|
|
}
|
|
@@ -455,9 +497,9 @@ class Quality
|
|
|
return true;
|
|
|
};
|
|
|
|
|
|
- if($times > 0)
|
|
|
+ if($used_times > 0)
|
|
|
{
|
|
|
- $qualities = $times_checker($qualities,$times);
|
|
|
+ $qualities = $times_checker($qualities,$used_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);
|