/** * @args {"description": "Delay: Stats of StatsMemberGrowthQuarterly every day"} * @author Rex Chen */ public function perform() { $args = $this->args; $date = empty($args['date']) ? '' : $args['date']; $datetime = TimeUtil::getDatetime($date); $year = date('Y', $datetime); $quarter = TimeUtil::getQuarter($datetime); $startMonth = ($quarter - 1) * 3 + 1; $startTime = new \MongoDate(strtotime($year . '-' . $startMonth . '-01')); $endTime = new \MongoDate(strtotime($year . '-' . $startMonth . '-01' . ' +3 month')); $accounts = Account::findAll(['enabledMods' => 'member']); foreach ($accounts as $account) { $accountId = $account->_id; $totalMember = Member::countByAccount($accountId, null, $endTime); $totalActive = MemberLogs::getTotalActiveByAccount($accountId, $startTime, $endTime); $totalNew = Member::countByAccount($accountId, $startTime, $endTime); $statsGrowth = ModelStatsMemberGrowthQuarterly::getByQuarterAndAccount($accountId, $year, $quarter); if (empty($statsGrowth)) { $statsGrowth = new ModelStatsMemberGrowthQuarterly(); $statsGrowth->accountId = $accountId; $statsGrowth->year = $year; $statsGrowth->quarter = $quarter; } $statsGrowth->totalNew = $totalNew; $statsGrowth->totalActive = $totalActive; $statsGrowth->totalInactive = $totalMember - $totalActive; try { $statsGrowth->save(); } catch (Exception $e) { ResqueUtil::log(['Update StatsMemberGrowthQuarterly error' => $e->getMessage(), 'StatsMemberGrowthMonthly' => $statsGrowth]); continue; } } return true; }
private static function _setStatsMemberPropTradeQuarterly($startTime, $endTime, $args) { //Assume that the subChannel is the secode element in properties $propertyKey = $args['properties'][1]; $memberProperty = MemberProperty::findOne(['propertyId' => $propertyKey]); if (!empty($memberProperty)) { $startQuarter = TimeUtil::getQuarter($startTime); $endQuarter = TimeUtil::getQuarter($endTime); for ($quarter = $startQuarter; $quarter <= $endQuarter; ++$quarter) { $year = date('Y', $startTime); $condition = ['accountId' => $args['accountId'], 'year' => $year, 'quarter' => $quarter]; StatsMemberPropTradeQuarterly::deleteAll($condition); self::generateStatsMemberPropTradeQuarterlyData((string) $memberProperty['_id'], $condition); LogUtil::info(['message' => $quarter . ' :Run StatsMemberPropTradeQuarterly'], 'update_job'); } } else { LogUtil::info(['message' => 'Can not find this propertyId:' . $propertyKey], 'update_job'); } }
public function perform() { //accountId, properties are required fileds $args = $this->args; if (empty($args['accountId']) || empty($args['properties'])) { ResqueUtil::log('Missing required arguments accountId or properties!'); return false; } $date = empty($args['date']) ? '' : $args['date']; $datetime = TimeUtil::getDatetime($date); $dateStr = date('Y-m-d', $datetime); $start = new MongoDate($datetime); $end = new MongoDate(strtotime('+1 day', $datetime)); $accountId = new MongoId($args['accountId']); $condition = ['accountId' => $accountId, 'createdAt' => ['$gte' => $start, '$lt' => $end]]; $campaignLogs = self::getCampaignLog($condition); if (empty($campaignLogs)) { LogUtil::info(['date' => date('Y-m-d H:i:s'), 'message' => $dateStr . ': campaignLogs is empty,no need to store data'], 'resque'); return true; } //get all member info $memberInfos = self::getMemberInfo($condition); //Get all the property mongo id for comparison $condition = ['propertyId' => ['$in' => $args['properties']], 'accountId' => $accountId]; $propertyIdStrs = self::getPropertyIds($condition); //Generate the meta data for inserting $statsRows = []; foreach ($campaignLogs as $campaignLog) { $campaignLog = $campaignLog['_id']; $redeemTime = self::getRedeemTime($campaignLog); //check the redeem time whether exists $condition = ['code' => $campaignLog['code'], 'productId' => $campaignLog['productId'], 'month' => date('Y-m', $redeemTime)]; $memberCampaignLogDaily = ModelStatsMemberCampaignLogDaily::findOne($condition); if (empty($memberCampaignLogDaily)) { $memProperty = self::getProperty((string) $campaignLog['member']['id'], $memberInfos, $propertyIdStrs); $statsRows[] = ['memberId' => $campaignLog['member']['id'], 'memProperty' => $memProperty, 'productId' => $campaignLog['productId'], 'code' => $campaignLog['code'], 'year' => date('Y', $redeemTime), 'month' => date('Y-m', $redeemTime), 'quarter' => TimeUtil::getQuarter($redeemTime), 'accountId' => $accountId, 'createdAt' => new MongoDate(strtotime('+1 day', $datetime) - 1)]; } } ModelStatsMemberCampaignLogDaily::batchInsert($statsRows); unset($statsRows, $memberCampaignLogDaily, $condition, $memProperty, $memberInfos); return true; }
public function perform() { $args = $this->args; if (empty($args['accountId']) || empty($args['properties'][0])) { ResqueUtil::log('Missing required arguments accountId or properties!'); return false; } $accountId = new MongoId($args['accountId']); $property = $args['properties'][0]; $memberProperty = MemberProperty::getByPropertyId($accountId, $property); if (empty($memberProperty)) { ResqueUtil::log('Can not find member property with propertyId:' . $property); return false; } $date = empty($args['date']) ? '' : $args['date']; $date = TimeUtil::getDatetime($date); $year = date('Y', $date); $quarter = TimeUtil::getQuarter($date); self::generateData($memberProperty, $property, $year, $quarter, $accountId); return true; }
public static function createDailyData($members, $campaignLogs, $propertyIdStrs, $accountId) { $statsRows = []; foreach ($campaignLogs as $campaignLog) { $campaignLog = $campaignLog['_id']; if ($campaignLog['redeemTime'] == $campaignLog['createdAt']) { $createdAt = $campaignLog['createdAt']; } else { $createdAt = $campaignLog['redeemTime']; } //check the redeem time whether exists $createdAt = MongodbUtil::MongoDate2TimeStamp($createdAt); $month = date('Y-m', $createdAt); $memberId = $campaignLog['member']['id']; $memProperty = []; if (isset($members[(string) $memberId])) { $member = $members[(string) $memberId]; foreach ($member->properties as $property) { $propertyId = (string) $property['id']; if (in_array($propertyId, $propertyIdStrs)) { $memProperty[$propertyId] = $property['value']; } } } $statsRows[] = ['memberId' => $memberId, 'memProperty' => $memProperty, 'productId' => $campaignLog['productId'], 'code' => $campaignLog['code'], 'year' => date('Y', $createdAt), 'month' => $month, 'quarter' => TimeUtil::getQuarter($createdAt), 'accountId' => $accountId, 'createdAt' => $campaignLog['createdAt']]; } StatsMemberCampaignLogDaily::batchInsert($statsRows); unset($statsRows, $members, $campaignLog, $campaignLogs); }