Example #1
0
 private function pFilter($filter)
 {
     $this->info('Filter: #' . $filter->id . ' count:' . $filter->count . ' search offset: ' . $filter->search_offset . ' founded:' . $filter->users->count());
     $this->info(print_r($filter->filter, true));
     switch ($this->ask('action: ')) {
         case 'd':
             $filter->count = 1000;
             $filter->save();
             $this->info('deleted');
             break;
         case "r":
             $id = $filter->id;
             $date = Carbon::now()->addSecond(5);
             \Queue::later($date, function ($job) use($id) {
                 $job->delete();
                 \Artisan::call('fetch:filter', ['id' => $id]);
             });
             $this->info('Run filter');
             break;
         case "m":
             $filter->attachFromLoad($filter->users()->count());
             $this->info('Attached: ' . $filter->users()->count());
             break;
     }
 }
Example #2
0
 public function later($time, $view, $data)
 {
     if ($this->driver == 'laravel') {
         Queue::later($time, $view, $data, function ($message) use($data) {
             $message->to($data['to'])->from($data['from'])->subject($data['subject']);
         });
     }
 }
Example #3
0
 private function startFetchingFilter($_filter)
 {
     $id = $_filter->id;
     $date = Carbon::now()->addSecond(1);
     \Queue::later($date, function ($job) use($id) {
         $job->delete();
         \Artisan::call('fetch:filter', ['id' => $id]);
     });
 }
Example #4
0
 public function post()
 {
     if (Input::has('api_key') && Input::has('content')) {
         $api_key = Input::get('api_key');
         $content = Input::get('content');
         $settings = Settings::where('api_key', '=', $api_key)->first();
         $user_id = $settings->user_id;
         $default_networks = json_decode($settings->default_networks, true);
         $schedule = Carbon::now();
         if (Input::has('queue')) {
             $schedule_id = $settings->schedule_id;
             $interval = Schedule::find($schedule_id);
             if ($interval->rule == 'add') {
                 $schedule = $current_datetime->modify('+ ' . $interval->period);
             } else {
                 if ($interval->rule == 'random') {
                     $current_day = date('d');
                     $from_datetime = Carbon::now();
                     $to_datetime = $from_datetime->copy()->modify('+ ' . $interval->period);
                     $days_to_add = $from_datetime->diffInDays($to_datetime);
                     $day = mt_rand($current_day, $current_day + $days_to_add);
                     $hour = mt_rand(1, 23);
                     $minute = mt_rand(0, 59);
                     $second = mt_rand(0, 59);
                     //year, month and timezone is null
                     $schedule = Carbon::create(null, null, $day, $hour, $minute, $second, null);
                 }
             }
             if (empty($schedule)) {
                 $schedule = $current_datetime->addHours(1);
             }
         }
         if (!empty($default_networks)) {
             $post = new Post();
             $post->user_id = $user_id;
             $post->content = $content;
             $post->date_time = $schedule;
             $post->save();
             $post_id = $post->id;
             foreach ($default_networks as $network_id) {
                 $post_network = new PostNetwork();
                 $post_network->user_id = $user_id;
                 $post_network->post_id = $post_id;
                 $post_network->network_id = $network_id;
                 $post_network->status = 1;
                 $post_network->save();
             }
             Queue::later($schedule, 'SendPost@fire', array('post_id' => $post_id));
             $response_data = array('type' => 'success', 'text' => 'Your post was scheduled! It will be published on ' . $schedule->format('l jS \\o\\f F \\a\\t h:i A'));
             return $response_data;
         }
     }
 }
