redis = new Redis_Lite(DI()->config->get('app.redis.servers')); $this->model = new Model_DataDaily(); $this->data_three_hourly_model = new Model_DataThreeHourly(); $this->data_hourly_model = new Model_DataHourly(); } /** * 获取用户某个时间段内的数据 * @param [type] $user_id [description] * @param [type] $start_time [description] * @param [type] $end_time [description] * @return [type] [description] */ public function getUserDataList($user_id, $start_time, $end_time){ $start_time = strtotime($start_time); $end_time = strtotime($end_time); if($end_time > $start_time){ $diff_days = ($end_time - $start_time) / 86400; $total_days = $diff_days + 1;//时间段内总天数 //$step = ($total_days - $total_days % 7) / 7; $days_arr= array(); for($i = 0; $i < $total_days ; $i+=1){ $days_arr[] = date('Y-m-d', strtotime('+'.$i.' day', $start_time)); } $result = $this->model->getList(array('user_id' => $user_id, 'date' => array('$in' => $days_arr))); } else{ $result = $this->data_three_hourly_model->get(array('user_id' => $user_id, 'date' => date('Y-m-d', $start_time))); $_result = array(); if($result){ for($i = 1; $i <=8 ; $i++){ array_push($_result, array('hour_avg' => $result['time_slot_'.$i], 'time_level' => $i)); } } else{ $_result = null; } return $_result; } return $result; } /** * 获取用户某个时间段内的平均值 * @param [type] $user_id [description] * @param [type] $start_time [description] * @param [type] $end_time [description] * @return [type] [description] */ public function getUserDataAvg($user_id, $start_time, $end_time){ // if($start_time == $end_time){ // $result = $this->data_hourly_model->get(array('date' => $start_time)); // if($result){ // $sum = 0; // for($i = 1; $i <= 8; $i++){ // $sum += $result['time_slot_'.$i]; // } // $result[0]['day_avg'] = $sum/8; // } // else{ // $result[0]['day_avg'] = 0; // } // } // else{ $result = $this->data_hourly_model->aggregate( array( array( '$match' => array('date' => array('$gte' => $start_time, '$lte' => $end_time), 'user_id' => $user_id) ), array( '$group' => array('_id' => '$user_id', 'day_avg' => array('$avg' => '$value')) ), array( '$project' => array('_id' => 0, 'day_avg' => 1) ) ) ); //} return isset($result[0]['day_avg'])?floatval(substr($result[0]['day_avg'], 0, 5)):0; } /** * 验证时间 * @param [type] $start_time [description] * @param [type] $end_time [description] * @return [type] [description] */ public function checkTime($start_time, $end_time){ $start_time = strtotime($start_time); $end_time = strtotime($end_time); if($start_time > $end_time){ return false; } $diff_days = ($end_time - $start_time) / 86400; $total_days = $diff_days + 1;//时间段内总天数 if($total_days < 7){ return false; } return true; } }