filter($request->all())->sort(); $list = $query->paginate(Paginator::resolvePerPage('per_page', 20, 50)); return $this->json(AgriculturalBaseResource::collection($list)); } public function store(AgriculturalBaseRequest $request) { $cropsIds = $request->input('crops_ids', []); $extends = $request->input('extends', []); if($extends){ $extends = json_encode($extends); } $inputParams = $request->input(); $inputParams['extends'] = $extends; // $type = $request->input('type'); // //已添加区域无法变更类型 // if($type == BaseType::Town->value) { // return $this->error('无法添加城镇'); // } try { DB::beginTransaction(); //添加基地信息 $base = AgriculturalBase::create($inputParams); //添加基地农作物 $base->crops()->sync($cropsIds); DB::commit(); } catch(\Throwable $th) { DB::rollBack(); report($th); return $this->error('添加失败,请稍后再试'); } (new OperationLogService())->inLog(OperationType::Create, '', $base, $request->input()); return $this->success('添加成功!'); } public function show(AgriculturalBase $agriculturalBasic) { $agriculturalBasic->load(['crops', 'devices']); return $this->json(AgriculturalBaseResource::make($agriculturalBasic)); } public function update(AgriculturalBase $agriculturalBasic, AgriculturalBaseRequest $request) { $cropsIds = $request->input('crops_ids', []); $type = $request->input('type'); $extends = $request->input('extends', []); if($extends){ $extends = json_encode($extends); } $inputParams = $request->input(); $inputParams['extends'] = $extends; //已添加区域无法变更类型 if ($type !== $agriculturalBasic->type->value) { return $this->error('无法变更类型'); } try { DB::beginTransaction(); //更新基地信息 $agriculturalBasic->update($inputParams); //更新基地农作物 $agriculturalBasic->crops()->sync($cropsIds); DB::commit(); } catch(\Throwable $th) { DB::rollBack(); report($th); return $this->error('修改失败,请稍后再试'); } (new OperationLogService())->inLog(OperationType::Update, '', $agriculturalBasic, $request->input()); return $this->success('修改成功!'); } public function destroy(AgriculturalBase $agriculturalBasic) { try { DB::beginTransaction(); $agriculturalBasic->crops()->sync([]); $agriculturalBasic->delete(); DB::commit(); } catch(\Throwable $th) { DB::rollBack(); report($th); return $this->error('删除失败,请稍后再试'); } (new OperationLogService())->inLog(OperationType::Delete, '', $agriculturalBasic); return $this->success('删除成功!'); } /** * 获取指定设备类型下有设备的基地 */ public function deviceBase(Request $request) { $deviceType = $request->input('device_type', DeviceType::Monitor); // $status = $request->input('status'); $list = AgriculturalBase::filter($request->all())->whereHas('devices', function ($q) use ($deviceType) { if($deviceType == DeviceType::Monitor || $deviceType == 1){ $q->where('is_recommend', 1)->where('status', 1); } return $q->where('type', $deviceType); })->sort()->get(); return $this->json(AgriculturalBaseResource::collection($list)); } /** * 获取指定基地指定设备类型下所有监控点名称选项 * device_type */ public function basePointList(AgriculturalBase $agriculturalBasic, Request $request){ $deviceType = $request->input('device_type', DeviceType::Meteorological); $list = Device::where([ 'agricultural_base_id' => $agriculturalBasic->id, 'type'=>$deviceType ])->orderBy('sort', 'desc')->get()->pluck('monitoring_point', 'id')->toArray(); return $this->json($list); } }