| <?php | 
| /** | 
|  * 用户业务类 | 
|  */ | 
| class Domain_DataDaily { | 
|   | 
|     public function __construct(){ | 
|         //DI()->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; | 
|     } | 
|   | 
|      | 
|   | 
| } |