colly_wyx
2018-03-30 5b00b28782f2c773aa9b63ac61584b70a366526c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
 
class Service_Daily extends System_Service_Base{
 
    public function __construct(){
        $this->daily_model = new DailyModel();
        $this->hourly_model = new HourlyModel();
    }
 
    public function summary($day){
        $data_model = new DataModel();
        $datas = $data_model->aggregate(
            array(
                array(
                    '$match' => array('create_time' => array('$gte' => $day.' 00:00:00', '$lte' => $day.' 23:59:59'))
                ),
                array(
                    '$group' => array('_id' => '$user_id', 'day_avg' => array('$avg' => '$value'))
                ),
                array(
                    '$project' => array('_id' => 0, 'user_id' => '$_id', 'day_avg' => 1)
                )
            )    
        );
        if($datas){
            $time = date('Y-m-d H:i:s');
            foreach ($datas as $data) {
                $param['user_id'] = $data['user_id'];
                $param['day_avg'] = floatval(substr($data['day_avg'], 0, 5));
                $param['date'] = $day;
                $param['create_time'] = $time;
                $this->daily_model->add($param);
                unset($param);
                for($i = 1; $i <= 8; $i ++){
                    if($i == 1){
                        $start_hour = '00:00:00';
                        $end_hour = '02:59:59';
                    }
                    elseif($i == 8){
                        $start_hour = '21:00:00';
                        $end_hour = '23:59:59';
                    }
                    else{
                        $hour = ($i - 1)*3;
                        $start_hour = $hour.':00:00';
                        $end_hour = ($hour + 2).':59:59';
                        if($hour < 10 ){
                            $start_hour = '0'.$start_hour;
                        }
                        if($hour + 2 < 10){
                            $end_hour = '0'.$end_hour;
                        }
                        
                    }
                    $hourly_datas = $data_model->aggregate(
                        array(
                            array(
                                '$match' => array('create_time' => array('$gte' => $day.' '.$start_hour, '$lte' => $day.' '.$end_hour))
                            ),
                            array(
                                '$group' => array('_id' => '$user_id', 'avg' => array('$avg' => '$value'))
                            ),
                            array(
                                '$project' => array('_id' => 0, 'user_id' => '$_id', 'avg' => 1)
                            )
                        )    
                    );
                    if($hourly_datas){
                        foreach ($hourly_datas as $hourly_data) {
                            $param['user_id'] = $hourly_data['user_id'];
                            $param['hour_avg'] = floatval(substr($hourly_data['avg'], 0, 5));
                            $param['date'] = $day;
                            $param['start_hour'] = $start_hour;
                            $param['end_hour'] = $end_hour;
                            $param['time_level'] = $i;
                            $param['create_time'] = $time;
                            $this->hourly_model->add($param);
                            unset($param);
                        }
                    }
                }
            }
            $dailyLog_service = new Service_DailyLog();
            $dailyLog_service->addLog($day);
 
            return true;
        }
        else{
            return false;
        }
    }
 
    /**
     * 获取用户某个时间段内的数据
     * @param  [type] $user_id    [description]
     * @param  [type] $start_time [description]
     * @param  [type] $end_time   [description]
     * @return [type]             [description]
     */
    public function getUserDataList($user_id, $days_arr){
        $user_dailys = $this->daily_model->getList(array('user_id' => $user_id, 'date' => array('$in' => $days_arr)), array(), array('_id' => 1));
        return $user_dailys;
    }
 
 
 
 
}