Home.php 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. include_once(FCPATH . 'application/controllers/Base_Controller.php');
  3. class Home extends Base_Controller {
  4. public function __construct() {
  5. parent::__construct();
  6. $this->load->model('Lamp_model');
  7. $this->load->model('Project_model');
  8. $this->load->model('Global_location_model');
  9. }
  10. private function get_project_id(){
  11. $cityId = intval($this->input->post('cityId',true));
  12. $proId = intval($this->input->post('proId',true));
  13. $projectIdArr = array();
  14. $areaList = array();
  15. $cityList = array();
  16. $proList = array();
  17. if (!empty($proId)) {
  18. $proList[] = array('id'=>$proId,'level'=>2);
  19. $list = $this->Global_location_model->get_list(['pid'=>$proId],'id,level');
  20. foreach ($list as $key => $value) {
  21. if ($value['level'] == 3) {
  22. $cityList[] = $value;
  23. }elseif ($value['level'] == 4) {
  24. $areaList[] = $value;
  25. }
  26. }
  27. }
  28. if (!empty($cityId)) {
  29. $areaList = array();
  30. $cityList = array(['id'=>$cityId,'level'=>3]);
  31. }
  32. if (!empty($cityList)){
  33. $cityId = array_unique(array_filter(array_column($cityList, 'id')));
  34. $list = $this->Global_location_model->get_list(['pid'=>$cityId],'id,level');
  35. foreach ($list as $key => $value) {
  36. if ($value['level'] == 4) $areaList[] = $value;
  37. }
  38. }
  39. $cityArr = array_unique(array_merge(array_column($proList, 'id'),array_column($cityList, 'id'),array_column($areaList, 'id')));
  40. if (!empty($cityArr)) {
  41. $res = $this->Project_model->get_list(['cityid'=>$cityArr],'id');
  42. $projectIdArr = array_unique(array_column($res, 'id'));
  43. }
  44. return $projectIdArr;
  45. }
  46. // 设备统计信息
  47. public function data(){
  48. $projectIdArr = $this->get_project_id();
  49. $data = array(
  50. 'day_new_count' => 0,
  51. 'day_faulty_count' => 0,
  52. 'total_light_count' => 0,
  53. 'light_up_count' => 0,
  54. 'online_count' => 0,
  55. 'faulty_count' => 0
  56. );
  57. $createTime = $this->get_user_info('createTime');
  58. $data['logCount'] = empty($createTime) ? 0 : ceil((time() - strtotime($createTime))/(3600 * 24));
  59. $date = date('Y-m-d H:i:s',strtotime(date('Y-m-d 00:00:00',time())) - 6*3600);
  60. $role = $this->get_user_info('role');
  61. if ($role == SYSTEM_ADMIN) {
  62. $where = [];
  63. if (!empty($projectIdArr)) $where['projectid'] = $projectIdArr;
  64. $data['total_light_count'] = $this->Lamp_model->get_count($where);
  65. $where = ['createtime >='=>$date];
  66. if (!empty($projectIdArr)) $where['projectid'] = $projectIdArr;
  67. $data['day_new_count'] = $this->Lamp_model->get_count($where);
  68. $where = ['netstatus'=>1,'lighteness >'=>0];
  69. if (!empty($projectIdArr)) $where['projectid'] = $projectIdArr;
  70. $data['light_up_count'] = $this->Lamp_model->get_count($where);
  71. $where = ['netstatus'=>1];
  72. if (!empty($projectIdArr)) $where['projectid'] = $projectIdArr;
  73. $data['online_count'] = $this->Lamp_model->get_count($where);
  74. // $where = ['netstatus'=>1,'devstatus !='=>0];
  75. // if (!empty($projectIdArr)) $where['projectid'] = $projectIdArr;
  76. // $data['faulty_count'] = $this->Lamp_model->get_count($where);
  77. // $where = ['netstatus'=>1,'logtime >='=>$date,'devstatus !='=>0];
  78. // if (!empty($projectIdArr)) $where['projectid'] = $projectIdArr;
  79. // $data['day_faulty_count'] = $this->Lamp_model->get_count($where);
  80. // $where = ['L.netstatus ='=>1];
  81. $where = [];
  82. if (!empty($projectIdArr)) $where['L.projectid'] = $projectIdArr;
  83. $where1 = [];
  84. foreach ($where as $key => $value) {
  85. if (is_array($value)) {
  86. $where1[] = $key.' in ('.implode(',', $value).')';
  87. }else{
  88. $where1[] = $key.' '.$value;
  89. }
  90. }
  91. $where1[] = '(L.controllerstatus = 5 OR L.netstatus = 0)';
  92. $where1 = implode(' AND ', $where1);
  93. $join = [];
  94. $join[] = ['table'=>'(select w1.* from warning_info_log as w1 join (select lampid,max(updatetime) as maxTime from warning_info_log group by lampid) as w2 on w1.lampid = w2.lampid AND w1.updatetime = w2.maxTime) as WI','cond'=>'L.id = WI.lampid','type'=>'inner'];
  95. $total = $this->Lamp_model->get_list_by_multi_join($where1, 'count(*) as total',NULL, NULL, $join, NULL, NUll, 'L', true);
  96. $data['faulty_count'] = $total['total'];
  97. $where1 .= ' AND WI.updatetime >= "'.$date.'"';
  98. $total = $this->Lamp_model->get_list_by_multi_join($where1, 'count(*) as total',NULL, NULL, $join, NULL, NUll, 'L', true);
  99. $data['day_faulty_count'] = $total['total'];
  100. }else{
  101. $company = $this->get_user_info('company');
  102. $type = $this->get_user_info('role');
  103. // $where = ['P.company ='=>$company];
  104. $where = array();
  105. if ($role == 2) {
  106. // $filter .= ' AND L.manu = '.$company;
  107. $where['L.manu ='] = $company;
  108. // $countWhere[] = 'manu = '.$company;
  109. }elseif ($role == 3) {
  110. // $filter .= ' AND L.supplier = '.$company;
  111. // $countWhere[] = 'supplier = '.$company;
  112. $where['L.supplier ='] = $company;
  113. }elseif ($role == 4) {
  114. // $filter .= ' AND L.po = '.$company;
  115. // $countWhere[] = 'po = '.$company;
  116. $where['L.po ='] = $company;
  117. }else {
  118. // $filter .= ' AND P.cityid = '.$company;
  119. $where['P.cityid ='] = $company;
  120. }
  121. // if (!empty($projectIdArr)) $where['P.id'] = $projectIdArr;
  122. $join = [
  123. ['table'=>'project as P','cond'=>'P.id = L.projectid','type'=>'inner']
  124. ];
  125. $total = $this->Lamp_model->get_list_by_multi_join($where, 'count(*) as total',NULL, NULL, $join, NULL, NUll, 'L', true);
  126. $data['total_light_count'] = $total['total'];
  127. $where['L.createtime >='] = $date;
  128. $total = $this->Lamp_model->get_list_by_multi_join($where, 'count(*) as total',NULL, NULL, $join, NULL, NUll, 'L', true);
  129. $data['day_new_count'] = $total['total'];
  130. unset($where['L.createtime >=']);
  131. $where['L.netstatus ='] = 1;
  132. $total = $this->Lamp_model->get_list_by_multi_join($where, 'count(*) as total',NULL, NULL, $join, NULL, NUll, 'L', true);
  133. $data['online_count'] = $total['total'];
  134. $where['L.lighteness >'] = 1;
  135. $total = $this->Lamp_model->get_list_by_multi_join($where, 'count(*) as total',NULL, NULL, $join, NULL, NUll, 'L', true);
  136. $data['light_up_count'] = $total['total'];
  137. unset($where['L.lighteness >']);
  138. // $where['L.devstatus !='] = 0;
  139. $where1 = [];
  140. foreach ($where as $key => $value) {
  141. if (is_array($value)) {
  142. $where1[] = $key.' in ('.implode(',', $value).')';
  143. }else {
  144. $where1[] = $key.' '.$value;
  145. }
  146. }
  147. unset($where['L.netstatus =']);
  148. // $where1[] = 'L.controllerstatus = 5';
  149. $where1[] = '(L.controllerstatus = 5 OR L.netstatus = 0)';
  150. // $where1[] = '(WI.batstatus != 0 OR WI.panelstatus != 0 OR WI.lampstatus != 0 OR WI.tempstatus != 0)';
  151. $where1 = implode(' AND ', $where1);
  152. $join[] = ['table'=>'(select w1.* from warning_info_log as w1 join (select lampid,max(updatetime) as maxTime from warning_info_log group by lampid) as w2 on w1.lampid = w2.lampid AND w1.updatetime = w2.maxTime) as WI','cond'=>'L.id = WI.lampid','type'=>'inner'];
  153. $total = $this->Lamp_model->get_list_by_multi_join($where1, 'count(*) as total',NULL, NULL, $join, NULL, NUll, 'L', true);
  154. $data['faulty_count'] = $total['total'];
  155. // $where['L.devstatus !='] = 0;
  156. $where1 .= ' AND WI.updatetime >= "'.$date.'"';
  157. $total = $this->Lamp_model->get_list_by_multi_join($where1, 'count(*) as total',NULL, NULL, $join, NULL, NUll, 'L', true);
  158. $data['day_faulty_count'] = $total['total'];
  159. }
  160. exit(json_result('0000',$this->response['0000'],$data));
  161. }
  162. // 发用电量统计信息
  163. public function sta_info(){
  164. $data = array(
  165. 'electricity' => 0,
  166. 'CO2_reduction' => 0,
  167. 'SO2_reduction' => 0,
  168. 'TCE_reduction' => 0
  169. );
  170. $type = intval($this->input->post('type',true));
  171. $projectIdArr = $this->get_project_id();
  172. $role = $this->get_user_info('role');
  173. $type = $this->input->post('type',true);
  174. $where = array();
  175. if ($role != SYSTEM_ADMIN){
  176. $company = $this->get_user_info('company');
  177. // $where['P.company'] = $company;
  178. if ($role == 2) {
  179. // $filter .= ' AND L.manu = '.$company;
  180. $where['L.manu ='] = $company;
  181. // $countWhere[] = 'manu = '.$company;
  182. }elseif ($role == 3) {
  183. // $filter .= ' AND L.supplier = '.$company;
  184. // $countWhere[] = 'supplier = '.$company;
  185. $where['L.supplier ='] = $company;
  186. }elseif ($role == 4) {
  187. // $filter .= ' AND L.po = '.$company;
  188. // $countWhere[] = 'po = '.$company;
  189. $where['L.po ='] = $company;
  190. }else {
  191. // $filter .= ' AND P.cityid = '.$company;
  192. $where['P.cityid ='] = $company;
  193. }
  194. }
  195. if (!empty($projectIdArr)) $where['L.projectid'] = $projectIdArr;
  196. if ($type == 0) {
  197. $join = [];
  198. $join[] = ['table'=>'project as P','cond'=>'L.projectid = P.id','type'=>'left'];
  199. $join[] = ['table'=>'(select w1.* from realtime_info_log as w1 join (select lampid,max(updatetime) as maxTime from realtime_info_log group by lampid) as w2 on w1.lampid = w2.lampid AND w1.updatetime = w2.maxTime) as RI','cond'=>'L.id = RI.lampid','type'=>'inner'];
  200. $res = $this->Lamp_model->get_list_by_multi_join($where, 'sum(RI.dischargeday) as discharge,sum(RI.chargeday) as charge',NULL, NULL, $join, NULL, NUll, 'L', true);
  201. }elseif ($type == 1) {
  202. $join = [];
  203. $join[] = ['table'=>'project as P','cond'=>'L.projectid = P.id','type'=>'left'];
  204. $join[] = ['table'=>'(select w1.* from history_info_log as w1 join (select lampid,max(updatetime) as maxTime from history_info_log group by lampid) as w2 on w1.lampid = w2.lampid AND w1.updatetime = w2.maxTime) as RI','cond'=>'L.id = RI.lampid','type'=>'inner'];
  205. $res = $this->Lamp_model->get_list_by_multi_join($where, 'sum(RI.weekdischarg) as discharge,sum(RI.weekchargeah) as charge',NULL, NULL, $join, NULL, NUll, 'L', true);
  206. }elseif ($type == 2) {
  207. $join = [];
  208. $join[] = ['table'=>'project as P','cond'=>'L.projectid = P.id','type'=>'left'];
  209. $join[] = ['table'=>'(select w1.* from history_info_log as w1 join (select lampid,max(updatetime) as maxTime from history_info_log group by lampid) as w2 on w1.lampid = w2.lampid AND w1.updatetime = w2.maxTime) as RI','cond'=>'L.id = RI.lampid','type'=>'inner'];
  210. $res = $this->Lamp_model->get_list_by_multi_join($where, 'sum(RI.monthdischarge) as discharge,sum(RI.monthchargeah) as charge',NULL, NULL, $join, NULL, NUll, 'L', true);
  211. }else{
  212. $join = [];
  213. $join[] = ['table'=>'project as P','cond'=>'L.projectid = P.id','type'=>'left'];
  214. $join[] = ['table'=>'(select w1.* from history_info_log as w1 join (select lampid,max(updatetime) as maxTime from history_info_log group by lampid) as w2 on w1.lampid = w2.lampid AND w1.updatetime = w2.maxTime) as RI','cond'=>'L.id = RI.lampid','type'=>'inner'];
  215. $res = $this->Lamp_model->get_list_by_multi_join($where, 'sum(RI.totaldischarah) as discharge,sum(RI.totalchargeah) as charge',NULL, NULL, $join, NULL, NUll, 'L', true);
  216. }
  217. $data['electricity'] = round($res['discharge']/1000,1);
  218. // $data['CO2_reduction'] = $res['discharge'];
  219. // $data['SO2_reduction'] = $res['discharge'];
  220. // $data['TCE_reduction'] = $res['discharge'];
  221. $data['CO2_reduction'] = round($res['charge']*0.977/1000, 1);
  222. $data['SO2_reduction'] = round($res['charge']*0.977/2620*8.5, 1);
  223. $data['TCE_reduction'] = round($res['charge']*0.977/2620, 1);
  224. exit(json_result('0000',$this->response['0000'],$data));
  225. }
  226. // 设备统计列表
  227. public function dev_list(){
  228. $projectIdArr = $this->get_project_id();
  229. $role = $this->get_user_info('role');
  230. $type = $this->input->post('type',true);
  231. $where = array();
  232. if ($role != SYSTEM_ADMIN){
  233. $company = $this->get_user_info('company');
  234. // $where[] = 'P.company = '.$company;
  235. if ($role == 2) {
  236. // $filter .= ' AND L.manu = '.$company;
  237. $where[] = 'L.manu = '.$company;
  238. // $countWhere[] = 'manu = '.$company;
  239. }elseif ($role == 3) {
  240. // $filter .= ' AND L.supplier = '.$company;
  241. // $countWhere[] = 'supplier = '.$company;
  242. $where[] = 'L.supplier = '.$company;
  243. }elseif ($role == 4) {
  244. // $filter .= ' AND L.po = '.$company;
  245. // $countWhere[] = 'po = '.$company;
  246. $where[] = 'L.po = '.$company;
  247. }else {
  248. // $filter .= ' AND P.cityid = '.$company;
  249. $where[] = 'P.cityid = '.$company;
  250. }
  251. }
  252. if ($type == 2) {
  253. $fields = 'L.manu as company,G.id';
  254. $group = 'group by L.manu';
  255. $where[] = 'L.manu != 0';
  256. $where[] = 'L.manu != ""';
  257. }elseif ($type == 3) {
  258. $fields = 'L.supplier as company,G.id';
  259. $group = 'group by L.supplier';
  260. $where[] = 'L.supplier != 0';
  261. $where[] = 'L.supplier != ""';
  262. }elseif ($type == 4) {
  263. $fields = 'L.po as company,G.id';
  264. $group = 'group by L.po';
  265. $where[] = 'L.po != 0';
  266. $where[] = 'L.po != ""';
  267. }else{
  268. $fields = 'G.english_name as company,G.id';
  269. $group = 'group by G.id';
  270. // $where[] = 'L.upazilla != 0';
  271. // $where[] = 'L.upazilla != ""';
  272. }
  273. // $cityId = $this->input->post('cityId',true);
  274. // $proId = $this->input->post('proId',true);
  275. if (!empty($projectIdArr)) $where[] = 'L.projectid in ('.implode(',', $projectIdArr).')';
  276. $where1 = empty($where) ? '' : 'where '.implode(' AND ', $where);
  277. $query = 'select t1.total,C.name,C.no,C.id,t1.id as cityid,t1.company from (select count(*) as total,'.$fields.' from lampinfo AS L left join project AS P on P.id = L.projectid left join global_location G on P.cityid = G.id '.$where1.' '.$group.') as t1 left join company as C on t1.company = C.id order by total DESC limit 10';
  278. // var_dump($query);
  279. $list = $this->db->query($query)->result_array();
  280. // var_dump($list);die;
  281. if (empty($list)) exit(json_result('0000',$this->response['0000'],array('list'=>array())));
  282. $temp = array();
  283. $allDev = array_sum(array_column($list, 'total'));
  284. foreach ($list as $key => $value) {
  285. $totalPer = empty($allDev) ? '0%' : round($value['total']/$allDev*100,2).'%';
  286. $value['name'] = empty($value['no']) ? $value['name'] : $value['no'];
  287. $temp2 = array('name'=>$value['name'],'total'=>$value['total'],'onlineCount'=>0,'offlineCount'=>0,'faultCount'=>0,'totalPer'=>$totalPer);
  288. if ($type == 5) {
  289. $temp2['name'] = $value['company'];
  290. $temp[$value['cityid']] = $temp2;
  291. }else{
  292. $temp[$value['id']] = $temp2;
  293. }
  294. }
  295. $companyArr = array_unique(array_column($list, 'id'));
  296. $cityArr = array_unique(array_column($list, 'cityid'));
  297. if ($type == 2) {
  298. $where[] = 'L.manu in ('.implode(',', $companyArr).')';
  299. }elseif ($type == 3) {
  300. $where[] = 'L.supplier in ('.implode(',', $companyArr).')';
  301. }elseif ($type == 4) {
  302. $where[] = 'L.po in ('.implode(',', $companyArr).')';
  303. }else{
  304. $where[] = 'P.cityid in ('.implode(',', $cityArr).')';
  305. }
  306. $where1 = $where;
  307. $where1[] = 'L.netstatus = 0';
  308. $where1 = 'where '.implode(' AND ', $where1);
  309. if ($type == 5) {
  310. $query = 'select t1.total,t1.id from (select count(*) as total,'.$fields.' from lampinfo AS L left join project AS P on P.id = L.projectid left join global_location G on P.cityid = G.id '.$where1.' '.$group.') as t1 order by total DESC limit 10';
  311. }else{
  312. $query = 'select t1.total,C.id from (select count(*) as total,'.$fields.' from lampinfo AS L left join project AS P on P.id = L.projectid left join global_location G on P.cityid = G.id '.$where1.' '.$group.') as t1 left join company as C on t1.company = C.id order by total DESC limit 10';
  313. }
  314. $list = $this->db->query($query)->result_array();
  315. foreach ($list as $key => $value) {
  316. if (isset($temp[$value['id']])) $temp[$value['id']]['offlineCount'] = $value['total'];
  317. }
  318. $where1 = $where;
  319. $where1[] = 'L.netstatus = 1';
  320. $where1 = 'where '.implode(' AND ', $where1);
  321. if ($type == 5) {
  322. $query = 'select t1.total,t1.id from (select count(*) as total,'.$fields.' from lampinfo AS L left join project AS P on P.id = L.projectid left join global_location G on P.cityid = G.id '.$where1.' '.$group.') as t1 order by total DESC limit 10';
  323. }else{
  324. $query = 'select t1.total,C.id from (select count(*) as total,'.$fields.' from lampinfo AS L left join project AS P on P.id = L.projectid left join global_location G on P.cityid = G.id '.$where1.' '.$group.') as t1 left join company as C on t1.company = C.id order by total DESC limit 10';
  325. }
  326. $list = $this->db->query($query)->result_array();
  327. foreach ($list as $key => $value) {
  328. if (isset($temp[$value['id']])) $temp[$value['id']]['onlineCount'] = $value['total'];
  329. }
  330. $where1 = $where;
  331. $where1[] = 'L.netstatus = 1 AND L.lighteness > 0';
  332. $where1 = 'where '.implode(' AND ', $where1);
  333. if ($type == 7) {
  334. $query = 'select t1.total,t1.id from (select count(*) as total,'.$fields.' from lampinfo AS L left join project AS P on P.id = L.projectid left join global_location G on P.cityid = G.id '.$where1.' '.$group.') as t1 order by total DESC limit 10';
  335. }else{
  336. $query = 'select t1.total,C.id from (select count(*) as total,'.$fields.' from lampinfo AS L left join project AS P on P.id = L.projectid left join global_location G on P.cityid = G.id '.$where1.' '.$group.') as t1 left join company as C on t1.company = C.id order by total DESC limit 10';
  337. }
  338. $list = $this->db->query($query)->result_array();
  339. foreach ($list as $key => $value) {
  340. if (isset($temp[$value['id']])) $temp[$value['id']]['lightCount'] = $value['total'];
  341. }
  342. $where1 = $where;
  343. // $where1[] = 'L.netstatus = 1';
  344. $where1[] = '(L.controllerstatus = 5 OR L.netstatus = 0)';
  345. // $where1[] = '(WI.batstatus != 0 OR WI.panelstatus != 0 OR WI.lampstatus != 0 OR WI.tempstatus != 0)';
  346. $where1 = 'where '.implode(' AND ', $where1);
  347. if ($type == 5) {
  348. $query = 'select t1.total,t1.id from (select count(*) as total,'.$fields.' from lampinfo AS L join project AS P on P.id = L.projectid join (select w1.lampid,w1.batstatus,w1.panelstatus,w1.lampstatus,w1.tempstatus from warning_info_log as w1 join (select lampid,max(updatetime) as maxTime from warning_info_log group by lampid) as w2 on w1.updatetime = w2.maxTime AND w1.lampid = w2.lampid) as WI on WI.lampid = L.id left join global_location G on P.cityid = G.id '.$where1.' '.$group.') as t1 order by total DESC limit 10';
  349. }else{
  350. $query = 'select t1.total,C.id from (select count(*) as total,'.$fields.' from lampinfo AS L join project AS P on P.id = L.projectid join (select w1.lampid,w1.batstatus,w1.panelstatus,w1.lampstatus,w1.tempstatus from warning_info_log as w1 join (select lampid,max(updatetime) as maxTime from warning_info_log group by lampid) as w2 on w1.updatetime = w2.maxTime AND w1.lampid = w2.lampid) as WI on WI.lampid = L.id left join global_location G on P.cityid = G.id '.$where1.' '.$group.') as t1 left join company as C on t1.company = C.id order by total DESC limit 10';
  351. }
  352. $list = $this->db->query($query)->result_array();
  353. foreach ($list as $key => $value) {
  354. if (isset($temp[$value['id']])) $temp[$value['id']]['faultCount'] = $value['total'];
  355. }
  356. $list = array_values($temp);
  357. exit(json_result('0000',$this->response['0000'],array('list'=>$list)));
  358. }
  359. // 故障信息列表
  360. public function alarm_list(){
  361. $projectIdArr = $this->get_project_id();
  362. $role = $this->get_user_info('role');
  363. $where = array();
  364. if ($role != SYSTEM_ADMIN){
  365. $company = $this->get_user_info('company');
  366. // $where[] = 'P.company = '.$company;
  367. if ($role == 2) {
  368. // $filter .= ' AND L.manu = '.$company;
  369. $where[] = 'L.manu = '.$company;
  370. // $countWhere[] = 'manu = '.$company;
  371. }elseif ($role == 3) {
  372. // $filter .= ' AND L.supplier = '.$company;
  373. // $countWhere[] = 'supplier = '.$company;
  374. $where[] = 'L.supplier = '.$company;
  375. }elseif ($role == 4) {
  376. // $filter .= ' AND L.po = '.$company;
  377. // $countWhere[] = 'po = '.$company;
  378. $where[] = 'L.po = '.$company;
  379. }else {
  380. // $filter .= ' AND P.cityid = '.$company;
  381. $where[] = 'P.cityid = '.$company;
  382. }
  383. }
  384. // if (!empty($projectIdArr)) $where[] = 'P.id in ('.implode(',', $projectIdArr).')';
  385. // $where[] = '(WI.batstatus != 0 OR WI.panelstatus != 0 OR WI.lampstatus != 0 OR WI.tempstatus != 0)';
  386. // $where[] = 'L.netstatus = 1';
  387. $where[] = '(L.controllerstatus = 5 OR L.netstatus = 0)';
  388. $where1 = implode(' AND ', $where);
  389. // var_dump($where1);die;
  390. $join = [
  391. ['table'=>'project as P','cond'=>'P.id = L.projectid','type'=>'left']
  392. ];
  393. $join[] = ['table'=>'(select w1.* from warning_info_log as w1 join (select lampid,max(updatetime) as maxTime from warning_info_log group by lampid) as w2 on w1.lampid = w2.lampid AND w1.updatetime = w2.maxTime) as WI','cond'=>'L.id = WI.lampid','type'=>'left'];
  394. $join[] = ['table'=>'global_location as G1','cond'=>'G1.id = P.cityid','type'=>'left'];
  395. $join[] = ['table'=>'global_location as G2','cond'=>'G2.id = G1.pid','type'=>'left'];
  396. $join[] = ['table'=>'global_location as G3','cond'=>'G3.id = G2.pid','type'=>'left'];
  397. $list = $this->Lamp_model->get_list_by_join($where1, 'P.projectname as project,P.id as projectid,WI.batstatus,WI.id,L.id as lampid,WI.panelstatus,WI.lampstatus,WI.onlinestatus,WI.tempstatus,P.cityid,L.address,L.section,G1.english_name as areaName,G2.english_name as cityName,G3.english_name as proName,WI.updatetime,G1.timezone',NULL, NULL, $join, 'WI.updatetime DESC', NUll, 'L');
  398. $batstatus = $this->config->item('batstatus');
  399. $panelstatus = $this->config->item('panelstatus');
  400. $lampstatus = $this->config->item('lampstatus');
  401. $tempstatus = $this->config->item('tempstatus');
  402. $onlinestatus = $this->config->item('onlinestatus');
  403. foreach ($list as $key => $value) {
  404. $location = $value['proName'].'/'.$value['cityName'].'/'.$value['areaName'];
  405. $location = empty($value['section']) ? $location : $location.'/'.$value['section'];
  406. $list[$key]['location'] = $location;
  407. $list[$key]['fault_time'] = set_timezone($value['updatetime'],$value['timezone']);
  408. $temp2 = array();
  409. if (isset($batstatus[$value['batstatus']])) $temp2[] = $batstatus[$value['batstatus']];
  410. if (isset($panelstatus[$value['panelstatus']])) $temp2[] = $panelstatus[$value['panelstatus']];
  411. if (isset($lampstatus[$value['lampstatus']])) $temp2[] = $lampstatus[$value['lampstatus']];
  412. if (isset($tempstatus[$value['tempstatus']])) $temp2[] = $tempstatus[$value['tempstatus']];
  413. if (isset($onlinestatus[$value['onlinestatus']])) $temp2[] = $onlinestatus[$value['onlinestatus']];
  414. $list[$key]['fault_type'] = implode(',', $temp2);
  415. unset($list[$key]['cityName']);
  416. unset($list[$key]['proName']);
  417. unset($list[$key]['areaName']);
  418. unset($list[$key]['timezone']);
  419. unset($list[$key]['updatetime']);
  420. }
  421. exit(json_result('0000',$this->response['0000'],array('list'=>$list)));
  422. }
  423. // 字段管理
  424. public function fields(){
  425. $userid = $this->get_user_info('id');
  426. $data = $this->User_model->get_user_field($userid);
  427. if (empty($data) || empty($data['lampfield'])) {
  428. // $fieldstr = "number,lampstatus,updatetime,lighteness,address,lamppower,chargestage,battvoltage,overtimes,solarpower,isfaulted,status,section";
  429. $fieldstr = "number,lampstatus,updatetime,lighteness,address,lamppower,chargestage,battvoltage,overtimes,solarpower,isfaulted,status,section";
  430. }else{
  431. if ($data['lampfield'] == 'number,lampstatus,updatetime,lighteness,address,lamppower,chargestage,battvoltage,overtimes,solarpower,isfaulted,status') {
  432. $data['lampfield'] .= ',section';
  433. }
  434. $fieldstr = $data['lampfield'];
  435. }
  436. // 系统默认
  437. $def = array(
  438. array('name'=>'路灯编号','field'=>'L.number','fields1'=>'number','enname'=>'Lamp number'),
  439. array('name'=>'路段','field'=>'L.section','fields1'=>'section','enname'=>'Road'),
  440. // array('name'=>'路灯状态','field'=>'L.status as lampstatus,L.lighteness','fields1'=>'lampstatus','enname'=>'Lamp status'),
  441. array('name'=>'网络状态','field'=>'L.protocoltype,L.netstatus as status,L.rssi','fields1'=>'status','enname'=>'Network status'),
  442. // array('name'=>'信号状态','field'=>'L.protocoltype,L.netstatus as status,N.rssi,N.snr','fields1'=>'status','enname'=>'Network status'),
  443. array('name'=>'更新时间','field'=>'RI.updatetime','fields1'=>'updatetime','enname'=>'Update time'),
  444. array('name'=>'路灯亮度(%)','field'=>'L.lighteness','fields1'=>'lighteness','enname'=>'Brightness(%)'),
  445. array('name'=>'无线模块地址','field'=>'L.address','fields1'=>'address','enname'=>'Wireless module address'),
  446. array('name'=>'负载功率(W)','field'=>'RI.loadpower as lamppower','fields1'=>'lamppower','enname'=>'LED power(W)'),
  447. array('name'=>'Street light SN','field'=>'L.street_light_SN','fields1'=>'street_light_SN','enname'=>'Street light SN'),
  448. array('name'=>'Customer ID','field'=>'L.customer_ID','fields1'=>'customer_ID','enname'=>'Customer ID'),
  449. array('name'=>'Customer name','field'=>'L.customer_name','fields1'=>'customer_name','enname'=>'Customer name'),
  450. array('name'=>'Fiscal year','field'=>'L.fascal_year','fields1'=>'fascal_year','enname'=>'Fiscal year'),
  451. array('name'=>'Fiscal year phase','field'=>'L.fascal_year_phase','fields1'=>'fascal_year_phase','enname'=>'Fiscal year phase'),
  452. array('name'=>'PO name','field'=>'C1.name as po_name,C1.no as po_no','fields1'=>'po_name','enname'=>'PO name'),
  453. array('name'=>'Supplier name','field'=>'C2.name as supplier_name,C2.no as supplier_no','fields1'=>'supplier_name','enname'=>'Supplier name'),
  454. array('name'=>'MFRS name','field'=>'C3.name as MFRS_name,C3.no as MFRS_no','fields1'=>'MFRS_name','enname'=>'MFRS name'),
  455. array('name'=>'蓄电池电压(V)','field'=>'RI.batvoltage as battvoltage','fields1'=>'battvoltage','enname'=>'Battery voltage(V)'),
  456. array('name'=>'蓄电池总过放次数','field'=>'HI.overtimes','fields1'=>'overtimes','enname'=>'Over discharge times'),
  457. array('name'=>'太阳能板功率(W)','field'=>'RI.panelpower as solarpower','fields1'=>'solarpower','enname'=>'Solar panel power(W)'),
  458. array('name'=>'是否故障','field'=>'AI.batstatus,AI.panelstatus,AI.lampstatus,AI.tempstatus,AI.status as alarmStatus','fields1'=>'isfaulted','enname'=>'Fault'),
  459. array('name'=>'型号','field'=>'MI.name as model_name','fields1'=>'model_name','enname'=>'Model'),
  460. );
  461. // $def = array(
  462. // array('name'=>'路灯编号','field'=>'L.number','fields1'=>'number','enname'=>'Lamp number'),
  463. // array('name'=>'路段','field'=>'L.section','fields1'=>'section','enname'=>'Road'),
  464. // array('name'=>'路灯状态','field'=>'L.status as lampstatus,L.lighteness','fields1'=>'lampstatus','enname'=>'Lamp status'),
  465. // array('name'=>'信号状态','field'=>'L.protocoltype,L.netstatus as status','fields1'=>'status','enname'=>'Network status'),
  466. // // array('name'=>'信号状态','field'=>'L.protocoltype,L.netstatus as status,N.rssi,N.snr','fields1'=>'status','enname'=>'Network status'),
  467. // array('name'=>'更新时间','field'=>'L.logtime as updatetime','fields1'=>'updatetime','enname'=>'Update time'),
  468. // array('name'=>'路灯亮度(%)','field'=>'L.lighteness','fields1'=>'lighteness','enname'=>'Brightness(%)'),
  469. // array('name'=>'无线模块地址','field'=>'L.address','fields1'=>'address','enname'=>'Wireless module address'),
  470. // array('name'=>'路灯功率(W)','field'=>'L.lamppower','fields1'=>'lamppower','enname'=>'Lamp power(W)'),
  471. // array('name'=>'蓄电池充电阶段','field'=>'L.chargestage','fields1'=>'chargestage','enname'=>'Charging stage'),
  472. // array('name'=>'蓄电池电压(V)','field'=>'L.battvoltage','fields1'=>'battvoltage','enname'=>'Battery voltage(V)'),
  473. // array('name'=>'蓄电池总过放次数','field'=>'L.overtimes','fields1'=>'overtimes','enname'=>'Over discharge times'),
  474. // array('name'=>'太阳能板功率(W)','field'=>'L.solarpower','fields1'=>'solarpower','enname'=>'Solar panel power(W)'),
  475. // array('name'=>'是否故障','field'=>'L.isfaulted','fields1'=>'isfaulted','enname'=>'Fault'),
  476. // );
  477. // 路灯信息
  478. $lampinfo = array(
  479. // array('name'=>'当前策略','field'=>'L.policyid','fields1'=>'policyid','enname'=>'Current strategy'),
  480. // array('name'=>'路灯id','field'=>'L.id','fields1'=>'id','enname'=>'Lamp ID'),
  481. // array('name'=>'网络名称','field'=>'N.networkname','fields1'=>'networkname','enname'=>'Network name'),
  482. array('name'=>'项目名称','field'=>'P.projectname','fields1'=>'projectname','enname'=>'Project name'),
  483. array('name'=>'经度','field'=>'L.longitude','fields1'=>'longitude','enname'=>'Longitude'),
  484. array('name'=>'纬度','field'=>'L.latitude','fields1'=>'latitude','enname'=>'Latitude'),
  485. // array('name'=>'sim卡号','field'=>'N.simid','fields1'=>'simid','enname'=>'SIM card number'),
  486. // array('name'=>'套餐剩余','field'=>'N.packageSurplus','fields1'=>'packageSurplus','enname'=>'Package surplus'),
  487. array('name'=>'路灯类型','field'=>'L.lamptype','fields1'=>'lamptype','enname'=>'Lamp type'),
  488. array('name'=>'太阳能板类型','field'=>'L.boardtype','fields1'=>'boardtype','enname'=>'Solar panel type'),
  489. // array('name'=>'太阳能板功率(配置)(W)','field'=>'L.boardpower','fields1'=>'boardpower','enname'=>'Solar panel power(config)(W)'),
  490. // array('name'=>'蓄电池类型','field'=>'L.batterytype','fields1'=>'batterytype','enname'=>'Battery type'),
  491. array('name'=>'蓄电池AH数(ah)','field'=>'L.batteryah','fields1'=>'batteryah','enname'=>'Battery capacity(ah)'),
  492. array('name'=>'额定功率(W)','field'=>'L.loadpower','fields1'=>'loadpower','enname'=>'Load power(W)'),
  493. // array('name'=>'蓄电池剩余电量','field'=>'L.electricleft','fields1'=>'electricleft','enname'=>'Remaining battery capacity(Ah)'),
  494. );
  495. // 路灯信息日志
  496. $lamp_info_log = array(
  497. array('name'=>'路灯电压(V)','field'=>'RI.loadvoltage as lampvoltage','fields1'=>'lampvoltage','enname'=>'Lamp voltage(V)'),
  498. array('name'=>'路灯电流(A)','field'=>'RI.loadcurrent as lampcurrent','fields1'=>'lampcurrent','enname'=>'Lamp current(A)'),
  499. // array('name'=>'灯头温度(℃)','field'=>'L.lamptemper as temper','fields1'=>'temper','enname'=>'Lamp temperature(℃)'),
  500. );
  501. $solar_info_log = array(
  502. array('name'=>'太阳能板电压(V)','field'=>'RI.panelvoltage as solarvoltage','fields1'=>'solarvoltage','enname'=>'Solar panel voltage(V)'),
  503. array('name'=>'太阳能板电流(A)','field'=>'RI.panelcurrent as solarcurrent','fields1'=>'solarcurrent','enname'=>'Solar panel current(A)')
  504. );
  505. // 蓄电池信息日志
  506. $battery_info_log = array(
  507. array('name'=>'蓄电池状态','field'=>'L.battstatus','fields1'=>'battstatus','enname'=>'Battery status'),
  508. array('name'=>'蓄电池充电电流(A)','field'=>'L.chargecurrent','fields1'=>'chargecurrent','enname'=>'Charging current(A)'),
  509. array('name'=>'蓄电池放电电流(A)','field'=>'L.discharcurrent','fields1'=>'discharcurrent','enname'=>'Discharging current(A)'),
  510. array('name'=>'蓄电池充电功率(w)','field'=>'L.chargepower','fields1'=>'chargepower','enname'=>'Charging power(w)'),
  511. array('name'=>'蓄电池放电功率(w)','field'=>'L.dischargepower','fields1'=>'dischargepower','enname'=>'Discharging power(w)'),
  512. array('name'=>'蓄电池表面温度(℃)','field'=>'L.batttemper','fields1'=>'batttemper','enname'=>'Battery surface temperature(℃)'),
  513. array('name'=>'蓄电池总电量','field'=>'L.electrictotal','fields1'=>'electrictotal','enname'=>'Total battery capacity(Ah)'),
  514. array('name'=>'蓄电池电量SOC(%)','field'=>'L.electricSOC','fields1'=>'electricSOC','enname'=>'Battery SOC(%)'),
  515. array('name'=>'当天最低电压(V)','field'=>'L.voltagedaymin','fields1'=>'voltagedaymin','enname'=>'Minimum voltage(V)'),
  516. array('name'=>'当天最高电压(V)','field'=>'L.voltagedaymax','fields1'=>'voltagedaymax','enname'=>'Highest voltage(V)'),
  517. // array('name'=>'当天充电安时数(ah)','field'=>'L.daychargeah','fields1'=>'daychargeah','enname'=>'Charging AH(ah)'),
  518. // array('name'=>'当天放电安时数(ah)','field'=>'L.daydischarah','fields1'=>'daydischarah','enname'=>'Discharging AH(ah)'),
  519. array('name'=>'当天充电最大功率(W)','field'=>'L.daychargemaxpow','fields1'=>'daychargemaxpow','enname'=>'Charging max-power(W)'),
  520. array('name'=>'当天放电最大功率(W)','field'=>'L.daydischarmaxpow','fields1'=>'daydischarmaxpow','enname'=>'Discharging max-power(W)'),
  521. array('name'=>'当天灯亮时间(hh:mm)','field'=>'L.daychargemincurrent','fields1'=>'daychargemincurrent','enname'=>'Turn-on duration'),
  522. array('name'=>'当天充电最大电流(A)','field'=>'L.daycharmaxcurrent','fields1'=>'daycharmaxcurrent','enname'=>'Highest charging current(A)'),
  523. array('name'=>'当天充电时间(hh:mm)','field'=>'L.daydischargemincurrent','fields1'=>'daydischargemincurrent','enname'=>'Charging duration'),
  524. array('name'=>'当天放电最大电流(A)','field'=>'L.daydischarmaxcurrent','fields1'=>'daydischarmaxcurrent','enname'=>'Highest discharging current(A)'),
  525. array('name'=>'当天蓄电池最低温度(℃)','field'=>'L.daybattmintemper','fields1'=>'daybattmintemper','enname'=>'Battery min-temperature(℃)'),
  526. array('name'=>'当天蓄电池最高温度(℃)','field'=>'L.daybattmaxtemper','fields1'=>'daybattmaxtemper','enname'=>'Battery max-temperature(℃)'),
  527. );
  528. $electric_info_log = array(
  529. array('name'=>'当天发电量(kWh)','field'=>'RI.chargeday as daygeneration','fields1'=>'daygeneration','enname'=>'Power generation(kWh)'),
  530. array('name'=>'当天用电量(kWh)','field'=>'RI.dischargeday as dayconsumption','fields1'=>'dayconsumption','enname'=>'Power consumption(kWh)'),
  531. array('name'=>'累计发电量(kWh)','field'=>'HI.totalchargeah as totalgeneration','fields1'=>'totalgeneration','enname'=>'Cumulative power generation(kWh)'),
  532. array('name'=>'累计用电量(kWh)','field'=>'HI.totaldischarah as totalconsumption','fields1'=>'totalconsumption','enname'=>'Cumulative power consumption(kWh)'),
  533. );
  534. $system_info_log = array(
  535. array('name'=>'系统电压(V)','field'=>'L.sysvoltage','fields1'=>'sysvoltage','enname'=>'System voltage(V)'),
  536. array('name'=>'系统电流(A)','field'=>'L.syscurrent','fields1'=>'syscurrent','enname'=>'System current(A)'),
  537. array('name'=>'控制器温度(℃)','field'=>'L.temper as controlTemper','fields1'=>'controlTemper','enname'=>'Controller temperature(℃)'),
  538. );
  539. // 历史信息日志
  540. $history_info_log = array(
  541. array('name'=>'运行天数','field'=>'L.rundays','fields1'=>'rundays','enname'=>'Running duration'),
  542. array('name'=>'蓄电池总充满次数','field'=>'L.fulltimes','fields1'=>'fulltimes','enname'=>'Full charge times'),
  543. // array('name'=>'蓄电池总充电安时数(ah)','field'=>'L.totalchargeah','fields1'=>'totalchargeah','enname'=>'Total charge AH(ah)'),
  544. // array('name'=>'蓄电池总放电安时数(ah)','field'=>'L.totaldischarah','fields1'=>'totaldischarah','enname'=>'Total discharge AH(ah)'),
  545. array('name'=>'版本号','field'=>'L.softwareVersion','fields1'=>'softwareVersion','enname'=>'Version information'),
  546. );
  547. $fields = array_merge($def,$lampinfo,$lamp_info_log,$solar_info_log,$battery_info_log,$electric_info_log,$system_info_log,$history_info_log);
  548. // $fields = array_merge($def,$lampinfo,$lamp_info_log,$solar_info_log,$electric_info_log);
  549. // $fields = $def;
  550. $def = explode(',', $fieldstr);
  551. foreach ($fields as &$v) {
  552. if (in_array($v['fields1'], $def)) {
  553. $v['select'] = '1';
  554. }else{
  555. $v['select'] = '0';
  556. }
  557. }
  558. exit(json_result('0000',$this->response['0000'],array('list'=>$fields)));
  559. }
  560. // 路灯下拉列表
  561. public function lamp_list(){
  562. $networkid = intval($this->input->post('networkid',true));
  563. $projectid = intval($this->input->post('projectid',true));
  564. if (empty($networkid) && empty($projectid)) {
  565. exit(json_result('0405',$this->response['0405'],array()));
  566. }
  567. if (!empty($networkid)) {
  568. $data = $this->Lamp_model->get_list(array('networkid'=>$networkid), 'number,id');
  569. }else{
  570. $data = $this->Lamp_model->get_list(array('projectid'=>$projectid), 'number,id');
  571. }
  572. exit(json_result('0000',$this->response['0000'],$data));
  573. }
  574. // 获取单个路灯的经纬度
  575. public function get_lng_lat(){
  576. $lampid = $this->input->post('lampid',true);
  577. $projectid = $this->input->post('projectid',true);
  578. $section = $this->input->post('section',true);
  579. $lampData = array();
  580. if (!empty($lampid)) {
  581. $where = array('id'=>$lampid,'longitude !='=>0,'latitude !='=>0);
  582. if (!empty($section)) {
  583. $where['section'] = $section;
  584. }
  585. $lampData = $this->Lamp_model->get_one($where,'longitude,latitude');
  586. }
  587. if (!empty($projectid)) {
  588. $where = array('projectid'=>$projectid,'longitude !='=>0,'latitude !='=>0);
  589. if (!empty($section)) {
  590. $where['section'] = $section;
  591. }
  592. $lampData = $this->Lamp_model->get_one($where,'longitude,latitude');
  593. }
  594. if (empty($lampData)) {
  595. $lampData = array('longitude'=>0,'latitude'=>0);
  596. }
  597. exit(json_result('0000',$this->response['0000'],$lampData));
  598. }
  599. public function get_province(){
  600. // $countryId = intval($this->input->post('countryId',true));
  601. $role = $this->get_user_info('role');
  602. $where = array();
  603. if ($role != SYSTEM_ADMIN) {
  604. $company = $this->get_user_info('company');
  605. $type = $this->get_user_info('role');
  606. // $where['company'] = $company;
  607. if ($type == 2) {
  608. // $filter .= ' AND L.manu = '.$company;
  609. $where['L.manu'] = $company;
  610. }elseif ($type == 3) {
  611. // $filter .= ' AND L.supplier = '.$company;
  612. $where['L.supplier'] = $company;
  613. }elseif ($type == 4) {
  614. // $filter .= ' AND L.po = '.$company;
  615. $where['L.po'] = $company;
  616. }else {
  617. $where['P.cityid'] = $company;
  618. }
  619. }
  620. // $pro_list = $this->Project_model->get_list($where,'P.cityid');
  621. $join = array();
  622. $join[] = ['table'=>'project as P','cond'=>'P.id = L.projectid','type'=>'left'];
  623. $pro_list = $this->Lamp_model->get_list_by_join($where, 'P.cityid',NULL, NULL, $join, null, 'L.projectid', 'L');
  624. $cityArr = array_unique(array_column($pro_list, 'cityid'));
  625. $list = $this->Global_location_model->get_list(['id'=>$cityArr],'id,english_name as name,level,pid');
  626. $areaList = array();
  627. $cityList = array();
  628. $proList = array();
  629. foreach ($list as $key => $value) {
  630. if ($value['level'] == 2) {
  631. $proList[] = $value;
  632. }elseif ($value['level'] == 3) {
  633. $cityList[] = $value;
  634. }elseif ($value['level'] == 4) {
  635. $areaList[] = $value;
  636. }
  637. }
  638. if (!empty($areaList)) {
  639. $cityArr = array_unique(array_column($areaList, 'pid'));
  640. $list = $this->Global_location_model->get_list(['id'=>$cityArr],'id,english_name as name,level,pid');
  641. foreach ($list as $key => $value) {
  642. if ($value['level'] == 2) {
  643. $proList[] = $value;
  644. }elseif ($value['level'] == 3) {
  645. $cityList[] = $value;
  646. }
  647. }
  648. }
  649. if (!empty($cityList)) {
  650. $cityArr = array_unique(array_column($cityList, 'pid'));
  651. $list = $this->Global_location_model->get_list(['id'=>$cityArr],'id,english_name as name,level,pid');
  652. foreach ($list as $key => $value) {
  653. if ($value['level'] == 2) $proList[] = $value;
  654. }
  655. }
  656. if (empty($proList)) exit(json_result('0000',$this->response['0000'],array('list'=>array())));
  657. $cityArr = array_unique(array_column($proList, 'id'));
  658. $list = $this->Global_location_model->get_list(['id'=>$cityArr],'id,english_name as name',null,null,'convert(english_name using gbk) ASC,id DESC');
  659. exit(json_result('0000',$this->response['0000'],array('list'=>$list)));
  660. }
  661. public function get_city(){
  662. $proId = intval($this->input->post('proId',true));
  663. $role = $this->get_user_info('role');
  664. $where = array();
  665. if ($role != SYSTEM_ADMIN) {
  666. $company = $this->get_user_info('company');
  667. $type = $this->get_user_info('role');
  668. // $where['company'] = $company;
  669. if ($type == 2) {
  670. // $filter .= ' AND L.manu = '.$company;
  671. $where['L.manu'] = $company;
  672. }elseif ($type == 3) {
  673. // $filter .= ' AND L.supplier = '.$company;
  674. $where['L.supplier'] = $company;
  675. }elseif ($type == 4) {
  676. // $filter .= ' AND L.po = '.$company;
  677. $where['L.po'] = $company;
  678. }else {
  679. $where['P.cityid'] = $company;
  680. }
  681. }
  682. // $pro_list = $this->Project_model->get_list($where,'cityid');
  683. $join = array();
  684. $join[] = ['table'=>'project as P','cond'=>'P.id = L.projectid','type'=>'left'];
  685. $pro_list = $this->Lamp_model->get_list_by_join($where, 'P.cityid',NULL, NULL, $join, null, 'L.projectid', 'L');
  686. $cityArr = array_unique(array_column($pro_list, 'cityid'));
  687. $list = $this->Global_location_model->get_list(['id'=>$cityArr],'id,english_name as name,level,pid');
  688. $areaList = array();
  689. $cityList = array();
  690. foreach ($list as $key => $value) {
  691. if ($value['level'] == 3) {
  692. $cityList[] = $value;
  693. }elseif ($value['level'] == 4) {
  694. $areaList[] = $value;
  695. }
  696. }
  697. if (!empty($areaList)) {
  698. $cityArr = array_unique(array_column($areaList, 'pid'));
  699. $list = $this->Global_location_model->get_list(['id'=>$cityArr],'id,english_name as name,level,pid');
  700. foreach ($list as $key => $value) {
  701. if ($value['level'] == 3) $cityList[] = $value;
  702. }
  703. }
  704. if (empty($cityList)) exit(json_result('0000',$this->response['0000'],array('list'=>array())));
  705. $cityArr = array_unique(array_column($cityList, 'id'));
  706. $where = ['id'=>$cityArr];
  707. if (!empty($proId)) $where['pid'] = $proId;
  708. $list = $this->Global_location_model->get_list($where,'id,english_name as name',null,null,'convert(english_name using gbk) ASC,id DESC');
  709. exit(json_result('0000',$this->response['0000'],array('list'=>$list)));
  710. }
  711. // 告警状态下拉列表
  712. public function alarm_type_list(){
  713. $version = $this->session->userdata('version');
  714. $batstatus = $this->config->item('batstatus');
  715. $panelstatus = $this->config->item('panelstatus');
  716. $lampstatus = $this->config->item('lampstatus');
  717. $tempstatus = $this->config->item('tempstatus');
  718. $onlinestatus = $this->config->item('onlinestatus');
  719. $list = array();
  720. foreach ($batstatus as $key => $value) {
  721. $list[] = ['name'=>$value,'value'=>'1'.$key];
  722. }
  723. foreach ($panelstatus as $key => $value) {
  724. $list[] = ['name'=>$value,'value'=>'2'.$key];
  725. }
  726. foreach ($lampstatus as $key => $value) {
  727. $list[] = ['name'=>$value,'value'=>'3'.$key];
  728. }
  729. foreach ($tempstatus as $key => $value) {
  730. $list[] = ['name'=>$value,'value'=>'4'.$key];
  731. }
  732. foreach ($onlinestatus as $key => $value) {
  733. $list[] = ['name'=>$value,'value'=>'5'.$key];
  734. }
  735. if ($this->os == 2) {
  736. exit(json_result('0000',$this->response['0000'],['list'=>$list]));
  737. }else{
  738. exit(json_result('0000',$this->response['0000'],$list));
  739. }
  740. }
  741. // 省级设备数量
  742. public function pro_dev_count(){
  743. $role = $this->get_user_info('role');
  744. $company = $this->get_user_info('company');
  745. $where = array();
  746. if ($role != SYSTEM_ADMIN) {
  747. if ($role == 2) {
  748. // $filter .= ' AND L.manu = '.$company;
  749. $where['L.manu = '] = $company;
  750. // $countWhere[] = 'manu = '.$company;
  751. }elseif ($role == 3) {
  752. // $filter .= ' AND L.supplier = '.$company;
  753. // $countWhere[] = 'supplier = '.$company;
  754. $where['L.supplier = '] = $company;
  755. }elseif ($role == 4) {
  756. // $filter .= ' AND L.po = '.$company;
  757. // $countWhere[] = 'po = '.$company;
  758. $where['L.po = '] = $company;
  759. }else {
  760. // $filter .= ' AND P.cityid = '.$company;
  761. $where['P.cityid = '] = $company;
  762. }
  763. }
  764. $where['G3.level'] = 2;
  765. $where['G3.pid'] = 92;
  766. $join = array();
  767. $join[] = ['table'=>'global_location as G2','cond'=>'G3.id = G2.pid AND G2.level = 3','type'=>'left'];
  768. $join[] = ['table'=>'global_location as G1','cond'=>'G2.id = G1.pid AND G1.level = 4','type'=>'left'];
  769. $join[] = ['table'=>'project as P','cond'=>'G1.id = P.cityid AND G1.level = 4','type'=>'left'];
  770. $join[] = ['table'=>'lampinfo as L','cond'=>'L.projectid = P.id','type'=>'left'];
  771. // $join[] = ['table'=>'global_location as G3','cond'=>'G3.id = G2.pid AND G3.level = 2','type'=>'left'];
  772. $list = $this->Global_location_model->get_list_by_join($where, 'G3.id,G3.english_name as name,count(L.id) as lampcount',NULL, NULL, $join, NULL, 'G3.id', 'G3');
  773. foreach ($list as $key => $value) {
  774. $list[$key]['lampcount'] = intval($value['lampcount']);
  775. }
  776. exit(json_result('0000',$this->response['0000'],array('list'=>$list)));
  777. }
  778. // 市级设备数量
  779. public function city_dev_count(){
  780. $role = $this->get_user_info('role');
  781. $company = $this->get_user_info('company');
  782. $where = array();
  783. $proId = intval($this->input->post('proId',true));
  784. if (!empty($proId)) $where['G2.pid'] = $proId;
  785. if ($role != SYSTEM_ADMIN) {
  786. if ($role == 2) {
  787. // $filter .= ' AND L.manu = '.$company;
  788. $where['L.manu = '] = $company;
  789. // $countWhere[] = 'manu = '.$company;
  790. }elseif ($role == 3) {
  791. // $filter .= ' AND L.supplier = '.$company;
  792. // $countWhere[] = 'supplier = '.$company;
  793. $where['L.supplier = '] = $company;
  794. }elseif ($role == 4) {
  795. // $filter .= ' AND L.po = '.$company;
  796. // $countWhere[] = 'po = '.$company;
  797. $where['L.po = '] = $company;
  798. }else {
  799. // $filter .= ' AND P.cityid = '.$company;
  800. $where['P.cityid = '] = $company;
  801. }
  802. }
  803. $where['G2.level'] = 3;
  804. $join = array();
  805. $join[] = ['table'=>'global_location as G1','cond'=>'G2.id = G1.pid','type'=>'left'];
  806. $join[] = ['table'=>'project as P','cond'=>'G1.id = P.cityid AND G1.level = 4','type'=>'left'];
  807. // $join[] = ['table'=>'project as P','cond'=>'G1.id = P.cityid AND G1.level = 4','type'=>'left'];
  808. $join[] = ['table'=>'lampinfo as L','cond'=>'L.projectid = P.id','type'=>'left'];
  809. // $join[] = ['table'=>'global_location as G2','cond'=>'G2.id = G1.pid','type'=>'left'];
  810. $list = $this->Global_location_model->get_list_by_join($where, 'G2.id,G2.english_name as name,count(L.id) as lampcount',NULL, NULL, $join, NULL, 'G2.id', 'G2');
  811. foreach ($list as $key => $value) {
  812. $list[$key]['lampcount'] = intval($value['lampcount']);
  813. }
  814. exit(json_result('0000',$this->response['0000'],array('list'=>$list)));
  815. }
  816. // 区域设备数量
  817. public function area_dev_count(){
  818. $role = $this->get_user_info('role');
  819. $company = $this->get_user_info('company');
  820. $where = array();
  821. $cityId = intval($this->input->post('cityId',true));
  822. if (!empty($cityId)) $where['G1.pid'] = $cityId;
  823. if ($role != SYSTEM_ADMIN) {
  824. if ($role == 2) {
  825. // $filter .= ' AND L.manu = '.$company;
  826. $where['L.manu = '] = $company;
  827. // $countWhere[] = 'manu = '.$company;
  828. }elseif ($role == 3) {
  829. // $filter .= ' AND L.supplier = '.$company;
  830. // $countWhere[] = 'supplier = '.$company;
  831. $where['L.supplier = '] = $company;
  832. }elseif ($role == 4) {
  833. // $filter .= ' AND L.po = '.$company;
  834. // $countWhere[] = 'po = '.$company;
  835. $where['L.po = '] = $company;
  836. }else {
  837. // $filter .= ' AND P.cityid = '.$company;
  838. $where['P.cityid = '] = $company;
  839. }
  840. }
  841. $where['G1.level'] = 4;
  842. $join = array();
  843. $join[] = ['table'=>'project as P','cond'=>'G1.id = P.cityid AND G1.level = 4','type'=>'left'];
  844. $join[] = ['table'=>'lampinfo as L','cond'=>'L.projectid = P.id','type'=>'left'];
  845. // $join[] = ['table'=>'global_location as G1','cond'=>'G1.id = P.cityid','type'=>'left'];
  846. $list = $this->Global_location_model->get_list_by_join($where, 'G1.id,G1.english_name as name,sum(P.lampcount) as lampcount',NULL, NULL, $join, NULL, 'G1.id', 'G1');
  847. foreach ($list as $key => $value) {
  848. $list[$key]['lampcount'] = intval($value['lampcount']);
  849. }
  850. exit(json_result('0000',$this->response['0000'],array('list'=>$list)));
  851. }
  852. // app额外接口
  853. public function app_home_data(){
  854. $data = array(
  855. 'project_count' => 0,
  856. 'upa_count' => 0,
  857. 'sup_count' => 0,
  858. 'manu_count' => 0,
  859. 'insert_power' => 0,
  860. 'gen_power' => 0,
  861. 'user_power' => 0,
  862. 'light_time' => 0,
  863. );
  864. $projectIdArr = $this->get_project_id();
  865. if (empty($projectIdArr)) exit(json_result('0000',$this->response['0000'],$data));
  866. $role = $this->get_user_info('role');
  867. $where = array();
  868. $where[] = 'P.id in ('.implode(',', $projectIdArr).')';
  869. if ($role != SYSTEM_ADMIN){
  870. $company = $this->get_user_info('company');
  871. // $where[] = 'P.company = '.$company;
  872. if ($role == 2) {
  873. // $filter .= ' AND L.manu = '.$company;
  874. $where[] = 'L.manu = '.$company;
  875. // $countWhere[] = 'manu = '.$company;
  876. }elseif ($role == 3) {
  877. // $filter .= ' AND L.supplier = '.$company;
  878. // $countWhere[] = 'supplier = '.$company;
  879. $where[] = 'L.supplier = '.$company;
  880. }elseif ($role == 4) {
  881. // $filter .= ' AND L.po = '.$company;
  882. // $countWhere[] = 'po = '.$company;
  883. $where[] = 'L.po = '.$company;
  884. }else {
  885. // $filter .= ' AND P.cityid = '.$company;
  886. $where[] = 'P.cityid = '.$company;
  887. }
  888. $data['project_count'] = $this->Project_model->get_count(['id'=>$projectIdArr,'company'=>$company]);
  889. }else{
  890. $data['project_count'] = count($projectIdArr);
  891. }
  892. $sql = 'select count(*) as total from (select L.manu from lampinfo L left join project P on L.projectid = P.id where '.implode(' AND ', $where).' AND L.manu != 0 AND L.manu != "" group by L.manu) t';
  893. $total = $this->db->query($sql)->row_array();
  894. $data['manu_count'] = $total['total'];
  895. $sql = 'select count(*) as total from (select L.supplier from lampinfo L left join project P on L.projectid = P.id where '.implode(' AND ', $where).' AND L.supplier != 0 AND L.supplier != "" group by L.supplier) t';
  896. $total = $this->db->query($sql)->row_array();
  897. $data['sup_count'] = $total['total'];
  898. $sql = 'select count(*) as total from (select G.id from lampinfo L left join project P on L.projectid = P.id left join global_location G on P.cityid = G.id where '.implode(' AND ', $where).' group by G.id) t';
  899. $total = $this->db->query($sql)->row_array();
  900. $data['upa_count'] = $total['total'];
  901. $sql = 'select sum(L.totalLightTime) as light_time,sum(L.boardpower) as boardpower,sum(L.totalgeneration) as totalgeneration,sum(L.totalconsumption) as totalconsumption from lampinfo L left join project P on L.projectid = P.id where '.implode(' AND ', $where);
  902. $total = $this->db->query($sql)->row_array();
  903. $data['light_time'] = ceil($total['light_time']/60);
  904. $data['insert_power'] = round($total['boardpower']/1000,3);
  905. $data['gen_power'] = round($total['totalgeneration']/1000,3);
  906. $data['user_power'] = round($total['totalconsumption']/1000,3);
  907. exit(json_result('0000',$this->response['0000'],$data));
  908. }
  909. public function weather_info(){
  910. $areaId = intval($this->input->post('areaId',true));
  911. if (empty($areaId)) exit(json_result('0007',$this->response['0007']));
  912. $res1 = $this->Global_location_model->get_one(['id'=>$areaId],'level,pid,chinese_name,longitude,latitude,english_name');
  913. $url = 'https://free-api.heweather.net/s6/weather/forecast?location='.$res1['longitude'].','.$res1['latitude'].'&key=63dbc994630941fab269ad3c3af4d5d2';
  914. // $url = 'https://way.jd.com/he/freeweather?city='.$res2['chinese_name'].'&appkey=a44fc7f907194098c69bb8e90003bca6';
  915. $resData = request_post($url);
  916. $arr = json_decode($resData,true);
  917. if ($arr['HeWeather6'][0]['status'] == 'ok') {
  918. $now = $arr['HeWeather6'][0]['daily_forecast'][0];
  919. $daily_forecast = $arr['HeWeather6'][0]['daily_forecast'];
  920. $data = ['weatherType'=>$now['cond_txt_d'],'code'=>$now['cond_code_d'],'tmp'=>intval(($now['tmp_min'] + $now['tmp_max'])/2)];
  921. }else{
  922. $data = ['weatherType'=>'','code'=>'','tmp'=>''];
  923. }
  924. exit(json_result('0000',$this->response['0000'],$data));
  925. }
  926. public function get_dev_number(){
  927. $projectId = intval($this->input->post('projectId',true));
  928. if (empty($projectId)) exit(json_result('0007',$this->response['0007']));
  929. $res = $this->Lamp_model->get_one(['projectid'=>$projectId],'max(number) as number');
  930. if (empty($res) || empty($res['number'])) {
  931. $number = 1;
  932. }else{
  933. $number = $res['number'];
  934. }
  935. $number = substr('000000'.$number,-6);
  936. exit(json_result('0000',$this->response['0000'],['number'=>$number]));
  937. }
  938. }