public function perform() { $args = $this->args; if (empty($args['language']) || empty($args['header']) || empty($args['key']) || empty($args['accountId']) || empty($args['condition'])) { ResqueUtil::log(['status' => 'fail to export code', 'message' => 'missing params', 'args' => $args]); return false; } //set the language Yii::$app->language = empty($args['language']) ? LanguageUtil::DEFAULT_LANGUAGE : $args['language']; $header = $args['header']; $fileName = $args['key']; $filePath = ExcelUtil::getFile($fileName, 'csv'); $condition = unserialize($args['condition']); $object = GoodsExchangeLog::find(); $classFunction = '\\backend\\modules\\product\\models\\GoodsExchangeLog::preProcessExportData'; $backendUser = Account::findByPk(new \MongoId($args['accountId'])); ExcelUtil::processMultiData($header, $filePath, $backendUser, $condition, $object, $classFunction, ['changeTostring' => ['goods']]); $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 { return false; } }
/** * export the goods exchange log */ public function actionExport() { $params = $this->getQuery(); $accountId = $this->getAccountId(); $where = GoodsExchangeLog::createCondition($params, $accountId); $query = GoodsExchangeLog::find(); $data = $query->where($where)->one(); if ($data) { //redis hash key and set a default value $key = Yii::t('product', 'goods_exchange_logs_file_name') . '_' . date('YmdHis'); // get the header for the excel $headerValues = explode(",", Yii::t('product', 'exchange_log_export')); $headerKeys = ['id', 'memberName', 'telephone', 'address', 'postcode', 'expectedScore', 'usedScore', 'goods', 'createdAt', 'channel']; $header = []; foreach ($headerKeys as $index => $headerKey) { $header[$headerKey] = $headerValues[$index]; } $exportArgs = ['language' => Yii::$app->language, 'header' => $header, 'key' => $key, 'accountId' => (string) $accountId, 'condition' => serialize($where), 'description' => 'Direct: export goods exchange log']; $jobId = Yii::$app->job->create('backend\\modules\\product\\job\\ExportGoodsExchangeLog', $exportArgs); $result = ['result' => 'success', 'message' => 'exporting goods exchange log', 'data' => ['jobId' => $jobId, 'key' => $key]]; } else { $result = ['result' => 'error', 'message' => 'no datas', 'data' => []]; } return $result; }
private function _memberLogsFromGoodsExchange($accountId) { $skip = 0; $limit = 100; $query = GoodsExchangeLog::find()->where(['accountId' => $accountId])->orderBy(['createdAt' => SORT_ASC]); $query = $query->offset($skip)->limit($limit); $goodsExchangeLogs = $query->all(); while (!empty($goodsExchangeLogs)) { $memberLogs = []; foreach ($goodsExchangeLogs as $goodsExchangeLog) { $memberLogs[] = ['memberId' => $goodsExchangeLog->memberId, 'operation' => MemberLogs::OPERATION_REDEEM, 'operationAt' => $goodsExchangeLog->createdAt, 'createdAt' => $goodsExchangeLog->createdAt, 'accountId' => $goodsExchangeLog->accountId]; } MemberLogs::batchInsert($memberLogs); $skip += $limit; $query = $query->offset($skip)->limit($limit); $goodsExchangeLogs = $query->all(); } }