Example #5
0
 public function confirmRefundOrderById($orderId, $data)
 {
     $time = time();
     $errCode = 0;
     $errMsg = '';
     \DB::beginTransaction();
     do {
         try {
             $order = RefundModel::find($orderId);
             if (!$order) {
                 throw new PayException(ErrCode::ERR_ORDER_NO_EXISTS);
             } elseif ($order->status == RefundModel::STATUS_SUCCESS) {
                 $errCode = 1;
                 break;
             }
             if (isset($data['ser_refund_no']) && !empty($data['ser_refund_no'])) {
                 $order->ser_refund_no = $data['ser_refund_no'];
             }
             if (isset($data['notify_log'])) {
                 $order->ser_notify_log = $data['notify_log'];
             }
             if (isset($data['notify_status'])) {
                 $order->ser_notify_status = $data['notify_status'];
             }
             if (isset($data['seller_partner'])) {
                 $order->seller_partner = $data['seller_partner'];
             }
             $order->refund_time = $data['refund_time'];
             $order->ser_notify_time = $data['notify_time'];
             $order->save();
             AccountBiz::getInstance()->updateUserAccount($order->user_id, RefundModel::DEAL_OUT_REFUND, $order->refund_amount, $order->channel);
         } catch (\Exception $e) {
             $errCode = 1;
         }
     } while (0);
     if ($errCode == 0) {
         \DB::commit();
         if (true !== BusiNotifyBiz::getInstance()->notifyCallback($order, 'refund')) {
             \Queue::later(5, '\\Pay\\Service\\Queue\\BusiNotifyQueue', ['id' => $order->id, 'notify_type' => 'refund']);
         }
         return true;
     } else {
         \DB::rollback();
         return false;
     }
 }
 public function store()
 {
     $limit = 2;
     if (!Input::has('number')) {
         return $this->respondInsufficientPrivileges('No car number');
     }
     $number = Input::get('number');
     $car = Car::where('number', $number)->first();
     if (!$car) {
         return $this->respondNotFound('Car not found');
     }
     $user = $car->user;
     if (!$user) {
         return $this->respondNotFound('User not found');
     }
     if ($user == $this->user) {
         return $this->respondInsufficientPrivileges('Cant send to yourself');
     }
     $emergency = new Emergency(['sender' => $this->user->id, 'receiver' => $user->id, 'number' => $car->number, 'created_at' => Carbon::now(), 'status' => 'отправлено']);
     $emergency->sender_phone = $this->user->phone->number;
     //FIXME later add custom error to apicontroller
     if ($this->user->urgent_calls == 0) {
         return Response::json(['error' => ['message' => 'Вы исчерпали лимит срочных вызовов                   (' . $limit . ' в день)', 'status_code' => 1003]], 403);
     }
     $this->user->urgent_calls--;
     $this->user->emergencies()->save($emergency);
     $this->user->save();
     Queue::later(30, 'smsSender', $emergency);
     Queue::later(60, 'smsChecker', $emergency->id);
     $response['emergencies'] = ['id' => $emergency->id, 'sender' => $emergency->sender, 'created_at' => $emergency->created_at, 'number' => $emergency->number, 'phone_number' => $emergency->sender_phone, 'delivered_at' => $emergency->delivered_at, 'status' => $emergency->status, 'via_sms' => false, 'complained_at' => $emergency->complained_at, 'failed' => $emergency->failed];
     $response['tries'] = $this->user->urgent_calls;
     $urgentCalls = $this->user->urgent_calls;
     $emergency->phone_number = (int) $this->user->phone->number;
     $emergency->receiverU->devices->each(function ($device) use($emergency, $urgentCalls) {
         $stateSender = new StateSender($device->auth_token);
         $stateSender->setEmergencyAdded($emergency, $urgentCalls);
         $stateSender->send();
     });
     // Probably wiser to send state to self as well, and show only by response from state
     //		$emergency->getMembersTokens()->each(function ($token) use($emergency, $urgentCalls) {
     //			$stateSender = new StateSender($token->auth_token);
     //			$stateSender->setEmergencyAdded($emergency, $this->user->urgent_calls);
     //			$stateSender->send();
     //		});
     return $this->respond($response);
 }
 public function test1()
 {
     $this->app->config['queue'] = $this->getBaseConfig([]);
     $this->app->config['database'] = $this->getDatabaseConfig();
     $this->app->config['app'] += ['cipher' => 'AES-256-CBC'];
     $this->app->register('DenisMilovanov\\LaravelQueueMbus\\LaravelQueueMbusServiceProvider');
     $queue = 'test_queue';
     $job = 'add';
     Queue::purge($queue);
     $max = 3;
     $delay = 4;
     $delayOnce = 2;
     // push 1, 2, 3, ... $max - 1
     foreach (range(1, $max - 1) as $i) {
         Queue::push($job, ['num' => $i], $queue);
     }
     // $max delayed
     Queue::later($delay, $job, ['num' => $max], $queue);
     $count = 0;
     $releasedOnce = false;
     $start = time();
     // select 1, 2, 3, ... $max
     Queue::subscribe($queue, function (MbusJob $job) use(&$count, $max, $queue, &$finish, &$releasedOnce, $delayOnce) {
         // let's delay the last one yet another time
         if (!$releasedOnce and $count == $max - 1) {
             $releasedOnce = true;
             $job->release($delayOnce);
             return;
         }
         $count++;
         $this->assertTrue($job->getRawBody()['data']['num'] == $count);
         if ($count == $max) {
             Queue::unsubscribe($queue);
             $finish = time();
         }
     });
     // check delay
     $this->assertTrue($finish - $start >= $delay + $delayOnce);
 }
