添加设备数据接口

dev
vine_liutk 2022-10-27 14:06:10 +08:00
parent 7a892f8c86
commit a943c3054c
4 changed files with 88 additions and 10 deletions

View File

@ -3,12 +3,13 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Enums\BaseType; use App\Enums\BaseType;
use App\Enums\DeviceType;
use App\Helpers\Paginator; use App\Helpers\Paginator;
use Illuminate\Http\Request;
use App\Models\AgriculturalBase;
use Illuminate\Support\Facades\DB;
use App\Http\Requestes\AgriculturalBaseRequest; use App\Http\Requestes\AgriculturalBaseRequest;
use App\Http\Resources\AgriculturalBaseResource; use App\Http\Resources\AgriculturalBaseResource;
use App\Models\AgriculturalBase;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AgriculturalBaseController extends Controller class AgriculturalBaseController extends Controller
{ {
@ -23,7 +24,7 @@ class AgriculturalBaseController extends Controller
$query = AgriculturalBase::with('crops')->filter($request->all())->sort(); $query = AgriculturalBase::with('crops')->filter($request->all())->sort();
$list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)); $list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return AgriculturalBaseResource::collection($list); return $this->json(AgriculturalBaseResource::collection($list));
} }
public function store(AgriculturalBaseRequest $request) public function store(AgriculturalBaseRequest $request)
@ -98,4 +99,16 @@ class AgriculturalBaseController extends Controller
return $this->success('删除成功!'); 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);
})->get();
return $this->json(AgriculturalBaseResource::collection($list));
}
} }

View File

@ -93,9 +93,9 @@ class DeviceController extends Controller
$data = []; $data = [];
for ($i = 0; $i < 24; $i++){ for ($i = 0; $i < 24; $i++){
$_key = date('Y-m-d').' '.str_pad($i, 2, '0',STR_PAD_LEFT).':00:00'; $_key = date('Y-m-d').' '.str_pad($i, 2, '0',STR_PAD_LEFT).':00:00';
$data[$_key] = 0; $data[$_key] = null;
if(isset($dataList[$_key])){ if(isset($dataList[$_key])){
$data[$_key] = $dataList[$_key][$deviceColumn] ?? 0; $data[$_key] = $dataList[$_key][$deviceColumn] ?? null;
} }
} }
break; break;
@ -105,9 +105,9 @@ class DeviceController extends Controller
$data = []; $data = [];
for ($i = 0; $i < 24; $i++){ for ($i = 0; $i < 24; $i++){
$_key = date('Y-m-d').' '.str_pad($i, 2, '0',STR_PAD_LEFT).':00:00'; $_key = date('Y-m-d').' '.str_pad($i, 2, '0',STR_PAD_LEFT).':00:00';
$data[$_key] = 0; $data[$_key] = null;
if(isset($dataList[$_key])){ if(isset($dataList[$_key])){
$data[$_key] = $dataList[$_key][$deviceColumn] ?? 0; $data[$_key] = $dataList[$_key][$deviceColumn] ?? null;
} }
} }
break; break;
@ -118,4 +118,64 @@ class DeviceController extends Controller
]); ]);
} }
/**
* 获取指定基地指定设备类型的所有设备指定维度数据
*/
public function baseDataStatics(Request $request)
{
$baseId = $request->input('base_id');
$deviceType = $request->input('device_type');
$deviceColumn = $request->input('device_column');//指定字段
//先获取基地下该类型所有设备
$deviceData = Device::where([
'agricultural_base_id' => $baseId,
'type' => $deviceType
])->get();
$data = [];
switch ($deviceType){
case DeviceType::Monitor->value://监控设备
$data = DeviceResource::collection($deviceData);
break;
case DeviceType::Soil->value:
$dataList = SoilMonitoringLog::where('agricultural_base_id', $baseId)->whereDate('monitored_at', now())->get()->groupBy('device_id');
foreach ($deviceData as $device){
$_dataList = $dataList->get($device->id);
$data[$device->monitoring_point] = [];
if($_dataList){
$_dataList = $_dataList->keyBy('monitored_at')->toArray();
}
for ($i = 0; $i < 24; $i++){
$_key = date('Y-m-d').' '.str_pad($i, 2, '0',STR_PAD_LEFT).':00:00';
$data[$device->monitoring_point][$_key] = null;
if(isset($_dataList[$_key])){
$data[$device->monitoring_point][$_key] = $_dataList[$_key][$deviceColumn] ?? null;
}
}
}
break;
case DeviceType::WaterQuality->value:
$dataList = WaterQualityMonitoringLog::where('agricultural_base_id', $baseId)->whereDate('monitored_at', now())->get()->groupBy('device_id');
foreach ($deviceData as $device){
$_dataList = $dataList->get($device->id);
$data[$device->monitoring_point] = [];
if($_dataList){
$_dataList = $_dataList->keyBy('monitored_at')->toArray();
}
for ($i = 0; $i < 24; $i++){
$_key = date('Y-m-d').' '.str_pad($i, 2, '0',STR_PAD_LEFT).':00:00';
$data[$device->monitoring_point][$_key] = null;
if(isset($_dataList[$_key])){
$data[$device->monitoring_point][$_key] = $_dataList[$_key][$deviceColumn] ?? null;
}
}
}
break;
}
return $this->json($data);
}
} }

