| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481 | <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');include_once(FCPATH . 'application/controllers/Base_Controller.php');class Weather extends Base_Controller{		public function __construct()	{		parent::__construct();		$this->load->model('Weathermonitor_model');        $this->load->model('Project_model');        $this->load->model('Network_model');        // $this->load->model('Zone_model');	}	// 环境监控列表    public function getlist()    {    	$userid = $this->get_user_info('id');    	$role = $this->get_user_info('role');    	$companyid = $this->get_user_info('companyid');    	$page = $this->input->post('page',true);    	$count = $this->input->post('count',true);        $project_id = $this->input->post('project_id',true);        $network_id = $this->input->post('network_id',true);        $id = $this->input->post('id',true);        $id = trim($id,',');        $action = $this->input->post('action',true);        $keyword = $this->input->post('keyword',true);        $download = $this->input->post('download',true);        $print = $this->input->post('print',true);        $filter = [];                // 需要获取的字段    	$field = "W.id,                  W.number,    			  WI.temperature,    			  WI.humidity,    			  WI.atmospressue,    			  WI.PM25,    			  WI.PM10,    			  WI.noise,                  WI.updatetime,                  P.projectname";        if (empty($action)) {  // (环境监控页)带分页的列表            if (!empty($keyword)) {                $filter['keyword'] = $keyword;            }            if (!empty($id)) {                $filter['W.id'] = explode(',', $id);            }                        if (empty($download)) {                if (isset($print) && !empty($print)) {                    $data = $this->Weathermonitor_model->get_list_by_role($role,$userid,$companyid,$project_id,$field,$page,$count,$filter,1);                }else{                    $data = $this->Weathermonitor_model->get_list_by_role($role,$userid,$companyid,$project_id,$field,$page,$count,$filter);                }                                foreach ($data as &$v) {                    // 设置固定大气压强                    if (!empty($v['atmospressue'])) {                        $v['atmospressue'] = 10;                    }                    foreach ($v as &$s) {                        $s = empty($s) ? ' ' : $s;                    }                }                $total = $this->Weathermonitor_model->getTotal($filter,$role,$userid,$companyid,$project_id);                $sum = 0;                if (!empty($count) && !empty($page)) {                    $sum = ceil($total/$count);                }                json_result('0000',$this->response['0000'],array('list'=>$data,'total'=>$sum));            }else{                $data = $this->Weathermonitor_model->get_list_by_role($role,$userid,$companyid,$project_id,$field,null,null,$filter);                // foreach ($data as &$v) {                //     foreach ($v as &$s) {                //         $s = empty($s) ? ' ' : $s;                //     }                // }                // 导出到Excel                $version = $this->session->userdata('version');                if (empty($version)) {                    $title = array(                        array('编号','监控名称','温度(℃)','湿度(RH)','PM2.5(μg/m³)','PM10.0(g/m3)','噪音(dB)','大气压强(kPa)','更新时间'),                    );                }else{                    $title = array(                        array('Number','Monitoring number','temperature(℃)','humidity(RH)','PM2.5(μg/m³)','PM10.0(g/m3)','noise(dB)','atmospheric pressure(kPa)','Update time'),                    );                }                                $temp = array();                $i = 1;                foreach ($data as $k=>$value) {                    $temp[$k][] = $i;                    $temp[$k][] = $value['number'];                    $temp[$k][] = $value['temperature'];                    $temp[$k][] = $value['humidity'];                    $temp[$k][] = $value['PM25'];                    $temp[$k][] = $value['PM10'];                    $temp[$k][] = $value['noise'];                    $temp[$k][] = empty($value['atmospressue']) ? '' : 10;  // 设置固定大气压强                    $temp[$k][] = $value['updatetime'];                    $i ++;                }                $data = array_merge($title,$temp);                $path = push_excel($data,'weatherExcel_'.date('Ymd'));                exit(json_result('0000',$this->response['0000'],array('path'=>$path)));            }        }else{  // (项目管理页)不带分页的列表            if ($project_id > 0) $filter['projectid'] = $project_id;            if ($network_id > 0) $filter['networkid'] = $network_id;            if ($lamp_id > 0) $filter['lampid'] = $lamp_id;            $data = $this->Weathermonitor_model->get_list_by_filter($filter,$field);            json_result('0000',$this->response['0000'],array('video_list'=>$data));        }    }    // 添加/编辑环境监控    public function update(){        $where['id'] = $this->input->post('id',true);        $role = $this->get_user_info('role');        // if ($role == COMPANY_CUSTOMER) {        //     exit(json_result('0011', $this->response['0011'], array()));        // }                $data['number'] = $this->input->post('number',true);        $data['projectid'] = $this->input->post('projectid',true);        $section = $this->input->post('section',true);        $data['address'] = $this->input->post('address',true);        $longitude = $this->input->post('longitude',true);        $latitude = $this->input->post('latitude',true);        $monitortype = $this->input->post('monitortype',true);        $batteryah = $this->input->post('batteryah',true);        $protocoltype = $this->input->post('protocoltype',true);        if(isset($longitude)) $data['longitude'] = $longitude;        if(isset($latitude)) $data['latitude'] = $latitude;        if(isset($monitortype)) $data['monitortype'] = $monitortype;        if(isset($batteryah)) $data['batteryah'] = $batteryah;        if(isset($section)) $data['section'] = $section;        if(!isset($data['number'])) exit(json_result('0804',$this->response['0804'],array()));        if(!is_numeric($data['number']) || $data['number'] < 1 || $data['number'] > 999999) exit(json_result('0813',$this->response['0813'],array()));        if(empty($data['projectid'])) exit(json_result('0308',$this->response['0308'],array()));        if(empty($data['address'])) exit(json_result('0805',$this->response['0805'],array()));        $is_true = preg_match('/^[A-Fa-f0-9]+$/', $data['address']);        if (empty($is_true)) exit(json_result('0414', $this->response['0414'], array()));        if (empty($where['id'])) {  // 添加数据            if ($this->Weathermonitor_model->getDataCount(array('number'=>$data['number'],'projectid'=>$data['projectid']))) {                exit(json_result('0801',$this->response['0801'],array()));            }            if ($this->Weathermonitor_model->getDataCount(array('address'=>$data['address']))) {  // 无线模块地址被使用                exit(json_result('0404',$this->response['0404'],array()));            }            $number = mb_strlen($data['address']) == 13 ? base_convert($data['address'], 16, 10) : $data['address'];            // 创建网络            // $networkData['id']  = $this->Zone_model->insert(array(            //     'name'   => $number,            //     'parent' => $data['projectid'] ,            //     'level'  => 4            // ));             $networkData['networkid'] = $number;            $networkData['gatewaytype'] = 'direct';            $networkData['devicetype'] = 1;            $networkData['protocoltype'] = isset($protocoltype) ? $protocoltype : 1;            $networkData['projectid'] = $data['projectid'];            $networkData['devicesn'] = $number;            $networkData['networkname'] = $number;            $networkData['type'] = 1;            $networkData['createtime'] = date('Y-m-d H:i:s');            // $data['networkid'] = $networkData['id'];            $data['networkid'] = $this->Network_model->insert($networkData);            $this->Project_model->add_network_count(array('projectid'=>$data['projectid'],'lampcount'=>0,'faultcount'=>0));            $data['createtime'] = date('Y-m-d H-i-s',time());            $data['updatetime'] = date('Y-m-d H-i-s',time());            $id = $this->Weathermonitor_model->insert($data);            $projectData = $this->Project_model->getData(array('id'=>$data['projectid']),'projectname');            $this->add_operation_log('insert',"在\"{$projectData['projectname']}\"项目下添加环境监控,监控编号\"{$data['number']}\"",0);            $this->add_operation_log('insert',"Add environmental monitor.Monitor number:\"{$data['number']}\".Project name:\"{$projectData['projectname']}\"",0,1);        }else{   // 编辑数据            if ($this->Weathermonitor_model->getDataCount(array('number'=>$data['number'],'projectid'=>$data['projectid']),$where['id'])) {                exit(json_result('0801',$this->response['0801'],array()));            }            if ($this->Weathermonitor_model->getDataCount(array('address'=>$data['address']),$where['id'])) {  // 无线模块地址被使用                exit(json_result('0404',$this->response['0404'],array()));            }            $old = $this->Weathermonitor_model->get_data_by_filter($where,'address,networkid,projectid,protocoltype');            if ($old['address'] != $data['address']) {                // 删除原有网络                // $this->Zone_model->delZone($old['networkid']);                $this->Network_model->delData(array('id'=>$old['networkid']));                $cmdstr = '{"cmd_type":"delete_network_cmd","cmd_id":'.$old['networkid'].'}';                send_cmd($cmdstr,0,0,$old['protocoltype']);                $number = mb_strlen($data['address']) == 13 ? base_convert($data['address'], 16, 10) : $data['address'];                // 创建网络                // $networkData['id']  = $this->Zone_model->insert(array(                //     'name'   => $number,                //     'parent' => $data['projectid'] ,                //     'level'  => 4                // ));                 $networkData['networkid'] = $number;                $networkData['gatewaytype'] = 'direct';                $networkData['devicetype'] = 1;                $networkData['projectid'] = $data['projectid'];                $networkData['devicesn'] = $number;                $networkData['networkname'] = $number;                $networkData['type'] = 1;                $networkData['protocoltype'] = isset($protocoltype) ? $protocoltype : 1;                // $data['networkid'] = $networkData['id'];                $data['networkid'] = $this->Network_model->insert($networkData);            }else  {                $netData = $this->Network_model->getData(array('id'=>$old['networkid']),'protocoltype');                if ($netData['protocoltype'] != $protocoltype && isset($protocoltype)) {                    $this->Network_model->update(array('id'=>$old['networkid']),array('protocoltype'=>$protocoltype));                }            }            if ($old['projectid'] != $data['projectid']) {                $this->Project_model->add_network_count(array('projectid'=>$data['projectid'],'lampcount'=>0,'faultcount'=>0));                $this->Project_model->minus_network_count(array('projectid'=>$old['projectid'],'lampcount'=>0,'faultcount'=>0));            }            $data['updatetime'] = date('Y-m-d H-i-s',time());            $id = $this->Weathermonitor_model->update(array('id'=>$where['id']),$data);                        $projectData = $this->Project_model->getData(array('id'=>$data['projectid']),'projectname');            $this->add_operation_log('update',"编辑\"{$projectData['projectname']}\"项目下的环境监控,监控编号\"{$data['number']}\"",0);            $this->add_operation_log('update',"Update environmental monitor.Monitor number:\"{$data['number']}\".Project name:\"{$projectData['projectname']}\"",0,1);        }        exit(json_result('0000',$this->response['0000'],array('id'=>$id)));    }    // 删除环境监控(支持批量操作)    public function del(){        $videoIds = $this->input->post('id',true);        $role = $this->get_user_info('role');        // if ($role == COMPANY_CUSTOMER) {        //     exit(json_result('0011',$this->response['0011'],array()));        // }        if (empty($videoIds)) {            exit(json_result('0007',$this->response['0007'],array()));        }        $ids = explode(',', $videoIds);        foreach ($ids as $v) {            $old = $this->Weathermonitor_model->get_data_by_filter(array('id'=>$v),'networkid,projectid,number,protocoltype');            // 删除网络            if (!empty($old['networkid'])) {                // $this->Zone_model->delOne($old['networkid']);                $this->Network_model->delData(array('id'=>$old['networkid']));                $cmdstr = '{"cmd_type":"delete_network_cmd","cmd_id":'.$old['networkid'].'}';                send_cmd($cmdstr,0,0,,$old['protocoltype']);            }            // 修改项目下的网络数            $this->Project_model->minus_network_count(array('projectid'=>$old['projectid'],'lampcount'=>0,'faultcount'=>0));            $projectData = $this->Project_model->getData(array('id'=>$old['projectid']),'projectname');            $this->add_operation_log('delete',"删除\"{$projectData['projectname']}\"项目下的环境监控,监控编号\"{$old['number']}\"",0);            $this->add_operation_log('delete',"Delete environmental monitor.Monitor number:\"{$old['number']}\".Project name:\"{$projectData['projectname']}\"",0,1);        }        $data = $this->Weathermonitor_model->get_list_by_filter(array('id'=>$ids),'W.id,W.projectid,W.networkid');                $this->Weathermonitor_model->delData(array('id'=>$ids));                exit(json_result('0000',$this->response['0000'],array()));    }    // 环境监控详情    public function info(){        $weatherid = $this->input->post('id',true);        if (empty($weatherid)) {            exit(json_result('0007',$this->response['0007'],array()));        }        $field = "id,                  number,                  projectid,                  address,                  section,                  longitude,                  latitude,                  monitortype,                  batteryah,                  networkid";        $data = $this->Weathermonitor_model->get_data_by_filter(array('id'=>$weatherid),$field);        $netData = $this->Network_model->getData(array('id'=>$data['networkid']),'protocoltype');        $data['protocoltype'] = $netData['protocoltype'];        exit(json_result('0000',$this->response['0000'],$data));    }    // 数据报表    public function data_list(){        // 监控id        $id = $this->input->post('id',true);        if (empty($id)) {            exit(json_result('0007',$this->response['0007'],array()));        }        $type = $this->input->post('type',true);        $date_type = $this->input->post('date_type',true);        $date = $this->input->post('date',true);        $dataList = $this->data($id,$type,$date_type,$date);        exit(json_result('0000',$this->response['0000'],$dataList));    }    // 数据对比    public function data_com(){        $ids = $this->input->post('ids',true);        $ids = trim($ids,',');        if (empty($ids)) {            exit(json_result('0007',$this->response['0007'],array()));        }        $type = $this->input->post('type',true);        $date_type = $this->input->post('date_type',true);        $date = $this->input->post('date',true);        $idArr = explode(',', $ids);        $dataArr = array();        foreach ($idArr as $v) {            $dataArr[] = $this->data($v,$type,$date_type,$date);        }                exit(json_result('0000',$this->response['0000'],array('list'=>$dataArr)));    }    // 获取报表数据    private function data($id,$type,$date_type,$date){        if (empty($type)) $type = 'temperature';        if (empty($date_type)) $date_type = 'year';        if ($date_type == 'year') {            $date = empty($date) ? date('Y') : date('Y',strtotime($date.'-01'));        }elseif ($date_type == 'month') {            $date = empty($date) ? date('Y-m') : date('Y-m',strtotime($date));        }elseif ($date_type == 'day') {            // $date = empty($date) ? date('Y-m-d') : date('Y-m-d',strtotime($date));        }else{            $date = '';        }        if ($date_type == 'day') {            if (date('Y-m-d',strtotime($date)) == date('Y-m-d',time())) {                $end = intval(date('H', time()));            }else{                $end = 24;            }            $dataList = array();            for($start = 1; $start <= $end; $start++){                $startStr = $start-1;                $startStr = $startStr < 10 ? "0".$startStr : $startStr;                $data = $this->Weathermonitor_model->reportData($id,$type, $date.' '.$startStr.':00:00',$date.' '.$startStr.':59:59');                $dataList['time'][] = $start < 10 ? "0".$start.':00' : $start.':00';                // 设置固定大气压强                if ($type == 'atmospressue') {                    if (!empty($data['max'])) {                        $data['max'] = 10;                        $data['min'] = 10;                        $data['avg'] = 10;                    }                }                $dataList['value']['max'][] = round($data['max'],1);                $dataList['value']['min'][] = round($data['min'],1);                $dataList['value']['avg'][] = round($data['avg'],1);            }        }elseif ($date_type == 'month') {            $beginDateMonth = date('Y-m-01', strtotime($date.'-01 00:00:00'));            $comDate = date('Y-m-01 00:00:00', time());            if (strtotime($beginDateMonth) > strtotime($comDate)) {                $end = 0;            }elseif (strtotime($beginDateMonth) == strtotime($comDate)) {                $end = intval(date('d', time()));            }else{                $end = date('d', strtotime("$beginDateMonth +1 month -1 day"));            }                   $dataList = array();            for($start = 1; $start <= $end; $start++){                $startStr = $start;                if ($start < 10) {                    $startStr = "0".$start;                }                $data = $this->Weathermonitor_model->reportData($id,$type, $date.'-'.$startStr,$date.'-'.$startStr.' 23:59:59');                $dataList['time'][] = $date.'-'.$startStr;                // 设置固定大气压强                if ($type == 'atmospressue') {                    if (!empty($data['max'])) {                        $data['max'] = 10;                        $data['min'] = 10;                        $data['avg'] = 10;                    }                }                $dataList['value']['max'][] = round($data['max'],1);                $dataList['value']['min'][] = round($data['min'],1);                $dataList['value']['avg'][] = round($data['avg'],1);            }                    } elseif ($date_type == 'year') {                        $dataList = array();            $y = intval(date('Y',time()));            if ($y == $date) {                $end = intval(date('m',time()));            }elseif($date > $y){                $end = 0;            }else{                $end = 12;            }            for($start = 1; $start <= $end; $start++){                $startStr = $start;                if ($start < 10) {                    $startStr = "0".$start;                }                $beginDateMonth = date('Y-m-01', strtotime($date."-{$startStr}-01 00:00:00"));                $m = date('Y-m-d', strtotime("$beginDateMonth +1 month -1 day"));                  $data = $this->Weathermonitor_model->reportData($id,$type, $date."-".$startStr.'-1 00:00:00',$m.' 23:59:59');                $dataList['time'][] = $date.'-'.$startStr;                if ($type == 'atmospressue') {                    if (!empty($data['max'])) {                        $data['max'] = 10;                        $data['min'] = 10;                        $data['avg'] = 10;                    }                }                $dataList['value']['max'][] = round($data['max'],1);                $dataList['value']['min'][] = round($data['min'],1);                $dataList['value']['avg'][] = round($data['avg'],1);            }        } else {            $dataList = array();            for($start = $this->Weathermonitor_model->getStartYear($id); $start <= intval(date('Y')); $start++){                $startStr = $start;                $data = $this->Weathermonitor_model->reportData($id,$type, $startStr);                $dataList['time'][] = $startStr;                if ($type == 'atmospressue') {                    if (!empty($data['max'])) {                        $data['max'] = 10;                        $data['min'] = 10;                        $data['avg'] = 10;                    }                }                $dataList['value']['max'][] = round($data['max'],1);                $dataList['value']['min'][] = round($data['min'],1);                $dataList['value']['avg'][] = round($data['avg'],1);            }        }        $data = $this->Weathermonitor_model->getOne($id,'number');        $dataList['number'] = $data['number'];        return $dataList;    }}?>
 |