Example #8
0
 public static function sendMail($incomingMail, $view, $delay)
 {
     $callback = MailWorker::buildQueueCallable(function ($m) use($incomingMail) {
         $m->from($incomingMail->fromAddress, $incomingMail->fromName);
         foreach ($incomingMail->to as $key => $value) {
             $m = $m->to($key, $value);
         }
         foreach ($incomingMail->cc as $key => $value) {
             $m = $m->cc($key);
         }
         foreach ($incomingMail->replyTo as $key => $value) {
             $m = $m->replyTo($key);
         }
         $m->subject($incomingMail->subject);
         foreach ($incomingMail->attachments as $attachment) {
             $m->attach($attachment->filePath, array('as' => $attachment->name . "." . $attachment->extName));
         }
         \Log::info('The mail "' . $incomingMail->subject . '" was sent.');
     });
     $data = array('incomingMail' => $incomingMail);
     \Queue::later($delay, '\\DavinBao\\Mailbox\\MailWorker@handleQueuedMessage', compact('view', 'data', 'callback'), 'low');
 }
 public function getCancel($user, $token)
 {
     switch ($token) {
         case 'now':
             $this->runCancel('', array('id' => $user->id));
             break;
         case 'later':
             $date = Carbon::now()->addMinutes(15);
             Queue::later($date, 'UserController@runCancel', array('id' => $user->id));
             break;
         case 'tomorrow':
             $date = Carbon::tomorrow();
             Queue::later($date, 'UserController@runCancel', array('id' => $user->id));
             break;
         case 'disable':
             if ($user->cancelled) {
                 DB::table('users')->where('id', $user->id)->update(array('confirmed' => true, 'cancelled' => false));
             }
             break;
     }
     Activity::log(array('contentID' => $user->id, 'contentType' => 'account_cancelled', 'description' => $user->id, 'details' => '', 'updated' => $user->id));
     return Redirect::to('user')->with('success', Lang::get('user/user.user_account_updated'));
 }
