123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634 |
- <?php
- if (!defined('BASEPATH'))exit('No direct script access allowed');
- include_once(FCPATH . 'application/models/Base_model.php');
- class Project_model extends Base_model {
- protected $table = 'project';
- public function __construct() {
- parent::__construct();
- }
- // 通过项目来获取时区
- public function get_timezone_by_projectid($id){
- // $sql = "select T.value FROM {$this->table} as P left join timezone as T on P.timezone = T.id where P.id = {$id}";
- $sql = "select G.timezone as value FROM {$this->table} as P left join global_location as G on P.cityid = G.id where P.id = {$id}";
- return $this->db->query($sql)->row_array();
- }
- // 通过项目名称判断项目是否存在
- public function project_exist_by_name($role,$userid,$companyid,$project_name,$company_name){
- $projectids = $this->get_projectid_by_role($role,$userid,$companyid);
- if (empty($projectids)) {
- return 0;
- }else{
- $idArr = explode(',', $projectids);
- $this->db->select('P.id');
- $this->db->where_in('P.id',$idArr);
- $this->db->where('P.projectname',$project_name);
- $this->db->where('C.name',$company_name);
- $this->db->join('company as C', 'C.id = P.company');
- $res = $this->db->get($this->table.' as P')->row_array();
- if (empty($res)) {
- return 0;
- }else{
- return $res['id'];
- }
- }
- }
- // 获取时区信息
- public function get_timezone_info($fiter=array(),$field='*'){
- $this->db->select($field);
- if (!empty($fiter)) {
- foreach ($fiter as $key => $value) {
- $this->db->where($key,$value);
- }
- }
- return $this->db->get('timezone')->row_array();
- }
- // 获取时区列表
- public function timezone_list($fields = '*'){
- $this->db->select($fields);
- return $this->db->get('timezone')->result_array();
- }
- // 项目用电量,年月日
- private function project_data($projectid){
- $res = array();
- // 获取总的用电量,当天总用电量
- $today = date('Y-m-d 00:00:00');
- $sql = "SELECT sum(elog.totalconsumption) as totalconsumption,sum(elog.totalgeneration) as totalgeneration FROM project as P
- join lampinfo as L on L.projectid = P.id
- join (select t1.* FROM electric_info_log as t1 join (select lampid,max(updatetime) as time FROM electric_info_log group by lampid) as t2 on t1.updatetime = t2.time and t1.lampid = t2.lampid) as elog on elog.lampid = L.id
- where P.id = {$projectid}
- group by P.id ";
- $total = $this->db->query($sql)->row_array();
- $total['totalconsumption'] = empty($total['totalconsumption']) ? 0 : $total['totalconsumption'];
- $total['totalgeneration'] = empty($total['totalgeneration']) ? 0 : $total['totalgeneration'];
- $sql = "SELECT sum(elog.dayconsumption) as dayconsumption,sum(elog.daygeneration) as daygeneration FROM project as P
- join lampinfo as L on L.projectid = P.id
- join (select t1.* FROM electric_info_log as t1 join (select lampid,max(updatetime) as time FROM electric_info_log where updatetime >= '{$today}' group by lampid) as t2 on t1.updatetime = t2.time and t1.lampid = t2.lampid) as elog on elog.lampid = L.id
- where P.id = {$projectid}
- group by P.id ";
- $today = $this->db->query($sql)->row_array();
- $res['dayconsumption'] = empty($today['dayconsumption']) ? 0 : $today['dayconsumption'];
- $res['daygeneration'] = empty($today['daygeneration']) ? 0 : $today['daygeneration'];
- //当月第一天和当年第一天
- $beginDateMonth = date('Y-m-01 00:00:00', time());
- $beginDateYear = date('Y-01-01 00:00:00', time());
- // 当月总发/用电量
- $sql = "SELECT sum(elog.totalconsumption) as totalconsumption,sum(elog.totalgeneration) as totalgeneration FROM project as P
- join lampinfo as L on L.projectid = P.id
- join (select t1.* FROM electric_info_log as t1 join (select lampid,max(updatetime) as time FROM electric_info_log where updatetime <= '{$beginDateMonth}' group by lampid) as t2 on t1.updatetime = t2.time and t1.lampid = t2.lampid) as elog on elog.lampid = L.id
- where P.id = {$projectid}
- group by P.id ";
- $month = $this->db->query($sql)->row_array();
- $month['totalconsumption'] = empty($month['totalconsumption']) ? 0 : $month['totalconsumption'];
- $month['totalgeneration'] = empty($month['totalgeneration']) ? 0 : $month['totalgeneration'];
- $res['monthconsumption'] = $total['totalconsumption'] - $month['totalconsumption'];
- $res['monthgeneration'] = $total['totalgeneration'] - $month['totalgeneration'];
- // 当年总用电量
- $sql = "SELECT sum(elog.totalconsumption) as totalconsumption,sum(elog.totalgeneration) as totalgeneration FROM project as P
- join lampinfo as L on L.projectid = P.id
- join (select t1.* FROM electric_info_log as t1 join (select lampid,max(updatetime) as time FROM electric_info_log where updatetime <= '{$beginDateYear}' group by lampid) as t2 on t1.updatetime = t2.time and t1.lampid = t2.lampid) as elog on elog.lampid = L.id
- where P.id = {$projectid}
- group by P.id ";
- $year = $this->db->query($sql)->row_array();
- $year['totalconsumption'] = empty($year['totalconsumption']) ? 0 : $year['totalconsumption'];
- $year['totalgeneration'] = empty($year['totalgeneration']) ? 0 : $year['totalgeneration'];
- $res['yearconsumption'] = $total['totalconsumption'] - $year['totalconsumption'];
- $res['yeargeneration'] = $total['totalgeneration'] - $year['totalgeneration'];
- return $res;
- }
- // 通过路灯id获取项目信息
- public function get_data_by_field($field,$value){
- $fields = "P.projectname as project_name,
- P.projectid as project_no,
- P.createtime as create_time,
- z1.name as zone,
- z2.name as province,
- C.name as company,
- C.id as companyid,
- P.id,
- P.lampcount as install_num";
- $sql = "SELECT {$fields} FROM project as P
- left join zone as z1 on z1.id = P.zone
- left join zone as z2 on z2.id = P.province
- left join company as C on C.id = P.company
- left join lampinfo as L on L.projectid = P.id
- where {$field} = '{$value}'";
- $res1 = $this->db->query($sql)->row_array();
- // 获取项目的日用电量,月用电量,年用电量
- $res2 = $this->project_data($res1['id']);
- $data = array_merge($res1,$res2);
- return $data;
- }
-
- public function queryData($companyid = 0){
- if ($this->session->userdata('role') == COMPANY_ADMIN) {
- $companyid = $this->session->userdata('company_id');
- $this->db->where('company', $companyid);
- } else if ($this->session->userdata('role') == COMPANY_CUSTOMER) {
- $this->load->model('User_model');
- $user_project = $this->User_model->get_user_zone();
- if ($user_project) {
- $projects = explode(',', $user_project);
- $this->db->where_in('id',$projects);
- } else {
- $this->db->where_in('id', array(0));
- }
- } else if ($companyid > 0) {
- $this->db->where('company', $companyid);
- }
-
- $this->db->order_by("projectid","asc");
- $query = $this->db->get($this->table);
- return $query->result_array();
- }
- public function get_list_in($where_in_field, $where_in, $fields='*', $filter=array()) {
- $this->db->select($fields);
- if(!empty($where_in_field) && !empty($where_in)){
- $this->db->where_in($where_in_field, $where_in);
- }
-
- if (isset($filter['keyword']) && !empty($filter['keyword'])){
- $networkNames = explode(",",$filter['keyword']);
- foreach ($networkNames as $name){
- $this->db->or_like('projectname', $name);
- }
- }
-
- $query = $this->db->get($this->table);
- return $query->result_array();
- }
- public function getIdsLikeName($name){
- $this->db->select('id');
- $this->db->like('projectname', $name);
- $query = $this->db->get($this->table);
- $arrProject = $query->result_array();
- $ids = array();
- foreach ($arrProject as $k=> $project) {
- $ids[] = $project['id'];
- }
- return $ids;
- }
-
- public function getIdByName($name){
- $this->db->select('id');
- $this->db->where('projectname', $name);
- $query = $this->db->get($this->table);
- $result = $query->row_array();
- if (isset($result['id'])) {
- return $result['id'];
- }
- return false;
- }
- public function get_project_ids($filter=array()){
- $temp = array();
- if (!empty($filter)){
- foreach ($filter as $k => $v) {
- $temp[] = "{$k} = {$v}";
- }
- }
- $where = '';
- if (!empty($temp)) {
- $where = ' where '.implode(' and ', $temp);
- }
-
- $sql = "select id from {$this->table} ".$where;
- $query = $this->db->query($sql);
- $arrProject = $query->result_array();
- $ids = array_column($arrProject, 'id');
- return $ids;
- }
- public function get_projectid_list(){
- $this->db->select('id');
- $this->db->select('projectid');
- $query = $this->db->get($this->table);
- $list = $query->result_array();
- return $list;
- }
- public function get_projectid($role,$userid,$companyid,$page,$count,$keyword){
- $sql = '';
- if ($role == SYSTEM_ADMIN) { // 系统管理员
- $sql = "select id as projectid from project where 1=1";
- }
- // elseif ($role == COMPANY_ADMIN) { // 公司管理员
- // if(!empty($companyid)){
- // $sql = "select id as projectid from project where company={$companyid}";
- // }
- // }
- else{ // 公司客户
- $sql = "select zone as projectid from user where id={$userid}";
- $zone = $this->db->query($sql)->row_array();
- $zone['zone'] = empty($zone['zone']) ? '0' : $zone['zone'];
- $sql = "select id as projectid from project where id in ({$zone['zone']})";
- }
- if (!empty($keyword)) {
- $sql .= " and projectname like '%{$keyword}%'";
- }
- if (!empty($sql)) {
- $data = $this->db->query($sql)->result_array();
- $idArr = array();
- foreach ($data as $v) {
- $idArr[] = $v['projectid'];
- }
- $idStr = implode(',', $idArr);
- $ids = explode(',', $idStr);
- $k = 0;
- $i = 0;
- foreach ($ids as $v) { // 分页处理
- $res[$k][] = $v;
- $i ++;
- if ($i >= $count) {
- $i = 0;
- $k ++;
- }
- }
- return array('idArr'=>$res[$page-1],'total'=>count($ids));
- }else{
- return '';
- }
- }
-
- public function getList($filter,$page = null,$limit = null){
- if (!empty($filter)){
- if (isset($filter['keyword']) && !empty($filter['keyword'])){
- $projectNames = explode(",",$filter['keyword']);
- foreach ($projectNames as $name){
- $this->db->or_like('projectname', $name);
- }
- unset($filter['keyword']);
- }
-
- if (isset($filter['keyword'])){
- unset($filter['keyword']);
- }
-
- if (isset($filter['ids']) && !empty($filter['ids']) && is_array($filter['ids'])){
- $this->db->where_in('id',$filter['ids']);
- unset($filter['ids']);
- }
- foreach ($filter as $k => $v) {
- if ($k == 'id' && empty($v)){
- continue;
- }
- $this->db->where($k,$v);
-
- }
- }
- if ($this->session->userdata('role') == COMPANY_ADMIN) {
- $companyid = $this->session->userdata('company_id');
- $this->db->where('company', $companyid);
- }
- if ($this->session->userdata('role') == COMPANY_CUSTOMER) {
- $this->load->model('User_model');
- $user_project = $this->User_model->get_user_zone();
- if ($user_project) {
- $projects = explode(',', $user_project);
- $this->db->where_in('id',$projects);
- } else {
- $this->db->where_in('id', array(0));
- }
- }
-
- $this->db->order_by("projectid","asc");
- if(is_numeric($page) && is_numeric($limit)){
- $this->db->limit($limit,($page-1)*$limit);
- }
-
-
- $query = $this->db->get($this->table);
- $arrProject = $query->result_array();
- $zoneids = array(0);
- foreach ($arrProject as $k=> $project) {
- $zoneids[] = $project['zone'];
- $zoneids[] = $project['province'];
- }
- $zoneids = array_unique($zoneids);
- $this->db->select('id');
- $this->db->select('name');
- $this->db->where_in('id', $zoneids);
- $query = $this->db->get('zone');
- $zoneMap = $query->result_array();
-
- foreach ($arrProject as $pk=> $project) {
- $arrProject[$pk]['zone_name'] = '';
- $arrProject[$pk]['province_name'] = '';
- foreach ($zoneMap as $zk => $zone) {
- if ($project['zone'] == $zone['id']) {
- $arrProject[$pk]['zone_name'] = $zone['name'];
- } elseif ($project['province'] == $zone['id']) {
- $arrProject[$pk]['province_name'] = $zone['name'];
- }
- }
- }
-
- return $arrProject;
- }
-
- public function getTotal($filter, $role, $companyid, $userid = 0){
- $this->db->select('count(id) as total');
- if (!empty($filter)){
- if (isset($filter['keyword']) && !empty($filter['keyword'])){
- $projectNames = explode(",",$filter['keyword']);
- foreach ($projectNames as $name){
- $this->db->or_like('projectname', $name);
- }
- unset($filter['keyword']);
- }
-
- if (isset($filter['keyword'])){
- unset($filter['keyword']);
- }
-
- if (isset($filter['ids']) && !empty($filter['ids']) && is_array($filter['ids'])){
- $this->db->where_in('id',$filter['ids']);
- unset($filter['ids']);
- }
- foreach ($filter as $k => $v) {
- $this->db->where($k,$v);
- }
- }
- // if ($role == COMPANY_ADMIN) {
- // $this->db->where('company', $companyid);
- // }
-
- if ($role == COMPANY_CUSTOMER || $role == COMPANY_ADMIN) {
- $this->load->model('User_model');
- $user_project = $this->User_model->get_user_zone($userid);
- if (!empty($user_project)) {
- $projects = explode(',', $user_project);
- $this->db->where_in('id',$projects);
- } else {
- $this->db->where_in('id', array(0));
- }
- }
-
- $query = $this->db->get($this->table);
- $arr = $query->row_array();
- return $arr['total'];
- }
-
- public function get_company_by_id($id){
- $this->db->select('company');
- $this->db->where('id',$id);
- $data = $this->db->get($this->table)->row_array();
- return $data['company'];
- }
-
- public function delBatch($ids){
- $this->db->where_in('id',$ids);
- $this->db->delete($this->table);
- if ($this->db->affected_rows()) {
- return true;
- } else {
- return false;
- }
- }
-
- public function getDataCount($condition, $id = 0) {
- if (!empty($condition)){
- foreach ($condition as $k => $v) {
- $this->db->where($k,$v);
- }
- }
- if (!empty($id)) {
- $this->db->where('id !=',$id);
- }
- $query = $this->db->get($this->table);
- $data = $query->row_array();
- if (empty($data)) {
- return 0;
- } else {
- return $id == $data['id'] ? 0 : 1;
- }
- }
- public function getData($condition, $fields = '*') {
- $this->db->select($fields);
- if (!empty($condition)){
- foreach ($condition as $k => $v) {
- $this->db->where($k,$v);
- }
- }
- $query = $this->db->get($this->table);
- $data = $query->row_array();
- return $data;
- }
- public function get_list_by_company($field, $role, $companyid, $projectid){
- $this->db->select($field);
- if ($role == SYSTEM_ADMIN) {
- $this->db->where('company',$companyid);
- }else{
- $this->db->where('company',$companyid);
- if (!empty($projectid)) {
- $idArr = explode(',', $projectid);
- }else{
- $idArr = array(0);
- }
- $this->db->where_in('id',$idArr);
- }
- return $this->db->get($this->table)->result_array();
- }
- public function getMultiData($filter, $fields = '*', $role = 0, $companyid = 0, $userid = 0) {
- $this->db->select($fields);
- if (!empty($filter)){
- if (isset($filter['keyword']) && !empty($filter['keyword'])){
- $projectNames = explode(",",$filter['keyword']);
- foreach ($projectNames as $name){
- $this->db->or_like('P.projectname', $name);
- }
- unset($filter['keyword']);
- }
-
- if (isset($filter['keyword'])){
- unset($filter['keyword']);
- }
- if(!empty($filter['page']) && !empty($filter['count'])){
- $this->db->limit($filter['count'],($filter['page']-1)*$filter['count']);
- unset($filter['page']);
- unset($filter['count']);
- }
- foreach ($filter as $k => $v) {
- $this->db->where($k,$v);
- }
- }
- // if ($role == COMPANY_ADMIN) {
- // $this->db->where('company', $companyid);
- // } else
- if ($role == COMPANY_CUSTOMER || $role == COMPANY_ADMIN) {
- $this->load->model('User_model');
- $user_project = $this->User_model->get_user_zone($userid);
- if (!empty($user_project)) {
- $projects = explode(',', $user_project);
- $this->db->where_in('P.id',$projects);
- } else {
- $this->db->where_in('P.id', array(0));
- }
- }
- $this->db->join('zone as Z','on Z.id = P.zone','left');
- $this->db->join('zone as S','on S.id = P.province','left');
- $query = $this->db->get($this->table.' as P');
-
- $data = $query->result_array();
- return $data;
- }
- // 添加路灯数
- public function add_lamp_count($data){
- $sql = "update `project` set `lampcount` = `lampcount` + 1 WHERE `id`={$data['projectid']}";
- $this->db->query($sql);
- if ($this->db->affected_rows() == 1) {
- return true;
- } else {
- return false;
- }
- }
- // 减少路灯数
- public function minus_lamp_count($data){
- $sql = "update `project` set `lampcount` = `lampcount` - 1, `faultcount` = `faultcount` - {$data['faultcount']} WHERE `id`={$data['projectid']} and `lampcount` >= 1 and `faultcount` >= {$data['faultcount']}";
- $this->db->query($sql);
- if ($this->db->affected_rows() == 1) {
- return true;
- } else {
- return false;
- }
- }
- // 添加网络数
- public function add_network_count($data){
- $sql = "update `project` set `networkcount` = `networkcount` + 1, `lampcount` = `lampcount` + {$data['lampcount']}, `faultcount` = `faultcount` + {$data['faultcount']} WHERE `id`={$data['projectid']}";
- $this->db->query($sql);
- if ($this->db->affected_rows() == 1) {
- return true;
- } else {
- return false;
- }
- }
- // 减少网络数
- public function minus_network_count($data){
- $sql = "update `project` set `networkcount` = `networkcount` - 1, `lampcount` = `lampcount` - {$data['lampcount']}, `faultcount` = `faultcount` - {$data['faultcount']} WHERE `id`={$data['projectid']} and `networkcount` >= 1 and `lampcount` >= {$data['lampcount']} and `faultcount` >= {$data['faultcount']}";
- $this->db->query($sql);
- if ($this->db->affected_rows() == 1) {
- return true;
- } else {
- return false;
- }
- }
-
- public function getIdByLikeName($name){
- $sql = "SELECT id FROM project WHERE projectname LIKE '%".$name."%'";
- $query = $this->db->query($sql);
- $arr = $query->row_array();
- if (!empty($arr)){
- return $arr['id'];
- }
- return false;
- }
- // 添加监控数
- public function add_monitor_count($data){
- $sql = "update `project` set `monitorcount` = `monitorcount` + {$data['count']} WHERE `id`={$data['projectid']}";
- $this->db->query($sql);
- if ($this->db->affected_rows() == 1) {
- return true;
- } else {
- return false;
- }
- }
- // 减少监控数
- public function minus_monitor_count($data){
- $sql = "update `project` set `monitorcount` = `monitorcount` - {$data['count']} WHERE `id`={$data['projectid']} and `monitorcount` >= {$data['count']}";
- $this->db->query($sql);
- if ($this->db->affected_rows() == 1) {
- return true;
- } else {
- return false;
- }
- }
- public function getNameById($id, $field = 'projectname'){
- $this->db->where('id',$id);
- $query = $this->db->get($this->table);
- $arr = $query->row_array();
- return !empty($arr) ? $arr[$field] : 0;
- }
- // 减少路灯故障数
- public function minus_fault_count($id){
- $sql = "update `project` set `faultcount` = `faultcount` - 1 WHERE `id`= {$id} and `faultcount` >= 1";
- $this->db->query($sql);
- if ($this->db->affected_rows() == 1) {
- return true;
- } else {
- return false;
- }
- }
- public function delData($condition) {
- if (!empty($condition)){
- foreach ($condition as $k => $v) {
- if (is_array($v)) {
- if (!empty($v)) {
- $this->db->where_in($k,$v);
- }else{
- $this->db->where_in($k,array(0));
- }
- }else{
- $this->db->where($k,$v);
- }
- }
- }else{
- return false;
- }
- $this->db->delete($this->table);
- if ($this->db->affected_rows() > 0) {
- return true;
- } else {
- return false;
- }
- }
- }
- ?>
|