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 actionProductOperatorAvg()
 {
     $params = $this->getQuery();
     if (empty($params['year'])) {
         throw new BadRequestHttpException(Yii::t('common', 'parameters_missing'));
     }
     $accountId = $this->getAccountId();
     $statsQuater = StatsMemberPropAvgTradeQuarterly::getByYearAndAccount($accountId, $params['year']);
     $avgData = [];
     foreach ($statsQuater as $stats) {
         if (empty($stats->propValue)) {
             $stats->propValue = self::NOT_SELECTED;
         } else {
             $stats->propValue = 'KLP ' . $stats->propValue;
         }
         $avgData[$stats->propValue][$stats->quarter] = $stats->avg;
     }
     $querters = [1, 2, 3, 4];
     $date = [];
     $data = [];
     foreach ($querters as $querter) {
         $date[] = 'Q' . $querter;
         foreach ($avgData as $propValue => $avgs) {
             $data[$propValue][] = empty($avgs[$querter]) ? 0 : (double) sprintf("%.2f", $avgs[$querter]);
         }
     }
     return ['date' => $date, 'data' => $data];
 }
 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 _setStatsMemberPropAvgTradeQuarterly($startTime, $endTime, $args)
 {
     $propertyOperate = $args['properties'][0];
     $memberProperty = MemberProperty::getByPropertyId($args['accountId'], $propertyOperate);
     if (empty($memberProperty)) {
         LogUtil::error(['message' => 'Can not find the property:' . $propertyOperate], 'update_job');
     } else {
         $memberPropertyId = $memberProperty->_id;
         $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];
             ModelStatsMemberPropAvgTradeQuarterly::deleteAll($condition);
             StatsMemberPropAvgTradeQuarterly::generateData($args['accountId'], $memberPropertyId, $year, $quarter, $propertyOperate);
             LogUtil::info(['message' => $quarter . 'Run StatsMemberPropAvgTradeQuarterly'], 'update_job');
         }
     }
 }