public static function generateData($accountId, $memberPropertyId, $year, $quarter, $propertyOperate) { $statsQuarterly = ModelStatsMemberCampaignLogDaily::getPropAvgTradeQuarterly($accountId, (string) $memberPropertyId, $year, $quarter); $statsAvg = []; foreach ($statsQuarterly as $stats) { $propValueKey = 'memProperty.' . $memberPropertyId; if (empty($stats[$propValueKey])) { continue; } $propId = $propertyOperate; $propValue = $stats[$propValueKey]; $avg = $stats['avg']; $statsAvg = ModelStatsMemberPropAvgTradeQuarterly::getByPropAndDate($accountId, $propId, $propValue, $year, $quarter); if (!empty($statsAvg)) { $statsAvg->avg = $avg; } else { $statsAvg = new ModelStatsMemberPropAvgTradeQuarterly(); $statsAvg->propId = $propId; $statsAvg->propValue = $propValue; $statsAvg->avg = $avg; $statsAvg->year = $year; $statsAvg->quarter = $quarter; $statsAvg->accountId = $accountId; } try { $statsAvg->save(); } catch (Exception $e) { ResqueUtil::log(['Update StatsMemberPropAvgTradeQuarterly error' => $e->getMessage(), 'StatsMemberPropAvgTradeQuarterly' => $statsAvg]); continue; } } }
public function actionIndex($accountId) { if (empty($accountId)) { echo 'accountId is invaild' . PHP_EOL; exit; } $where['accountId'] = new \MongoId($accountId); // delete member info Member::getCollection()->remove($where); //delete MemberLogs MemberLogs::getCollection()->remove($where); //delete scoreHistory ScoreHistory::getCollection()->remove($where); //delete CampaignLog CampaignLog::getCollection()->remove($where); //delete GoodsExchangeLog GoodsExchangeLog::getCollection()->remove($where); //delete MemberStatistics MemberStatistics::getCollection()->remove($where); //delete ReMemberCampaign ReMemberCampaign::getCollection()->remove($where); //delete StatsCampaignProductCodeQuarterly StatsCampaignProductCodeQuarterly::getCollection()->remove($where); //delete StatsMemberCampaignLogDaily StatsMemberCampaignLogDaily::getCollection()->remove($where); //delete StatsMemberDaily StatsMemberDaily::getCollection()->remove($where); //delete StatsMemberGrowthMonthly StatsMemberGrowthMonthly::getCollection()->remove($where); //delete StatsMemberGrowthQuarterly StatsMemberGrowthQuarterly::getCollection()->remove($where); //delete StatsMemberMonthly StatsMemberMonthly::getCollection()->remove($where); //delete StatsMemberPropAvgTradeQuarterly StatsMemberPropAvgTradeQuarterly::getCollection()->remove($where); //delete StatsMemberPropMonthly StatsMemberPropMonthly::getCollection()->remove($where); //delete StatsMemberPropQuaterly StatsMemberPropQuaterly::getCollection()->remove($where); //delete StatsMemberPropTradeCodeAvgQuarterly StatsMemberPropTradeCodeAvgQuarterly::getCollection()->remove($where); //delete StatsMemberPropTradeCodeQuarterly StatsMemberPropTradeCodeQuarterly::getCollection()->remove($where); //delete StatsMemberPropTradeQuarterly StatsMemberPropTradeQuarterly::getCollection()->remove($where); //delete PromotionCodeAnalysis PromotionCodeAnalysis::getCollection()->remove($where); //delete order Order::getCollection()->remove($where); //delete stats member order StatsMemberOrder::getCollection()->remove($where); //delete stats order StatsOrder::getCollection()->remove($where); //delete MembershipDiscount MembershipDiscount::getCollection()->remove($where); //delete couponLog CouponLog::getCollection()->remove($where); echo 'delete data successful.' . PHP_EOL; }
public static function generateStatsMemberPropTradeQuarterlyData($propertyId, $condition) { $campaignLogDailys = StatsMemberCampaignLogDaily::getCollection()->aggregate(['$match' => $condition], ['$group' => ['_id' => ['propValue' => '$memProperty.' . $propertyId, 'memberId' => '$memberId']]], ['$group' => ['_id' => ['propValue' => '$_id.propValue'], 'total' => ['$sum' => 1]]]); $rows = []; if (!empty($campaignLogDailys)) { foreach ($campaignLogDailys as $item) { $rows[] = ['propId' => $propertyId, 'propValue' => $item['_id']['propValue'], 'total' => $item['total'], 'year' => $condition['year'], 'quarter' => $condition['quarter'], 'accountId' => $condition['accountId']]; } StatsMemberPropTradeQuarterly::batchInsert($rows); LogUtil::info(['message' => $condition['quarter'] . ':StatsMemberPropTradeQuarterly =>' . count($rows)], 'update_job'); unset($rows); } }
public static function generateData($memberProperty, $property, $year, $quarter, $accountId) { $propertyKey = 'memProperty.' . $memberProperty->_id; $keys = ['productId' => true, $propertyKey => true]; $condition = ['year' => $year, 'quarter' => $quarter, 'accountId' => $accountId]; $initial = ['avg' => 0, 'codes' => ['count' => 0], 'members' => ['count' => 0]]; $reduce = 'function(doc, prev) { if (!prev.members[doc.memberId]) { prev.members[doc.memberId] = true; prev.members["count"]++; } if (!prev.codes[doc.code]) { prev.codes[doc.code] = true; prev.codes["count"]++; } }'; $finalize = 'function(prev) { prev.avg = prev.codes["count"] / prev.members["count"]; delete prev.codes; delete prev.members; }'; $statsItems = ModelStatsMemberCampaignLogDaily::getCollection()->group($keys, $initial, $reduce, ['condition' => $condition, 'finalize' => $finalize]); foreach ($statsItems as $statsItem) { $condition['propId'] = $property; $condition['propValue'] = $statsItem[$propertyKey]; $productId = $statsItem['productId']; $condition['productId'] = $productId; $stats = ModelStatsMemberPropTradeCodeAvgQuarterly::findOne($condition); if (empty($stats)) { $stats = new ModelStatsMemberPropTradeCodeAvgQuarterly(); $product = Product::findByPk($productId); $productName = ''; if (!empty($product)) { $productName = $product->name; } $stats->propId = $property; $stats->propValue = $statsItem[$propertyKey]; $stats->productId = $productId; $stats->productName = $productName; $stats->year = $year; $stats->quarter = $quarter; $stats->accountId = $accountId; } $stats->avg = $statsItem['avg']; $stats->save(); } }
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; }
/** * get total base on the memberId and property */ public static function getTotalWithMember($item, $propertyId, $accountId) { $where = ['memProperty' . $propertyId => $item['_id']['propValue'], 'year' => $item['_id']['year'], 'quarter' => $item['_id']['quarter'], 'accountId' => $accountId]; $summary = StatsMemberCampaignLogDaily::getCollection()->aggregate(['$match' => $where], ['$group' => ['_id' => ['propValue' => '$memProperty.' . $propertyId, 'memberId' => '$memberId']]], ['$group' => ['_id' => ['propValue' => '$_id.propValue'], 'total' => ['$sum' => 1]]]); if (empty($summary)) { return 0; } else { return $summary[0]['total']; } }
/** * get */ public static function getTotalWithProductId($where) { $summary = StatsMemberCampaignLogDaily::getCollection()->aggregate(['$match' => $where], ['$group' => ['_id' => ['productId' => '$productId'], 'total' => ['$sum' => 1]]]); if (empty($summary)) { return 0; } else { return $summary[0]['total']; } }