mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 03:01:12 +00:00
89 lines
2.3 KiB
PHP
89 lines
2.3 KiB
PHP
<?php
|
||
|
||
namespace App\Tasks;
|
||
|
||
use App\Models\WebSocketDialogMsg;
|
||
use App\Models\WebSocketDialogUser;
|
||
use App\Module\Apps;
|
||
use App\Module\ZincSearch\ZincSearchDialogMsg;
|
||
use Carbon\Carbon;
|
||
use Illuminate\Support\Facades\Cache;
|
||
|
||
/**
|
||
* 同步聊天数据到ZincSearch
|
||
*/
|
||
class ZincSearchSyncTask extends AbstractTask
|
||
{
|
||
private $action;
|
||
|
||
private $data;
|
||
|
||
public function __construct($action = null, $data = null)
|
||
{
|
||
parent::__construct(...func_get_args());
|
||
$this->action = $action;
|
||
$this->data = $data;
|
||
}
|
||
|
||
public function start()
|
||
{
|
||
if (!Apps::isInstalled("search")) {
|
||
// 如果没有安装搜索模块,则不执行
|
||
return;
|
||
}
|
||
|
||
switch ($this->action) {
|
||
case 'sync':
|
||
// 同步消息数据
|
||
ZincSearchDialogMsg::sync(WebSocketDialogMsg::fillInstance($this->data));
|
||
break;
|
||
|
||
case 'delete':
|
||
// 删除消息数据
|
||
ZincSearchDialogMsg::delete(WebSocketDialogMsg::fillInstance($this->data));
|
||
break;
|
||
|
||
case 'userSync':
|
||
// 同步用户数据
|
||
ZincSearchDialogMsg::userSync(WebSocketDialogUser::fillInstance($this->data));
|
||
break;
|
||
|
||
case 'deleteUser':
|
||
// 删除用户数据
|
||
ZincSearchDialogMsg::delete(WebSocketDialogUser::fillInstance($this->data));
|
||
break;
|
||
|
||
default:
|
||
// 增量更新
|
||
$this->incrementalUpdate();
|
||
break;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 增量更新
|
||
* @return void
|
||
*/
|
||
private function incrementalUpdate()
|
||
{
|
||
// 120分钟执行一次
|
||
$time = intval(Cache::get("ZincSearchSyncTask:Time"));
|
||
if (time() - $time < 120 * 60) {
|
||
return;
|
||
}
|
||
|
||
// 执行开始,120分钟后缓存标记失效
|
||
Cache::put("ZincSearchSyncTask:Time", time(), Carbon::now()->addMinutes(120));
|
||
|
||
// 开始执行同步
|
||
@shell_exec("php /var/www/artisan zinc:sync-user-msg --i");
|
||
|
||
// 执行完成,5分钟后缓存标记失效(5分钟任务可重复执行)
|
||
Cache::put("ZincSearchSyncTask:Time", time(), Carbon::now()->addMinutes(5));
|
||
}
|
||
|
||
public function end()
|
||
{
|
||
}
|
||
}
|