lcly-data-admin/app/Http/Controllers/AgriculturalBaseController.php

118 lines
3.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Enums\BaseType;
use App\Enums\DeviceStatus;
use App\Enums\DeviceType;
use App\Helpers\Paginator;
use App\Http\Requestes\AgriculturalBaseRequest;
use App\Http\Resources\AgriculturalBaseResource;
use App\Models\AgriculturalBase;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AgriculturalBaseController extends Controller
{
/**
* 基地数据列表
*
* @param Request $request
* @return void
*/
public function index(Request $request)
{
$query = AgriculturalBase::with('crops')->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', []);
// $type = $request->input('type');
// //已添加区域无法变更类型
// if($type == BaseType::Town->value) {
// return $this->error('无法添加城镇');
// }
try {
DB::beginTransaction();
//添加基地信息
$base = AgriculturalBase::create($request->input());
//添加基地农作物
$base->crops()->sync($cropsIds);
DB::commit();
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('添加失败,请稍后再试');
}
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');
//已添加区域无法变更类型
if ($type !== $agriculturalBasic->type->value) {
return $this->error('无法变更类型');
}
try {
DB::beginTransaction();
//添加基地信息
$agriculturalBasic->update($request->input());
//添加基地农作物
$agriculturalBasic->crops()->sync($cropsIds);
DB::commit();
} catch(\Throwable $th) {
DB::rollBack();
report($th);
return $this->error('修改失败,请稍后再试');
}
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('删除失败,请稍后再试');
}
return $this->success('删除成功!');
}
/**
* 获取指定设备类型下有设备的基地
*/
public function deviceBase(Request $request)
{
$deviceType = $request->input('device_type', DeviceType::Monitor);
$list = AgriculturalBase::filter($request->all())->whereHas('devices', function ($q) use ($deviceType) {
return $q->where('type', $deviceType)->where('status', DeviceStatus::Online);
})->get();
return $this->json(AgriculturalBaseResource::collection($list));
}
}