transfer.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace refill;
  3. class transfer
  4. {
  5. private $mMchid2Infos;
  6. public function __construct()
  7. {
  8. $this->load();
  9. }
  10. private static $stInstance = null;
  11. public static function instance()
  12. {
  13. if (self::$stInstance == null) {
  14. self::$stInstance = new transfer();
  15. }
  16. return self::$stInstance;
  17. }
  18. public function load()
  19. {
  20. $mch_checker = function ($mchid) {
  21. $item = Model()->table('merchant')->field('mchid,admin_id')->where(['mchid' => $mchid])->find();
  22. return intval($item['admin_id']);
  23. };
  24. $this->mMchid2Infos = [];
  25. $i = 0;
  26. while (true)
  27. {
  28. $start = $i * 1000;
  29. $items = Model()->table('merchant')->field('mchid,transfer_cfg')->order('mchid asc')->limit("{$start},1000")->select();
  30. if(empty($items)) {
  31. return;
  32. }
  33. $i++;
  34. foreach ($items as $item)
  35. {
  36. $transfer_cfg = $item['transfer_cfg'];
  37. if(empty($transfer_cfg)) {
  38. continue;
  39. }
  40. $transfer_cfg = unserialize($transfer_cfg);
  41. if($transfer_cfg === false) {
  42. continue;
  43. }
  44. $mchid = intval($item['mchid']);
  45. $opened = intval($transfer_cfg['transfer_opened']);
  46. $tmchid = intval($transfer_cfg['transfer_mchid']);
  47. $lower_time = intval($transfer_cfg['transfer_lowertime']);
  48. $upper_time = intval($transfer_cfg['transfer_uppertime']);
  49. $card_types = $transfer_cfg['card_types'] ?? [];
  50. if ($opened == 1 && $tmchid > 0 && $tmchid != $mchid && $lower_time > 0 && $upper_time > $lower_time)
  51. {
  52. $admin_id = $mch_checker($tmchid);
  53. if($admin_id > 0) {
  54. $this->mMchid2Infos[$mchid] = ['transfer_mchid' => $tmchid, 'admin_id' => $admin_id,
  55. 'lower_time' => $lower_time, 'upper_time' => $upper_time,'card_types' => $card_types];
  56. }
  57. }
  58. }
  59. }
  60. }
  61. public function need_transfer($mchid,$order_time,$card_type)
  62. {
  63. if(array_key_exists($mchid,$this->mMchid2Infos))
  64. {
  65. $transfer_cfg = $this->mMchid2Infos[$mchid];
  66. $lower_time = $transfer_cfg['lower_time'];
  67. $upper_time = $transfer_cfg['upper_time'];
  68. $card_types = $transfer_cfg['card_types'];
  69. $elpse_secs = time() - $order_time;
  70. if ($elpse_secs >= $lower_time && $elpse_secs < $upper_time) {
  71. return true;
  72. } elseif (in_array($card_type, $card_types)) {
  73. return false;
  74. } else {
  75. return false;
  76. }
  77. }
  78. return false;
  79. }
  80. public function transfer_info($mchid)
  81. {
  82. if(array_key_exists($mchid,$this->mMchid2Infos))
  83. {
  84. $transfer_cfg = $this->mMchid2Infos[$mchid];
  85. $transfer_mchid = $transfer_cfg['transfer_mchid'];
  86. $admin_id = $transfer_cfg['admin_id'];
  87. return [$transfer_mchid,$admin_id];
  88. }
  89. return [0,0];
  90. }
  91. public function transfers()
  92. {
  93. return $this->mMchid2Infos;
  94. }
  95. public function transfer_ids()
  96. {
  97. $result = [];
  98. foreach ($this->mMchid2Infos as $item) {
  99. $result[] = $item['transfer_mchid'];
  100. }
  101. return $result;
  102. }
  103. }