DeviceManagementController.class.php.bak.2021-12-13 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. class DeviceManagementController extends ComController
  5. {
  6. //设备管理各类型设备统计
  7. public function getDeviceCount(){
  8. $Data=I('');
  9. $company_code=$Data['company_code'];
  10. $data=M()->query("select dwtype,count(*) as count from sp_owner where company='".$company_code."' group by dwtype order by dwtype");
  11. foreach ($data as $key=>$value){
  12. if ($data[$key]['dwtype']==1){
  13. $types_count[0]['pass_on_device_count']=(int)$data[$key]['count'];
  14. }elseif ($data[$key]['dwtype']==2){
  15. $types_count[0]['water_meter_device_count']=(int)$data[$key]['count'];
  16. }elseif ($data[$key]['dwtype']==3){
  17. $types_count[0]['smoke_sensation_device_count']=(int)$data[$key]['count'];
  18. }elseif ($data[$key]['dwtype']==4){
  19. $types_count[0]['fire_hydrant_device_count']=(int)$data[$key]['count'];
  20. }elseif ($data[$key]['dwtype']==5){
  21. $types_count[0]['level_device_count']=(int)$data[$key]['count'];
  22. }elseif ($data[$key]['dwtype']==6){
  23. $types_count[0]['rtu_device_count']=(int)$data[$key]['count'];
  24. }elseif ($data[$key]['dwtype']==7){
  25. $types_count[0]['electrical_fire_device_count']=(int)$data[$key]['count'];
  26. }elseif ($data[$key]['dwtype']==16){
  27. $types_count[0]['video_device_count']=(int)$data[$key]['count'];
  28. }elseif ($data[$key]['dwtype']==17){
  29. $types_count[0]['elevator_device_count']=(int)$data[$key]['count'];
  30. }elseif ($data[$key]['dwtype']==128){
  31. $types_count[0]['manhole_cover_device_count']=(int)$data[$key]['count'];
  32. }elseif ($data[$key]['dwtype']==129){
  33. $types_count[0]['geomagnetism_device_count']=(int)$data[$key]['count'];
  34. }elseif ($data[$key]['dwtype']==130){
  35. $types_count[0]['access_control_device_count']=(int)$data[$key]['count'];
  36. }elseif ($data[$key]['dwtype']==131){
  37. $types_count[0]['gsa_device_count']=(int)$data[$key]['count'];
  38. }
  39. }
  40. $res['msg'] = '操作成功';
  41. $res['flag'] = true;
  42. $res['data'] = $types_count;
  43. echo json_encode($res);
  44. }
  45. public function getDeviceList(){
  46. $Data=I('');
  47. $company_code=$Data['company_code'];
  48. $dwtype=$Data['dwtype'];
  49. $start_time = $Data['start_time'];
  50. $end_time = $Data['end_time'];
  51. $where='';
  52. if (!empty($start_time)){
  53. $where.=" and a.install_time>='".$start_time."' ";
  54. }
  55. if (!empty($end_time)){
  56. $where.=" and a.install_time<'".$end_time."' ";
  57. }
  58. if ($dwtype==1){
  59. $device_list=M()->query("SELECT a.id,a.owner_code,a.owner_name,a.dwtype,b.true_status,IF(b.true_status=0,'在线','离线') as device_state,a.install_time,a.unitinfo FROM sp_owner AS a JOIN sp_devices_status AS b ON a.owner_code=b.deviceid WHERE a.company='".$company_code."' AND a.dwtype=1 ".$where." order by a.id DESC");
  60. }else{
  61. $device_list=M()->query("SELECT a.id,a.owner_code,a.owner_name,a.dwtype,IF(timestampdiff(HOUR,max(`b`.`data_time`),now())<12,'在线','离线') AS device_state,a.install_time,a.unitinfo FROM sp_owner AS a left JOIN sp_owner_status AS b ON a.owner_code=b.device_id WHERE a.company='".$company_code."' AND a.dwtype=".$dwtype." ".$where." GROUP BY a.owner_code ORDER BY a.id DESC");
  62. }
  63. $res['msg'] = '操作成功';
  64. $res['flag'] = true;
  65. $res['data'] = $device_list;
  66. echo json_encode($res);
  67. }
  68. // public function getDeviceList(){
  69. // $Data=I('');
  70. // $company_code=$Data['company_code'];
  71. // $dwtype=$Data['dwtype'];
  72. // if ($dwtype==1){
  73. // $device_list=M()->query("SELECT a.id,a.owner_code,a.owner_name,a.dwtype,b.true_status,IF(b.true_status=0,'在线','离线') as device_state,a.install_time,a.unitinfo FROM sp_owner AS a JOIN sp_devices_status AS b ON a.owner_code=b.deviceid WHERE a.company='".$company_code."' AND a.dwtype=1 order by a.install_time DESC");
  74. // }else{
  75. // $device_list=M()->query("SELECT a.id,a.owner_code,a.owner_name,a.dwtype,IF(timestampdiff(HOUR,max(`b`.`data_time`),now())<12,'在线','离线') AS device_state,a.install_time,a.unitinfo FROM sp_owner AS a left JOIN sp_owner_status AS b ON a.owner_code=b.device_id WHERE a.company='".$company_code."' AND a.dwtype=".$dwtype." GROUP BY a.owner_code ORDER BY a.install_time DESC");
  76. // }
  77. //
  78. // $res['msg'] = '操作成功';
  79. // $res['flag'] = true;
  80. // $res['data'] = $device_list;
  81. // echo json_encode($res);
  82. // }
  83. public function getDeviceDetails(){
  84. $Data=I('');
  85. $id=$Data['id'];
  86. $device_details=M()->query("SELECT a.company,a.id,a.owner_code,a.owner_name,a.sim,a.unitinfo,a.install_time,b.owner_address,a.dwtype FROM sp_owner AS a JOIN sp_owner_company AS b ON a.company=b.owner_id WHERE a.id=".$id);
  87. switch ($device_details[0]['dwtype']) {
  88. case '1'://报警主机
  89. $device_details[0]['type_name']='报警主机';
  90. $misinformation=M()->query("SELECT count(*) as count FROM sp_hj2017 WHERE device_code='".$device_details[0]['owner_code']."' AND clwb=1");
  91. $real_alarm=M()->query("SELECT count(*) as count FROM sp_hj2017 WHERE device_code='".$device_details[0]['owner_code']."' AND clwb=0");
  92. $unprocessed=M()->query("SELECT count(*) as count FROM sp_hj2017 WHERE device_code='".$device_details[0]['owner_code']."' AND clzt=0;");
  93. $device_details[0]['misinformation']=(int)$misinformation[0]['count'];
  94. $device_details[0]['real_alarm']=(int)$real_alarm[0]['count'];
  95. $device_details[0]['unprocessed']=(int)$unprocessed[0]['count'];
  96. break;
  97. case '2'://水表
  98. $device_details[0]['type_name']='水表';
  99. $water_data=M()->query("select * from sp_owner_sync_data where device_id='".$device_details[0]['owner_code']."' and point_code=4 order by data_time desc");
  100. $battery_data=M()->query("select point_data,data_time from sp_owner_sync_data where device_id='".$device_details[0]['owner_code']."' and point_code=2 order by data_time desc");
  101. $signal_data=M()->query("select point_data from sp_owner_sync_data where device_id='".$device_details[0]['owner_code']."' and point_code=3 order by data_time desc");
  102. // print_r($water_data);
  103. foreach ($water_data as $key=>$value){
  104. $data[]=$value['point_data'];
  105. $time[]=$value['data_time'];
  106. }
  107. foreach ($battery_data as $key=>$value){
  108. $battery[]=$value['point_data'];
  109. }
  110. foreach ($signal_data as $key=>$value){
  111. $signal[]=$value['point_data'];
  112. }
  113. $device_details[0]['stiem']=$time;
  114. $device_details[0]['water_data']=$data;
  115. $device_details[0]['battery_data']=$battery;
  116. $device_details[0]['signal_data']=$signal;
  117. break;
  118. case '3'://烟感
  119. $device_details[0]['type_name']='烟感';
  120. $fume = M()->query("select RSRQ, DeviceStatus, BatteryLevel, storeTime, device_id from sp_y".$device_details[0]['owner_code']." ORDER BY storeTime DESC limit 1");
  121. if (empty($fume)){
  122. $device_details[0]['device_status']='';
  123. }else{
  124. if ($fume[0]['DeviceStatus']==7){
  125. $device_details[0]['device_status']='正常';
  126. }else if ($fume[0]['DeviceStatus']==5){
  127. $device_details[0]['device_status']='故障';
  128. }else if ($fume[0]['DeviceStatus']==4){
  129. $device_details[0]['device_status']='低压';
  130. }else if ($fume[0]['DeviceStatus']==2){
  131. $device_details[0]['device_status']='报警静音';
  132. }else if ($fume[0]['DeviceStatus']==1){
  133. $device_details[0]['device_status']='报警';
  134. }
  135. }
  136. $device_details[0]['battery_level']=$fume[0]['BatteryLevel'];
  137. $device_details[0]['rsrq']=$fume[0]['RSRQ'];
  138. $device_details[0]['stime']=$fume[0]['storeTime'];
  139. break;
  140. case '4'://消防栓
  141. $device_details[0]['type_name']='消防栓';
  142. $R=M()->query("select data4, data3, data2, data1, time, device_code from sp_d".$device_details[0]['owner_code']." ORDER BY time DESC limit 1");
  143. $device_details[0]['stime'];
  144. $device_details[0]['battery_level'];
  145. $device_details[0]['rsrq'];
  146. if ($R[0]['data1']=='WP1'){
  147. $device_details[0]['device_status']='低压';
  148. }elseif($R[0]['data1']=='WP2'){
  149. $device_details[0]['device_status']='高压';
  150. }elseif($R[0]['data1']=='WP3'){
  151. $device_details[0]['device_status']='故障';
  152. }else{
  153. $device_details[0]['device_status']=$R[0]['data1'];
  154. }
  155. $device_details[0]['device_data']=$R[0]['data1'];
  156. $device_details[0]['stime']=$R[0]['time'];
  157. break;
  158. case '5'://液位
  159. $device_details[0]['type_name']='液位';
  160. $water_data=M()->query("select * from sp_owner_sync_data where device_id='".$device_details[0]['owner_code']."' and point_code=4 order by data_time desc");
  161. foreach ($water_data as $value) {
  162. $time[]=$value['data_time'];
  163. $device_data[]=$value['point_data'];
  164. }
  165. $device_details[0]['stiem']=$time;
  166. $device_details[0]['water_data']=$device_data;
  167. break;
  168. case '6'://RTU
  169. $device_details[0]['type_name']='RTU';
  170. $rtu=M()->query("SELECT id,data4,ncmd,`time`,data1,data2,CASE WHEN `port`='E6' THEN '模拟量' WHEN `port`='E3' THEN '开关量' END as types
  171. FROM sp_d".$device_details[0]['owner_code']." WHERE id in(SELECT MAX(id)
  172. FROM sp_d".$device_details[0]['owner_code']." GROUP BY `port`,ncmd) AND ncmd !='' "
  173. .(($device_details[0]['owner_code']=='4023363030303635')?" AND (ncmd !='02' OR `port`!='E6') ":
  174. (($device_details[0]['owner_code']=='4023363030303639')?" AND (ncmd !='03' OR `port`!='E6') ":
  175. (($device_details[0]['owner_code']=='4023363030303434')?" AND (ncmd !='04' OR `port`!='E3') AND (ncmd !='05' OR `port`!='E3')":
  176. (($device_details[0]['owner_code']=='4023363030303336')? " AND (ncmd !='01' OR `port`!='E6') ":
  177. (($device_details[0]['owner_code']=='4023363030303733')?" AND (ncmd !='05' AND ncmd !='06' )":"")))))//山海大酒店B1楼水泵房02端口模拟量因设备故障,暂时屏蔽
  178. );
  179. foreach ($rtu as $key=>$value){
  180. if ($rtu[$key]['ncmd']=='01'|| $rtu[$key]['ncmd']=='02'|| $rtu[$key]['ncmd']=='03'|| $rtu[$key]['ncmd']=='04'|| $rtu[$key]['ncmd']=='05'
  181. ||$rtu[$key]['ncmd']=='06'||$rtu[$key]['ncmd']=='07'|| $rtu[$key]['ncmd']=='07'|| $rtu[$key]['ncmd']=='08'||$rtu[$key]['ncmd']=='09'){
  182. $rtu[$key]['ncmd']='0'.hexdec($rtu[$key]['ncmd']);
  183. }else{
  184. $rtu[$key]['ncmd']=hexdec($rtu[$key]['ncmd']);
  185. }
  186. }
  187. $device_details[0]['rtu_data']=$rtu;
  188. break;
  189. case '7'://电气火灾
  190. $device_details[0]['type_name']='电气火灾';
  191. $R=M()->query("select * from sp_owner_status where device_id='".$device_details[0]['owner_code']."'");
  192. $tiem=M()->query("select max(data_time) as time from sp_owner_status where device_id='".$device_details[0]['owner_code']."'");
  193. foreach ($R as $key=>$value){
  194. $R[$key]['time']=$tiem[0]['time'];
  195. }
  196. $device_details[0]['electric_data']=$R;
  197. break;
  198. case '16'://视频监测
  199. $device_details[0]['type_name']='视频监测';
  200. $video=M()->query("select data4,time from sp_video2017 where device_code='".$device_details[0]['owner_code']."' order by time desc limit 1");
  201. $device_details[0]['video_data']=$video;
  202. break;
  203. case '17'://电梯监测
  204. $device_details[0]['type_name']='电梯监测';
  205. $elevator=M()->query("select data4,time from sp_lifter2017 where device_code='".$device_details[0]['owner_code']."' order by time desc limit 1");
  206. $device_details[0]['elevator_data']=$elevator;
  207. break;
  208. case '128'://井盖
  209. $device_details[0]['type_name']='井盖监测';
  210. $MC=M()->query("select device_status,time from sp_iw2017 where device_code='".$device_details[0]['owner_code']."' order by time desc limit 1");
  211. if ($MC[0]['device_status']){
  212. $MC[0]['data4']='正常';
  213. }else{
  214. $MC[0]['data4']='打开告警';
  215. }
  216. $MC[0]['time']=$MC[0]['time'];
  217. $device_details[0]['mc_data']=$MC;
  218. break;
  219. case '129'://地磁
  220. $device_details[0]['type_name']='地磁';
  221. break;
  222. case '130'://门禁
  223. $device_details[0]['type_name']='门禁';
  224. break;
  225. case '131'://可燃气体
  226. $device_details[0]['type_name']='可燃气体';
  227. break;
  228. default:
  229. $res['msg'] = '操作失败,设备类型尚未定义,请联系管理员';
  230. $res['flag'] = 3002;
  231. echo json_encode($res);
  232. exit();
  233. break;
  234. }
  235. $res['msg'] = '操作成功';
  236. $res['flag'] = true;
  237. $res['data'] = $device_details;
  238. echo json_encode($res);
  239. }
  240. }