79 lines
2.7 KiB
PHP
79 lines
2.7 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:
|
|
$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:
|
|
$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);
|
|
}
|
|
|
|
}
|