mTimesConfig = []; $this->mCurRatios = []; } public function load() { global $config; $this->mTimesConfig = $config['merchant_retry_times'] ?? []; } public function total($mchid) { if(array_key_exists($mchid,$this->mTimesConfig)) { $items = $this->mTimesConfig[$mchid]['qualities']; $times = 0; $secs = 0; foreach ($items as $quality => $val) { $times += $val['times'] ?? 1; $secs += $val['secs'] ?? 180; } return [true,$times,$secs]; } else { return [false,0,0]; } } public function times($mchid,$quality) { if(array_key_exists($mchid,$this->mTimesConfig)) { $items = $this->mTimesConfig[$mchid]['qualities'] ?? []; if(array_key_exists($quality,$items)) { return $items[$quality]['times']; } } return false; } public function seconds($mchid,$quality) { if(array_key_exists($mchid,$this->mTimesConfig)) { $items = $this->mTimesConfig[$mchid]['qualities'] ?? []; if(array_key_exists($quality,$items)) { return $items[$quality]['secs']; } } return false; } public function exist($mchid) { if (array_key_exists($mchid, $this->mTimesConfig)) { return true; } else { return false; } } public function update($ratios) { Log::record(__METHOD__,Log::DEBUG); if(!empty($ratios)) { $this->mCurRatios = $ratios; } } private function lower_ratio($mchid) { $lower_ratio = $this->mTimesConfig[$mchid]['lower_ratio'] ?? []; return [$lower_ratio['ratio'],$lower_ratio['period']]; } private function cur_ratio($mchid,$period) { $mratios = $this->mCurRatios; if(array_key_exists($mchid,$mratios)) { $mratios = $mratios[$mchid]; if(array_key_exists($period,$mratios)) { return $mratios[$period]; } } return 1.0; } public function ratio_match($mchid) { [$ratio,$period] = $this->lower_ratio($mchid); $cur_ratio = $this->cur_ratio($mchid,$period); return $cur_ratio >= $ratio; } }