Report.php 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. include_once(FCPATH . 'application/controllers/Base_Controller.php');
  3. class Report extends Base_Controller {
  4. public function __construct() {
  5. parent::__construct();
  6. $this->load->model('Company_model');
  7. $this->load->model('Project_model');
  8. $this->load->model('Network_model');
  9. $this->load->model('Lamp_model');
  10. $this->load->model('Electric_model');
  11. $this->load->model('Statistics_model');
  12. }
  13. // 格式化数据
  14. private function formatResult($data, $type){
  15. $dataType = array(
  16. 'power' => array('daygeneration','dayconsumption'),
  17. 'batterycharge' => array('monthovertimes','monthfulltimes'),
  18. 'current' => array('daycharmaxcurrent','daydischarmaxcurrent'),
  19. 'temper' => array('daybattmintemper','daybattmaxtemper'),
  20. 'capacity' => array('daychargemaxpow','daydischarmaxpow'),
  21. 'voltage' => array('voltagedaymin','voltagedaymax'),
  22. );
  23. $categoriesData1 = $seriesData1 = $categoriesData2 = $seriesData2 = array();
  24. foreach ($data as $k => $v){
  25. if (!isset($categoriesData1[$v['updatetime']])){
  26. $categoriesData1[$v['updatetime']] = $v['updatetime'];
  27. }
  28. $seriesData1[$v['id']]['data'][] = isset($v[$dataType[$type][0]]) ? round($v[$dataType[$type][0]],2) : null;
  29. $seriesData1[$v['id']]['name'] = $v['name'];
  30. if (!isset($categoriesData2[$v['updatetime']])){
  31. $categoriesData2[$v['updatetime']] = $v['updatetime'];
  32. }
  33. $seriesData2[$v['id']]['data'][] = isset($v[$dataType[$type][1]]) ? round($v[$dataType[$type][1]],2) : null;
  34. $seriesData2[$v['id']]['name'] = $v['name'];
  35. }
  36. $categories1 = $series1 = $categories2 = $series2 = array();
  37. foreach ($categoriesData1 as $v){
  38. $categories1[] = $v;
  39. }
  40. foreach ($seriesData1 as $v){
  41. $series1[] = $v;
  42. }
  43. foreach ($categoriesData2 as $v){
  44. $categories2[] = $v;
  45. }
  46. foreach ($seriesData2 as $v){
  47. $series2[] = $v;
  48. }
  49. return array(
  50. 'report1' => array('categories' => $categories1,'series' => $series1),
  51. 'report2' => array('categories' => $categories2,'series' => $series2)
  52. );
  53. }
  54. // 获取时间点对应的数据
  55. private function fetchData($list, $date, $date_type, $show_type, $type){
  56. $function = 'get'.ucfirst($type).'DataByFilter';
  57. $result = array();
  58. $lampIds = array_column($list, 'id');
  59. $res = $this->Electric_model->$function($lampIds, $date, $date_type);
  60. foreach ($list as $key => $value) {
  61. $data = $res[$value['id']];
  62. $data['id'] = $value['id'];
  63. if ($show_type == 'lamp') {
  64. $data['networkname'] = $value['networkname'];
  65. $data['projectname'] = $value['projectname'];
  66. $data['number'] = $value['name'];
  67. $data['section'] = $value['section'];
  68. }
  69. $data['name'] = $value['name'];
  70. $data['createtime'] = $value['createtime'];
  71. $result[] = $data;
  72. }
  73. return $result;
  74. }
  75. // 获取数据开始年份
  76. private function getStartYear($list){
  77. $years = array();
  78. foreach ($list as $item) {
  79. $years[] = date("Y", strtotime($item['createtime']));
  80. }
  81. return intval(min($years));
  82. }
  83. // 查看选中项目
  84. // public function data() {
  85. // $type = $this->input->post('type',true);
  86. // if (!in_array($type, array('power', 'current', 'temper', 'capacity', 'voltage'))) {
  87. // $type = 'power';
  88. // }
  89. // $show_type = 'lamp';
  90. // $item_ids = $this->input->post('item_ids', true);
  91. // if (empty($item_ids)) {
  92. // exit(json_result('0502', $this->response['0502']));
  93. // }
  94. // $date_type = $this->input->post('date_type',true);
  95. // if (!in_array($date_type, array('month','year'))) {
  96. // $date_type = 'all';
  97. // }
  98. // $date = $this->input->post('date',true);
  99. // if ($date_type == 'month') {
  100. // $date = !empty($date) ? $date : date("Y-m");
  101. // } elseif ($date_type == 'year') {
  102. // $date = !empty($date) ? $date : date("Y");
  103. // } else{
  104. // $date = "";
  105. // }
  106. // $item_ids_arr = explode(",", $item_ids);
  107. // $list = $this->Lamp_model->get_list_in('L.id', $item_ids_arr, 'L.id as id, L.number as name,N.networkname,P.projectname, L.createtime,L.section');
  108. // if (empty($list)) {
  109. // exit(json_result('0006', $this->response['0006']));
  110. // }
  111. // if ($date_type == 'month') {
  112. // $beginDateMonth = date('Y-m-01', strtotime($date.'-01 00:00:00'));
  113. // $comDate = date('Y-m-01 00:00:00', time());
  114. // if (strtotime($beginDateMonth) > strtotime($comDate)) {
  115. // $end = 0;
  116. // }elseif (strtotime($beginDateMonth) == strtotime($comDate)) {
  117. // $end = intval(date('d', time())) - 1;
  118. // }else{
  119. // $end = date('d', strtotime("$beginDateMonth +1 month -1 day"));
  120. // }
  121. // $dataList = array();
  122. // for($start = $end; $start > 0; $start--){
  123. // $startStr = $start;
  124. // if ($start < 10) {
  125. // $startStr = "0".$start;
  126. // }
  127. // $data = $this->fetchData($list, $date.'-'.$startStr, 'day', $show_type, $type);
  128. // $dataList = array_merge($dataList, $data);
  129. // }
  130. // $list = $dataList;
  131. // } elseif ($date_type == 'year') {
  132. // $dataList = array();
  133. // $y = intval(date('Y',time()));
  134. // if ($y == $date) {
  135. // $end = intval(date('m',time()));
  136. // }elseif($date > $y){
  137. // $end = 0;
  138. // }else{
  139. // $end = 12;
  140. // }
  141. // for($start = $end; $start > 0; $start--){
  142. // $startStr = $start;
  143. // if ($start < 10) {
  144. // $startStr = "0".$start;
  145. // }
  146. // $data = $this->fetchData($list, $date."-".$startStr, 'month', $show_type, $type);
  147. // $dataList = array_merge($dataList, $data);
  148. // }
  149. // $list = $dataList;
  150. // } else {
  151. // $dataList = array();
  152. // for($start = intval(date('Y')); $start > $this->getStartYear($list); $start--){
  153. // $startStr = $start;
  154. // $data = $this->fetchData($list, $startStr, 'year', $show_type, $type);
  155. // $dataList = array_merge($dataList, $data);
  156. // }
  157. // $list = $dataList;
  158. // }
  159. // $download = $this->input->post('download',true);
  160. // if ($download == 1) {
  161. // $this->download($type,$list);
  162. // }
  163. // $data = $this->formatResult(array_reverse($list), $type);
  164. // // 分页处理
  165. // $page = $this->input->post('page',true);
  166. // $count = $this->input->post('count',true);
  167. // $k = 0;
  168. // $i = 0;
  169. // $res = array();
  170. // foreach ($list as $v) {
  171. // $res[$k][] = $v;
  172. // $i ++;
  173. // if ($i >= $count) {
  174. // $i = 0;
  175. // $k ++;
  176. // }
  177. // }
  178. // $data['list'] = empty($res) ? $res : $res[$page-1];
  179. // $data['total'] = ceil(count($list)/$count);
  180. // exit(json_result('0000', $this->response['0000'], $data));
  181. // }
  182. public function data(){
  183. $type = $this->input->post('type',true);
  184. $item_ids = $this->input->post('item_ids',true);
  185. $date_type = $this->input->post('date_type',true);
  186. $date = $this->input->post('date',true);
  187. if (empty($type) || empty($item_ids) || empty($date_type)) exit(json_result('0007',$this->response['0007']));
  188. if ($date_type == 'month') {
  189. if (empty($date)) exit(json_result('0007',$this->response['0007']));
  190. $beginDate = date('Y-m-01 00:00:00',strtotime($date));
  191. $endDate = date('Y-m-d 23:59:59', strtotime("$beginDate +1 month -1 day"));
  192. }elseif ($date_type == 'year'){
  193. if (empty($date)) exit(json_result('0007',$this->response['0007']));
  194. $beginDate = date('Y-01-01 00:00:00',strtotime($date));
  195. $endDate = date('Y-m-d 23:59:59', strtotime(date('Y-12-01 00:00:00',strtotime($date))." +1 month -1 day"));
  196. }
  197. $item_ids_arr = explode(",", $item_ids);
  198. $list = $this->Lamp_model->get_list_in('L.id', $item_ids_arr, 'L.id as id, L.number as name,P.projectname, L.createtime,L.section');
  199. $temp = array();
  200. foreach ($list as $lamp) {
  201. $lamp['list'] = array();
  202. $temp[$lamp['id']] = $lamp;
  203. }
  204. $temp2 = array();
  205. $report1 = array();
  206. $report2 = array();
  207. $categories = array();
  208. $series1 = array();
  209. $series2 = array();
  210. if ($type == 'power') { // 发用电量
  211. $sql = 'select lampid,dayGeneration as daygeneration,dayConsumption as dayconsumption,monthGeneration as monthgeneration,monthConsumption as monthconsumption,yearGeneration as yeargeneration,yearConsumption as yearconsumption,totalGeneration as totalgeneration,totalConsumption as totalconsumption,updatetime from statistics where lampid in ('.implode(',', $item_ids_arr).') AND updatetime >= "'.$beginDate.'" AND updatetime <= "'.$endDate.'" order by updatetime DESC,lampid DESC';
  212. $dataList = $this->db->query($sql)->result_array();
  213. foreach ($dataList as $d) {
  214. if ($date_type == 'month') {
  215. $index = intval(date('d',strtotime($d['updatetime'])));
  216. }else{
  217. $index = intval(date('m',strtotime($d['updatetime'])));
  218. }
  219. if (isset($temp[$d['lampid']])) {
  220. if (!isset($temp[$d['lampid']]['list'][$index])) {
  221. $temp[$d['lampid']]['list'][$index] = $d;
  222. $d['updatetime'] = date('Y-m-d',strtotime($d['updatetime']));
  223. $d['id'] = $temp[$d['lampid']]['id'];
  224. $d['number'] = $temp[$d['lampid']]['name'];
  225. $d['projectname'] = $temp[$d['lampid']]['projectname'];
  226. // $d['networkname'] = $temp[$d['lampid']]['networkname'];
  227. $d['section'] = $temp[$d['lampid']]['section'];
  228. $temp2[] = $d;
  229. if ($date_type == 'month') {
  230. // $index = intval(date('d',$d['updatetime']));
  231. $series1[$d['lampid']]['data'][] = round($d['daygeneration'],2);
  232. $series2[$d['lampid']]['data'][] = round($d['dayconsumption'],2);
  233. }else{
  234. // $index = intval(date('m',$d['updatetime']));
  235. $series1[$d['lampid']]['data'][] = round($d['monthgeneration'],2);
  236. $series2[$d['lampid']]['data'][] = round($d['monthconsumption'],2);
  237. }
  238. $series1[$d['lampid']]['name'] = $d['number'];
  239. $series2[$d['lampid']]['name'] = $d['number'];
  240. $categories[$d['lampid']][] = $d['updatetime'];
  241. }
  242. }
  243. }
  244. }elseif ($type == 'current') { // 电流
  245. $sql = 'select lampid,dayCharMaxCurr as daycharmaxcurrent,dayDischarMaxCurr as daydischarmaxcurrent,monthCharMaxCurr as monthcharmaxcurrent,monthDischarMaxCurr as monthdischarmaxcurrent,yearCharMaxCurr as yearcharmaxcurrent,yearDischarMaxCurr as yeardischarmaxcurrent,updatetime from statistics where lampid in ('.implode(',', $item_ids_arr).') AND updatetime >= "'.$beginDate.'" AND updatetime <= "'.$endDate.'" order by updatetime DESC,lampid DESC';
  246. $dataList = $this->db->query($sql)->result_array();
  247. foreach ($dataList as $d) {
  248. if ($date_type == 'month') {
  249. $index = intval(date('d',strtotime($d['updatetime'])));
  250. }else{
  251. $index = intval(date('m',strtotime($d['updatetime'])));
  252. }
  253. if (isset($temp[$d['lampid']])) {
  254. if (!isset($temp[$d['lampid']]['list'][$index])) {
  255. $temp[$d['lampid']]['list'][$index] = $d;
  256. $d['updatetime'] = date('Y-m-d',strtotime($d['updatetime']));
  257. $d['id'] = $temp[$d['lampid']]['id'];
  258. $d['number'] = $temp[$d['lampid']]['name'];
  259. $d['projectname'] = $temp[$d['lampid']]['projectname'];
  260. // $d['networkname'] = $temp[$d['lampid']]['networkname'];
  261. $d['section'] = $temp[$d['lampid']]['section'];
  262. $temp2[] = $d;
  263. if ($date_type == 'month') {
  264. // $index = intval(date('d',$d['updatetime']));
  265. $series1[$d['lampid']]['data'][] = round($d['daycharmaxcurrent'],2);
  266. $series2[$d['lampid']]['data'][] = round($d['daydischarmaxcurrent'],2);
  267. }else{
  268. // $index = intval(date('m',$d['updatetime']));
  269. $series1[$d['lampid']]['data'][] = round($d['monthcharmaxcurrent'],2);
  270. $series2[$d['lampid']]['data'][] = round($d['monthdischarmaxcurrent'],2);
  271. }
  272. $series1[$d['lampid']]['name'] = $d['number'];
  273. $series2[$d['lampid']]['name'] = $d['number'];
  274. $categories[$d['lampid']][] = date('Y-m-d',strtotime($d['updatetime']));
  275. }
  276. }
  277. }
  278. }elseif ($type == 'temper') { // 温度
  279. $sql = 'select lampid,dayMinTemper as daybattmintemper,dayMaxTemper as daybattmaxtemper,monthMinTemper as monthbattmintemper,monthMaxTemper as monthbattmaxtemper,yearMinTemper as yearbattmintemper,yearMaxTemper as yearbattmaxtemper,updatetime from statistics where lampid in ('.implode(',', $item_ids_arr).') AND updatetime >= "'.$beginDate.'" AND updatetime <= "'.$endDate.'" order by updatetime DESC,lampid DESC';
  280. $dataList = $this->db->query($sql)->result_array();
  281. foreach ($dataList as $d) {
  282. if ($date_type == 'month') {
  283. $index = intval(date('d',strtotime($d['updatetime'])));
  284. }else{
  285. $index = intval(date('m',strtotime($d['updatetime'])));
  286. }
  287. if (isset($temp[$d['lampid']])) {
  288. if (!isset($temp[$d['lampid']]['list'][$index])) {
  289. $temp[$d['lampid']]['list'][$index] = $d;
  290. $d['updatetime'] = date('Y-m-d',strtotime($d['updatetime']));
  291. $d['id'] = $temp[$d['lampid']]['id'];
  292. $d['number'] = $temp[$d['lampid']]['name'];
  293. $d['projectname'] = $temp[$d['lampid']]['projectname'];
  294. // $d['networkname'] = $temp[$d['lampid']]['networkname'];
  295. $d['section'] = $temp[$d['lampid']]['section'];
  296. $temp2[] = $d;
  297. if ($date_type == 'month') {
  298. // $index = intval(date('d',$d['updatetime']));
  299. $series1[$d['lampid']]['data'][] = round($d['daybattmintemper'],2);
  300. $series2[$d['lampid']]['data'][] = round($d['daybattmaxtemper'],2);
  301. }else{
  302. // $index = intval(date('m',$d['updatetime']));
  303. $series1[$d['lampid']]['data'][] = round($d['monthbattmintemper'],2);
  304. $series2[$d['lampid']]['data'][] = round($d['monthbattmaxtemper'],2);
  305. }
  306. $series1[$d['lampid']]['name'] = $d['number'];
  307. $series2[$d['lampid']]['name'] = $d['number'];
  308. $categories[$d['lampid']][] = date('Y-m-d',strtotime($d['updatetime']));
  309. }
  310. }
  311. }
  312. }elseif ($type == 'capacity') { // 功率
  313. $sql = 'select lampid,dayCharMaxPower as daychargemaxpow,dayDischarMaxPower as daydischarmaxpow,monthCharMaxPower as monthchargemaxpow,monthDischarMaxPower as monthdischarmaxpow,yearCharMaxPower as yearchargemaxpow,yearDischarMaxPower as yeardischarmaxpow,updatetime from statistics where lampid in ('.implode(',', $item_ids_arr).') AND updatetime >= "'.$beginDate.'" AND updatetime <= "'.$endDate.'" order by updatetime DESC,lampid DESC';
  314. $dataList = $this->db->query($sql)->result_array();
  315. foreach ($dataList as $d) {
  316. if ($date_type == 'month') {
  317. $index = intval(date('d',strtotime($d['updatetime'])));
  318. }else{
  319. $index = intval(date('m',strtotime($d['updatetime'])));
  320. }
  321. if (isset($temp[$d['lampid']])) {
  322. if (!isset($temp[$d['lampid']]['list'][$index])) {
  323. $temp[$d['lampid']]['list'][$index] = $d;
  324. $d['updatetime'] = date('Y-m-d',strtotime($d['updatetime']));
  325. $d['id'] = $temp[$d['lampid']]['id'];
  326. $d['number'] = $temp[$d['lampid']]['name'];
  327. $d['projectname'] = $temp[$d['lampid']]['projectname'];
  328. // $d['networkname'] = $temp[$d['lampid']]['networkname'];
  329. $d['section'] = $temp[$d['lampid']]['section'];
  330. $temp2[] = $d;
  331. if ($date_type == 'month') {
  332. // $index = intval(date('d',$d['updatetime']));
  333. $series1[$d['lampid']]['data'][] = round($d['daychargemaxpow'],2);
  334. $series2[$d['lampid']]['data'][] = round($d['daydischarmaxpow'],2);
  335. }else{
  336. // $index = intval(date('m',$d['updatetime']));
  337. $series1[$d['lampid']]['data'][] = round($d['monthchargemaxpow'],2);
  338. $series2[$d['lampid']]['data'][] = round($d['monthdischarmaxpow'],2);
  339. }
  340. $series1[$d['lampid']]['name'] = $d['number'];
  341. $series2[$d['lampid']]['name'] = $d['number'];
  342. $categories[$d['lampid']][] = date('Y-m-d',strtotime($d['updatetime']));
  343. }
  344. }
  345. }
  346. }elseif ($type == 'voltage') { // 电压
  347. $sql = 'select lampid,dayMaxVoltage as voltagedaymax,dayMinVoltage as voltagedaymin,monthMaxVoltage as monthvoltagedaymax,monthMinVoltage as monthvoltagedaymin,yearMaxVoltage as yearvoltagedaymax,yearMinVoltage as yearvoltagedaymin,updatetime from statistics where lampid in ('.implode(',', $item_ids_arr).') AND updatetime >= "'.$beginDate.'" AND updatetime <= "'.$endDate.'" order by updatetime DESC,lampid DESC';
  348. $dataList = $this->db->query($sql)->result_array();
  349. foreach ($dataList as $d) {
  350. if ($date_type == 'month') {
  351. $index = intval(date('d',strtotime($d['updatetime'])));
  352. }else{
  353. $index = intval(date('m',strtotime($d['updatetime'])));
  354. }
  355. if (isset($temp[$d['lampid']])) {
  356. if (!isset($temp[$d['lampid']]['list'][$index])) {
  357. $temp[$d['lampid']]['list'][$index] = $d;
  358. $d['updatetime'] = date('Y-m-d',strtotime($d['updatetime']));
  359. $d['id'] = $temp[$d['lampid']]['id'];
  360. $d['number'] = $temp[$d['lampid']]['name'];
  361. $d['projectname'] = $temp[$d['lampid']]['projectname'];
  362. // $d['networkname'] = $temp[$d['lampid']]['networkname'];
  363. $d['section'] = $temp[$d['lampid']]['section'];
  364. $temp2[] = $d;
  365. if ($date_type == 'month') {
  366. // $index = intval(date('d',$d['updatetime']));
  367. $series1[$d['lampid']]['data'][] = round($d['voltagedaymin'],2);
  368. $series2[$d['lampid']]['data'][] = round($d['voltagedaymax'],2);
  369. }else{
  370. // $index = intval(date('m',$d['updatetime']));
  371. $series1[$d['lampid']]['data'][] = round($d['monthvoltagedaymin'],2);
  372. $series2[$d['lampid']]['data'][] = round($d['monthvoltagedaymax'],2);
  373. }
  374. $series1[$d['lampid']]['name'] = $d['number'];
  375. $series2[$d['lampid']]['name'] = $d['number'];
  376. $categories[$d['lampid']][] = date('Y-m-d',strtotime($d['updatetime']));
  377. }
  378. }
  379. }
  380. }
  381. $download = $this->input->post('download',true);
  382. if ($download == 1) {
  383. $this->download($type,$temp2);
  384. }
  385. $series1 = array_values($series1);
  386. foreach ($series1 as $key => $value) {
  387. $series1[$key]['data'] = array_reverse($value['data']);
  388. }
  389. $series2 = array_values($series2);
  390. foreach ($series2 as $key => $value) {
  391. $series2[$key]['data'] = array_reverse($value['data']);
  392. }
  393. $categories = array_values($categories);
  394. if (count($categories) > 0) {
  395. $categories = array_reverse($categories[0]);
  396. }else{
  397. $categories = array();
  398. }
  399. $report1['series'] = $series1;
  400. $report1['categories'] = $categories;
  401. $report2['series'] = $series1;
  402. $report2['categories'] = $categories;
  403. // 分页处理
  404. $page = $this->input->post('page',true);
  405. $count = $this->input->post('count',true);
  406. $k = 0;
  407. $i = 0;
  408. $res = array();
  409. foreach ($temp2 as $v) {
  410. $res[$k][] = $v;
  411. $i ++;
  412. if ($i >= $count) {
  413. $i = 0;
  414. $k ++;
  415. }
  416. }
  417. $total = ceil(count($temp2)/$count);
  418. $temp2 = empty($res) ? $res : $res[$page-1];
  419. exit(json_result('0000',$this->response['0000'],array('list'=>$temp2,'report1'=>$report1,'report2'=>$report2,'total'=>$total)));
  420. }
  421. // 历史数据首页
  422. public function home(){
  423. $role = $this->get_user_info('role');
  424. $userid = $this->get_user_info('id');
  425. $company = $this->get_user_info('company');
  426. $download = $this->input->post('download',true);
  427. $keyword = $this->input->post('keyword',true);
  428. $page = $this->input->post('page',true);
  429. $count = $this->input->post('count',true);
  430. $page = empty($page) ? 1 : $page;
  431. $count = empty($count) ? 16 : $count;
  432. $type = $this->input->post('type',true);
  433. if (empty($type)) $type = 'power';
  434. if (!in_array($type, array('power', 'current', 'temper', 'capacity', 'voltage'))) {
  435. exit(json_result('0500', $this->response['0500']));
  436. }
  437. $projectid = $this->input->post('projectid', true);
  438. // 以项目为单位获取发用电量
  439. if ($type == 'power' && empty($projectid)) {
  440. $projectData = $this->Project_model->get_projectid($role,$userid,$company,$page,$count,$keyword);
  441. $item_ids = $projectData['idArr'];
  442. $result = array();
  443. foreach ($item_ids as $key => $value) {
  444. $res = $this->Project_model->getData(array('id'=>$value),'projectname');
  445. $lampIds = $this->Lamp_model->getLampIds(array('project' => $value));
  446. $data = $this->Electric_model->getPowerDataByFilter($lampIds, date('Y-m-d H:i:s'), 'day');
  447. $data['projectname'] = $res['projectname'];
  448. $data['projectid'] = $value;
  449. $result[] = $data;
  450. }
  451. exit(json_result('0000',$this->response['0000'],array('list'=>$result,'total'=>ceil($projectData['total']/$count))));
  452. }
  453. if (empty($projectid)) { // 没有传项目id
  454. $show_type = 'project';
  455. $item_ids = $this->Lamp_model->get_projectid_by_role($role,$userid,$company);
  456. $item_ids_arr = empty($item_ids) ? array(0) : explode(",", $item_ids);
  457. }else{ // 有传项目id
  458. $item_ids_arr = $projectid;
  459. }
  460. $fiter = array();
  461. if ($download != 1) {
  462. $fiter['page'] = $page;
  463. $fiter['count'] = $count;
  464. }
  465. if (!empty($keyword)) {
  466. $fiter['keyword'] = $keyword;
  467. }
  468. $section = $this->input->post('section',true);
  469. if (!empty($section)) {
  470. $fiter['section'] = $section;
  471. }
  472. // 获取项目下对应的路灯列表
  473. $list = $this->Lamp_model->report_get_list_in('L.projectid', $item_ids_arr, 'L.id as id, L.number as name,P.projectname,L.projectid,L.section',$fiter);
  474. // var_dump($list);
  475. $function = 'get'.ucfirst($type).'DataByFilter';
  476. $result = array();
  477. $ids = array_column($list, 'id');
  478. // $eleData = $this->Electric_model->$function($ids, date('Y-m-d H:i:s'),'day');
  479. $eleData = $this->Statistics_model->get_data($ids, date('Y-m-d H:i:s'),$type);
  480. // 遍历路灯数组,每个路灯的历史数据
  481. foreach ($list as $k=>$v) {
  482. // $data = $this->Electric_model->$function(array($v['id']), date('Y-m-d H:i:s'),'day');
  483. $data = [];
  484. if ($type == 'power') {
  485. $data['daygeneration'] = empty($eleData[$v['id']]['dayGeneration']) ? 0 : round($eleData[$v['id']]['dayGeneration'],2);
  486. $data['dayconsumption'] = empty($eleData[$v['id']]['dayConsumption']) ? 0 : round($eleData[$v['id']]['dayConsumption'],2);
  487. $data['totalgeneration'] = empty($eleData[$v['id']]['totalGeneration']) ? 0 : round($eleData[$v['id']]['totalGeneration'],2);
  488. $data['totalconsumption'] = empty($eleData[$v['id']]['totalConsumption']) ? 0 : round($eleData[$v['id']]['totalConsumption'],2);
  489. $data['monthgeneration'] = empty($eleData[$v['id']]['monthGeneration']) ? 0 : round($eleData[$v['id']]['monthGeneration'],2);
  490. $data['monthconsumption'] = empty($eleData[$v['id']]['monthConsumption']) ? 0 : round($eleData[$v['id']]['monthConsumption'],2);
  491. $data['yeargeneration'] = empty($eleData[$v['id']]['yearGeneration']) ? 0 : round($eleData[$v['id']]['yearGeneration'],2);
  492. $data['yearconsumption'] = empty($eleData[$v['id']]['yearConsumption']) ? 0 : round(
  493. $eleData[$v['id']]['yearConsumption'],2);
  494. $v['updatetime'] = empty($eleData[$v['id']]['updatetime']) ? '' : $eleData[$v['id']]['updatetime'];
  495. }elseif ($type == 'current') {
  496. $data['daycharmaxcurrent'] = empty($eleData[$v['id']]['dayCharMaxCurr']) ? 0 : round($eleData[$v['id']]['dayCharMaxCurr'],2);
  497. $data['daydischarmaxcurrent'] = empty($eleData[$v['id']]['dayDischarMaxCurr']) ? 0 : round($eleData[$v['id']]['dayDischarMaxCurr'],2);
  498. $data['monthcharmaxcurrent'] = empty($eleData[$v['id']]['monthCharMaxCurr']) ? 0 : round($eleData[$v['id']]['monthCharMaxCurr'],2);
  499. $data['monthdischarmaxcurrent'] = empty($eleData[$v['id']]['monthDischarMaxCurr']) ? 0 : round($eleData[$v['id']]['monthDischarMaxCurr'],2);
  500. $data['yearcharmaxcurrent'] = empty($eleData[$v['id']]['yearCharMaxCurr']) ? 0 : round($eleData[$v['id']]['yearCharMaxCurr'],2);
  501. $data['yeardischarmaxcurrent'] = empty($eleData[$v['id']]['yearDischarMaxCurr']) ? 0 : round(
  502. $eleData[$v['id']]['yearDischarMaxCurr'],2);
  503. $v['updatetime'] = empty($eleData[$v['id']]['updatetime']) ? '' : $eleData[$v['id']]['updatetime'];
  504. }elseif ($type == 'temper') {
  505. $data['daybattmintemper'] = empty($eleData[$v['id']]['dayMinTemper']) ? 0 : round($eleData[$v['id']]['dayMinTemper'],1);
  506. $data['daybattmaxtemper'] = empty($eleData[$v['id']]['dayMaxTemper']) ? 0 : round($eleData[$v['id']]['dayMaxTemper'],1);
  507. $data['monthbattmintemper'] = empty($eleData[$v['id']]['monthMinTemper']) ? 0 : round($eleData[$v['id']]['monthMinTemper'],1);
  508. $data['monthbattmaxtemper'] = empty($eleData[$v['id']]['monthMaxTemper']) ? 0 : round($eleData[$v['id']]['monthMaxTemper'],1);
  509. $data['yearbattmintemper'] = empty($eleData[$v['id']]['yearMinTemper']) ? 0 : round($eleData[$v['id']]['yearMinTemper'],1);
  510. $data['yearbattmaxtemper'] = empty($eleData[$v['id']]['yearMaxTemper']) ? 0 : round(
  511. $eleData[$v['id']]['yearMaxTemper'],1);
  512. $v['updatetime'] = empty($eleData[$v['id']]['updatetime']) ? '' : $eleData[$v['id']]['updatetime'];
  513. }elseif ($type == 'capacity') {
  514. $data['daychargemaxpow'] = empty($eleData[$v['id']]['dayCharMaxPower']) ? 0 : round($eleData[$v['id']]['dayCharMaxPower'],2);
  515. $data['daydischarmaxpow'] = empty($eleData[$v['id']]['dayDischarMaxPower']) ? 0 : round($eleData[$v['id']]['dayDischarMaxPower'],2);
  516. $data['monthchargemaxpow'] = empty($eleData[$v['id']]['monthCharMaxPower']) ? 0 : round($eleData[$v['id']]['monthCharMaxPower'],2);
  517. $data['monthdischarmaxpow'] = empty($eleData[$v['id']]['monthDischarMaxPower']) ? 0 : round($eleData[$v['id']]['monthDischarMaxPower'],2);
  518. $data['yearchargemaxpow'] = empty($eleData[$v['id']]['yearCharMaxPower']) ? 0 : round($eleData[$v['id']]['yearCharMaxPower'],2);
  519. $data['yeardischarmaxpow'] = empty($eleData[$v['id']]['yearDischarMaxPower']) ? 0 : round($eleData[$v['id']]['yearDischarMaxPower'],2);
  520. $v['updatetime'] = empty($eleData[$v['id']]['updatetime']) ? '' : $eleData[$v['id']]['updatetime'];
  521. }else{
  522. $data['voltagedaymin'] = empty($eleData[$v['id']]['dayMinVoltage']) ? 0 : round($eleData[$v['id']]['dayMinVoltage'],2);
  523. $data['voltagedaymax'] = empty($eleData[$v['id']]['dayMaxVoltage']) ? 0 : round($eleData[$v['id']]['dayMaxVoltage'],2);
  524. $data['monthvoltagedaymin'] = empty($eleData[$v['id']]['monthMinVoltage']) ? 0 : round($eleData[$v['id']]['monthMinVoltage'],2);
  525. $data['monthvoltagedaymax'] = empty($eleData[$v['id']]['monthMaxVoltage']) ? 0 : round($eleData[$v['id']]['monthMaxVoltage'],2);
  526. $data['yearvoltagedaymin'] = empty($eleData[$v['id']]['yearMinVoltage']) ? 0 : round($eleData[$v['id']]['yearMinVoltage'],2);
  527. $data['yearvoltagedaymax'] = empty($eleData[$v['id']]['yearMaxVoltage']) ? 0 : round($eleData[$v['id']]['yearMaxVoltage'],2);
  528. $v['updatetime'] = empty($eleData[$v['id']]['updatetime']) ? '' : $eleData[$v['id']]['updatetime'];
  529. }
  530. // $data = $eleData[$v['id']];
  531. $data['id'] = $v['id'];
  532. $data['number'] = $v['name'];
  533. if (!empty($v['updatetime'])) {
  534. $timezone = $this->Project_model->get_timezone_by_projectid($v['projectid']);
  535. $v['updatetime'] = date_change($v['updatetime'],8,$timezone['value']);
  536. }
  537. $data['updatetime'] = $v['updatetime'];
  538. $data['projectname'] = $v['projectname'];
  539. $data['section'] = $v['section'];
  540. $result[] = $data;
  541. }
  542. if ($download == 1) {
  543. $this->download($type,$result);
  544. }
  545. unset($fiter['page']);
  546. unset($fiter['count']);
  547. $res = $this->Lamp_model->get_total('L.projectid', $item_ids_arr, 'L.id',$fiter);
  548. $total = ceil($res/$count);
  549. exit(json_result('0000',$this->response['0000'],array('list'=>$result,'total'=>$total)));
  550. }
  551. private function download($type,$result){
  552. $version = $this->session->userdata('version');
  553. // 导出到Excel , '', 'voltage'
  554. if ($type == 'power') { // 发/用电量
  555. if (empty($version)) {
  556. $title = array(
  557. array('路灯编号','项目名称','网络名称','当日发电量(kWh)','当日用电量(kWh)','当月发电量(kWh)','当月用电量(kWh)','当年发电量(kWh)','当年用电量(kWh)','累计发电量(kWh)','累计用电量(kWh)','数据更新时间'),
  558. );
  559. }else{
  560. $title = array(
  561. array('Lamp number','Project name','Network name','Daily Power generation(kWh)','Day electricity consumption(kWh)','Monthly Power generation(kWh)','Monthly electricity consumption(kWh)','Year Power generation(kWh)','Year electricity consumptio(kWh)','Cumulative power generation(kWh)','Cumulative electricity consumption(kWh)','Update time'),
  562. );
  563. }
  564. $temp = array();
  565. foreach ($result as $k=>$v) {
  566. $temp[$k][] = "{$v['number']}";
  567. $temp[$k][] = $v['projectname'];
  568. $temp[$k][] = "{$v['networkname']}";
  569. $temp[$k][] = $v['daygeneration'];
  570. $temp[$k][] = $v['dayconsumption'];
  571. $temp[$k][] = $v['monthgeneration'];
  572. $temp[$k][] = $v['monthconsumption'];
  573. $temp[$k][] = $v['yeargeneration'];
  574. $temp[$k][] = $v['yearconsumption'];
  575. $temp[$k][] = $v['totalgeneration'];
  576. $temp[$k][] = $v['totalconsumption'];
  577. $temp[$k][] = $v['updatetime'];
  578. }
  579. }elseif ($type == 'current') { // 电流
  580. if (empty($version)) {
  581. $title = array(
  582. array('路灯编号','项目名称','网络名称','当天充电最大电流(A)','当天放电最大电流(A)','当月充电最大电流(A)','当月放电最大电流(A)','当年充电最大电流(A)','当年放电最大电流(A)','数据更新时间'),
  583. );
  584. }else{
  585. $title = array(
  586. array('Lamp number','Project name','networkname','Highest charging current(A)','Highest discharging current(A)','Month charging maximum current(A)','Current discharge maximum current(A)','Current charging maximum current(A)','Current discharge maximum current(A)','Update time'),
  587. );
  588. }
  589. $temp = array();
  590. foreach ($result as $k=>$v) {
  591. $temp[$k][] = "{$v['number']}";
  592. $temp[$k][] = $v['projectname'];
  593. $temp[$k][] = "{$v['networkname']}";
  594. $temp[$k][] = $v['daycharmaxcurrent'];
  595. $temp[$k][] = $v['daydischarmaxcurrent'];
  596. $temp[$k][] = $v['monthcharmaxcurrent'];
  597. $temp[$k][] = $v['monthdischarmaxcurrent'];
  598. $temp[$k][] = $v['yearcharmaxcurrent'];
  599. $temp[$k][] = $v['yeardischarmaxcurrent'];
  600. $temp[$k][] = $v['updatetime'];
  601. }
  602. }elseif ($type == 'temper') { // 温度
  603. if (empty($version)) {
  604. $title = array(
  605. array('路灯编号','项目名称','网络名称','当天蓄电池最低温度(℃)','当天蓄电池最高温度(℃)','当月蓄电池最低温度(℃)','当月蓄电池最高温度(℃)','当年蓄电池最低温度(℃)','当年蓄电池最高温度(℃)','数据更新时间'),
  606. );
  607. }else{
  608. $title = array(
  609. array('Lamp number','Project name','networkname','Battery minimum temperature(℃)','Battery highest temperature(℃)','Month Battery minimum temperature(℃)','Month Battery highest temperature(℃)','Year Battery highest temperature(℃)','Year Battery minimum temperature(℃)','Update time'),
  610. );
  611. }
  612. $temp = array();
  613. foreach ($result as $k=>$v) {
  614. $temp[$k][] = "{$v['number']}";
  615. $temp[$k][] = $v['projectname'];
  616. $temp[$k][] = "{$v['networkname']}";
  617. $temp[$k][] = $v['daybattmintemper'];
  618. $temp[$k][] = $v['daybattmaxtemper'];
  619. $temp[$k][] = $v['monthbattmintemper'];
  620. $temp[$k][] = $v['monthbattmaxtemper'];
  621. $temp[$k][] = $v['yearbattmintemper'];
  622. $temp[$k][] = $v['yearbattmaxtemper'];
  623. $temp[$k][] = $v['updatetime'];
  624. }
  625. }elseif ($type == 'capacity') { // 功率
  626. if (empty($version)) {
  627. $title = array(
  628. array('路灯编号','项目名称','网络名称','当天充电最大功率(w)','当天放电最大功率(w)','当月充电最大功率(w)','当月放电最大功率(w)','当年充电最大功率(w)','当年放电最大功率(w)','数据更新时间'),
  629. );
  630. }else{
  631. $title = array(
  632. array('Lamp number','Project name','networkname','Charging maximum power(w)','Discharging maximum power(W)','Month charging maximum power(w)','Monthly discharge maximum power(w)','Year charging maximum power(w)','Year discharge maximum powe(W)','Update time'),
  633. );
  634. }
  635. $temp = array();
  636. foreach ($result as $k=>$v) {
  637. $temp[$k][] = "{$v['number']}";
  638. $temp[$k][] = $v['projectname'];
  639. $temp[$k][] = "{$v['networkname']}";
  640. $temp[$k][] = $v['daychargemaxpow'];
  641. $temp[$k][] = $v['daydischarmaxpow'];
  642. $temp[$k][] = $v['monthchargemaxpow'];
  643. $temp[$k][] = $v['monthchargemaxpow'];
  644. $temp[$k][] = $v['yearchargemaxpow'];
  645. $temp[$k][] = $v['yeardischarmaxpow'];
  646. $temp[$k][] = $v['updatetime'];
  647. }
  648. }elseif ($type == 'voltage') {
  649. if (empty($version)) {
  650. $title = array(
  651. array('路灯编号','项目名称','网络名称','当天最低电压(V)','当天最高电压(V)','当月最低电压(V)','当月最高电压(V)','当年最低电压(V)','当年最高电压(V)','数据更新时间'),
  652. );
  653. }else{
  654. $title = array(
  655. array('Lamp number','Project name','networkname','Day lowest voltage(V)','Day highest voltage(V)','Month lowest voltage(V)','Month highest voltage(V)','Year lowest voltage(V)','Year highest voltage(V)','Update time'),
  656. );
  657. }
  658. $temp = array();
  659. foreach ($result as $k=>$v) {
  660. $temp[$k][] = "{$v['number']}";
  661. $temp[$k][] = $v['projectname'];
  662. $temp[$k][] = "{$v['networkname']}";
  663. $temp[$k][] = $v['voltagedaymin'];
  664. $temp[$k][] = $v['voltagedaymax'];
  665. $temp[$k][] = $v['monthvoltagedaymin'];
  666. $temp[$k][] = $v['monthvoltagedaymax'];
  667. $temp[$k][] = $v['yearvoltagedaymin'];
  668. $temp[$k][] = $v['yearvoltagedaymax'];
  669. // $temp[$k][] = $v['totalvoltagedaymin'];
  670. // $temp[$k][] = $v['totalvoltagedaymax'];
  671. $temp[$k][] = $v['updatetime'];
  672. }
  673. }
  674. $data = array_merge($title,$temp);
  675. $path = push_excel($data,'historyExcel_'.date('Ymd'));
  676. exit(json_result('0000',$this->response['0000'],array('path'=>$path)));
  677. }
  678. }