AreaController.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Filters\AreaFilter;
  4. use App\Handlers\ConvertHandler;
  5. use App\Http\Requests\AreaRequest;
  6. use App\Http\Resources\AreaResource;
  7. use App\Models\AdminMerchant;
  8. use App\Models\AdminUser;
  9. use App\Models\AdminUserArea;
  10. use App\Models\Area;
  11. use App\Models\AreaSetting;
  12. use App\Models\Parking;
  13. use App\Utils\Admin;
  14. use Illuminate\Http\Request;
  15. use App\Http\Controllers\Controller;
  16. use Illuminate\Support\Facades\Log;
  17. /**
  18. * Class AreaController
  19. * @package App\Http\Controllers\Admin
  20. */
  21. class AreaController extends AdminBaseController
  22. {
  23. /**
  24. * index
  25. *
  26. * @param Request $request
  27. * @param AreaFilter $filter
  28. * @return \Illuminate\Http\JsonResponse
  29. * @author Fx
  30. *
  31. */
  32. public function index(Request $request, AreaFilter $filter)
  33. {
  34. //
  35. $admin_id = Admin::user()->id;
  36. $area = Area::query()
  37. ->filter($filter)
  38. ->where(AdminMerchant::getMerchantWhere())
  39. ->with('merchantData')
  40. ->orderByDesc('id');
  41. if (!Admin::user()->inRoles([Admin::ROLE_JISHU_ADMIN, Admin::ROLE_MERCHANT])) {
  42. // 特殊情况
  43. $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
  44. $area = $area->where('admin_id', $admin_id)->orWhereIn('id', $area_ids);
  45. }
  46. $areas = $request->get('all') ? $area->get() : $area->paginate();
  47. return $this->ok(AreaResource::collection($areas));
  48. }
  49. /**
  50. * Show the form for creating a new resource.
  51. *
  52. * @return \Illuminate\Http\Response
  53. */
  54. public function create()
  55. {
  56. //
  57. }
  58. /**
  59. * store
  60. *
  61. * @param AreaRequest $request
  62. * @param Area $model
  63. * @return \Illuminate\Http\JsonResponse
  64. * @author Fx
  65. *
  66. */
  67. public function store(AreaRequest $request, Area $model)
  68. {
  69. $id = Admin::user()->id;
  70. //
  71. $inputs = $request->validated();
  72. //
  73. // $inputs['admin_id'] = 0;
  74. // if ($id != 1) {
  75. // $inputs['admin_id'] = $id;
  76. // }
  77. $area_res = Area::query()->where('name', $inputs['name'])->where(AdminMerchant::getMerchantWhere())->first();
  78. if ($area_res) {
  79. return $this->error('区域已经存在');
  80. }
  81. $inputs['admin_id'] = $id;
  82. $area_fence = $inputs['area_fence'];
  83. $area_fushe_fence = $inputs['area_fushe_fence'];
  84. $converHandler = new ConvertHandler();
  85. $is_point_in_polygon = $converHandler->is_point_in_polygon_lat_lng($inputs['area_centre'], json_encode($area_fence));
  86. if (!$is_point_in_polygon) return $this->error('区域中心点不在区域内,请修改后重新提交');
  87. $area_centre = GetCenterFromDegrees($area_fence);
  88. $inputs['area_radius'] = round(maxDistance($area_centre, $area_fence) + 1, 4);
  89. // $inputs['area_centre'] = json_encode($area_centre);
  90. $inputs['area_centre'] = json_encode($inputs['area_centre']);
  91. $inputs['area_fence'] = json_encode($area_fence);
  92. $inputs['area_fushe_fence'] = json_encode($area_fushe_fence);
  93. $inputs['merchant_id'] = AdminMerchant::putMerchantId();
  94. $res = $model->create($inputs);
  95. //创建区域设置
  96. $areaSetting = new AreaSetting();
  97. $areaSetting->area_id = $res->id;
  98. $areaSetting->save();
  99. return $this->created(AreaResource::make($res));
  100. }
  101. /**
  102. * show
  103. *
  104. * @param $id
  105. * @return \Illuminate\Http\JsonResponse
  106. * @author Fx
  107. *
  108. */
  109. public function show($id)
  110. {
  111. //
  112. $area = Area::query()->find($id);
  113. return $this->ok(AreaResource::make($area));
  114. }
  115. /**
  116. * edit
  117. *
  118. * @param Area $area
  119. * @return \Illuminate\Http\JsonResponse
  120. * @author Fx
  121. *
  122. */
  123. public function edit(Area $area)
  124. {
  125. //
  126. return $this->ok(AreaResource::make($area));
  127. }
  128. /**
  129. * update
  130. *
  131. * @param AreaRequest $request
  132. * @param Area $area
  133. * @return \Illuminate\Http\JsonResponse
  134. * @author Fx
  135. *
  136. */
  137. public function update(AreaRequest $request, Area $area)
  138. {
  139. //
  140. $inputs = $request->validated();
  141. $area_centre = GetCenterFromDegrees($inputs['area_fence']);
  142. $area_fence = object_array($inputs['area_fence']);
  143. // Log::info($area_fence);
  144. $converHandler = new ConvertHandler();
  145. $is_point_in_polygon = $converHandler->is_point_in_polygon_lat_lng($inputs['area_centre'], json_encode($area_fence));
  146. if (!$is_point_in_polygon) return $this->error('区域中心点不在区域内,请修改后重新提交');
  147. $inputs['admin_id'] = $inputs['admin_id'] ?? Admin::user()->id; // 创建者id
  148. $inputs['area_radius'] = round(maxDistance($area_centre, $area_fence) + 1, 4);
  149. //$inputs['area_centre'] = json_encode(GetCenterFromDegrees($inputs['area_fence']));
  150. $inputs['area_centre'] = json_encode($inputs['area_centre']);
  151. $inputs['area_fence'] = json_encode(object_array($inputs['area_fence']));
  152. $inputs['area_fushe_fence'] = json_encode(object_array($inputs['area_fushe_fence']));
  153. $area->update($inputs);
  154. return $this->ok(AreaResource::make($area));
  155. }
  156. /**
  157. * destroy
  158. *
  159. * @param Area $area
  160. * @return \Illuminate\Http\JsonResponse
  161. * @author Fx
  162. *
  163. */
  164. public function destroy(Area $area)
  165. {
  166. //
  167. $area_id = $area->id;
  168. $area->delete();
  169. Parking::where('area_id', $area_id)->delete();
  170. AreaSetting::where('area_id', $area_id)->delete();
  171. return $this->noContent();
  172. }
  173. }