|
@@ -46,12 +46,18 @@ class policy extends ProviderManager implements IPolicy
|
|
|
$names[] = $provider->name();
|
|
|
}
|
|
|
|
|
|
- [$names,$overload] = $this->mChannelControl->match($names,$spec,$card_type,$quality);
|
|
|
+ $name_overloads = $this->mChannelControl->match($names,$spec,$card_type,$quality);
|
|
|
Log::record("policy::find_providers match result=" . implode(',',$names),Log::DEBUG);
|
|
|
|
|
|
$result = [];
|
|
|
- foreach ($names as $name)
|
|
|
+ foreach ($name_overloads as $name => $overload)
|
|
|
{
|
|
|
+ if(!isset($first)) {
|
|
|
+ $first = $overload;
|
|
|
+ }
|
|
|
+
|
|
|
+ if($overload) continue;
|
|
|
+
|
|
|
foreach ($providers as $provider)
|
|
|
{
|
|
|
if($name == $provider->name()) {
|
|
@@ -60,7 +66,11 @@ class policy extends ProviderManager implements IPolicy
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return [$result,$overload];
|
|
|
+ if(!isset($first)) {
|
|
|
+ $first = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return [$result,$first];
|
|
|
}
|
|
|
|
|
|
public function price($mchid,$spec,$card_type,$quality)
|
|
@@ -78,26 +88,30 @@ class policy extends ProviderManager implements IPolicy
|
|
|
foreach ($qualities as $quality)
|
|
|
{
|
|
|
$price = $this->mPrices->price($mchid,$card_type,$spec,$quality);
|
|
|
- if($price === false) continue;
|
|
|
-
|
|
|
- [$names,$overload] = $this->find_providers($spec,$card_type,$quality);
|
|
|
- if($overload) {
|
|
|
- Log::record("Policy::find_quality:{$quality}-{$spec}-{$card_type} is ok",Log::DEBUG);
|
|
|
- return [$org_quality,$quality];
|
|
|
- }
|
|
|
- if(!empty($names)) {
|
|
|
- Log::record("Policy::find_quality:{$quality}-{$spec}-{$card_type} is ok",Log::DEBUG);
|
|
|
- return [$org_quality,$quality];
|
|
|
+ if($price === false) {
|
|
|
+ Log::record("{$mchid} 没有协商 quality = {$quality} 价格",Log::DEBUG);
|
|
|
+ continue;
|
|
|
}
|
|
|
- else {
|
|
|
- Log::record("Policy::find_quality:{$quality}-{$spec}-{$card_type} is fail",Log::DEBUG);
|
|
|
+
|
|
|
+ [$providers,$overload] = $this->find_providers($spec,$card_type,$quality);
|
|
|
+ if (!empty($providers))
|
|
|
+ {
|
|
|
+ if (!$overload) {
|
|
|
+ Log::record("Policy::find_quality:{$quality}-{$spec}-{$card_type} is ok", Log::DEBUG);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ Log::record("Policy::find_quality:{$quality}-{$spec}-{$card_type} is overload", Log::DEBUG);
|
|
|
+ }
|
|
|
+
|
|
|
+ return [$org_quality, $quality];
|
|
|
+ } else {
|
|
|
+ Log::record("Policy::find_quality:{$quality}-{$spec}-{$card_type} is fail", Log::DEBUG);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return [$org_quality,0];
|
|
|
}
|
|
|
|
|
|
-
|
|
|
public function allow($mchid,$card_type,$amount,$quality) : bool
|
|
|
{
|
|
|
$reader = function () {
|