Update
parent
07e0158115
commit
e422c3f896
|
|
@ -9,7 +9,7 @@ use App\Models\SoilDailyReport;
|
||||||
use App\Models\SoilReport;
|
use App\Models\SoilReport;
|
||||||
use App\Models\WaterQualityDailyReport;
|
use App\Models\WaterQualityDailyReport;
|
||||||
use App\Models\WaterQualityReport;
|
use App\Models\WaterQualityReport;
|
||||||
use App\Services\DeviceLogService;
|
use App\Services\LinkosDeviceService;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
class DeviceLogDailyReportCommand extends Command
|
class DeviceLogDailyReportCommand extends Command
|
||||||
|
|
@ -30,18 +30,11 @@ class DeviceLogDailyReportCommand extends Command
|
||||||
*/
|
*/
|
||||||
protected $description = '按设备厂商生成监控报告';
|
protected $description = '按设备厂商生成监控报告';
|
||||||
|
|
||||||
/**
|
|
||||||
* @var \App\Services\DeviceLogService
|
|
||||||
*/
|
|
||||||
protected $deviceLogService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*/
|
*/
|
||||||
public function handle(DeviceLogService $deviceLogService)
|
public function handle()
|
||||||
{
|
{
|
||||||
$this->deviceLogService = $deviceLogService;
|
|
||||||
|
|
||||||
$factory = $this->argument('factory');
|
$factory = $this->argument('factory');
|
||||||
|
|
||||||
$sleep = (int) value(fn ($sleep) => is_numeric($sleep) ? $sleep : 300, $this->option('sleep'));
|
$sleep = (int) value(fn ($sleep) => is_numeric($sleep) ? $sleep : 300, $this->option('sleep'));
|
||||||
|
|
@ -133,7 +126,7 @@ class DeviceLogDailyReportCommand extends Command
|
||||||
$startAt = $lastReportedAt->copy()->startOfDay();
|
$startAt = $lastReportedAt->copy()->startOfDay();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
$this->deviceLogService->createDailyReportToLinkosDevice($device, $startAt->copy());
|
(new LinkosDeviceService())->createDailyReport($device, $startAt->copy());
|
||||||
|
|
||||||
$startAt->addDay();
|
$startAt->addDay();
|
||||||
} while ($latestReportedAt->gte($startAt));
|
} while ($latestReportedAt->gte($startAt));
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ use App\Models\Device;
|
||||||
use App\Models\MeteorologicalReport;
|
use App\Models\MeteorologicalReport;
|
||||||
use App\Models\SoilReport;
|
use App\Models\SoilReport;
|
||||||
use App\Models\WaterQualityReport;
|
use App\Models\WaterQualityReport;
|
||||||
use App\Services\DeviceLogService;
|
use App\Services\LinkosDeviceService;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
class DeviceLogReportCommand extends Command
|
class DeviceLogReportCommand extends Command
|
||||||
|
|
@ -27,18 +27,11 @@ class DeviceLogReportCommand extends Command
|
||||||
*/
|
*/
|
||||||
protected $description = '按设备厂商生成监控报告';
|
protected $description = '按设备厂商生成监控报告';
|
||||||
|
|
||||||
/**
|
|
||||||
* @var \App\Services\DeviceLogService
|
|
||||||
*/
|
|
||||||
protected $deviceLogService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*/
|
*/
|
||||||
public function handle(DeviceLogService $deviceLogService)
|
public function handle()
|
||||||
{
|
{
|
||||||
$this->deviceLogService = $deviceLogService;
|
|
||||||
|
|
||||||
$factory = $this->argument('factory');
|
$factory = $this->argument('factory');
|
||||||
|
|
||||||
$sleep = (int) value(fn ($sleep) => is_numeric($sleep) ? $sleep : 300, $this->option('sleep'));
|
$sleep = (int) value(fn ($sleep) => is_numeric($sleep) ? $sleep : 300, $this->option('sleep'));
|
||||||
|
|
@ -83,7 +76,7 @@ class DeviceLogReportCommand extends Command
|
||||||
$startAt = $lastReportedAt->copy()->startOfHour();
|
$startAt = $lastReportedAt->copy()->startOfHour();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
$this->deviceLogService->createReportToLinkosDevice($device, $startAt->copy());
|
(new LinkosDeviceService())->createReport($device, $startAt->copy());
|
||||||
|
|
||||||
$startAt->addHour();
|
$startAt->addHour();
|
||||||
} while ($latestReportedAt->gte($startAt));
|
} while ($latestReportedAt->gte($startAt));
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@
|
||||||
namespace App\Console\Commands;
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
use App\Models\Device;
|
use App\Models\Device;
|
||||||
use App\Services\DeviceLogService;
|
use App\Services\LinkosDeviceService;
|
||||||
|
use Carbon\Carbon;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
|
|
@ -25,18 +26,11 @@ class DeviceLogSyncCommand extends Command
|
||||||
*/
|
*/
|
||||||
protected $description = '按设备厂商同步数据';
|
protected $description = '按设备厂商同步数据';
|
||||||
|
|
||||||
/**
|
|
||||||
* @var \App\Services\DeviceLogService
|
|
||||||
*/
|
|
||||||
protected $deviceLogService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*/
|
*/
|
||||||
public function handle(DeviceLogService $deviceLogService)
|
public function handle()
|
||||||
{
|
{
|
||||||
$this->deviceLogService = $deviceLogService;
|
|
||||||
|
|
||||||
$factory = $this->argument('factory');
|
$factory = $this->argument('factory');
|
||||||
|
|
||||||
$sleep = (int) value(fn ($sleep) => is_numeric($sleep) ? $sleep : 60, $this->option('sleep'));
|
$sleep = (int) value(fn ($sleep) => is_numeric($sleep) ? $sleep : 60, $this->option('sleep'));
|
||||||
|
|
@ -65,36 +59,44 @@ class DeviceLogSyncCommand extends Command
|
||||||
|
|
||||||
/** @var \App\Models\Device */
|
/** @var \App\Models\Device */
|
||||||
foreach ($devices as $device) {
|
foreach ($devices as $device) {
|
||||||
// 忽略通风设备
|
$this->sync($device, $start, $end);
|
||||||
if ($device->isTypeAir()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->info('==========================================');
|
|
||||||
$this->info('设备编号: ' . $device->sn);
|
|
||||||
$this->info('设备名称: ' . $device->name);
|
|
||||||
$this->info('设备类型: ' . match ($device->type) {
|
|
||||||
Device::TYPE_SOIL => '土壤设备',
|
|
||||||
Device::TYPE_WATER_QUALITY => '水质设备',
|
|
||||||
Device::TYPE_METEOROLOGICAL => '气象设备',
|
|
||||||
Device::TYPE_AIR => '通风设备',
|
|
||||||
default => '其它',
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
$this->deviceLogService->sync($device, $start, $end);
|
|
||||||
|
|
||||||
$this->info('同步成功!');
|
|
||||||
} catch (Throwable $e) {
|
|
||||||
report($e);
|
|
||||||
|
|
||||||
$this->error('同步失败: '. $e->getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->info('==========================================');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->info('------------------------------------------');
|
$this->info('------------------------------------------');
|
||||||
$this->newLine();
|
$this->newLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function sync(Device $device, Carbon $start, Carbon $end)
|
||||||
|
{
|
||||||
|
$this->info('==========================================');
|
||||||
|
$this->info('设备编号: ' . $device->sn);
|
||||||
|
$this->info('设备名称: ' . $device->name);
|
||||||
|
$this->info('设备厂家: ' . $device->factory?->name);
|
||||||
|
$this->info('设备类型: ' . match ($device->type) {
|
||||||
|
Device::TYPE_SOIL => '土壤设备',
|
||||||
|
Device::TYPE_WATER_QUALITY => '水质设备',
|
||||||
|
Device::TYPE_METEOROLOGICAL => '气象设备',
|
||||||
|
Device::TYPE_AIR => '通风设备',
|
||||||
|
default => '其它',
|
||||||
|
});
|
||||||
|
|
||||||
|
switch ($device->factory?->key) {
|
||||||
|
case 'link-os':
|
||||||
|
// 忽略通风设备
|
||||||
|
if ($device->isTypeAir()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
(new LinkosDeviceService())->sync($device, $start, $end);
|
||||||
|
$this->info('同步成功!');
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
report($e);
|
||||||
|
|
||||||
|
$this->error('同步失败: '. $e->getMessage());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->info('==========================================');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,24 +14,12 @@ use App\Models\WaterQualityReport;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
|
|
||||||
class DeviceLogService
|
class LinkosDeviceService
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* 同步设备历史流水
|
|
||||||
*/
|
|
||||||
public function sync(Device $device, Carbon $start, Carbon $end): void
|
|
||||||
{
|
|
||||||
switch ($device->factory?->key) {
|
|
||||||
case 'link-os':
|
|
||||||
$this->syncLinkosDeviceLogs($device, $start, $end);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同步 Linkos 设备历史流水
|
* 同步 Linkos 设备历史流水
|
||||||
*/
|
*/
|
||||||
protected function syncLinkosDeviceLogs(Device $device, Carbon $start, Carbon $end): void
|
public function sync(Device $device, Carbon $start, Carbon $end): void
|
||||||
{
|
{
|
||||||
/** @var \App\Iot\Linkos\HttpClient */
|
/** @var \App\Iot\Linkos\HttpClient */
|
||||||
$httpClient = app(LinkosHttpClient::class);
|
$httpClient = app(LinkosHttpClient::class);
|
||||||
|
|
@ -94,27 +82,24 @@ class DeviceLogService
|
||||||
/**
|
/**
|
||||||
* 创建 linkos 设备报告
|
* 创建 linkos 设备报告
|
||||||
*/
|
*/
|
||||||
public function createReportToLinkosDevice(Device $device, Carbon $time): void
|
public function createReport(Device $device, Carbon $time): void
|
||||||
{
|
{
|
||||||
switch ($device->type) {
|
switch ($device->type) {
|
||||||
case Device::TYPE_SOIL:
|
case Device::TYPE_SOIL:
|
||||||
$this->createReportToLinkosSoilDevice($device, $time);
|
$this->createSoilReport($device, $time);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Device::TYPE_METEOROLOGICAL:
|
case Device::TYPE_METEOROLOGICAL:
|
||||||
$this->createReportToLinkosMeteorologicalDevice($device, $time);
|
$this->createMeteorologicalReport($device, $time);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Device::TYPE_WATER_QUALITY:
|
case Device::TYPE_WATER_QUALITY:
|
||||||
$this->createReportToLinkosWaterQualityDevice($device, $time);
|
$this->createWaterQualityReport($device, $time);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected function createSoilReport(Device $device, Carbon $time): void
|
||||||
* 创建 linkos 土壤设备报告
|
|
||||||
*/
|
|
||||||
protected function createReportToLinkosSoilDevice(Device $device, Carbon $time): void
|
|
||||||
{
|
{
|
||||||
$reportedAt = $time->copy()->startOfHour();
|
$reportedAt = $time->copy()->startOfHour();
|
||||||
|
|
||||||
|
|
@ -180,7 +165,7 @@ class DeviceLogService
|
||||||
/**
|
/**
|
||||||
* 创建 linkos 气象设备报告
|
* 创建 linkos 气象设备报告
|
||||||
*/
|
*/
|
||||||
protected function createReportToLinkosMeteorologicalDevice(Device $device, Carbon $time): void
|
protected function createMeteorologicalReport(Device $device, Carbon $time): void
|
||||||
{
|
{
|
||||||
$reportedAt = $time->copy()->startOfHour();
|
$reportedAt = $time->copy()->startOfHour();
|
||||||
|
|
||||||
|
|
@ -246,7 +231,7 @@ class DeviceLogService
|
||||||
}
|
}
|
||||||
|
|
||||||
$meteorologicalReport->fill($attributes)->save();
|
$meteorologicalReport->fill($attributes)->save();
|
||||||
|
|
||||||
(new \App\Services\Admin\DeviceService())->meteorologicalControAir($device, $meteorologicalReport, $time);
|
(new \App\Services\Admin\DeviceService())->meteorologicalControAir($device, $meteorologicalReport, $time);
|
||||||
(new DeviceWarningService())->judgeLog($device, $meteorologicalReport, $time);
|
(new DeviceWarningService())->judgeLog($device, $meteorologicalReport, $time);
|
||||||
}
|
}
|
||||||
|
|
@ -254,7 +239,7 @@ class DeviceLogService
|
||||||
/**
|
/**
|
||||||
* 创建 linkos 水质设备报告
|
* 创建 linkos 水质设备报告
|
||||||
*/
|
*/
|
||||||
protected function createReportToLinkosWaterQualityDevice(Device $device, Carbon $time): void
|
protected function createWaterQualityReport(Device $device, Carbon $time): void
|
||||||
{
|
{
|
||||||
$reportedAt = $time->copy()->startOfHour();
|
$reportedAt = $time->copy()->startOfHour();
|
||||||
|
|
||||||
|
|
@ -317,19 +302,19 @@ class DeviceLogService
|
||||||
/**
|
/**
|
||||||
* 创建 linkos 设备每日报告
|
* 创建 linkos 设备每日报告
|
||||||
*/
|
*/
|
||||||
public function createDailyReportToLinkosDevice(Device $device, Carbon $time): void
|
public function createDailyReport(Device $device, Carbon $time): void
|
||||||
{
|
{
|
||||||
switch ($device->type) {
|
switch ($device->type) {
|
||||||
case Device::TYPE_METEOROLOGICAL:
|
case Device::TYPE_METEOROLOGICAL:
|
||||||
$this->createDailyReportToLinkosMeteorologicalDevice($device, $time);
|
$this->createMeteorologicalDailyReport($device, $time);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Device::TYPE_WATER_QUALITY:
|
case Device::TYPE_WATER_QUALITY:
|
||||||
$this->createDailyReportToLinkosWaterQualityDevice($device, $time);
|
$this->createWaterQualityDailyReport($device, $time);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Device::TYPE_SOIL:
|
case Device::TYPE_SOIL:
|
||||||
$this->createDailyReportToLinkosSoilDevice($device, $time);
|
$this->createSoilDailyReport($device, $time);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -337,7 +322,7 @@ class DeviceLogService
|
||||||
/**
|
/**
|
||||||
* 创建 linkos 土壤设备每日报告
|
* 创建 linkos 土壤设备每日报告
|
||||||
*/
|
*/
|
||||||
protected function createDailyReportToLinkosSoilDevice(Device $device, Carbon $date): void
|
protected function createSoilDailyReport(Device $device, Carbon $date): void
|
||||||
{
|
{
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection */
|
/** @var \Illuminate\Database\Eloquent\Collection */
|
||||||
$soilReports = SoilReport::where('device_id', $device->id)
|
$soilReports = SoilReport::where('device_id', $device->id)
|
||||||
|
|
@ -394,7 +379,7 @@ class DeviceLogService
|
||||||
/**
|
/**
|
||||||
* 创建 linkos 气象设备每日报告
|
* 创建 linkos 气象设备每日报告
|
||||||
*/
|
*/
|
||||||
protected function createDailyReportToLinkosMeteorologicalDevice(Device $device, Carbon $date): void
|
protected function createMeteorologicalDailyReport(Device $device, Carbon $date): void
|
||||||
{
|
{
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection */
|
/** @var \Illuminate\Database\Eloquent\Collection */
|
||||||
$meteorologicalReports = MeteorologicalReport::where('device_id', $device->id)
|
$meteorologicalReports = MeteorologicalReport::where('device_id', $device->id)
|
||||||
|
|
@ -527,7 +512,7 @@ class DeviceLogService
|
||||||
/**
|
/**
|
||||||
* 创建 linkos 水质设备每日报告
|
* 创建 linkos 水质设备每日报告
|
||||||
*/
|
*/
|
||||||
protected function createDailyReportToLinkosWaterQualityDevice(Device $device, Carbon $date): void
|
protected function createWaterQualityDailyReport(Device $device, Carbon $date): void
|
||||||
{
|
{
|
||||||
/** @var \Illuminate\Database\Eloquent\Collection */
|
/** @var \Illuminate\Database\Eloquent\Collection */
|
||||||
$waterQualityReports = WaterQualityReport::where('device_id', $device->id)
|
$waterQualityReports = WaterQualityReport::where('device_id', $device->id)
|
||||||
Loading…
Reference in New Issue