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

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