public function perform() { $args = $this->args; if (empty($args['accountId']) || empty($args['key']) || empty($args['header']) || empty($args['smsName'])) { ResqueUtil::log(['status' => 'fail to export early bird sms details', 'message' => 'missing params', 'args' => $args]); return false; } $accountId = new \MongoId($args['accountId']); $header = $args['header']; $fileName = $args['key']; $filePath = ExcelUtil::getFile($fileName, 'csv'); $rows = null; if ($args['smsName'] == 'sms_four') { $rows = EarlyBirdSmsDetail::preProcessEarlyBirdSmsDetails($args['smsName'], $accountId); } else { $rows = EarlyBirdSmsFailed::preProcessSendFailedData($args['smsName'], $accountId); } ExcelUtil::exportCsv($header, $rows, $filePath, 1); $hashKey = ExcelUtil::setQiniuKey($filePath, $fileName); if ($hashKey) { //notice frontend the job is finished Yii::$app->tuisongbao->triggerEvent(Message::EVENT_EXPORT_FINISH, ['key' => $fileName], [Message::CHANNEL_GLOBAL . $args['accountId']]); return true; } else { ResqueUtil::log(['status' => 'fail to export early bird sms details', 'message' => 'fail to setQiniuKey', 'filePath' => $filePath]); return false; } }
public static function preProcessSendFailedData($smsName, $accountId) { $query = new Query(); $query = $query->from('uhkklpEarlyBirdSmsRecord')->select(['_id', 'failed']); $record = $query->where(['smsName' => $smsName, 'accountId' => $accountId])->orderBy(['createdAt' => SORT_DESC])->one(); $rows = array(); if ($record['failed'] > 0) { $failedAll = EarlyBirdSmsFailed::find()->where(['smsRecordId' => $record['_id']])->orderBy(['createdAt' => SORT_ASC])->all(); foreach ($failedAll as $smsFailed) { $createdAt = MongodbUtil::MongoDate2String($smsFailed->createdAt, 'Y-m-d H:i:s', null); $row = ['createdAt' => $createdAt, 'mobile' => "'" . $smsFailed->mobile, 'smsContent' => $smsFailed->smsContent, 'status' => '失敗']; $rows[] = $row; unset($createdAt, $row); } } return $rows; }
private static function _sendSms($members, $smsTag, $smsRecordId, $accountId) { try { if (!empty($members) && count($members) > 0) { for ($i = 0; $i < count($members); $i++) { $member = $members[$i]; $sms = self::getSms($member, $smsTag, $accountId); if (!empty($sms) && !empty($sms['mobile'])) { $response = MessageUtil::sendMobileMessage($sms['mobile'], $sms['smsContent'], $accountId); EarlyBirdSmsDetail::createSmsDetail($sms['mobile'], $sms['smsContent'], $response, $smsRecordId, $accountId); if (!$response) { LogUtil::error(['message' => 'EarlyBirdSms發送失敗', 'mobile' => $sms['mobile'], 'name' => $sms['name']], 'earlybird'); EarlyBirdSmsFailed::createSmsFailed($sms['mobile'], $sms['smsContent'], $smsRecordId, $accountId); } unset($sms, $member, $response); } } } return true; } catch (\Exception $e) { LogUtil::error(['message' => 'EarlyBirdSms發送失敗', 'error' => $e], 'earlybird'); EarlyBirdSmsRecord::updateProcessById($smsRecordId, 3); // 發送故障 throw $e; } }