AlarmRecords.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. namespace catchAdmin\alarm\controller;
  3. use catcher\base\CatchRequest as Request;
  4. use catcher\CatchResponse;
  5. use catcher\base\CatchController;
  6. use catchAdmin\alarm\model\AlarmRecords as alarmRecordsModel;
  7. use catchAdmin\permissions\model\Department;
  8. use think\facade\Db;
  9. use function PHPSTORM_META\type;
  10. class AlarmRecords extends CatchController
  11. {
  12. protected $alarmRecordsModel;
  13. public function __construct(AlarmRecordsModel $alarmRecordsModel)
  14. {
  15. $this->alarmRecordsModel = $alarmRecordsModel;
  16. }
  17. /**
  18. * 列表
  19. * @time 2021年05月27日 11:20
  20. * @param Request $request
  21. */
  22. public function index(Request $request) : \think\Response
  23. {
  24. return CatchResponse::paginate($this->alarmRecordsModel->getList());
  25. }
  26. /**
  27. * 保存信息
  28. * @time 2021年05月27日 11:20
  29. * @param Request $request
  30. */
  31. public function save(Request $request) : \think\Response
  32. {
  33. return CatchResponse::success($this->alarmRecordsModel->storeBy($request->post()));
  34. }
  35. /**
  36. * 保存处理记录
  37. * @time 2021年05月27日 11:20
  38. * @param Request $request
  39. */
  40. public function handleAlarm(Request $request) : \think\Response
  41. {
  42. $params=$request->post();
  43. $params['end_time']=time();
  44. $params['state']='end';
  45. $params['handler_id']=$request->user()->id;
  46. $res=$this->alarmRecordsModel
  47. ->where('device_number',$params['device_number'])
  48. ->where('state','start')
  49. ->whereIn('alarm_reason',['press','fence_in','fence_out'])
  50. ->update($params);
  51. if($res){
  52. //2表示已出警'
  53. $count=$this->alarmRecordsModel
  54. ->where('device_number',$params['device_number'])
  55. ->where('state','start')
  56. ->where('alarm_reason','low_bat')
  57. ->count();
  58. if(!$count){
  59. Db::table('devices')->where('imei', $params['device_number'])->update(['alarm_state' => 0]);
  60. }
  61. }
  62. return CatchResponse::success($res);
  63. }
  64. /**
  65. * 读取
  66. * @time 2021年05月27日 11:20
  67. * @param $id
  68. */
  69. public function read($id) : \think\Response
  70. {
  71. return CatchResponse::success($this->alarmRecordsModel->findBy($id));
  72. }
  73. /**
  74. * 更新
  75. * @time 2021年05月27日 11:20
  76. * @param Request $request
  77. * @param $id
  78. */
  79. public function update(Request $request, $id) : \think\Response
  80. {
  81. $params=$request->post();
  82. $params['end_time']=time();
  83. $params['state']='end';
  84. $params['handler_id']=$request->user()->id;
  85. $res=$this->alarmRecordsModel->updateBy($id, $params);
  86. if($res){
  87. $device_number=$this->alarmRecordsModel->where('id', $id)->value('device_number');
  88. $where = ['device_number'=>$device_number,'state'=>'start'];
  89. $count=$this->alarmRecordsModel->where($where)->count();
  90. if(!$count){
  91. Db::table('devices')->where('imei', $device_number)->update(['alarm_state' => 0]);
  92. }
  93. }
  94. return CatchResponse::success($res);
  95. }
  96. /**
  97. * 删除
  98. * @time 2021年05月27日 11:20
  99. * @param $id
  100. */
  101. public function delete($id) : \think\Response
  102. {
  103. return CatchResponse::success($this->alarmRecordsModel->deleteBy($id));
  104. }
  105. /**
  106. * 根据用户获取设备的相关列表
  107. *
  108. * @param Request $request
  109. * @return void
  110. */
  111. public function getAlarmRecordsbyId(Request $request)
  112. {
  113. $data=$request->param();
  114. $userid=$request->param('creator_id');
  115. $state = $request->param('state');
  116. if(empty($data['limit']))
  117. {
  118. $data["limit"] = 10;
  119. }
  120. if(empty($data['page']))
  121. {
  122. $data["page"] = 1;
  123. }
  124. $type_id = Db::name("sys_dict_type")->where('code','AlarmType')->value('id');
  125. $where[]=['d.bind_id','=',$userid];
  126. //$where[]=['a.handler_id','=',0];
  127. $where[] = ['a.state','=',$state];
  128. //获取告警原因
  129. $list = Db::name("devices")->where($where)
  130. ->alias("d")->leftJoin('alarm_records a','d.imei=a.device_number')
  131. ->leftJoin('sys_dict_data s','s.code=a.alarm_reason')
  132. ->field('a.device_number as device_number,a.start_time as start_time,a.end_time as end_time,s.value as alarm_reason,a.id as id,a.result as result')
  133. ->limit($data['limit'])
  134. ->page($data["page"])
  135. ->select()->toArray();
  136. $total=Db::name("devices")
  137. ->alias("d")->leftJoin('alarm_records a','d.imei=a.device_number')
  138. ->where($where)->count();
  139. $da = [
  140. 'list'=>$list,
  141. 'total'=>$total
  142. ];
  143. return CatchResponse::success($da);
  144. }
  145. /**
  146. * 微信获取告警详情
  147. * @param Request $request
  148. * @return void
  149. */
  150. public function getAlarmDetail(Request $request)
  151. {
  152. //告警信息id
  153. $id=$request->param('id');
  154. $userid=$request->param('creator_id');
  155. $alarmRecords=Db::name('alarm_records')->where('id',$id)->find();
  156. $device = Db::name("devices")->where('imei',$alarmRecords["device_number"])->find();
  157. if(empty($device))
  158. {
  159. return CatchResponse::fail('该设备不存在');
  160. }
  161. if($device["bind_id"]!=$userid)
  162. {
  163. return CatchResponse::fail('该设备未和您的账号绑定');
  164. }
  165. //用户的详细信息
  166. $user = Db::name("users")->where("id",$userid)->find();
  167. //部门信息
  168. $department =Department::where('id',$user['department_id'])->find();
  169. if(empty($department))
  170. {
  171. $department['department_name'] = null;
  172. }
  173. //获取告警类型
  174. $type_id = Db::name("sys_dict_type")->where('code','AlarmType')->value('id');
  175. $reason = Db::name("sys_dict_data")
  176. ->where([["type_id","=", $type_id],['code','=',$alarmRecords['alarm_reason']]])
  177. ->value('value');
  178. $user_info = [
  179. 'device_name'=>$device['name'],
  180. 'imei'=>$device['imei'],
  181. 'department_name'=>$department["department_name"],
  182. 'realname'=>$user['realname'],
  183. 'phone' =>$user['phone'],
  184. 'last_online_time'=>$device["online_time"],
  185. 'status'=>$alarmRecords["state"],
  186. 'reason'=> $reason,
  187. 'comment'=>$alarmRecords["comment"],
  188. 'end_time'=>$alarmRecords['end_time']
  189. ];
  190. return CatchResponse::success($user_info);
  191. }
  192. }