比昂水质设备生成每日报告

dev
Jing Li 2024-01-29 14:06:25 +08:00
parent c229cb736a
commit 3242a5e5d8
2 changed files with 81 additions and 0 deletions

View File

@ -10,6 +10,8 @@ use App\Models\MeteorologicalMonitoringDailyLog;
use App\Models\MeteorologicalMonitoringLog; use App\Models\MeteorologicalMonitoringLog;
use App\Models\SoilMonitoringDailyLog; use App\Models\SoilMonitoringDailyLog;
use App\Models\SoilMonitoringLog; use App\Models\SoilMonitoringLog;
use App\Models\WaterQualityMonitoringDailyLog;
use App\Models\WaterQualityMonitoringLog;
use App\Services\BiAngDeviceService; use App\Services\BiAngDeviceService;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Throwable; use Throwable;
@ -99,6 +101,22 @@ class DeviceLogDailyReportCommand extends Command
} }
break; break;
case DeviceType::WaterQuality:
$lastReportedAt = WaterQualityMonitoringDailyLog::where('device_id', $device->id)
->latest('monitored_at')
->value('monitored_at');
$lastReportedAt ??= WaterQualityMonitoringLog::where('device_id', $device->id)
->oldest('monitored_at')
->value('monitored_at');
if ($lastReportedAt) {
$latestReportedAt = WaterQualityMonitoringLog::where('device_id', $device->id)
->latest('monitored_at')
->value('monitored_at');
}
break;
case DeviceType::InsecticidalLamp: case DeviceType::InsecticidalLamp:
$lastReportedAt = InsecticidalLampDailyReport::where('device_id', $device->id) $lastReportedAt = InsecticidalLampDailyReport::where('device_id', $device->id)
->latest('reported_at') ->latest('reported_at')

View File

@ -13,6 +13,7 @@ use App\Models\MeteorologicalMonitoringDailyLog;
use App\Models\MeteorologicalMonitoringLog; use App\Models\MeteorologicalMonitoringLog;
use App\Models\SoilMonitoringDailyLog; use App\Models\SoilMonitoringDailyLog;
use App\Models\SoilMonitoringLog; use App\Models\SoilMonitoringLog;
use App\Models\WaterQualityMonitoringDailyLog;
use App\Models\WaterQualityMonitoringLog; use App\Models\WaterQualityMonitoringLog;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
@ -381,6 +382,10 @@ class BiAngDeviceService
$this->createSoilDailyReport($device, $time); $this->createSoilDailyReport($device, $time);
break; break;
case DeviceType::WaterQuality:
$this->createWaterQualityDailyReport($device, $time);
break;
case DeviceType::InsecticidalLamp: case DeviceType::InsecticidalLamp:
$this->createInsecticidalLampDailyReport($device, $time); $this->createInsecticidalLampDailyReport($device, $time);
break; break;
@ -446,6 +451,64 @@ class BiAngDeviceService
$soilDailyReport->fill($attributes)->save(); $soilDailyReport->fill($attributes)->save();
} }
/**
* 创建水质设备每日报告
*/
protected function createWaterQualityDailyReport(Device $device, Carbon $date): void
{
/** @var \Illuminate\Database\Eloquent\Collection */
$waterQualityReports = WaterQualityMonitoringLog::where('device_id', $device->id)
->whereDate('monitored_at', $date)
->oldest('monitored_at')
->get();
if ($waterQualityReports->isEmpty()) {
return;
}
$attributes = value(function ($waterQualityReports) {
$data = [
'chlorine' => ['sum' => 0, 'count' => 0],
'conductivity' => ['sum' => 0, 'count' => 0],
'oxygen' => ['sum' => 0, 'count' => 0],
'ph' => ['sum' => 0, 'count' => 0],
'temperature' => ['sum' => 0, 'count' => 0],
'turbidity' => ['sum' => 0, 'count' => 0],
];
foreach ($waterQualityReports as $waterQualityReport) {
foreach ($data as $k => $item) {
if (is_null($v = $waterQualityReport->{$k})) {
continue;
}
$item['sum'] = bcadd($item['sum'], $v, 2);
$item['count']++;
$data[$k] = $item;
}
}
$attributes = [];
foreach ($data as $key => $item) {
$attributes[$key] = $item['count'] > 0 ? round(bcdiv($item['sum'], $item['count'], 2), 2) : null;
}
return $attributes;
}, $waterQualityReports);
/** @var \App\Models\WaterQualityMonitoringDailyLog */
$waterQualityDailyReport = WaterQualityMonitoringDailyLog::firstOrNew([
'device_id' => $device->id,
'monitored_at' => $date->format('Y-m-d'),
], [
'agricultural_base_id' => $device->agricultural_base_id,
]);
$waterQualityDailyReport->fill($attributes)->save();
}
/** /**
* 创建气象设备每日报告 * 创建气象设备每日报告
*/ */