123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?php
- namespace refill;
- use Log;
- class mratio_control
- {
- private $mTimesConfig;
- private $mCurRatios;
- public function __construct()
- {
- $this->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;
- }
- }
|