View File

@ -45,4 +45,8 @@ class AgriculturalBase extends Model
public function yieldLogs(){ public function yieldLogs(){
return $this->hasMany(CropYield::class, 'base_id'); return $this->hasMany(CropYield::class, 'base_id');
} }
public function devices(){
return $this->hasMany(Device::class, 'base_id');
}
} }

View File

@ -28,6 +28,7 @@ Route::group(['middleware' => 'auth:sanctum'], function () {
Route::get('citydata-statistics', [CityDataController::class, 'statistics'])->name('citydata_statistics.index'); Route::get('citydata-statistics', [CityDataController::class, 'statistics'])->name('citydata_statistics.index');
//基地数据 //基地数据
Route::apiResource('agricultural-basic', AgriculturalBaseController::class)->names('agricultural_basic'); Route::apiResource('agricultural-basic', AgriculturalBaseController::class)->names('agricultural_basic');
Route::get('agricultural-device-basic', [DeviceBasicController::class, 'deviceBase'])->name('agricultural_basic.device_bases');//通过设备类型查询基地
//农作物 //农作物
Route::apiResource('crops', CropController::class)->names('crops'); Route::apiResource('crops', CropController::class)->names('crops');
@ -46,8 +47,8 @@ Route::group(['middleware' => 'auth:sanctum'], function () {
Route::get('crop-yield-category-statics', [CropYieldController::class, 'categoryStaticsChart']);//行业统计产值 Route::get('crop-yield-category-statics', [CropYieldController::class, 'categoryStaticsChart']);//行业统计产值
Route::get('crop-yield-total-list', [CropYieldController::class, 'totalStaticsList']);//城镇统计产值 Route::get('crop-yield-total-list', [CropYieldController::class, 'totalStaticsList']);//城镇统计产值
Route::get('crop-yield-total-chart', [CropYieldController::class, 'totalStaticsChart']);//城镇统计产值 Route::get('crop-yield-total-chart', [CropYieldController::class, 'totalStaticsChart']);//城镇统计产值
Route::get('device-data-statics', [DeviceController::class, 'dataStatics']);//指定设备,当天的设备数据
Route::get('device-data-statics', [DeviceController::class, 'dataStatics']); Route::get('device-base-data-statics', [DeviceController::class, 'baseDataStatics']);
/** 系统管理 **/ /** 系统管理 **/
Route::apiResource('admin-users', AdminUserController::class)->names('admin_users'); Route::apiResource('admin-users', AdminUserController::class)->names('admin_users');