123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <?php
- /**
- * Created by PhpStorm.
- * User: stanley-king
- * Date: 2017/12/2
- * Time: 下午7:27
- */
- namespace async;
- use push_helper;
- use order_helper;
- use member_info;
- use Exception;
- use bonus;
- use bonus_helper;
- use Log;
- use util;
- class broadcast
- {
- private $mFilters;
- private $mOperator;
- private $mSender;
- private $mSmstype;
- public function __construct($filters, operator $operator = null, sender $sender = null,$sms_type = null)
- {
- $this->mFilters = $filters;
- $this->mOperator = $operator;
- $this->mSender = $sender;
- $this->mSmstype = $sms_type;
- }
- public function run()
- {
- $params = params_table::instance()->find_params($this->mSmstype);
- $mod_member = Model('member');
- $i = 0;
- while (true)
- {
- $start = $i * 1000;
- $items = $mod_member->field('*')->order('member_id asc')->limit("{$start},1000")->select();
- if(empty($items)) break;
- $i++;
- $match_users = [];
- foreach ($items as $item)
- {
- $minfo = new member_info($item);
- if($this->filtrate($minfo)) {
- $match_users[] = $minfo;
- }
- }
- $ret = $this->mOperator->operate($match_users,$params);
- if($ret != false) {
- $this->mSender->run($match_users,$ret);
- }
- }
- }
- public function count()
- {
- $mod_member = Model('member');
- $count = 0;
- $i = 0;
- while (true)
- {
- $start = $i * 1000;
- $items = $mod_member->field('*')->order('member_id asc')->limit("{$start},1000")->select();
- if(empty($items)) break;
- $i++;
- foreach ($items as $item)
- {
- $minfo = new member_info($item);
- if($this->filtrate($minfo)) {
- $count++;
- }
- }
- }
- return $count;
- }
- private function filtrate(member_info $minfo)
- {
- foreach ($this->mFilters as $filter)
- {
- if($filter->filtrate($minfo) == false) {
- return false;
- }
- }
- return true;
- }
- }
|