broadcast.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2017/12/2
  6. * Time: 下午7:27
  7. */
  8. namespace async;
  9. use push_helper;
  10. use order_helper;
  11. use member_info;
  12. use Exception;
  13. use bonus;
  14. use bonus_helper;
  15. use Log;
  16. use util;
  17. class broadcast
  18. {
  19. private $mFilters;
  20. private $mOperator;
  21. private $mSender;
  22. private $mSmstype;
  23. public function __construct($filters, operator $operator = null, sender $sender = null,$sms_type = null)
  24. {
  25. $this->mFilters = $filters;
  26. $this->mOperator = $operator;
  27. $this->mSender = $sender;
  28. $this->mSmstype = $sms_type;
  29. }
  30. public function run()
  31. {
  32. $params = params_table::instance()->find_params($this->mSmstype);
  33. $mod_member = Model('member');
  34. $i = 0;
  35. while (true)
  36. {
  37. $start = $i * 1000;
  38. $items = $mod_member->field('*')->order('member_id asc')->limit("{$start},1000")->select();
  39. if(empty($items)) break;
  40. $i++;
  41. $match_users = [];
  42. foreach ($items as $item)
  43. {
  44. $minfo = new member_info($item);
  45. if($this->filtrate($minfo)) {
  46. $match_users[] = $minfo;
  47. }
  48. }
  49. $ret = $this->mOperator->operate($match_users,$params);
  50. if($ret != false) {
  51. $this->mSender->run($match_users,$ret);
  52. }
  53. }
  54. }
  55. public function count()
  56. {
  57. $mod_member = Model('member');
  58. $count = 0;
  59. $i = 0;
  60. while (true)
  61. {
  62. $start = $i * 1000;
  63. $items = $mod_member->field('*')->order('member_id asc')->limit("{$start},1000")->select();
  64. if(empty($items)) break;
  65. $i++;
  66. foreach ($items as $item)
  67. {
  68. $minfo = new member_info($item);
  69. if($this->filtrate($minfo)) {
  70. $count++;
  71. }
  72. }
  73. }
  74. return $count;
  75. }
  76. private function filtrate(member_info $minfo)
  77. {
  78. foreach ($this->mFilters as $filter)
  79. {
  80. if($filter->filtrate($minfo) == false) {
  81. return false;
  82. }
  83. }
  84. return true;
  85. }
  86. }