DeviceController.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. namespace App\Admin\Controllers;
  3. use App\Models\Admin;
  4. use App\Models\Device;
  5. use App\Models\Role;
  6. use App\Models\Shop;
  7. use App\Repositories\Enums\BoxStatusEnum;
  8. use App\Repositories\Enums\DeviceLineEnum;
  9. use App\Repositories\Enums\DeviceLuTypeEnum;
  10. use App\Repositories\Enums\DeviceTypeEnum;
  11. use App\Repositories\Enums\DeviceUseStatusEnum;
  12. use App\Repositories\Enums\DeviceWaterLevelEnum;
  13. use App\Repositories\Enums\ModelStatusEnum;
  14. use Dcat\Admin\Actions\Response;
  15. use Dcat\Admin\Form;
  16. use Dcat\Admin\Grid;
  17. use Dcat\Admin\Http\Controllers\AdminController;
  18. use Dcat\Admin\Widgets\Box;
  19. use Illuminate\Http\Request;
  20. class DeviceController extends AdminController
  21. {
  22. protected $title = '设备管理';
  23. protected function grid()
  24. {
  25. return Grid::make(new Device(), function (Grid $grid) {
  26. // 这里的字段会自动使用翻译文件
  27. $grid->model()->with(['shop'])->orderByDesc('id');
  28. $grid->column('id')->sortable();
  29. $grid->column('type', '设备类型')->using(DeviceTypeEnum::toSelectArray());
  30. $grid->column('shop.name', '站点名');
  31. $grid->column('no', '设备编号');
  32. $grid->column('temperature', '温度');
  33. $grid->column('water_level_warning', '水位状态')->using(DeviceWaterLevelEnum::toSelectArray());
  34. $grid->column('water_quality', '水质');
  35. $grid->column('a', 'A路状态')->using(DeviceLuTypeEnum::toSelectArray());
  36. $grid->column('b', 'B路状态')->using(DeviceLuTypeEnum::toSelectArray());
  37. $grid->column('box_status', '设备状态')->using(BoxStatusEnum::toSelectArray())->label();
  38. $grid->column('last_update_time', '最后更新时间');
  39. $grid->column('is_use', '是否可用')->using(DeviceUseStatusEnum::toSelectArray());
  40. $grid->column('is_line', '是否在线')->using(DeviceLineEnum::toSelectArray());
  41. $grid->column('status', '投放状态')->using(ModelStatusEnum::toSelectArray());
  42. $grid->actions(function (Grid\Displayers\Actions $action) {
  43. $action->disableView();
  44. $id = $action->getKey();
  45. $action->append('<a href="' . route('dcat.admin.device.reset', ['id' => $id]) . '"><i class="feather icon-rotate-ccw"></i></a>');
  46. });
  47. $grid->filter(function (Grid\Filter $filter) {
  48. $filter->equal('id');
  49. $filter->like('box_no', '设备编号');
  50. $filter->in('shop_id', '站点')->multipleSelect(Shop::query()->where('status', ModelStatusEnum::OK)->pluck('name', 'id'));
  51. $filter->in('box_status', '设备状态')->multipleSelect(BoxStatusEnum::toSelectArray());
  52. $filter->equal('is_use', '是否可用')->select(DeviceUseStatusEnum::toSelectArray());
  53. $filter->equal('is_line', '是否在线')->select(DeviceLineEnum::toSelectArray());
  54. $filter->equal('status', '投放状态')->select(ModelStatusEnum::toSelectArray());
  55. });
  56. });
  57. }
  58. protected function form()
  59. {
  60. return Form::make(new Device(), function (Form $form) {
  61. $form->tab('基本信息', function (Form $form) {
  62. $form->text('no', '设备编号')->rules('required')->help('15位数字');
  63. $form->text('box_no', '硬件编号')->rules('required')->help('15位数字');
  64. $form->select('type', '设备类型')->options(DeviceTypeEnum::toSelectArray())->rules('required');
  65. })->tab('绑定站点', function (Form $form) {
  66. $form->select('shop_id', '站点')->options(Shop::query()->pluck('name', 'id'))->saving(function ($val) {
  67. if (empty($val)) return 0;
  68. return $val;
  69. });
  70. $form->rate('merchant_ratio', '商户分成比');
  71. $form->select('status', '投放状态')->options(ModelStatusEnum::toSelectArray())->default(ModelStatusEnum::OK);
  72. })->tab('收益绑定', function (Form $form) {
  73. $form->select('agency_id', '代理人')->options(Role::byRolesSelectOptions(Role::Agency));
  74. $form->rate('agency_ratio', '代理分成比');
  75. $form->select('invest_id', '投资人')->options(Role::byRolesSelectOptions(Role::Invest));
  76. $form->rate('invest_ratio', '投资分成比');
  77. });
  78. });
  79. }
  80. /**
  81. * 重置设备
  82. * @param Request $request
  83. * Author: Mead
  84. */
  85. public function reset(Request $request)
  86. {
  87. $id = $request->get('id');
  88. $device = Device::query()->find($id);
  89. if (!$device) {
  90. admin_toastr('找不到该设备!', 'error');
  91. return redirect()->back();
  92. }
  93. if ($device->is_line == DeviceLineEnum::NO) {
  94. $device->a = DeviceLuTypeEnum::FREE;
  95. $device->b = DeviceLuTypeEnum::FREE;
  96. } else {
  97. switch ((int)$device->box_status) {
  98. case BoxStatusEnum::WAIT:
  99. $device->a = DeviceLuTypeEnum::FREE;
  100. $device->b = DeviceLuTypeEnum::FREE;
  101. break;
  102. case BoxStatusEnum::A_WORK:
  103. case BoxStatusEnum::A_PAUSE_B_WAIT:
  104. $device->a = DeviceLuTypeEnum::USING;
  105. $device->b = DeviceLuTypeEnum::FREE;
  106. break;
  107. case BoxStatusEnum::AB_WORK:
  108. case BoxStatusEnum::A_PAUSE_B_WORK:
  109. case BoxStatusEnum::AB_PAUSE:
  110. case BoxStatusEnum::A_WORK_B_PAUSE:
  111. $device->a = DeviceLuTypeEnum::USING;
  112. $device->b = DeviceLuTypeEnum::USING;
  113. break;
  114. case BoxStatusEnum::B_WORK:
  115. case BoxStatusEnum::A_WAIT_B_PAUSE:
  116. $device->a = DeviceLuTypeEnum::FREE;
  117. $device->b = DeviceLuTypeEnum::USING;
  118. break;
  119. }
  120. }
  121. $device->save();
  122. return redirect()->back();
  123. }
  124. }