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 _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');
         }
     }
 }