From a405f7cf33864c7de1bdf3e1f6fdb1c4ae1c99e4 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Tue, 22 Aug 2023 10:55:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=90=8E=E5=8F=B0=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E8=99=AB=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Components.php | 4 +- .../Controllers/CustomRegionController.php | 12 +++--- app/Admin/Controllers/DeviceController.php | 34 ++++++++++++++++ .../Controllers/MonitorModeController.php | 39 ++++++++++++++++++- app/Admin/routes.php | 2 + app/Models/MonitorMode.php | 10 +++++ app/Models/Region.php | 11 +++++- app/Services/Admin/DeviceService.php | 27 +++++++++++-- app/Services/Admin/MonitorModeService.php | 1 + 9 files changed, 126 insertions(+), 14 deletions(-) diff --git a/app/Admin/Components.php b/app/Admin/Components.php index 5beefa3..2a7e78f 100644 --- a/app/Admin/Components.php +++ b/app/Admin/Components.php @@ -47,12 +47,12 @@ class Components extends BaseRenderer { /** * 富文本编辑器 */ - public function fuEditorControl($name ='content', $label = '内容') + public function fuEditorControl($name ='content', $label = '内容', $height = 600) { return WangEditor::make() ->name($name) ->label($label) - ->height('auto') + ->height($height) ->excludeKeys(['group-video']); } diff --git a/app/Admin/Controllers/CustomRegionController.php b/app/Admin/Controllers/CustomRegionController.php index 93491a1..7aa306b 100644 --- a/app/Admin/Controllers/CustomRegionController.php +++ b/app/Admin/Controllers/CustomRegionController.php @@ -141,12 +141,12 @@ class CustomRegionController extends AdminController // // 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?id='.$region['id'])), // 'unmountOnExit' => true//每次切换tab都要销毁 // ], - [ - 'title' => '虫情记录', - 'value' => 'warning', - // 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?id='.$region['id'])), - 'unmountOnExit' => true//每次切换tab都要销毁 - ], + // [ + // 'title' => '虫情记录',//-todo + // 'value' => 'warning', + // 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?id='.$region['id'])), + // 'unmountOnExit' => true//每次切换tab都要销毁 + // ], ]) ]) ]) diff --git a/app/Admin/Controllers/DeviceController.php b/app/Admin/Controllers/DeviceController.php index 4540edf..5b4403e 100644 --- a/app/Admin/Controllers/DeviceController.php +++ b/app/Admin/Controllers/DeviceController.php @@ -469,6 +469,40 @@ class DeviceController extends AdminController ]); } + public function insectDetail(){ + $regionId = request()->input('region_id', 0); + if($regionId){ + $region = Region::find($regionId); + $options = $region->monitorModes()->where('type', MonitorMode::TYPE_INSECT)->pluck('name','monitor_id')->toArray(); + }else{ + $options = MonitorMode::where('type', MonitorMode::TYPE_INSECT)->pluck('name','id')->toArray(); + } + $data = $this->basePage()->title('')->body([ + \amisMake()->grid()->columns([ + \amisMake()->Form()->title('搜索条件')->mode('inline')->body([ + amisMake()->SelectControl('monitor_mode', '监测点位')->size('md')->options($options)->selectFirst(true)->required(), + \amisMake()->DateRangeControl('date_range', '时间范围')->clearable(false)->value('-7days,-1days')->shortcuts([ + "7daysago", + "1weekslater", + "thismonth", + "1monthsago", + "2monthsago", + ])->required(), + amis('submit')->label(__('admin.search'))->level('primary'), + ])->target('insect_chart'), + ]), + amisMake()->Service()->name('insect_chart') + ->data([ + 'monitor_mode'=>array_key_first($options), + 'date_range'=>strtotime(date("Y-m-d 00:00:00", strtotime("-7 days"))).','.strtotime(date("Y-m-d 00:00:00", strtotime("-1 days"))) + ])->schemaApi( + admin_url('device-chart?monitor_mode=${monitor_mode}&date_range=${date_range}') + ), + + ]); + return $this->response()->success($data); + } + public function saveRegionConfig($id, Request $request) { if($id){ diff --git a/app/Admin/Controllers/MonitorModeController.php b/app/Admin/Controllers/MonitorModeController.php index 4a16d94..557bfec 100644 --- a/app/Admin/Controllers/MonitorModeController.php +++ b/app/Admin/Controllers/MonitorModeController.php @@ -133,7 +133,7 @@ class MonitorModeController extends AdminController amisMake()->PickerControl('picker_devices', '通风设备')->visibleOn('data.type == '.MonitorMode::TYPE_AIR) ->valueField('id') ->labelField('name') - ->multiple(true) + ->multiple(false)//通风设备只能选择一个 ->size('lg') ->source([ 'method' => 'get', @@ -200,7 +200,42 @@ class MonitorModeController extends AdminController ] ] ), - ]) + amisMake()->PickerControl('picker_devices', '虫情监测')->visibleOn('data.type == '.MonitorMode::TYPE_INSECT) + ->valueField('id') + ->labelField('name') + ->multiple(true) + ->size('lg') + ->source([ + 'method' => 'get', + 'url' => admin_url('devices?_action=getData&type='.Device::TYPE_INSECT), + 'data' => [ + 'name'=>'${device_name}', + ] + ]) + ->pickerSchema( + [ + 'mode' => 'table', + 'name' => 'monitor_list', + 'headerToolbar' => amisMake()->form() + ->wrapWithPanel(false) + ->className('text-right') + ->target('monitor_list') + ->mode('inline') + ->body([ + amisMake()->TextControl('device_name', '名称')->addOn( + amis('submit')->label(__('admin.search'))->level('primary') + ) + ]), + 'columns' => [ + TableColumn::make()->name('id')->label('ID')->sortable(true), + TableColumn::make()->name('name')->label('名称'), + TableColumn::make()->name('sn')->label('编号'), + TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), + TableColumn::make()->name('updated_at')->label('更新时间')->type('datetime')->sortable(true), + ] + ] + ), + ]), ])->footer([ amisMake()->Button()->label('保存')->type('submit')->level('primary'), ]) diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 81ff341..f17830f 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -91,6 +91,8 @@ Route::group([ $router->post('custom-region-atomizing', '\App\Admin\Controllers\DeviceController@atomizingDetail'); + $router->post('custom-region-insect', '\App\Admin\Controllers\DeviceController@insectDetail'); + $router->post('save-region-config/{id}', '\App\Admin\Controllers\DeviceController@saveRegionConfig'); //种植记录 diff --git a/app/Models/MonitorMode.php b/app/Models/MonitorMode.php index 6a9ab57..72bd9aa 100644 --- a/app/Models/MonitorMode.php +++ b/app/Models/MonitorMode.php @@ -71,6 +71,11 @@ class MonitorMode extends Model 'box_co2' => 'CO2' ]; break; + case self::TYPE_INSECT: + $arr = [ + 'worm_num' => '只' + ]; + break; } return $arr; } @@ -107,6 +112,11 @@ class MonitorMode extends Model 'box_co2' => 'ppm' ]; break; + case self::TYPE_INSECT: + $arr = [ + 'worm_num' => '数量' + ]; + break; } return $arr; } diff --git a/app/Models/Region.php b/app/Models/Region.php index 03087a5..33802d4 100644 --- a/app/Models/Region.php +++ b/app/Models/Region.php @@ -133,7 +133,16 @@ class Region extends Model 'unmountOnExit' => true,//每次切换tab都要销毁 'sort' => 6, ]; - break; + break; + case MonitorMode::TYPE_INSECT: + $tabs[] = [ + 'title' => '虫情监测', + 'value' => 'insect', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-insect?region_id='.$region->id)), + 'unmountOnExit' => true,//每次切换tab都要销毁 + 'sort' => 6, + ]; + break; } continue; } diff --git a/app/Services/Admin/DeviceService.php b/app/Services/Admin/DeviceService.php index 0e94236..5358628 100644 --- a/app/Services/Admin/DeviceService.php +++ b/app/Services/Admin/DeviceService.php @@ -4,7 +4,7 @@ namespace App\Services\Admin; use App\Models\Device; use App\Models\MonitorMode; -use App\Models\{MeteorologicalDailyReport, MeteorologicalReport, SoilDailyReport, SoilReport, AirLog, MonitorDevice, RegionMonitor, Region}; +use App\Models\{MeteorologicalDailyReport, MeteorologicalReport, SoilDailyReport, SoilReport, AirLog, FarmWormPhoto, MonitorDevice, RegionMonitor, Region, FarmWormReport}; use App\Filters\Admin\DeviceFilter; use Carbon\Carbon; use App\Admin\Components; @@ -109,13 +109,27 @@ class DeviceService extends BaseService $fieldNameMap = MonitorMode::fieldMap(MonitorMode::TYPE_SOIL); $fieldUnitMap = MonitorMode::fieldUnitMap(MonitorMode::TYPE_SOIL); break; + case MonitorMode::TYPE_INSECT: + $dayliyReportQuery = FarmWormReport::query(); + $reportQuery = FarmWormReport::query(); + $fieldNameMap = MonitorMode::fieldMap(MonitorMode::TYPE_INSECT); + $fieldUnitMap = MonitorMode::fieldUnitMap(MonitorMode::TYPE_INSECT); + $columnNum = 1; + break; } $monitorMode->load('devices'); $configData = $fieldMap = []; + $deviceIds = []; foreach($monitorMode->devices as $device){ - $_fields = explode(',', $device->pivot->fields); - + if($device->type == Device::TYPE_INSECT){ + $_fields = [ + 'worm_num' + ]; + $deviceIds[] = $device->id; + }else{ + $_fields = explode(',', $device->pivot->fields); + } if($diffDays) { $modelQuery = $dayliyReportQuery->whereBetween('reported_at', [$startTime, $endTime]); }else{ @@ -171,6 +185,7 @@ class DeviceService extends BaseService ); break; //柱状图; + case 'worm_num': case 'box_noise': case 'pm10': case 'pm25': @@ -218,6 +233,12 @@ class DeviceService extends BaseService amisMake()->Flex()->items(array_splice($chartArr, 0, $columnNum)), ]); } + if($monitorMode->type == MonitorMode::TYPE_INSECT){ + $configData[] = \amisMake()->grid()->columns([//添加照片 + amisMake()->Images()->thumbRatio('16:9')->thumbMode(true)->enlargeAble(true) + ->options(FarmWormPhoto::whereIn('device_id', $deviceIds)->whereBetween('uploaded_at', [$startTime, $endTime])->pluck('url')->toArray()) + ]); + } return $configData; } diff --git a/app/Services/Admin/MonitorModeService.php b/app/Services/Admin/MonitorModeService.php index bf649e0..1ec9e21 100644 --- a/app/Services/Admin/MonitorModeService.php +++ b/app/Services/Admin/MonitorModeService.php @@ -52,6 +52,7 @@ class MonitorModeService extends BaseService 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: