95 lines
2.6 KiB
PHP
95 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Enums\DeviceType;
|
|
use App\Iot\BiAng\HttpClient;
|
|
use App\Models\Device;
|
|
use App\Services\BiAngDeviceLogService;
|
|
use App\Services\DeviceLogService;
|
|
use Illuminate\Console\Command;
|
|
use Throwable;
|
|
|
|
class DeviceLogSyncCommand extends Command
|
|
{
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'device-log:sync
|
|
{factory}
|
|
{--sleep=60 : 设备数据同步完成后的休眠时间(秒)}';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = '按设备厂商同步数据';
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*/
|
|
public function handle()
|
|
{
|
|
$factory = $this->argument('factory');
|
|
|
|
$sleep = (int) value(fn ($sleep) => is_numeric($sleep) ? $sleep : 60, $this->option('sleep'));
|
|
|
|
while (true) {
|
|
$this->runSync($factory);
|
|
|
|
sleep($sleep);
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 执行同步
|
|
*/
|
|
protected function runSync(string $factory): void
|
|
{
|
|
$end = now();
|
|
$start = $end->copy()->subHours(1);
|
|
|
|
$this->info('------------------------------------------');
|
|
$this->info('开始时间: '. $start);
|
|
$this->info('结束时间: '. $end);
|
|
|
|
/** @var \Illuminate\Database\Eloquent\Collection */
|
|
$devices = Device::with(['supplier'])->supplierBy($factory)->get();
|
|
|
|
/** @var \App\Models\Device */
|
|
foreach ($devices as $device) {
|
|
$this->info('==========================================');
|
|
$this->info('设备编号: ' . $device->sn);
|
|
$this->info('设备名称: ' . $device->name);
|
|
$this->info('设备类型: ' . match ($device->type) {
|
|
DeviceType::Soil => '土壤设备',
|
|
DeviceType::WaterQuality => '水质设备',
|
|
DeviceType::Meteorological => '气象设备',
|
|
default => '其它',
|
|
});
|
|
|
|
try {
|
|
switch ($factory) {
|
|
case 'biang':
|
|
(new BiAngDeviceLogService())->sync($device);
|
|
break;
|
|
}
|
|
|
|
$this->info('同步成功!');
|
|
} catch (Throwable $e) {
|
|
report($e);
|
|
|
|
$this->error('同步失败: '. $e->getMessage());
|
|
}
|
|
|
|
$this->info('==========================================');
|
|
}
|
|
|
|
$this->info('------------------------------------------');
|
|
$this->newLine();
|
|
}
|
|
}
|