62 lines
1.7 KiB
PHP
62 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Callback;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Device;
|
|
use Illuminate\Http\Request;
|
|
|
|
class LinkosCallbackController extends Controller
|
|
{
|
|
public function __invoke(Request $request)
|
|
{
|
|
logger()->debug('linkos callback parameters -------->', $request->input());
|
|
|
|
if ($request->filled('notify_type')) {
|
|
switch ($request->notify_type) {
|
|
case 'online_state_change':
|
|
$this->handleDeviceStateNotify($request);
|
|
break;
|
|
}
|
|
} elseif ($request->filled('device_id')) {
|
|
Device::where('sn', $request->input('device_id'))->update(['state' => Device::STATE_ONLINE]);
|
|
}
|
|
|
|
return response()->json(['code' => 0, 'msg' => 'ok']);
|
|
}
|
|
|
|
/**
|
|
* 设备状态通知
|
|
*/
|
|
protected function handleDeviceStateNotify(Request $request): void
|
|
{
|
|
foreach ($request->input('data', []) as $item) {
|
|
if (! isset($item['device_id'])) {
|
|
continue;
|
|
}
|
|
|
|
$device = Device::where('sn', $item['device_id'])->first();
|
|
|
|
if ($device === null) {
|
|
continue;
|
|
}
|
|
|
|
if (isset($item['online_state'])) {
|
|
switch ($item['online_state']) {
|
|
case 0:
|
|
$device->forceFill([
|
|
'state' => Device::STATE_OFFLINE,
|
|
])->save();
|
|
break;
|
|
|
|
case 1:
|
|
$device->forceFill([
|
|
'state' => Device::STATE_ONLINE,
|
|
])->save();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|