Preview.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. namespace catchAdmin\screen\controller;
  3. use catcher\base\CatchRequest as Request;
  4. use catcher\CatchResponse;
  5. use catcher\base\CatchController;
  6. use catchAdmin\system\model\SysDictData;
  7. use catchAdmin\permissions\model\SysConfig;
  8. use think\facade\Db;
  9. use catchAdmin\permissions\model\DataRangScopeTrait;
  10. use catchAdmin\alarm\model\AlarmRecords as alarmRecordsModel;
  11. use catchAdmin\alarm\model\AlarmReport as alarmReportModel;
  12. use catchAdmin\stations\model\Station as stationModel;
  13. use catchAdmin\permissions\model\Users as usersModel;
  14. class Preview extends CatchController
  15. {
  16. use DataRangScopeTrait;
  17. protected $alarmRecordsModel;
  18. protected $alarmReportModel;
  19. protected $stationModel;
  20. protected $usersModel;
  21. public function __construct(alarmReportModel $alarmReportModel,alarmRecordsModel $alarmRecordsModel,stationModel $stationModel,usersModel $usersModel)
  22. {
  23. $this->alarmReportModel = $alarmReportModel;
  24. $this->alarmRecordsModel = $alarmRecordsModel;
  25. $this->stationModel = $stationModel;
  26. $this->usersModel = $usersModel;
  27. }
  28. function randFloat($min=0, $max=1){
  29. return $min + mt_rand()/mt_getrandmax() * ($max-$min);
  30. }
  31. /**
  32. * 获取地图上所有设备地址 以及信号统计 井类型统计
  33. *
  34. */
  35. public function getDeviceAddressList(){
  36. // $deviceList=$this->mainDevice->select()->toArray();
  37. $start=$_REQUEST['start']?$_REQUEST['start']*10000:0;
  38. $limit=$_REQUEST['limit']?:10000;
  39. // $deviceList=$this->deviceModel->dataRange()->limit($start,$limit)->cache(60)->column('id,point_x,point_y,addr,well_type');
  40. // var_dump($deviceList);
  41. $addrList=array();
  42. $addrList1=array();
  43. for($i=0;$i<20;$i++){
  44. $a=mt_rand();
  45. $b=mt_getrandmax();
  46. $c=$a/$b;
  47. $lng=mt_rand(100, 118)+$c;
  48. $lat=mt_rand(25, 35)+$c;
  49. // var_dump($lng);
  50. // var_dump($lat);
  51. $item=array('value'=>[$lng, $lat],'name'=>"测试风场".$i,'address'=>'风场位置'.$i,'number'=>mt_rand(0, 20));
  52. array_push($addrList,$item);
  53. $a=mt_rand();
  54. $b=mt_getrandmax();
  55. $c=$a/$b;
  56. $lng=mt_rand(100, 118)+$c;
  57. $lat=mt_rand(25, 35)+$c;
  58. // var_dump($lng);
  59. // var_dump($lat);
  60. $item=array('value'=>[$lng, $lat],'name'=>"测试风场".$i,'address'=>'风场位置'.$i,'number'=>mt_rand(0, 20));
  61. array_push($addrList1,$item);
  62. }
  63. // foreach($deviceList as $val){
  64. // $item=array('value'=>[$val['point_y'], $val['point_x']],'name'=>$val['addr']);
  65. // array_push($addrList,$item);
  66. // }
  67. $res['addrList']=$addrList;
  68. $res['addrList1']=$addrList1;
  69. // $res['total']=$this->deviceModel->dataRange()->count();
  70. $res['total']=80;
  71. return CatchResponse::success($res);
  72. }
  73. /**
  74. * 获取智能插座统计
  75. *
  76. */
  77. public function getSocketStationTotal(){
  78. // $deviceList=$this->mainDevice->select()->toArray();
  79. $request_interval=Db::table("sys_config")->where('type','station_config')->where('field','request_interval')->value('fieldValue');
  80. $online_time=date('Y-m-d H:i:s',time()-$request_interval);
  81. $res=[];
  82. $res['tatol']=$this->stationModel->dataRange()->where('station_type',3)->count();
  83. $res['online']=$this->stationModel->dataRange()->where('station_type',3)->where('online_time','>',$online_time)->count();
  84. $res['offline']=$res['tatol']-$res['online'];
  85. $yAxisData[]=$res['tatol'];
  86. $yAxisData[]=$res['online'];
  87. $yAxisData[]=$res['offline'];
  88. $xAxisData=["总数", "在线", "离线"];//X轴坐标
  89. $total=array('yAxisData'=>$yAxisData,'xAxisData'=>$xAxisData);
  90. return CatchResponse::success($total);
  91. }
  92. /**
  93. * 电子校徽统计
  94. *
  95. */
  96. public function getSchoolBadgeTotal(){
  97. $online_time=date('Y-m-d',time()).' 00:00:00';
  98. $res=[];
  99. $res['tatol']=$this->usersModel->dataRange()->where('card_type',2)->count();
  100. $res['online']=$this->usersModel->dataRange()->where('card_type',2)->where('online_time','>',$online_time)->count();
  101. $res['offline']=$res['tatol']-$res['online'];
  102. $yAxisData[]=$res['tatol'];
  103. $yAxisData[]=$res['online'];
  104. $yAxisData[]=$res['offline'];
  105. $yAxisData[]=0;
  106. $xAxisData=["总数", "在线", "离线",'围栏内'];//X轴坐标
  107. $total=array('yAxisData'=>$yAxisData,'xAxisData'=>$xAxisData);
  108. return CatchResponse::success($total);
  109. }
  110. /**
  111. * 设备月告警统计
  112. *
  113. */
  114. public function deviceMonthAlarmData(){
  115. $xAxisData = [];
  116. $yAxisData = [];
  117. for ($i=1; $i<=30; $i++){
  118. $day = date('Y-m-d' ,strtotime( '+' . $i-30 .' days', time()));
  119. array_push($xAxisData,$day);
  120. $count=$this->alarmReportModel->dataRange()->where('alarm_time','between',[$day." 00:00:00",$day." 23:59:59"])->count();
  121. //模拟数量
  122. $count+=mt_rand(0,10);
  123. array_push($yAxisData,$count);
  124. }
  125. $res=array('yAxisData'=>$yAxisData,'xAxisData'=>$xAxisData);
  126. return CatchResponse::success($res);
  127. }
  128. /**
  129. *围栏告警统计
  130. *
  131. */
  132. public function realTimeAlarmData(){
  133. $time=date("Y-m-d"." 00:00:00",time());
  134. $alarm_list = $this->alarmReportModel
  135. ->dataRange()
  136. ->field('id,active_rfid,created_at,alarm_type,alarm_time')
  137. ->where('alarm_time','>',$time)
  138. ->whereIn('alarm_type','fence_in,fence_out')
  139. ->select()->toArray();
  140. $type_id = Db::table("sys_dict_type")->where('code','AlarmReason')->value('id');
  141. $scrollData=[];
  142. foreach($alarm_list as $val){
  143. $alarm_type = Db::table("sys_dict_data")->where(['type_id'=>$type_id,'code'=>$val['alarm_type']])->value('value');
  144. $scrollItem=array('date'=>$val['alarm_time'],'title'=>'学生'.substr($val['active_rfid'],-5).'发生了'.$alarm_type);
  145. array_push($scrollData,$scrollItem);
  146. }
  147. $res=array('scrollData'=>$scrollData);
  148. return CatchResponse::success($res);
  149. }
  150. /**
  151. *SOS告警统计
  152. *
  153. */
  154. public function getSosScrollAlarmData(){
  155. $time=date("Y-m-d"." 00:00:00",time());
  156. $alarm_list = $this->alarmReportModel->dataRange()->where('alarm_time','>',$time)->where('alarm_type','press')->select()->toArray();
  157. foreach($alarm_list as &$val){
  158. $urgent_list=Db::table('kq_urgent')->where('student_id',$val['student_id'])->column('name,phone');
  159. $urgent_text='';
  160. foreach($urgent_list as $item){
  161. $urgent_text .=$item['name'].'('.$item['phone'].'),';
  162. }
  163. $urgent_text=trim($urgent_text,',');
  164. $val['urgent_text']=$urgent_text;
  165. }
  166. return CatchResponse::success($alarm_list);
  167. }
  168. }