LockController.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. namespace App\Admin\Controllers;
  3. use App\Model\DeviceBox;
  4. use App\Model\DeviceInfo;
  5. use App\Model\LockInfo;
  6. use App\Server\DeviceServer;
  7. use Encore\Admin\Controllers\AdminController;
  8. use Encore\Admin\Form;
  9. use Encore\Admin\Grid;
  10. use Encore\Admin\Show;
  11. class LockController extends AdminController
  12. {
  13. /**
  14. * Title for current resource.
  15. *
  16. * @var string
  17. */
  18. protected $title = '远程所锁';
  19. /**
  20. * Make a grid builder.
  21. *
  22. * @return Grid
  23. */
  24. protected function grid()
  25. {
  26. $grid = new Grid(new LockInfo());
  27. $rule = '{
  28. "box1": [
  29. {"open":"16:10", "close":"16:11", "type":1, "start":"2020-09-01 10:00:00","value":" " },
  30. {"open":"16:12", "close":"16:13", "type":2, "start":"2020-09-01 10:00:00","value":" " },
  31. {"open":"16:14", "close":"16:15", "type":3, "start":"2020-09-01 10:00:00","value":["5", "7"] },
  32. {"open":"16:16", "close":"16:17", "type":4, "start":"2020-09-01 10:00:00","value":["25","26"]},
  33. {"open":"16:18", "close":"16:19", "type":5, "start":"2020-09-01 10:00:00","value":["09-25","09-26"]}
  34. ],
  35. "box2": [
  36. {"open":"16:10", "close":"16:11", "type":1, "start":"2020-09-01 10:00:00","value":" " },
  37. {"open":"16:12", "close":"16:13", "type":2, "start":"2020-09-01 10:00:00","value":" " },
  38. {"open":"16:14", "close":"16:15", "type":3, "start":"2020-09-01 10:00:00","value":["5", "7"] },
  39. {"open":"16:16", "close":"16:17", "type":4, "start":"2020-09-01 10:00:00","value":["25","26"]},
  40. {"open":"16:18", "close":"16:19", "type":5, "start":"2020-09-01 10:00:00","value":["09-25","09-26"]}
  41. ],
  42. "query":6
  43. }';
  44. // $rule = '{"cmd":"stop_test"}';
  45. // $rule = '{"get":"box4"}';
  46. // $res = (new DeviceServer())->doorOperation('rozl8eri3NwjyMrG6gYT000000 ', 0);
  47. // $res = (new DeviceServer())->sendMsg(868626044260472 ,$rule);
  48. // $res = (new DeviceServer())->sendMsg(868626044260522 ,$rule);
  49. // $res = (new DeviceServer())->getProperty('rozl8eri3NwjyMrG6gYT000000 ');
  50. // $res = (new DeviceServer())->getDeviceStatus('rozl8eri3NwjyMrG6gYT000000 ');//设备状态
  51. // $res = (new DeviceServer())->switchDevice('rozl8eri3NwjyMrG6gYT000000 ',1);//启用禁用
  52. // dd($res);
  53. $grid->disableCreateButton(false);
  54. $device_id = request('device_id');
  55. $box_id = request('box_id');
  56. if(!empty($device_id)){
  57. $box = DeviceBox::where(['device_id'=>$device_id])->pluck('id');
  58. $grid->model()->whereIn('box_id',$box);
  59. }
  60. if(!empty($box_id)){
  61. $grid->model()->where('box_id',$box_id);
  62. }
  63. $grid->column('boxs.device_id','设备')->display(function ($w){
  64. return DeviceInfo::where(['id'=>$w])->value('device_name');
  65. });
  66. $grid->column('boxs.name', __('锁位名称'));
  67. $grid->column('open_time', __('开门时间'));
  68. $grid->column('close_time', __('关门时间'));
  69. $grid->column('start_time', __('启动时间'));
  70. $grid->column('type', __('类型'))->using(LockInfo::get_type());
  71. $grid->column('value','时间')->display(function ($is){
  72. if($this->type !== 3){
  73. return LockInfo::get_type()[$this->type];
  74. } else {
  75. $str = '';
  76. foreach ($is as $i){
  77. $str .=LockInfo::week_day()[$i].',';
  78. }
  79. return $str;
  80. }
  81. });
  82. $states= [
  83. 'off'=>['text'=>'禁用','value'=>0,'color'=>'danger'],
  84. 'on'=>['text'=>'启用','value'=>1,'color'=>'success']
  85. ];
  86. $grid->column('status', __('状态'))->switch($states);
  87. $grid->filter(function ($fliter){
  88. $fliter->where(function($query){
  89. $query->whereHas('boxs',function($query){
  90. $query->where('name','like',"%{$this->input}%");
  91. });
  92. },'盒子名称');
  93. $fliter->equal('status','状态')->select(['禁用','启用']);
  94. });
  95. return $grid;
  96. }
  97. /**
  98. * Make a show builder.
  99. *
  100. * @param mixed $id
  101. * @return Show
  102. */
  103. protected function detail($id)
  104. {
  105. $show = new Show(LockInfo::findOrFail($id));
  106. $show->field('id', __('Id'));
  107. $show->field('device_id', __('Device id'));
  108. $show->field('lock_key', __('Lock key'));
  109. $show->field('lock_name', __('Lock name'));
  110. $show->field('open_time', __('Open time'));
  111. $show->field('close_time', __('Close time'));
  112. $show->field('start_time', __('Start time'));
  113. $show->field('rules', __('Rules'));
  114. $show->field('status', __('Status'));
  115. $show->field('created_at', __('Created at'));
  116. $show->field('updated_at', __('Updated at'));
  117. return $show;
  118. }
  119. /**
  120. * Make a form builder.
  121. *
  122. * @return Form
  123. */
  124. protected function form()
  125. {
  126. $form = new Form(new LockInfo());
  127. if($form->isEditing()){
  128. $form->display('boxs.devices.device_name', __('设备'));
  129. $form->select('box_id', __('锁位'))->options(function (){
  130. return DeviceBox::where('device_id','=',$this->boxs->device_id)->pluck('name','id')->toArray();
  131. });
  132. } else {
  133. $form->select('device_id', __('设备'))->options(function (){
  134. return DeviceInfo::pluck('device_name','id')->toArray();
  135. })->load('box_id','/admin/get_box')->rules('required',['required'=>'设备必须选择']);
  136. $form->select('box_id', __('锁位'))->options(function (){
  137. return DeviceBox::where('device_id','=',$this->device_id)->pluck('name','id')->toArray();
  138. })->rules('required',['required'=>'请选择盒子']);
  139. }
  140. $form->datetime('open_time', __('开门时间'))->format("HH:mm")->rules('required',['required'=>'开门时间必须']);
  141. $form->datetime('close_time', __('关闭时间'))->format("HH:mm")->rules('required',['required'=>'关门时间必须']);
  142. $form->datetime('start_time', __('开启时间'))->rules('required',['required'=>'开启时间必须']);
  143. $form->select('type', __('类型'))->options([
  144. '1'=>'不重复',
  145. '2'=>'每天',
  146. '3'=>'每周',
  147. ])->when(3,function (Form $form){
  148. $form->multipleSelect('value','日期')->options(LockInfo::week_day());
  149. })->rules('required',['required'=>'请选择类型']);
  150. $states= [
  151. 'off'=>['text'=>'禁用','value'=>0,'color'=>'danger'],
  152. 'on'=>['text'=>'启用','value'=>1,'color'=>'success']
  153. ];
  154. $form->ignore(['device_id','boxs.id']);
  155. $form->switch('status', __('状态'))->states($states)->default(1);
  156. return $form;
  157. }
  158. }