Example #10
0
 public function confirmTransOrderById($orderId, $data)
 {
     $errCode = 0;
     $errMsg = '';
     \DB::beginTransaction();
     do {
         try {
             $order = TransModel::find($orderId);
             if (!$order) {
                 throw new PayException(ErrCode::ERR_ORDER_NO_EXISTS);
             } elseif ($order->status == TransModel::STATUS_SUCCESS) {
                 $errCode = 1;
                 break;
             }
             if (isset($data['ser_trans_no'])) {
                 $order->ser_trans_no = $data['ser_trans_no'];
             }
             if (isset($data['ser_notify_log'])) {
                 $order->ser_notify_log = $data['ser_notify_log'];
             }
             $order->ser_notify_status = $data['ser_notify_status'];
             $order->pay_time = $data['ser_pay_time'];
             $order->ser_notify_time = $data['ser_pay_time'];
             $order->save();
         } catch (\Exception $e) {
             $errCode = 1;
         }
     } while (0);
     if ($errCode == 0) {
         \DB::commit();
         \Queue::later(5, '\\Pay\\Service\\Queue\\BusiNotifyQueue', ['id' => $order->id, 'notify_type' => 'trans']);
         return true;
     } else {
         \DB::rollback();
         return false;
     }
 }
 /**
  * Generate an album image from a Last.fm URL
  *
  * @param string $url   URL of Last.fm album image
  * @param mixed  $error Error message string
  * 
  * @return  mixed
  */
 public function generateImage($url, $error = false)
 {
     $this->filenameSansPath = $this->username . '_' . $this->number . '_' . $this->result['playcount'] . '_' . md5($this->result['name']) . '.png';
     $this->filename = public_path() . '/' . $this->filenameSansPath;
     if (Cache::has($this->filename)) {
         if (file_exists($this->filename)) {
             Log::info('Loaded cached object', ['file' => $this->filenameSansPath]);
             $image = Image::open($this->filename);
             return $image->encode($this->filename, 90);
         }
     }
     if ($error) {
         // Normally, you'd only come down this path if the function was called by something else forcing an error
         Log::error('There was an error, generate the error image');
         // We had an error, we're a sad panda
         $image = Image::make(public_path() . '/resources/sadpanda.png');
     } else {
         // Pull image from Last.fm and create the Image instance
         try {
             $image = Image::make($url);
         } catch (Exception $e) {
             Log::error('Image path is invalid', ['message' => 'Error: ' . $e->getMessage(), 'url' => $url, 'code' => $e->getCode()]);
             // Go back and generate the error image
             return $this->generateImage(false, 'Unable to locate image');
         }
         // Resize image to 300x300 px, just in case the image is too large/small
         $image->resize(300, 300);
     }
     // Expand image up 36px with the background color with white
     $image->resizeCanvas(0, 36, 'bottom', true, $this->text['colours']['white']);
     // Larger rectangle that forms the border
     $image->rectangle($this->text['colours']['border'], 0, 0, 299, 24, false);
     // Smaller rectangle with the background
     $image->rectangle($this->text['colours']['background'], 1, 1, 298, 23);
     if ($error) {
         $image->text('Error: ' . $error, 7, 17, $this->text['size'], $this->text['colours']['black'], 0, $this->text['fonts']['bold']);
     } else {
         $x = 0;
         // 1. or 2. (etc)
         $image->text($this->number . '.', $x += 7, 17, $this->text['size'], $this->text['colours']['black'], 0, $this->text['fonts']['bold']);
         $bbox = imagettfbbox($this->text['size'], 0, $this->text['fonts']['bold'], $this->number . '.');
         // Artist Name
         $image->text($this->result['artist']['name'], $x += $bbox[2] += 4, 17, $this->text['size'], $this->text['colours']['link'], 0, $this->text['fonts']['normal']);
         $bbox = imagettfbbox($this->text['size'], 0, $this->text['fonts']['normal'], $this->result['artist']['name']);
         // Chuck in a dash
         $image->text('-', $x += $bbox[2] += 6, 17, $this->text['size'], $this->text['colours']['black'], 0, $this->text['fonts']['normal']);
         $bbox = imagettfbbox($this->text['size'], 0, $this->text['fonts']['normal'], '-');
         // And the Album Title
         $image->text($this->result['name'], $x += $bbox[2] += 4, 17, $this->text['size'], $this->text['colours']['link'], 0, $this->text['fonts']['bold']);
         $bbox = imagettfbbox($this->text['size'], 0, $this->text['fonts']['bold'], $this->result['name']);
         // And the Playcount in brackets
         $image->text('(' . $this->result['playcount'] . ')', $x += $bbox[2] + 4, 17, $this->text['size'], $this->text['colours']['black'], 0, $this->text['fonts']['normal']);
         // And we're done making the image
     }
     // Save the image as a .png with a quality of 90
     $image->save($this->filename);
     // I don't want to optimise the error message images
     if (!$error) {
         Log::info('Finished generating image non-optimised image');
         if (Cache::forever($this->filename, true)) {
             Log::info('Added ' . $this->filenameSansPath . ' to cache');
         }
         // Get a random number of seconds between 10 and 99 for the queue - I don't really want to
         // start generating smaller images straight away
         $seconds = mt_rand(10, 99);
         Log::info('Sent image to optimiser queue, starting in ' . $seconds . ' seconds');
         // Send the image to the optimiser for the next requests...
         Queue::later($seconds, 'LastfmController@optimiseImage', ['image' => $this->filename, 'level' => 2]);
     }
     return $image;
 }
