colly_wyx
2018-04-28 c315a791545733391c15e42bc747e34293d36a99
更新版本
1 files deleted
4 files added
4 files modified
203 ■■■■ changed files
application/core/System/Db/Mongo.php 1 ●●●● patch | view | raw | blame | history
application/core/System/Model/Base.php 2 ●●● patch | view | raw | blame | history
application/library/Service/DataHourly.php 56 ●●●●● patch | view | raw | blame | history
application/library/Service/DataThreeHourly.php 8 ●●●● patch | view | raw | blame | history
application/library/Service/Task.php 92 ●●●●● patch | view | raw | blame | history
application/models/DataHourly.php 7 ●●●●● patch | view | raw | blame | history
application/models/Hourly.php 7 ●●●●● patch | view | raw | blame | history
application/models/Task.php 9 ●●●●● patch | view | raw | blame | history
application/modules/Public/controllers/Data.php 21 ●●●● patch | view | raw | blame | history
application/core/System/Db/Mongo.php
@@ -330,6 +330,7 @@
        $query = $this->_parseId($query);
        // 结果集偏历
        $cursor  = $col->find($query,$fields);
        // 排序
        if($sort){
            $cursor->sort($sort);
application/core/System/Model/Base.php
@@ -56,7 +56,7 @@
     * @param  [type] $query [description]
     * @return [type]        [description]
     */
    public function update($data, $query){
    public function update($data, $query = array()){
        return $this->db->update($this->table, $data, $query);
    }
application/library/Service/DataHourly.php
New file
@@ -0,0 +1,56 @@
<?php
class Service_DataHourly extends System_Service_Base{
    public function __construct(){
        $this->data_hourly_model = new DataHourlyModel();
    }
    public function summary($day, $time_level){
        if($time_level > 0 && $time_level <= 8){
            $hourly_model = new HourlyModel();
            $hour = ($time_level - 1)*3;
            $start_hour = $hour.':05:00';
            $end_hour = ($hour + 3).':05:00';
            if($hour < 10 ){
                $start_hour = '0'.$start_hour;
            }
            if($hour + 2 < 10){
                $end_hour = '0'.$end_hour;
            }
                echo $start_hour.'---'.$end_hour;
            $hourly_datas = $hourly_model->aggregate(
                array(
                    array(
                        '$match' => array('create_time' => array('$gte' => $day.' '.$start_hour, '$lt' => $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'] = $time_level;
                    $param['create_time'] = date('Y-m-d');
                    $this->data_three_hourly_model->add($param);
                    unset($param);
                }
            }
        }
        else{
            return false;
        }
    }
}
application/library/Service/DataThreeHourly.php
@@ -20,19 +20,19 @@
        if($time_level > 0 && $time_level <= 8){
            $hourly_model = new HourlyModel();
            $hour = ($time_level - 1)*3;
            $start_hour = $hour.':00:00';
            $end_hour = ($hour + 2).':05:00';
            $start_hour = $hour.':05:00';
            $end_hour = ($hour + 3).':05:00';
            if($hour < 10 ){
                $start_hour = '0'.$start_hour;
            }
            if($hour + 2 < 10){
                $end_hour = '0'.$end_hour;
            }
                echo $start_hour.'---'.$end_hour;
            $hourly_datas = $hourly_model->aggregate(
                array(
                    array(
                        '$match' => array('create_time' => array('$gte' => $day.' '.$start_hour, '$lte' => $day.' '.$end_hour))
                        '$match' => array('create_time' => array('$gte' => $day.' '.$start_hour, '$lt' => $day.' '.$end_hour))
                    ),
                    array(
                        '$group' => array('_id' => '$user_id', 'avg' => array('$avg' => '$value'))
application/library/Service/Task.php
New file
@@ -0,0 +1,92 @@
<?php
class Service_Task extends System_Service_Base{
    public function __construct(){
        $this->data_hourly_model = new DataHourlyModel();
        $this->data_three_hourly_model = new DataThreeHourlyModel();
        $this->task_model = new TaskModel();
    }
    public function summary(){
        $hourly_model = new DataHourlyModel();
        $task_lists = $this->task_model->getList();
        foreach ($task_lists as $task) {
            $day = $task['date'];
            $user_id = $task['user_id'];
            $time_slot_arr = array();
            for($time_slot = 1; $time_slot<=8 ; $time_slot++){
                $hour = ($time_slot - 1)*3;
                $start_hour = $hour.':00:00';
                $end_hour = ($hour + 3).':00:00';
                if($hour < 10 ){
                    $start_hour = '0'.$start_hour;
                }
                if($hour + 2 < 10){
                    $end_hour = '0'.$end_hour;
                }
                echo '日期:'.$day.' 时间段:'.$start_hour.'---'.$end_hour."======".$user_id."<br />";
                $hourly_data = $hourly_model->aggregate(
                    array(
                        array(
                            '$match' => array('create_time' => array('$gte' => $day.' '.$start_hour, '$lt' => $day.' '.$end_hour), 'user_id' => $user_id)
                        ),
                        array(
                            '$group' => array('_id' => '$user_id', 'avg' => array('$avg' => '$value'))
                        ),
                        array(
                            '$project' => array('_id' => 0, 'user_id' => '$_id', 'avg' => 1)
                        )
                    )
                );
                if($hourly_data){
                    $time_slot_arr[$time_slot] = $hourly_data[0]['avg'];
                }
            }
            $is_creat_data = false;
            $data_three_hourly = $this->data_three_hourly_model->get(array('user_id' => $user_id, 'date' => $day));
            $update_id = "";
            if(!$data_three_hourly){
                $is_creat_data = true;
            }
            else{
                $update_id = $data_three_hourly['_id'];
            }
            foreach ($time_slot_arr as $slot => $val) {
                $param = array();
                if($is_creat_data){
                    $param['user_id'] = $user_id;
                    $param['date'] = $day;
                    for($i = 1; $i <= 8; $i++){
                        if($i == $slot){
                            $param['time_slot_'.$i] = floatval(substr($val, 0, 5));
                        }
                        else{
                            $param['time_slot_'.$i] = 0;
                        }
                    }
                    $param['create_time'] = date('Y-m-d H:i:s');
                    $this->data_three_hourly_model->add($param);
                    $update_id = $param['_id'];
                    $is_creat_data = false;
                }
                else{
                    $param['time_slot_'.$slot] = floatval(substr($val, 0, 5));
                    $this->data_three_hourly_model->update($param, array('_id' => $update_id));
                }
            }
            if($day != date('Y-m-d')){
                $this->task_model->delete(array('_id' => $task['_id']));
            }
        }
    }
}
application/models/DataHourly.php
New file
@@ -0,0 +1,7 @@
<?php
class DataHourlyModel extends System_Model_Base{
    public $table = "data_hourly";
}
application/models/Hourly.php
File was deleted
application/models/Task.php
New file
@@ -0,0 +1,9 @@
<?php
class TaskModel extends System_Model_Base{
    public $table = "task";
}
application/modules/Public/controllers/Data.php
@@ -33,23 +33,10 @@
        }
        public function ThreeHourlyAction(){
            $data_three_hourly_service = new Service_DataThreeHourly();
            $day = $this->get('day', date('Y-m-d'));
            $time_level = $this->get('time_level', 0);
            echo $day;
            if(!$data_three_hourly_service->isSummary($day, $time_level)){
                if($data_three_hourly_service->summary($day, $time_level)){
                    echo "汇总成功";
                }
                else{
                    echo "汇总失败";
                }
            }
            else{
                echo '当前时间已经汇总过了';
            }
        public function HourlyAction(){
            $task_service = new Service_Task();
            //$day = $this->get('day', date('Y-m-d'));
            $task_service->summary();
            die();
            
        }