添加设备数据接口
parent
7a892f8c86
commit
a943c3054c
|
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue