1
0
Fork 0
internet-everythings-agricu.../app/Services/Admin/MonitorModeService.php

81 lines
2.8 KiB
PHP

<?php
namespace App\Services\Admin;
use App\Models\MonitorMode;
use App\Filters\Admin\MonitorModeFilter;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
/**
* @method MonitorMode getModel()
* @method MonitorMode|\Illuminate\Database\Query\Builder query()
*/
class MonitorModeService extends BaseService
{
protected string $modelName = MonitorMode::class;
protected string $modelFilterName = MonitorModeFilter::class;
public function getEditData($id): Model|\Illuminate\Database\Eloquent\Collection|Builder|array|null
{
$region = parent::getEditData($id);
//处理详情数据;
$region->load('devices');
switch($region->type) {
case MonitorMode::TYPE_MONITOR:
case MonitorMode::TYPE_AIR:
case MonitorMode::TYPE_ATOMIZING:
case MonitorMode::TYPE_INSECT:
$region->offsetSet('picker_devices', $region->devices->pluck('id')->toArray());
break;
case MonitorMode::TYPE_SOIL:
case MonitorMode::TYPE_WATER_QUALITY:
case MonitorMode::TYPE_METEOROLOGICAL:
$region->offsetSet('array_devices', $region->devices->map(function($item, $key){
return [
'device_id' => $item->id,
'device_fields' => explode(',', $item->pivot->fields ?? ''),
];
}));
break;
}
return $region;
}
public function saveDevices($primaryKey, $params){
$model = $this->query()->whereKey($primaryKey)->first();
$type = $params['type'] ?? null;
$syncData = [];
switch($type){
case MonitorMode::TYPE_MONITOR:
case MonitorMode::TYPE_AIR:
case MonitorMode::TYPE_ATOMIZING:
case MonitorMode::TYPE_INSECT:
$syncData = $params['picker_devices'] ?? [];
break;
case MonitorMode::TYPE_SOIL:
case MonitorMode::TYPE_WATER_QUALITY:
case MonitorMode::TYPE_METEOROLOGICAL:
$arrayDevices = $params['array_devices'] ?? [];
if($arrayDevices){
foreach($arrayDevices as $arrayDevice){
//过滤重复设备
if(isset($syncData[$arrayDevice['device_id']])){
return $this->setError('请勿重复选择监测设备');
}
$syncData[$arrayDevice['device_id']] = [
'fields' => $arrayDevice['device_fields']
];
}
}
break;
}
return $model->devices()->sync($syncData);
}
}