mratio_control.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace refill;
  3. use Log;
  4. class mratio_control
  5. {
  6. private $mTimesConfig;
  7. private $mCurRatios;
  8. public function __construct()
  9. {
  10. $this->mTimesConfig = [];
  11. $this->mCurRatios = [];
  12. }
  13. public function load()
  14. {
  15. global $config;
  16. $this->mTimesConfig = $config['merchant_retry_times'] ?? [];
  17. }
  18. public function total($mchid)
  19. {
  20. if(array_key_exists($mchid,$this->mTimesConfig))
  21. {
  22. $items = $this->mTimesConfig[$mchid]['qualities'];
  23. $times = 0;
  24. $secs = 0;
  25. foreach ($items as $quality => $val) {
  26. $times += $val['times'] ?? 1;
  27. $secs += $val['secs'] ?? 180;
  28. }
  29. return [true,$times,$secs];
  30. } else {
  31. return [false,0,0];
  32. }
  33. }
  34. public function times($mchid,$quality)
  35. {
  36. if(array_key_exists($mchid,$this->mTimesConfig))
  37. {
  38. $items = $this->mTimesConfig[$mchid]['qualities'] ?? [];
  39. if(array_key_exists($quality,$items)) {
  40. return $items[$quality]['times'];
  41. }
  42. }
  43. return false;
  44. }
  45. public function seconds($mchid,$quality)
  46. {
  47. if(array_key_exists($mchid,$this->mTimesConfig))
  48. {
  49. $items = $this->mTimesConfig[$mchid]['qualities'] ?? [];
  50. if(array_key_exists($quality,$items)) {
  51. return $items[$quality]['secs'];
  52. }
  53. }
  54. return false;
  55. }
  56. public function exist($mchid)
  57. {
  58. if (array_key_exists($mchid, $this->mTimesConfig)) {
  59. return true;
  60. } else {
  61. return false;
  62. }
  63. }
  64. public function update($ratios)
  65. {
  66. Log::record(__METHOD__,Log::DEBUG);
  67. if(!empty($ratios)) {
  68. $this->mCurRatios = $ratios;
  69. }
  70. }
  71. private function lower_ratio($mchid)
  72. {
  73. $lower_ratio = $this->mTimesConfig[$mchid]['lower_ratio'] ?? [];
  74. return [$lower_ratio['ratio'],$lower_ratio['period']];
  75. }
  76. private function cur_ratio($mchid,$period)
  77. {
  78. $mratios = $this->mCurRatios;
  79. if(array_key_exists($mchid,$mratios)) {
  80. $mratios = $mratios[$mchid];
  81. if(array_key_exists($period,$mratios)) {
  82. return $mratios[$period];
  83. }
  84. }
  85. return 1.0;
  86. }
  87. public function ratio_match($mchid)
  88. {
  89. [$ratio,$period] = $this->lower_ratio($mchid);
  90. $cur_ratio = $this->cur_ratio($mchid,$period);
  91. return $cur_ratio >= $ratio;
  92. }
  93. }