Example #12
0
 public function confirmConsumeOrderById($orderId)
 {
     $time = time();
     $errCode = 0;
     $errMsg = '';
     \DB::beginTransaction();
     do {
         try {
             $order = ConsumeModel::find($orderId);
             if (!$order) {
                 throw new PayException(ErrCode::ERR_ORDER_NO_EXISTS);
             } elseif ($order->status == ConsumeModel::STATUS_SUCCESS) {
                 $errCode = 1;
                 break;
             }
             $order->status = ConsumeModel::STATUS_SUCCESS;
             $order->pay_time = $time;
             $order->update_time = $time;
             $order->save();
             AccountBiz::getInstance()->updateUserAccount($order->user_id, ConsumeModel::DEAL_CONSUME, $order->consume_amount, $order->channel);
         } catch (\Exception $e) {
             $errCode = 2;
         }
     } while (0);
     if ($errCode == 0) {
         \DB::commit();
         if (true !== BusiNotifyBiz::getInstance()->notifyCallback($order, 'consume')) {
             \Queue::later(5, '\\Pay\\Service\\Queue\\BusiNotifyQueue', ['id' => $order->id, 'notify_type' => 'consume']);
         }
         return true;
     } else {
         \DB::rollback();
         return false;
     }
 }
Example #13
0
 public function createPost()
 {
     $user_id = Auth::user()->id;
     $rules = array('content' => 'required');
     $validator = Validator::make(Input::all(), $rules);
     if ($validator->fails()) {
         if (Input::has('ajax')) {
             return array('type' => 'danger', 'messages' => $validator->messages());
         } else {
             return Redirect::to('/post/new')->withErrors($validator)->withInput();
         }
     }
     $content = Input::get('content');
     $post_now = Input::get('post_now');
     $schedule_type = Input::get('schedule');
     if (empty($schedule_type)) {
         $schedule_type = Setting::where('user_id', '=', $user_id)->pluck('schedule_id');
     }
     $schedule_id = Settings::where('user_id', '=', $user_id)->pluck('schedule_id');
     $current_datetime = Carbon::now();
     $schedule = Carbon::now();
     if ($post_now == '0' && $schedule_type != 'custom') {
         $schedule_id = $schedule_type;
         $interval = Schedule::find($schedule_id);
         if ($interval->rule == 'add') {
             $schedule = $current_datetime->modify('+ ' . $interval->period);
         } else {
             if ($interval->rule == 'random') {
                 $current_day = date('d');
                 $from_datetime = Carbon::now();
                 $to_datetime = $from_datetime->copy()->modify('+ ' . $interval->period);
                 $days_to_add = $from_datetime->diffInDays($to_datetime);
                 $day = mt_rand($current_day, $current_day + $days_to_add);
                 $hour = mt_rand(1, 23);
                 $minute = mt_rand(0, 59);
                 $second = mt_rand(0, 59);
                 //year, month and timezone is null
                 $schedule = Carbon::create(null, null, $day, $hour, $minute, $second, null);
             }
         }
         if (empty($schedule)) {
             $schedule = $current_datetime->addHours(1);
         }
     } else {
         $schedule = Carbon::parse(Input::get('schedule_value'));
     }
     $networks = Input::get('network');
     if (empty($networks)) {
         $networks = Setting::where('user_id', '=', $user_id)->pluck('default_networks');
         $networks = json_decode($networks, true);
     }
     $post = new Post();
     $post->user_id = $user_id;
     $post->content = $content;
     $post->date_time = $schedule->toDateTimeString();
     $post->save();
     $post_id = $post->id;
     foreach ($networks as $network_id) {
         $post_network = new PostNetwork();
         $post_network->user_id = $user_id;
         $post_network->post_id = $post_id;
         $post_network->network_id = $network_id;
         $post_network->status = 1;
         $post_network->save();
     }
     Queue::later($schedule, 'SendPost@fire', array('post_id' => $post_id));
     if (Input::has('ajax')) {
         return array('type' => 'success', 'text' => 'Your post was scheduled! It will be published on ' . $schedule->format('l jS \\o\\f F \\a\\t h:i A'));
     }
     return Redirect::to('/post/new')->with('message', array('type' => 'success', 'text' => 'Your post was scheduled! It will be published on ' . $schedule->format('l jS \\o\\f F \\a\\t h:i A')));
 }
