LockController.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  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\Admin;
  8. use Encore\Admin\Controllers\AdminController;
  9. use Encore\Admin\Form;
  10. use Encore\Admin\Grid;
  11. use Encore\Admin\Show;
  12. use Illuminate\Support\MessageBag;
  13. class LockController extends AdminController
  14. {
  15. /**
  16. * Title for current resource.
  17. *
  18. * @var string
  19. */
  20. protected $title = '远程所锁';
  21. /**
  22. * Make a grid builder.
  23. *
  24. * @return Grid
  25. */
  26. protected function grid()
  27. {
  28. $grid = new Grid(new LockInfo());
  29. $rule = '{
  30. "box1": [
  31. {"open":"16:10", "close":"16:11", "type":1, "start":"2020-09-01 10:00:00","value":" " },
  32. {"open":"16:12", "close":"16:13", "type":2, "start":"2020-09-01 10:00:00","value":" " },
  33. {"open":"16:14", "close":"16:15", "type":3, "start":"2020-09-01 10:00:00","value":["5", "7"] },
  34. {"open":"16:16", "close":"16:17", "type":4, "start":"2020-09-01 10:00:00","value":["25","26"]},
  35. {"open":"16:18", "close":"16:19", "type":5, "start":"2020-09-01 10:00:00","value":["09-25","09-26"]}
  36. ],
  37. "box2": [
  38. {"open":"16:10", "close":"16:11", "type":1, "start":"2020-09-01 10:00:00","value":" " },
  39. {"open":"16:12", "close":"16:13", "type":2, "start":"2020-09-01 10:00:00","value":" " },
  40. {"open":"16:14", "close":"16:15", "type":3, "start":"2020-09-01 10:00:00","value":["5", "7"] },
  41. {"open":"16:16", "close":"16:17", "type":4, "start":"2020-09-01 10:00:00","value":["25","26"]},
  42. {"open":"16:18", "close":"16:19", "type":5, "start":"2020-09-01 10:00:00","value":["09-25","09-26"]}
  43. ],
  44. "query":6
  45. }';
  46. // $rule = '{"cmd":"stop_test"}';
  47. // $rule = '{"get":"box4"}';
  48. // $res = (new DeviceServer())->doorOperation('rozl8eri3NwjyMrG6gYT000000 ', 0);
  49. // $res = (new DeviceServer())->sendMsg(868626044260472 ,$rule);
  50. //
  51. $lock_info = LockInfo::where(['status'=>1,'send_status'=>1])->orderBy('box_type','asc')->get()->GroupBy('device_id');
  52. dd($lock_info->toArray());
  53. // $res = (new DeviceServer())->getProperty('rozl8eri3NwjyMrG6gYT000000 ');
  54. // $res = (new DeviceServer())->getDeviceStatus('rozl8eri3NwjyMrG6gYT000000 ');//设备状态
  55. // $res = (new DeviceServer())->switchDevice('rozl8eri3NwjyMrG6gYT000000 ',1);//启用禁用
  56. // dd($res);
  57. $grid->disableCreateButton(false);
  58. $device_id = request('device_id');
  59. //Admin::script("$('input').combodate({
  60. // minYear: 1975,
  61. // maxYear: 2013,
  62. // minuteStep: 10
  63. //}); ");
  64. if(!empty($device_id)){
  65. $grid->model()->where('device_id',$device_id)
  66. ->orderBy('device_id','asc')
  67. ->orderBy('box_type','asc')
  68. ->orderBy('open_time','asc');
  69. }
  70. $grid->column('device_id','设备')->display(function ($w){
  71. return DeviceInfo::where(['id'=>$w])->value('device_name');
  72. });
  73. $grid->column('box_type', __('锁位名称'))->display(function ($t){
  74. $box_type = [1=>'一号箱',2=>'二号箱',3=>'三号箱',4=>'四号箱',5=>'五号箱',6=>'六号箱'];
  75. if(empty($t)) return '未知';
  76. return $box_type[$t];
  77. });
  78. $grid->column('time_type', __('时间段'))->editable('select',[1=>'上午',2=>'下午']);
  79. $grid->column('open_time', __('开门时间'))->editable('time');
  80. $grid->column('close_time', __('关门时间'))->editable('time2');
  81. $grid->column('start_time', __('启动时间'))->editable('datetime');
  82. $grid->column('type', __('类型'))->using(LockInfo::get_type());
  83. $grid->column('value','时间')->display(function ($is){
  84. if($this->type !== 3){
  85. return LockInfo::get_type()[$this->type];
  86. } else {
  87. $str = '';
  88. foreach ($is as $i){
  89. $str .=LockInfo::week_day()[$i].',';
  90. }
  91. return $str;
  92. }
  93. });
  94. $states= [
  95. 'off'=>['text'=>'禁用','value'=>0,'color'=>'danger'],
  96. 'on'=>['text'=>'启用','value'=>1,'color'=>'success']
  97. ];
  98. $grid->column('status', __('状态'))->switch($states);
  99. $grid->filter(function ($fliter){
  100. $fliter->where(function($query){
  101. $query->whereHas('boxs',function($query){
  102. $query->where('name','like',"%{$this->input}%");
  103. });
  104. },'盒子名称');
  105. $fliter->equal('status','状态')->select(['禁用','启用']);
  106. });
  107. return $grid;
  108. }
  109. /**
  110. * Make a show builder.
  111. *
  112. * @param mixed $id
  113. * @return Show
  114. */
  115. protected function detail($id)
  116. {
  117. $show = new Show(LockInfo::findOrFail($id));
  118. $show->field('id', __('Id'));
  119. $show->field('device_id', __('Device id'));
  120. $show->field('lock_key', __('Lock key'));
  121. $show->field('lock_name', __('Lock name'));
  122. $show->field('open_time', __('Open time'));
  123. $show->field('close_time', __('Close time'));
  124. $show->field('start_time', __('Start time'));
  125. $show->field('rules', __('Rules'));
  126. $show->field('status', __('Status'));
  127. $show->field('created_at', __('Created at'));
  128. $show->field('updated_at', __('Updated at'));
  129. return $show;
  130. }
  131. /**
  132. * Make a form builder.
  133. *
  134. * @return Form
  135. */
  136. protected function form()
  137. {
  138. $form = new Form(new LockInfo());
  139. if($form->isEditing()){
  140. $form->display('devices.device_name', __('设备'));
  141. $form->select('box_type', __('锁位'))->options(function ($w){
  142. $box_type = [1=>'一号箱',2=>'二号箱',3=>'三号箱',4=>'四号箱',5=>'五号箱',6=>'六号箱'];
  143. if($w == 1){
  144. array_pop($box_type);
  145. }
  146. return $box_type;
  147. });
  148. } else {
  149. $form->select('device_id', __('设备'))->options(function (){
  150. return DeviceInfo::pluck('device_name','id')->toArray();
  151. })->load('box_type','/admin/get_box');
  152. $form->select('box_type', __('锁位'))->options(function (){
  153. $box_type = [1=>'一号箱',2=>'二号箱',3=>'三号箱',4=>'四号箱',5=>'五号箱'];
  154. return $box_type;
  155. });
  156. }
  157. $form->select('time_type','时间段')->options([1=>'上午',2=>'下午']);
  158. $form->datetime('open_time', __('开门时间'))->format("HH:mm")->rules('required',['required'=>'开门时间必须']);
  159. $form->datetime('close_time', __('关闭时间'))->format("HH:mm")->rules('required',['required'=>'关门时间必须']);
  160. $form->datetime('start_time', __('开启时间'))->rules('required',['required'=>'开启时间必须']);
  161. $form->select('type', __('类型'))->options([
  162. '1'=>'不重复',
  163. '2'=>'每天',
  164. '3'=>'每周',
  165. ])->when(3,function (Form $form){
  166. $form->multipleSelect('value','日期')->options(LockInfo::week_day());
  167. })->rules('required',['required'=>'请选择类型']);
  168. $states= [
  169. 'off'=>['text'=>'禁用','value'=>0,'color'=>'danger'],
  170. 'on'=>['text'=>'启用','value'=>1,'color'=>'success']
  171. ];
  172. $form->switch('status', __('状态'))->states($states)->default(1);
  173. $form->setWidth(6);
  174. // 抛出错误信息
  175. $form->saving(function ($form) {
  176. $box_type = $form->box_type;
  177. $device_id = $form->device_id;
  178. $lock_count = LockInfo::where(['device_id'=>$device_id,'box_type'=>$box_type])->count();
  179. if($lock_count >3){
  180. return response($lock_count);
  181. $error = new MessageBag([
  182. 'title' => '错误信息',
  183. 'message' => '每个箱体最多只能设置4条规则',
  184. ]);
  185. return back()->with(compact('error'));
  186. }
  187. });
  188. return $form;
  189. }
  190. }