pubevent.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace message;
  3. require_once(BASE_HELPER_PATH . '/refill/policy/PolicyUtil.php');
  4. use refill;
  5. use Log;
  6. class pubevent
  7. {
  8. public function onRefillBefore()
  9. {
  10. $this->_update_mixed_cfg();
  11. }
  12. private function _update_mixed_cfg()
  13. {
  14. $read_cfg = function ($cfg)
  15. {
  16. $lower_ratio = $cfg['lower_ratio'] ?? [];
  17. if (empty($lower_ratio)) {
  18. [$ratio, $period] = [0.0, 3600];
  19. } else {
  20. [$ratio, $period] = [$lower_ratio['ratio'], $lower_ratio['period']];
  21. }
  22. $profit_ratio = $cfg['profit_ratio'] ?? 0.0;
  23. $profit_formula = $cfg['profit_formula'] ?? 'qts';
  24. return ['ratio' => $ratio, 'period' => $period, 'profit_ratio' => $profit_ratio, 'profit_formula' => $profit_formula];
  25. };
  26. $read_transfer_cfg = function ($mchid,$cfg)
  27. {
  28. if(empty($cfg)) {
  29. return false;
  30. }
  31. $transfer_cfg = unserialize($cfg);
  32. if($transfer_cfg === false) {
  33. return false;
  34. }
  35. $opened = intval($transfer_cfg['transfer_opened']);
  36. $tmchid = intval($transfer_cfg['transfer_mchid']);
  37. if ($opened == 1 and $tmchid > 0 and $tmchid != $mchid) {
  38. return $tmchid;
  39. } else {
  40. return false;
  41. }
  42. };
  43. $mch_configs = function () use ($read_cfg,$read_transfer_cfg)
  44. {
  45. $result = [];
  46. $transfer_mchids = [];
  47. $i = 0;
  48. while (true)
  49. {
  50. $start = $i * 100;
  51. $items = Model()->table('merchant')
  52. ->where(['mchid' => ['gt', 0], 'merchant_state' => 1])
  53. ->field('mchid,retry_times_cfg,quality,timeout_transfer_cfg,transfer_cfg')
  54. ->order('mchid asc')->limit("{$start},100")->select();
  55. if(empty($items)) {
  56. break;
  57. }
  58. $i++;
  59. foreach ($items as $item)
  60. {
  61. $mchid = intval($item['mchid']);
  62. $quality = intval($item['quality']);
  63. if($mchid <= 0 || $quality <= 0) continue;
  64. if (!refill\PolicyUtil::mixed_quality($quality)) {
  65. continue;
  66. }
  67. $retry_times_cfg = unserialize($item['retry_times_cfg']);
  68. if(empty($retry_times_cfg)) continue;
  69. $result[$mchid] = $read_cfg($retry_times_cfg);
  70. $mchids = [];
  71. $tid = $read_transfer_cfg($mchid, $item['transfer_cfg']);
  72. if($tid !== false) {
  73. $mchids[] = $tid;
  74. }
  75. $tid = $read_transfer_cfg($mchid, $item['transfer_cfg']);
  76. if($tid !== false) {
  77. $mchids[] = $tid;
  78. }
  79. if(!empty($mchids)) {
  80. $mchids = array_unique($mchids);
  81. $transfer_mchids[$mchid] = $mchids;
  82. }
  83. }
  84. }
  85. return [$result,$transfer_mchids];
  86. };
  87. [$result,$transfer_mchids] = $mch_configs();
  88. $val = json_encode($result);
  89. Log::record("stat-merchant-mixed val = {$val}",Log::DEBUG);
  90. wkcachex('stat-merchant-mixed', $val, 'refill-');
  91. $val = json_encode($transfer_mchids);
  92. Log::record("stat-merchant-transfer val = {$val}",Log::DEBUG);
  93. wkcachex('stat-merchant-transfer', $val, 'refill-');
  94. }
  95. }