Example #14
0
 public function saveJob()
 {
     $q = $this->data;
     $startc = \Carbon\Carbon::parse(array_get($q, 'jobs.new.start'));
     $repeat = array_get($q, 'jobs.new.repeat');
     $data = (array) json_decode(array_get($q, 'jobs.new.data'), true);
     $queue = array_get($q, 'jobs.new.classname');
     if ($repeat > 0) {
         $data['repeatJob'] = $repeat;
     }
     $classFullName = starts_with($queue, "\\") ? $queue : "\\Veer\\Queues\\" . $queue;
     if (!class_exists($classFullName)) {
         //
     } else {
         if (now() >= $startc) {
             \Queue::push($classFullName, $data);
         } else {
             $wait = \Carbon\Carbon::now()->diffInMinutes($startc);
             \Queue::later($wait, $classFullName, $data);
         }
     }
     $this->actionSave = null;
 }
Example #15
0
 public function cancelRechargeOrder($fields)
 {
     $this->_rechargeModel = RechargeModel::find($fields['pay_recharge_id']);
     do {
         if ($this->_rechargeModel->id < 0) {
             throw new PayException(ErrCode::ERR_ORDER_NO_EXISTS);
         }
         if ($this->_rechargeModel->status != rechargeModel::STATUS_SUCCESS) {
             throw new PayException(ErrCode::ERR_ORDER_STATUS);
         }
         if ($this->_rechargeModel->user_id != $fields['user_id']) {
             throw new PayException(ErrCode::ERR_ORDER_USER_ID);
         }
         if ($this->_rechargeModel->refund_count > 0) {
             throw new PayException(ErrCode::ERR_REFUND, '只允许退款一次');
         }
         if ($fields['refund_amount'] > $this->_rechargeModel->recharge_amount) {
             throw new PayException(ErrCode::ERR_REFUND, '退款金额不能大于充值金额');
         }
         if (!$this->_rechargeModel->ser_recharge_no) {
             throw new PayException(ErrCode::ERR_REFUND, '该订单不允许通过接口退款');
         }
     } while (0);
     $fields['recharge_id'] = $this->_rechargeModel->id;
     $fields['gateway'] = $this->_rechargeModel->gateway;
     $fields['seller_partner'] = $this->_rechargeModel->seller_partner;
     $refundModel = RefundBiz::getInstance()->createRefundOrder($fields);
     $this->refundRechargeOrderById($this->_rechargeModel->id, $refundModel->amount);
     \Queue::later(30, '\\Pay\\Service\\Queue\\SerAutoConfirmQueue@serRefund', ['id' => $refundModel->id]);
     return ['user_id' => $this->_rechargeModel->user_id, 'refund_amount' => $refundModel->amount, 'pay_recharge_id' => $this->_rechargeModel->id];
 }