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 getCountBySmsRecordId($smsRecordId)
 {
     $accountId = Token::getAccountId();
     $successful = EarlyBirdSmsDetail::find()->where(['smsRecordId' => $smsRecordId, 'status' => true, 'accountId' => $accountId])->count();
     $failed = EarlyBirdSmsDetail::find()->where(['smsRecordId' => $smsRecordId, 'status' => false, 'accountId' => $accountId])->count();
     unset($accountId);
     return ['successful' => $successful, 'failed' => $failed];
 }
 public static function updateSmsRecordById($id)
 {
     $smsCount = EarlyBirdSmsDetail::getCountBySmsRecordId($id);
     $smsRecord = EarlyBirdSmsRecord::findOne($id);
     $smsRecord->successful = $smsCount['successful'];
     $smsRecord->failed = $smsCount['failed'];
     $smsRecord->save();
     return $smsRecord;
 }
 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;
     }
 }